<?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>193080</bug_id>
          
          <creation_ts>2019-01-02 11:08:21 -0800</creation_ts>
          <short_desc>[WHLSL] Implement the Type Checker</short_desc>
          <delta_ts>2019-01-14 22:02:53 -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>WebGPU</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>193360</dependson>
    
    <dependson>193389</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1491177</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-02 11:08:21 -0800</bug_when>
    <thetext>Implement the Type Checker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491179</commentid>
    <comment_count>1</comment_count>
      <attachid>358187</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-02 11:09:12 -0800</bug_when>
    <thetext>Created attachment 358187
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491342</commentid>
    <comment_count>2</comment_count>
      <attachid>358234</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-02 18:01:34 -0800</bug_when>
    <thetext>Created attachment 358234
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491390</commentid>
    <comment_count>3</comment_count>
      <attachid>358247</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-03 02:33:33 -0800</bug_when>
    <thetext>Created attachment 358247
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491591</commentid>
    <comment_count>4</comment_count>
      <attachid>358304</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-03 20:04:10 -0800</bug_when>
    <thetext>Created attachment 358304
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491602</commentid>
    <comment_count>5</comment_count>
      <attachid>358304</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-03 22:54:13 -0800</bug_when>
    <thetext>Comment on attachment 358304
Patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLInferTypes.cpp:116
&gt; +    // Pull out the two preferredTypes
&gt; +    // Make sure both of the resolvableTypes canResolve() with both of the preferredTypes
&gt; +    // Pick the winner
&gt; +    // Resolve both of the resolvable types
&gt; +    // return the winner

The subclasses need to be the same. If the two subclasses are Int/Uint/FloatLiteralType, commit them to be Int/Uint/Float.
Currently, two NullLiteralTypes don&apos;t match.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1491916</commentid>
    <comment_count>6</comment_count>
      <attachid>358378</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-04 14:59:57 -0800</bug_when>
    <thetext>Created attachment 358378
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492040</commentid>
    <comment_count>7</comment_count>
      <attachid>358425</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-04 20:04:28 -0800</bug_when>
    <thetext>Created attachment 358425
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492212</commentid>
    <comment_count>8</comment_count>
      <attachid>358482</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-07 00:13:23 -0800</bug_when>
    <thetext>Created attachment 358482
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492568</commentid>
    <comment_count>9</comment_count>
      <attachid>358582</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-08 00:59:02 -0800</bug_when>
    <thetext>Created attachment 358582
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492696</commentid>
    <comment_count>10</comment_count>
      <attachid>358621</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-08 12:35:30 -0800</bug_when>
    <thetext>Created attachment 358621
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1492858</commentid>
    <comment_count>11</comment_count>
      <attachid>358667</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-08 20:53:01 -0800</bug_when>
    <thetext>Created attachment 358667
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493015</commentid>
    <comment_count>12</comment_count>
      <attachid>358719</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-09 11:44:06 -0800</bug_when>
    <thetext>Created attachment 358719
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493782</commentid>
    <comment_count>13</comment_count>
      <attachid>358936</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-11 13:37:20 -0800</bug_when>
    <thetext>Created attachment 358936
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1493783</commentid>
    <comment_count>14</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-11 13:40:15 -0800</bug_when>
    <thetext>Attachment 358936 did not pass style-queue:


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


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494024</commentid>
    <comment_count>15</comment_count>
      <attachid>359002</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-12 23:52:33 -0800</bug_when>
    <thetext>Created attachment 359002
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494076</commentid>
    <comment_count>16</comment_count>
      <attachid>359018</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-13 20:05:56 -0800</bug_when>
    <thetext>Created attachment 359018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494077</commentid>
    <comment_count>17</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-01-13 20:10:06 -0800</bug_when>
    <thetext>Attachment 359018 did not pass style-queue:


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


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494078</commentid>
    <comment_count>18</comment_count>
      <attachid>359019</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-13 20:34:57 -0800</bug_when>
    <thetext>Created attachment 359019
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494195</commentid>
    <comment_count>19</comment_count>
      <attachid>359019</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2019-01-14 10:35:09 -0800</bug_when>
    <thetext>Comment on attachment 359019
Patch

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

rs=me

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:166
&gt; +    if (callExpression.name() == &quot;operator&amp;[]&quot; &amp;&amp; types.size() == 2) {

Ditto a previous comment about using raw strings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494199</commentid>
    <comment_count>20</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-14 10:39:41 -0800</bug_when>
    <thetext>(In reply to Dean Jackson from comment #19)
&gt; Comment on attachment 359019 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=359019&amp;action=review
&gt; 
&gt; rs=me
&gt; 
&gt; &gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:166
&gt; &gt; +    if (callExpression.name() == &quot;operator&amp;[]&quot; &amp;&amp; types.size() == 2) {
&gt; 
&gt; Ditto a previous comment about using raw strings.

We have an overload of operator== that takes a string literal. This is faster than turning the literal into a String object. (Also the literal is cool because the string length is generated at compile time, so the implementation doesn’t have to call strlen())</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494225</commentid>
    <comment_count>21</comment_count>
      <attachid>359019</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-01-14 11:30:37 -0800</bug_when>
    <thetext>Comment on attachment 359019
Patch

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

I&apos;ve only reviewed the beginning so far (first 400 lines). The rest of the review will come later.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:120
&gt; +static Optional&lt;AST::NativeFunctionDeclaration&gt; resolveWithOperatorAnderIndexer(AST::CallExpression&amp; callExpression, AST::ArrayReferenceType&amp; firstArgument, const Intrinsics&amp; intrinsics)

I don&apos;t see in which case the Optional&lt;&gt; result is ever not present?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:122
&gt; +    bool isRestricted = false;

These two booleans could be const I think.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:131
&gt; +static Optional&lt;AST::NativeFunctionDeclaration&gt; resolveWithOperatorLength(AST::CallExpression&amp; callExpression, AST::UnnamedType&amp; firstArgument, const Intrinsics&amp; intrinsics)

Same as above.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:133
&gt; +    bool isRestricted = false;

Same as above.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:297
&gt; +            if (is&lt;AST::PointerType&gt;(unnamedType))

Is it on purpose that PointerTypes are rejected here, but not array reference types nor array types?
In the spec I have all three forbidden in that position.

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

If the kind is CheckKind::Index, the spec also requires a check that the second argument is one of uchar, ushort, uint, char, short or int.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:310
&gt; +            if (is&lt;AST::PointerType&gt;(unnamedType))

Same question as above.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:332
&gt; +    };

I have not carefully checked this bunch of checks to find the matching getter, they are a bit hard to read. We&apos;ll just have to remember to test them.

If the kind is CheckKind::Index, the spec also requires a check that the second argument is one of uchar, ushort, uint, char, short or int.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:351
&gt; +            return is&lt;AST::PointerType&gt;(unnamedType) || is&lt;AST::ArrayReferenceType&gt;(unnamedType);

This seems weird to me: why would we require that the first parameter of an ander be a pointer or reference? Don&apos;t we want to forbid it instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494228</commentid>
    <comment_count>22</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-01-14 11:35:12 -0800</bug_when>
    <thetext>
&gt; &gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:351
&gt; &gt; +            return is&lt;AST::PointerType&gt;(unnamedType) || is&lt;AST::ArrayReferenceType&gt;(unnamedType);
&gt; 
&gt; This seems weird to me: why would we require that the first parameter of an
&gt; ander be a pointer or reference? Don&apos;t we want to forbid it instead?

Forget this, I got confused, your code is correct (and under takes a pointer as their first argument).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494491</commentid>
    <comment_count>23</comment_count>
      <attachid>359019</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-14 20:03:33 -0800</bug_when>
    <thetext>Comment on attachment 359019
Patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:297
&gt;&gt; +            if (is&lt;AST::PointerType&gt;(unnamedType))
&gt; 
&gt; Is it on purpose that PointerTypes are rejected here, but not array reference types nor array types?
&gt; In the spec I have all three forbidden in that position.

I was following this: https://github.com/gpuweb/WHLSL/blob/master/Source/Checker.mjs#L309 &quot;if (func.parameterTypes[0].unifyNode.isPtr)&quot; I think you&apos;re right that this is better.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:300
&gt;&gt; +        return true;
&gt; 
&gt; If the kind is CheckKind::Index, the spec also requires a check that the second argument is one of uchar, ushort, uint, char, short or int.

I think it&apos;s also totally reasonable to have a second argument be an enum type. I&apos;ll make the code match the spec, and we can discuss adding enums to the spec too.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:351
&gt;&gt; +            return is&lt;AST::PointerType&gt;(unnamedType) || is&lt;AST::ArrayReferenceType&gt;(unnamedType);
&gt; 
&gt; This seems weird to me: why would we require that the first parameter of an ander be a pointer or reference? Don&apos;t we want to forbid it instead?

Anders increment pointers. The following is a correct ander:

struct Foo {
    int x;
    int y;
}
thread int* operator&amp;.second(thread Foo* foo) {
    return &amp;(foo-&gt;y);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494492</commentid>
    <comment_count>24</comment_count>
      <attachid>359122</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-14 20:12:12 -0800</bug_when>
    <thetext>Created attachment 359122
Patch for committing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494501</commentid>
    <comment_count>25</comment_count>
      <attachid>359019</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-14 20:43:19 -0800</bug_when>
    <thetext>Comment on attachment 359019
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:297
&gt;&gt;&gt; +            if (is&lt;AST::PointerType&gt;(unnamedType))
&gt;&gt; 
&gt;&gt; Is it on purpose that PointerTypes are rejected here, but not array reference types nor array types?
&gt;&gt; In the spec I have all three forbidden in that position.
&gt; 
&gt; I was following this: https://github.com/gpuweb/WHLSL/blob/master/Source/Checker.mjs#L309 &quot;if (func.parameterTypes[0].unifyNode.isPtr)&quot; I think you&apos;re right that this is better.

https://github.com/gpuweb/WHLSL/commit/9817625e5ed2685e94f1b976d719a8684c5d4e40

&gt;&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLChecker.cpp:300
&gt;&gt;&gt; +        return true;
&gt;&gt; 
&gt;&gt; If the kind is CheckKind::Index, the spec also requires a check that the second argument is one of uchar, ushort, uint, char, short or int.
&gt; 
&gt; I think it&apos;s also totally reasonable to have a second argument be an enum type. I&apos;ll make the code match the spec, and we can discuss adding enums to the spec too.

https://github.com/gpuweb/WHLSL/commit/9817625e5ed2685e94f1b976d719a8684c5d4e40</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494532</commentid>
    <comment_count>26</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-01-14 22:01:50 -0800</bug_when>
    <thetext>Committed r239975: &lt;https://trac.webkit.org/changeset/239975&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494533</commentid>
    <comment_count>27</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-01-14 22:02:53 -0800</bug_when>
    <thetext>&lt;rdar://problem/47276132&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358187</attachid>
            <date>2019-01-02 11:09:12 -0800</date>
            <delta_ts>2019-01-02 18:01:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>file.txt</filename>
            <type>text/plain</type>
            <size>245919</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXggMmQ1NjdmMDBlNzAuLmViMzkw
ZTQyZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaApAQCAtMzksOCArMzks
OCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVibGlj
IFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFR5
cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgQXJy
YXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAg
ICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJs
aWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYpID0g
ZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhh
ZGRyZXNzU3BhY2UoKSksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfVFlQRShBcnJheVJlZmVyZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBl
KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShBcnJheVJlZmVy
ZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAppbmRleCA0MGI1ZjhkZjZmZS4uYTI4NzE0MDRjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBBcnJh
eVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIEFycmF5VHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlLCB1
bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgQXJyYXlUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRz
KQogICAgIHsKQEAgLTUyLDIwICs1MiwxOSBAQCBwdWJsaWM6CiAgICAgQXJyYXlUeXBlKGNvbnN0
IEFycmF5VHlwZSYpID0gZGVsZXRlOwogICAgIEFycmF5VHlwZShBcnJheVR5cGUmJikgPSBkZWZh
dWx0OwogCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVs
ZW1lbnRzOyB9Ci0KLSAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQorICAg
IGNvbnN0IFVubmFtZWRUeXBlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gKm1fZWxlbWVudFR5cGU7
IH0KKyAgICB1bnNpZ25lZCBudW1FbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtRWxlbWVu
dHM7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRl
CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRl
CiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVR5cGU+KExleGVy
OjpUb2tlbihtX29yaWdpbiksIG1fZWxlbWVudFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMp
OworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVR5cGU+KExleGVyOjpUb2tl
bihvcmlnaW4oKSksIG1fZWxlbWVudFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMpOwogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFR5cGU+IG1fZWxlbWVudFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRU
eXBlPiBtX2VsZW1lbnRUeXBlOwogICAgIHVuc2lnbmVkIG1fbnVtRWxlbWVudHM7CiB9OwogCkBA
IC03NSw2ICs3NCw2IEBAIHByaXZhdGU6CiAKIH0KIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
SExTTF9UWVBFKEFycmF5VHlwZSwgaXNBcnJheVR5cGUoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfVU5OQU1FRF9UWVBFKEFycmF5VHlwZSwgaXNBcnJheVR5cGUoKSkKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xDYWxsRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaAppbmRleCA2NGFmNzEzMjk5Yy4uOGIyYmRhZjRiZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENhbGxFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJM
RShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTU0LDkgKzU1LDMxIEBAIHB1YmxpYzoKIAogICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+JiBhcmd1bWVudHMoKSB7IHJldHVybiBtX2FyZ3Vt
ZW50czsgfQogCisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICB2
b2lkIHNldENhc3REYXRhKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cworICAgIH0KKworICAgIGJvb2wgaGFzT3ZlcmxvYWRzKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Ym9vbD4obV9vdmVybG9hZHMpOyB9CisgICAgdm9pZCBzZXRPdmVybG9hZHMoY29uc3Qg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBv
dmVybG9hZHMpCisgICAgeworICAgICAgICBhc3NlcnQoIWhhc092ZXJsb2FkcygpKTsKKyAgICAg
ICAgbV9vdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAgfQorCisgICAgdm9pZCBzZXRGdW5jdGlv
bihGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQorICAgIHsKKyAgICAg
ICAgYXNzZXJ0KCFtX2Z1bmN0aW9uKTsKKyAgICAgICAgbV9mdW5jdGlvbiA9ICZmdW5jdGlvbkRl
Y2xhcmF0aW9uOworICAgIH0KKwogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+IG1fYXJndW1lbnRzOworICAgIE9wdGlv
bmFsPFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
Pj4gbV9vdmVybG9hZHM7CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9mdW5jdGlvbiB7IG51
bGxwdHIgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgKaW5kZXgg
YTM4YjBkNWIzYTEuLmYwNDIwNTMyNDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Np
b24uaApAQCAtNzYsMTEgKzc2LDY5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgSW50
ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPEludGVnZXJMaXRlcmFsPihtX3ZhcmlhbnQpKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PEludGVnZXJMaXRlcmFsPihtX3ZhcmlhbnQpOworICAgIH0KKwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdmlzaXQoVCYmIHQpCiAgICAgewogICAgICAgICBX
VEY6OnZpc2l0KFdURk1vdmUodCksIG1fdmFyaWFudCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCB2aXNpdChUJiYgdCkgY29uc3QKKyAgICB7CisgICAgICAgIFdURjo6
dmlzaXQoV1RGTW92ZSh0KSwgbV92YXJpYW50KTsKKyAgICB9CisKKyAgICBib29sIG1hdGNoZXMo
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIE9w
dGlvbmFsPGJvb2w+IHJlc3VsdDsKKyAgICAgICAgZG91YmxlIHZhbHVlOworICAgICAgICB2aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVy
YWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAg
ICAgfSwgWyZdKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxp
dGVyYWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgRmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsK
KyAgICAgICAgICAgIHZhbHVlID0gZmxvYXRMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8TnVsbExpdGVyYWw+KG90aGVyLm1fdmFyaWFudCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIHsKKyAgICAgICAgICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEJvb2xlYW5MaXRlcmFsPihvdGhlci5tX3ZhcmlhbnQp
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgb3RoZXJCb29sZWFuTGl0ZXJhbCA9IFdU
Rjo6Z2V0PEJvb2xlYW5MaXRlcmFsPihvdGhlci5tX3ZhcmlhbnQpOworICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGJvb2xlYW5MaXRlcmFsLnZhbHVlKCkgPT0gb3RoZXJCb29sZWFuTGl0ZXJhbC52
YWx1ZSgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFs
c2U7CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UpIHsKKyAgICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlPihvdGhlci5tX3ZhcmlhbnQpKSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgYXV0byYgb3RoZXJNZW1iZXJSZWZlcmVuY2UgPSBXVEY6Omdl
dDxDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZT4ob3RoZXIubV92
YXJpYW50KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAmY29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKSA9PSAmb3RoZXJNZW1i
ZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9KSk7CisKKyAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAqcmVzdWx0OworCisgICAgICAgIG90aGVyLnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0
ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUgPT0gaW50ZWdlckxpdGVyYWwudmFs
dWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlID09IHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEZsb2F0TGl0
ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZSA9PSBmbG9h
dExpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IE51bGxMaXRlcmFsJikgewor
ICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIH0sIFsmXShjb25zdCBCb29sZWFu
TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9LCBbJl0o
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgfSkpOworCisgICAgICAgIEFTU0VS
VChyZXN1bHQpOworICAgICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICB9CisKIHByaXZhdGU6CiAg
ICAgVmFyaWFudDwKICAgICAgICAgSW50ZWdlckxpdGVyYWwsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UuaAppbmRleCAyYzI0YTk4YjJjYS4uMjEwMGQ3Y2E0MGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UuaApAQCAtMzYsMTAgKzM2LDEyIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5h
bWVzcGFjZSBBU1QgewogCi1jbGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVudW1lcmF0aW9uTWVtYmVyOworCitj
bGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSA6IHB1Ymxp
YyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKICAgICBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGxlZnQsIFN0
cmluZyYmIHJpZ2h0KQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICAg
ICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2xlZnQoV1RGTW92
ZShsZWZ0KSkKICAgICAgICAgLCBtX3JpZ2h0KFdURk1vdmUocmlnaHQpKQogICAgIHsKQEAgLTUw
LDEwICs1MiwzMCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UmKSA9IGRlZmF1bHQ7CiAgICAgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UmJikgPSBkZWZhdWx0OwogCisgICAgY29uc3QgU3RyaW5nJiBsZWZ0KCkgY29u
c3QgeyByZXR1cm4gbV9sZWZ0OyB9CisgICAgY29uc3QgU3RyaW5nJiByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmlnaHQ7IH0KKworICAgIEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0
aW9uTWVtYmVyKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VudW1lcmF0aW9uTWVtYmVyKTsK
KyAgICAgICAgcmV0dXJuICptX2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIGNvbnN0
IEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2VudW1lcmF0aW9uTWVtYmVyKTsKKyAgICAgICAgcmV0dXJuICpt
X2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIHZvaWQgc2V0RW51bWVyYXRpb25NZW1i
ZXIoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAg
ICAgICBtX2VudW1lcmF0aW9uTWVtYmVyID0gJmVudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKwog
cHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3RyaW5nIG1fbGVmdDsK
ICAgICBTdHJpbmcgbV9yaWdodDsKKyAgICBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKiBtX2VudW1l
cmF0aW9uTWVtYmVyIHsgbnVsbHB0ciB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5o
CmluZGV4IGM0M2M2OWVlNTQxLi5lYmY3MjMyNmNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24u
aApAQCAtNDksNiArNDksMjUgQEAgcHVibGljOgogICAgIERvdEV4cHJlc3Npb24oY29uc3QgRG90
RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAgIERvdEV4cHJlc3Npb24oRG90RXhwcmVzc2lvbiYm
KSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRG90RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4l
cyIsIG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIFN0cmluZyBzZXRG
dW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0iLCBtX2ZpZWxkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3ImLiVzIiwgbV9maWVsZE5h
bWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgU3RyaW5nJiBmaWVsZE5hbWUoKSB7IHJl
dHVybiBtX2ZpZWxkTmFtZTsgfQorCiBwcml2YXRlOgogICAgIFN0cmluZyBtX2ZpZWxkTmFtZTsK
IH07CkBAIC01OSw0ICs3OCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19XSExTTF9FWFBSRVNTSU9OKERvdEV4cHJlc3Npb24sIGlzRG90RXhwcmVzc2lvbigpKQor
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgKaW5kZXggNzk3
MGI1OWU1NGEuLjI0YThkNTlkYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmlu
aXRpb24uaApAQCAtMjksOCArMjksMTEgQEAKIAogI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25N
ZW1iZXIuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBl
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwxMyArNDIsMTEgQEAgbmFtZXNw
YWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIEVudW1lcmF0aW9uRGVmaW5p
dGlvbiA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1Ymxp
YyBOYW1lZFR5cGUgewogcHVibGljOgotICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIHR5
cGUsIEVudW1lcmF0aW9uTWVtYmVycyYmIG1lbWJlcnMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RG
TW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgIEVudW1l
cmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0
ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiB0eXBlKQorICAgICAgICA6IE5hbWVkVHlwZShX
VEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlKFdURk1vdmUo
dHlwZSkpCi0gICAgICAgICwgbV9tZW1iZXJzKFdURk1vdmUobWVtYmVycykpCiAgICAgewogICAg
IH0KIApAQCAtNTQsMTQgKzU1LDM1IEBAIHB1YmxpYzoKICAgICBFbnVtZXJhdGlvbkRlZmluaXRp
b24oY29uc3QgRW51bWVyYXRpb25EZWZpbml0aW9uJikgPSBkZWxldGU7CiAgICAgRW51bWVyYXRp
b25EZWZpbml0aW9uKEVudW1lcmF0aW9uRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBU
eXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQotICAgIEVudW1lcmF0aW9uTWVtYmVycyYg
ZW51bWVyYXRpb25NZW1iZXJzKCkgeyByZXR1cm4gbV9tZW1iZXJzOyB9CisgICAgYm9vbCBpc0Vu
dW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorCisgICAgYm9vbCBh
ZGQoRW51bWVyYXRpb25NZW1iZXImJiBtZW1iZXIpCisgICAgeworICAgICAgICBhdXRvIHJlc3Vs
dCA9IG1fbWVtYmVycy5hZGQobWVtYmVyLm5hbWUoKSwgc3RkOjptYWtlX3VuaXF1ZTxFbnVtZXJh
dGlvbk1lbWJlcj4oV1RGTW92ZShtZW1iZXIpKSk7CisgICAgICAgIHJldHVybiAhcmVzdWx0Lmlz
TmV3RW50cnk7CisgICAgfQorCisgICAgRW51bWVyYXRpb25NZW1iZXIqIG1lbWJlckJ5TmFtZShj
b25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9tZW1i
ZXJzLmZpbmQobmFtZSk7CisgICAgICAgIGlmIChpdGVyYXRvciA9PSBtX21lbWJlcnMuZW5kKCkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52
YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxF
bnVtZXJhdGlvbk1lbWJlcj4+IGVudW1lcmF0aW9uTWVtYmVycygpCisgICAgeworICAgICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxFbnVtZXJhdGlvbk1lbWJlcj4+IHJlc3VsdDsK
KyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9tZW1iZXJzKQorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgqcGFpci52YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCiBw
cml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX3R5cGU7Ci0gICAgRW51bWVyYXRpb25NZW1iZXJz
IG1fbWVtYmVyczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IG1fdHlwZTsKKyAg
ICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEVudW1lcmF0aW9uTWVtYmVyPj4gbV9t
ZW1iZXJzOwogfTsKIAogfQpAQCAtNzAsNCArOTIsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShFbnVtZXJhdGlvbkRlZmluaXRpb24s
IGlzRW51bWVyYXRpb25EZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0
aW9uTWVtYmVyLmgKaW5kZXggOWQ5ZDg1NDg4M2UuLjRmMzg1MTk1NTA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1l
bWJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEVudW1lcmF0aW9uTWVtYmVyLmgKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgogICAgIEVudW1l
cmF0aW9uTWVtYmVyKGNvbnN0IEVudW1lcmF0aW9uTWVtYmVyJikgPSBkZWxldGU7CiAgICAgRW51
bWVyYXRpb25NZW1iZXIoRW51bWVyYXRpb25NZW1iZXImJikgPSBkZWZhdWx0OwogCisgICAgU3Ry
aW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgT3B0aW9uYWw8Q29uc3RhbnRFeHBy
ZXNzaW9uPiYgdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJh
dGlvbk1lbWJlckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5jOWU5NjI5Mzk4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyLmgi
CisjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBB
U1QgeworCitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwgOiBwdWJsaWMgRXhwcmVzc2lv
biB7CitwdWJsaWM6CisgICAgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKExleGVyOjpUb2tlbiYm
IG9yaWdpbiwgRW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQorICAgICAgICA6
IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fZW51bWVyYXRpb25NZW1i
ZXIoZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbCgpID0gZGVmYXVsdDsKKworICAgIGV4cGxpY2l0IEVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbChjb25zdCBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmKSA9IGRlZmF1
bHQ7CisgICAgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bCYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgRW51bWVyYXRpb25NZW1iZXIm
IGVudW1lcmF0aW9uTWVtYmVyKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbk1lbWJlcjsgfQorCitw
cml2YXRlOgorICAgIEVudW1lcmF0aW9uTWVtYmVyJiBtX2VudW1lcmF0aW9uTWVtYmVyOworfTsK
KworfQorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9FWFBSRVNTSU9O
KEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCwgaXNFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoKSkK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKaW5kZXggZTM2ODM4MzY0NmQuLmE3ODg2ZmJhNmIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRXhwcmVzc2lvbi5oCkBAIC01NSw3ICs1NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaXNDYWxsRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzQ29tbWFFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaXNEZXJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0RvdEV4cHJlc3Npb24oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Zsb2F0TGl0ZXJhbCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzSW5kZXhFeHByZXNzaW9uKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbnRlZ2VyTGl0ZXJhbCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9naWNhbEV4cHJl
c3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0xvZ2lj
YWxOb3RFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY3LDYgKzY5LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1Rlcm5hcnlFeHByZXNzaW9uKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZEludGVnZXJMaXRl
cmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJs
ZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlz
RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogcHJp
dmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRl
Y2xhcmF0aW9uLmgKaW5kZXggN2E3ZTBhMDY1NmMuLjRiMDc2OGM5MzI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xh
cmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAiV0hM
U0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRl
ICJXSExTTE5vZGUuaCIKLSNpbmNsdWRlICJXSExTTFBhcmFtZXRlci5oIgogI2luY2x1ZGUgIldI
TFNMU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVu
bmFtZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ2
LDEwICs0NiwxMSBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBFbnRyeVBvaW50VHlwZSB7CiAg
ICAgICAgIFZlcnRleCwKICAgICAgICAgRnJhZ21lbnQsCi0gICAgICAgIENvbXB1dGUKKyAgICAg
ICAgQ29tcHV0ZSwKKyAgICAgICAgLy8gRklYTUU6IEFkZCBhbiBlbnRyeSBwb2ludCB0eXBlIGZv
ciB0ZXN0aW5nCiAgICAgfTsKIAotICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2Vu
JiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9jayYmIGF0dHJpYnV0ZUJsb2NrLCBPcHRpb25hbDxFbnRy
eVBvaW50VHlwZT4gZW50cnlQb2ludFR5cGUsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYg
dHlwZSwgU3RyaW5nJiYgbmFtZSwgUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMsIE9wdGlvbmFsPEFT
VDo6U2VtYW50aWM+JiYgc2VtYW50aWMpCisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFs
PEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBvaW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5u
YW1lZFR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgVmFyaWFibGVEZWNsYXJhdGlvbnMmJiBw
YXJhbWV0ZXJzLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFudGljKQogICAgICAgICA6
IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2F0dHJpYnV0ZUJsb2NrKFdU
Rk1vdmUoYXR0cmlidXRlQmxvY2spKQogICAgICAgICAsIG1fZW50cnlQb2ludFR5cGUoZW50cnlQ
b2ludFR5cGUpCkBAIC02NSwyNiArNjYsMzUgQEAgcHVibGljOgogICAgIEZ1bmN0aW9uRGVjbGFy
YXRpb24oY29uc3QgRnVuY3Rpb25EZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIEZ1bmN0aW9u
RGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICB2aXJ0
dWFsIGJvb2wgaXNGdW5jdGlvbkRlZmluaXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorCiAgICAgQXR0cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJsb2NrKCkgeyBy
ZXR1cm4gbV9hdHRyaWJ1dGVCbG9jazsgfQotICAgIEFTVDo6VHlwZSYgdHlwZSgpIHsgcmV0dXJu
ICptX3R5cGU7IH0KLSAgICBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJh
bWV0ZXJzOyB9CisgICAgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+JiBlbnRyeVBvaW50VHlwZSgp
IHsgcmV0dXJuIG1fZW50cnlQb2ludFR5cGU7IH0KKyAgICBjb25zdCBBU1Q6OlVubmFtZWRUeXBl
JiB0eXBlKCkgY29uc3QgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIEFTVDo6VW5uYW1lZFR5cGUm
IHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1l
OyB9CisgICAgYm9vbCBpc0Nhc3QoKSBjb25zdCB7IHJldHVybiBtX25hbWUgPT0gIm9wZXJhdG9y
IGNhc3QiOyB9CisgICAgY29uc3QgVmFyaWFibGVEZWNsYXJhdGlvbnMmIHBhcmFtZXRlcnMoKSBj
b25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyYg
cGFyYW1ldGVycygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQogICAgIE9wdGlvbmFsPEFTVDo6
U2VtYW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KIAogICAgIExleGVy
OjpUb2tlbiYmIHRha2VPcmlnaW4oKSB7IHJldHVybiBXVEZNb3ZlKG1fb3JpZ2luKTsgfQogICAg
IEF0dHJpYnV0ZUJsb2NrJiYgdGFrZUF0dHJpYnV0ZUJsb2NrKCkgeyByZXR1cm4gV1RGTW92ZSht
X2F0dHJpYnV0ZUJsb2NrKTsgfQogICAgIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiYmIHRha2VF
bnRyeVBvaW50VHlwZSgpIHsgcmV0dXJuIFdURk1vdmUobV9lbnRyeVBvaW50VHlwZSk7IH0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHRha2VUeXBlKCkgeyByZXR1cm4gV1RGTW92
ZShtX3R5cGUpOyB9CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYgdGFr
ZVR5cGUoKSB7IHJldHVybiBXVEZNb3ZlKG1fdHlwZSk7IH0KICAgICBTdHJpbmcmJiB0YWtlTmFt
ZSgpIHsgcmV0dXJuIFdURk1vdmUobV9uYW1lKTsgfQotICAgIFBhcmFtZXRlcnMmJiB0YWtlUGFy
YW1ldGVycygpIHsgcmV0dXJuIFdURk1vdmUobV9wYXJhbWV0ZXJzKTsgfQorICAgIFZhcmlhYmxl
RGVjbGFyYXRpb25zJiYgdGFrZVBhcmFtZXRlcnMoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGFyYW1l
dGVycyk7IH0KICAgICBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHRha2VTZW1hbnRpYygpIHsg
cmV0dXJuIFdURk1vdmUobV9zZW1hbnRpYyk7IH0KIAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9r
ZW4gbV9vcmlnaW47CiAgICAgQXR0cmlidXRlQmxvY2sgbV9hdHRyaWJ1dGVCbG9jazsKICAgICBP
cHRpb25hbDxFbnRyeVBvaW50VHlwZT4gbV9lbnRyeVBvaW50VHlwZTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpUeXBlPiBtX3R5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBl
PiBtX3R5cGU7CiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICBQYXJhbWV0ZXJzIG1fcGFyYW1ldGVy
czsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyBtX3BhcmFtZXRlcnM7CiAgICAgT3B0aW9uYWw8
QVNUOjpTZW1hbnRpYz4gbV9zZW1hbnRpYzsKIH07CiAKQEAgLTk0LDQgKzEwNCw5IEBAIHByaXZh
dGU6CiAKIH0KIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0ZVTkNUSU9O
X0RFQ0xBUkFUSU9OKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OldITFNMOjpBU1Q6OlRvVmFsdWVUeXBlTmFtZSkgXAor
ICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpXSExTTDo6QVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uJiB0eXBlKSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWZpbml0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlZmlu
aXRpb24uaAppbmRleCBhNDkwN2IwZDI5OC4uYjZiN2JhMDc3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1
bmN0aW9uRGVmaW5pdGlvbi5oCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICBGdW5jdGlv
bkRlZmluaXRpb24oY29uc3QgRnVuY3Rpb25EZWZpbml0aW9uJikgPSBkZWxldGU7CiAgICAgRnVu
Y3Rpb25EZWZpbml0aW9uKEZ1bmN0aW9uRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBi
b29sIGlzRnVuY3Rpb25EZWZpbml0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQorCiAgICAgQmxvY2smIGJsb2NrKCkgeyByZXR1cm4gbV9ibG9jazsgfQogICAgIGJvb2wgcmVz
dHJpY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3RlZDsgfQogCkBAIC02NCw0ICs2Niw2
IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9GVU5DVElP
Tl9ERUNMQVJBVElPTihGdW5jdGlvbkRlZmluaXRpb24sIGlzRnVuY3Rpb25EZWZpbml0aW9uKCkp
CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaAppbmRleCA2YmI2YTBmMGRhYi4u
NDNlNjBhMTA0OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCkBAIC00OSw2ICs0OSwy
NSBAQCBwdWJsaWM6CiAgICAgSW5kZXhFeHByZXNzaW9uKGNvbnN0IEluZGV4RXhwcmVzc2lvbiYp
ID0gZGVsZXRlOwogICAgIEluZGV4RXhwcmVzc2lvbihJbmRleEV4cHJlc3Npb24mJikgPSBkZWZh
dWx0OwogCisgICAgYm9vbCBpc0luZGV4RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZygib3BlcmF0b3JbXSIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworICAgIH0KKworICAgIFN0cmluZyBzZXRGdW5jdGlvbk5hbWUo
KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZygib3BlcmF0b3Im
W10iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICB9CisKKyAgICBTdHJpbmcg
YW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBT
dHJpbmcoIm9wZXJhdG9yW109IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
fQorCisgICAgRXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKCkgeyByZXR1cm4gKm1faW5kZXg7
IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9pbmRleDsK
IH07CkBAIC01OSw0ICs3OCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19XSExTTF9FWFBSRVNTSU9OKEluZGV4RXhwcmVzc2lvbiwgaXNJbmRleEV4cHJlc3Npb24o
KSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQYXJhbWV0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oCnNpbWlsYXJpdHkgaW5kZXggNjElCnJlbmFtZSBm
cm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBhcmFtZXRl
ci5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xOYW1lZFR5cGUuaAppbmRleCA5MjU4NmY4NjkxZi4uMjQ0N2VjNzRlZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBhcmFtZXRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVk
VHlwZS5oCkBAIC0yOCwxMSArMjgsOCBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRl
ICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKLSNpbmNsdWRlICJX
SExTTFNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCiAjaW5jbHVkZSAiV0hMU0xU
eXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDEsMzkgKzM4LDQ2IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1Qgewog
Ci1jbGFzcyBQYXJhbWV0ZXIgOiBwdWJsaWMgVmFsdWUgeworY2xhc3MgTmFtZWRUeXBlIDogcHVi
bGljIFR5cGUgewogcHVibGljOgotICAgIFBhcmFtZXRlcihMZXhlcjo6VG9rZW4mJiBvcmlnaW4s
IFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5
cGUsIE9wdGlvbmFsPFN0cmluZz4mJiBuYW1lLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNl
bWFudGljKQorICAgIE5hbWVkVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5h
bWUpCiAgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fcXVh
bGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQotICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5
cGUpKQogICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAgICAgICAsIG1fc2VtYW50
aWMoV1RGTW92ZShzZW1hbnRpYykpCiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgflBhcmFt
ZXRlcigpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIH5OYW1lZFR5cGUoKSA9IGRlZmF1bHQ7CiAK
LSAgICBQYXJhbWV0ZXIoY29uc3QgUGFyYW1ldGVyJikgPSBkZWxldGU7Ci0gICAgUGFyYW1ldGVy
KFBhcmFtZXRlciYmKSA9IGRlZmF1bHQ7CisgICAgTmFtZWRUeXBlKGNvbnN0IE5hbWVkVHlwZSYp
ID0gZGVsZXRlOworICAgIE5hbWVkVHlwZShOYW1lZFR5cGUmJikgPSBkZWZhdWx0OwogCi0gICAg
VHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KLSAgICBPcHRpb25hbDxBU1Q6OlNlbWFu
dGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9CisgICAgTGV4ZXI6OlRva2Vu
JiBvcmlnaW4oKSB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0
dXJuIG1fbmFtZTsgfQorCisgICAgYm9vbCBpc05hbWVkVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBlRGVmaW5pdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU3RydWN0dXJlRGVmaW5pdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRp
b25EZWZpbml0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNOYXRpdmVUeXBlRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
dmlydHVhbCBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQog
CiBwcml2YXRlOgogICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBRdWFsaWZpZXJzIG1f
cXVhbGlmaWVyczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiBtX3R5cGU7Ci0gICAg
T3B0aW9uYWw8U3RyaW5nPiBtX25hbWU7Ci0gICAgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4gbV9z
ZW1hbnRpYzsKKyAgICBTdHJpbmcgbV9uYW1lOwogfTsKIAotdHlwZWRlZiBWZWN0b3I8UGFyYW1l
dGVyPiBQYXJhbWV0ZXJzOwotCiB9CiAKIH0KIAogfQogCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXSExTTDo6QVNUOjpUb1ZhbHVl
VHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6V0hMU0w6
OkFTVDo6TmFtZWRUeXBlJiB0eXBlKSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xf
VFlQRShOYW1lZFR5cGUsIGlzTmFtZWRUeXBlKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oCmluZGV4IDAxMGU2ZWJhNzAwLi4yNDRlODQx
MDExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaApA
QCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiA6IHB1YmxpYyBGdW5jdGlvbkRlY2xhcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQXR0cmlidXRl
QmxvY2smJiBhdHRyaWJ1dGVCbG9jaywgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IGVudHJ5UG9p
bnRUeXBlLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUs
IFBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFu
dGljLCBib29sIHJlc3RyaWN0ZWQpCisgICAgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlv
bmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBvaW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6
VW5uYW1lZFR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgVmFyaWFibGVEZWNsYXJhdGlvbnMm
JiBwYXJhbWV0ZXJzLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFudGljLCBib29sIHJl
c3RyaWN0ZWQpCiAgICAgICAgIDogRnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKG9yaWdpbiks
IFdURk1vdmUoYXR0cmlidXRlQmxvY2spLCBXVEZNb3ZlKGVudHJ5UG9pbnRUeXBlKSwgV1RGTW92
ZSh0eXBlKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShzZW1h
bnRpYykpCiAgICAgICAgICwgbV9yZXN0cmljdGVkKHJlc3RyaWN0ZWQpCiAgICAgewpAQCAtNDgs
NiArNDgsOCBAQCBwdWJsaWM6CiAgICAgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihjb25zdCBO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJikgPSBkZWxldGU7CiAgICAgTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbihOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiYpID0gZGVmYXVsdDsKIAorICAg
IGJvb2wgaXNOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQorCiAgICAgYm9vbCByZXN0cmljdGVkKCkgY29uc3QgeyByZXR1cm4gbV9yZXN0
cmljdGVkOyB9CiAKIHByaXZhdGU6CkBAIC02MCw0ICs2Miw2IEBAIHByaXZhdGU6CiAKIH0KIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9GVU5DVElPTl9ERUNMQVJBVElPTihOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLCBpc05hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSkKKwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCmluZGV4IDMyMGFiYzNj
NDc1Li42ZWQ5OGVjNzQxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9u
LmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hM
U0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRU
eXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIApAQCAtMzgsMTEgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAK
IG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBOYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwdWJsaWMg
VHlwZSB7CitjbGFzcyBOYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsK
IHB1YmxpYzoKICAgICBOYXRpdmVUeXBlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
LCBTdHJpbmcmJiBuYW1lLCBUeXBlQXJndW1lbnRzJiYgdHlwZUFyZ3VtZW50cykKLSAgICAgICAg
OiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFt
ZSkpCisgICAgICAgIDogTmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkK
ICAgICAgICAgLCBtX3R5cGVBcmd1bWVudHMoV1RGTW92ZSh0eXBlQXJndW1lbnRzKSkKICAgICB7
CiAgICAgfQpAQCAtNTIsMTYgKzUxLDEzIEBAIHB1YmxpYzoKICAgICBOYXRpdmVUeXBlRGVjbGFy
YXRpb24oY29uc3QgTmF0aXZlVHlwZURlY2xhcmF0aW9uJikgPSBkZWxldGU7CiAgICAgTmF0aXZl
VHlwZURlY2xhcmF0aW9uKE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAg
ICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gbV90eXBlQXJndW1lbnRz
OyB9CisgICAgYm9vbCBpc05hdGl2ZVR5cGVEZWNsYXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0
IG92ZXJyaWRlCi0gICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbmFtZTsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQor
ICAgIFR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMoKSB7IHJldHVybiBtX3R5cGVBcmd1bWVu
dHM7IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3RyaW5n
IG1fbmFtZTsKICAgICBUeXBlQXJndW1lbnRzIG1fdHlwZUFyZ3VtZW50czsKIH07CkBAIC03Miw0
ICs2OCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9O
QU1FRF9UWVBFKE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgaXNOYXRpdmVUeXBlRGVjbGFyYXRpb24o
KSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAppbmRleCAxNTI5NDI2YTJlZC4uNjNjMjA5
M2M1MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFBvaW50ZXJUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaApAQCAtMzksOCArMzksOCBAQCBuYW1lc3BhY2Ug
QVNUIHsKIAogY2xhc3MgUG9pbnRlclR5cGUgOiBwdWJsaWMgUmVmZXJlbmNlVHlwZSB7CiBwdWJs
aWM6Ci0gICAgUG9pbnRlclR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBhZGRy
ZXNzU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBlbGVtZW50VHlwZSkKLSAgICAgICAgOiBS
ZWZlcmVuY2VUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShhZGRyZXNzU3BhY2UpLCBXVEZN
b3ZlKGVsZW1lbnRUeXBlKSkKKyAgICBQb2ludGVyVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4s
IEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4g
ZWxlbWVudFR5cGUpCisgICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdpbiksIGFk
ZHJlc3NTcGFjZSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCiAgICAgewogICAgIH0KIApAQCAtNDks
MTEgKzQ5LDExIEBAIHB1YmxpYzoKICAgICBQb2ludGVyVHlwZShjb25zdCBQb2ludGVyVHlwZSYp
ID0gZGVsZXRlOwogICAgIFBvaW50ZXJUeXBlKFBvaW50ZXJUeXBlJiYpID0gZGVmYXVsdDsKIAot
ICAgIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgYm9vbCBpc1BvaW50ZXJUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKICAg
ICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBvaW50ZXJUeXBlPihMZXhlcjo6
VG9rZW4ob3JpZ2luKCkpLCBTdHJpbmcoYWRkcmVzc1NwYWNlKCkpLCBlbGVtZW50VHlwZSgpLmNs
b25lKCkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQb2ludGVyVHlwZT4oTGV4
ZXI6OlRva2VuKG9yaWdpbigpKSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUo
KSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShQb2ludGVyVHlwZSwgaXNQb2ludGVy
VHlwZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoUG9pbnRl
clR5cGUsIGlzUG9pbnRlclR5cGUoKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5oCmluZGV4IGJhMzhhNWMwMWVhLi5kMDVhNzJjMWZjNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKQEAgLTUxLDEwICs1
MSwzMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0
RnVuY3Rpb25OYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHNldEZ1bmN0aW9u
TmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBhbmRGdW5jdGlvbk5hbWUoKSBj
b25zdCA9IDA7CisKKyAgICB2b2lkIHNldFBvc3NpYmxlR2V0T3ZlcmxvYWRzKGNvbnN0IFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3Zlcmxv
YWRzKQorICAgIHsKKyAgICAgICAgbV9wb3NzaWJsZUdldE92ZXJsb2FkcyA9IG92ZXJsb2FkczsK
KyAgICB9CisgICAgdm9pZCBzZXRQb3NzaWJsZVNldE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykK
KyAgICB7CisgICAgICAgIG1fcG9zc2libGVTZXRPdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAg
fQorICAgIHZvaWQgc2V0UG9zc2libGVBbmRPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMpCisgICAg
eworICAgICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAgIH0KKwog
ICAgIEV4cHJlc3Npb24mIGJhc2UoKSB7IHJldHVybiAqbV9iYXNlOyB9CiAKIHByaXZhdGU6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fYmFzZTsKKyAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZUdldE92
ZXJsb2FkczsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4gbV9wb3NzaWJsZVNldE92ZXJsb2FkczsKKyAgICBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZUFuZE92ZXJs
b2FkczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24uaAppbmRleCBhNGMxNGNlMWNmMy4uY2Q1NTYzMjBkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVO
QUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRp
b24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJX
SExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hM
U0xWYXJpYWJsZVJlZmVyZW5jZS5oIgpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgUmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVl
X3B0cjxFeHByZXNzaW9uPiBsVmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihMZXhlcjo6VG9r
ZW4ob3JpZ2luKSkKICAgICAgICAgLCBtX2xWYWx1ZShXVEZNb3ZlKGxWYWx1ZSkpCi0gICAgICAg
ICwgbV9vbGRWYWx1ZShMZXhlcjo6VG9rZW4ob3JpZ2luKSkKLSAgICAgICAgLCBtX25ld1ZhbHVl
KFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgLCBtX29sZFZhbHVlKExleGVyOjpUb2tlbihvcmln
aW4pLCBRdWFsaWZpZXJzKCksIG51bGxwdHIsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxw
dHIpCisgICAgICAgICwgbV9uZXdWYWx1ZShXVEZNb3ZlKG9yaWdpbiksIFF1YWxpZmllcnMoKSwg
bnVsbHB0ciwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cikKICAgICB7CiAgICAgfQog
CkBAIC04NywxNSArODcsMTUgQEAgcHVibGljOgogICAgIGJvb2wgaXNSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgRXhwcmVz
c2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gKm1fbFZhbHVlOyB9Ci0gICAgQW5vbnltb3VzVmFyaWFi
bGVEZWNsYXJhdGlvbiYgb2xkVmFsdWUoKSB7IHJldHVybiBtX29sZFZhbHVlOyB9Ci0gICAgQW5v
bnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYgbmV3VmFsdWUoKSB7IHJldHVybiBtX25ld1ZhbHVl
OyB9CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiYgb2xkVmFsdWUoKSB7IHJldHVybiBtX29sZFZh
bHVlOyB9CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiYgbmV3VmFsdWUoKSB7IHJldHVybiBtX25l
d1ZhbHVlOyB9CiAgICAgRXhwcmVzc2lvbiYgbmV3VmFsdWVFeHByZXNzaW9uKCkgeyByZXR1cm4g
Km1fbmV3VmFsdWVFeHByZXNzaW9uOyB9CiAgICAgRXhwcmVzc2lvbiYgcmVzdWx0RXhwcmVzc2lv
bigpIHsgcmV0dXJuICptX3Jlc3VsdEV4cHJlc3Npb247IH0KIAogcHJpdmF0ZToKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9sVmFsdWU7Ci0gICAgQW5vbnltb3VzVmFyaWFibGVE
ZWNsYXJhdGlvbiBtX29sZFZhbHVlOwotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24g
bV9uZXdWYWx1ZTsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG1fb2xkVmFsdWU7CisgICAgVmFy
aWFibGVEZWNsYXJhdGlvbiBtX25ld1ZhbHVlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNz
aW9uPiBtX25ld1ZhbHVlRXhwcmVzc2lvbjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lv
bj4gbV9yZXN1bHRFeHByZXNzaW9uOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaAppbmRleCAy
MjU3ZjliZTI0MC4uNGU2OWY3OWI4ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgKQEAgLTI4
LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5o
IgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMzcsMTEgKzM3LDE4IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1Qgewog
Ci1jbGFzcyBSZWZlcmVuY2VUeXBlIDogcHVibGljIFR5cGUgeworY2xhc3MgUmVmZXJlbmNlVHlw
ZSA6IHB1YmxpYyBVbm5hbWVkVHlwZSB7CiBwdWJsaWM6Ci0gICAgUmVmZXJlbmNlVHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRy
PFR5cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4p
KQotICAgICAgICAsIG1fYWRkcmVzc1NwYWNlKFdURk1vdmUoYWRkcmVzc1NwYWNlKSkKKyAgICBl
bnVtIGNsYXNzIEFkZHJlc3NTcGFjZSB7CisgICAgICAgIENvbnN0YW50LAorICAgICAgICBEZXZp
Y2UsCisgICAgICAgIFRocmVhZGdyb3VwLAorICAgICAgICBUaHJlYWQKKyAgICB9OworCisgICAg
UmVmZXJlbmNlVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEFkZHJlc3NTcGFjZSBhZGRyZXNz
U3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiBlbGVtZW50VHlwZSkKKyAgICAg
ICAgOiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9hZGRyZXNzU3Bh
Y2UoYWRkcmVzc1NwYWNlKQogICAgICAgICAsIG1fZWxlbWVudFR5cGUoV1RGTW92ZShlbGVtZW50
VHlwZSkpCiAgICAgewogICAgIH0KQEAgLTUwLDE4ICs1NywxNiBAQCBwdWJsaWM6CiAKICAgICBS
ZWZlcmVuY2VUeXBlKGNvbnN0IFJlZmVyZW5jZVR5cGUmKSA9IGRlbGV0ZTsKICAgICBSZWZlcmVu
Y2VUeXBlKFJlZmVyZW5jZVR5cGUmJikgPSBkZWZhdWx0OwotICAgIAotICAgIFR5cGUmIGVsZW1l
bnRUeXBlKCkgeyByZXR1cm4gKm1fZWxlbWVudFR5cGU7IH0KIAotcHJvdGVjdGVkOgotICAgIGNv
bnN0IExleGVyOjpUb2tlbiYgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KLSAg
ICBjb25zdCBTdHJpbmcmIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1Nw
YWNlOyB9Ci0gICAgY29uc3QgVHlwZSYgZWxlbWVudFR5cGUoKSBjb25zdCB7IHJldHVybiAqbV9l
bGVtZW50VHlwZTsgfQorICAgIGJvb2wgaXNSZWZlcmVuY2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKworICAgIEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UoKSBjb25z
dCB7IHJldHVybiBtX2FkZHJlc3NTcGFjZTsgfQorICAgIGNvbnN0IFVubmFtZWRUeXBlJiBlbGVt
ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9CisgICAgVW5uYW1lZFR5
cGUmIGVsZW1lbnRUeXBlKCkgeyByZXR1cm4gKm1fZWxlbWVudFR5cGU7IH0KIAogcHJpdmF0ZToK
LSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgU3RyaW5nIG1fYWRkcmVzc1NwYWNlOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX2VsZW1lbnRUeXBlOworICAgIEFkZHJlc3NTcGFj
ZSBtX2FkZHJlc3NTcGFjZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IG1fZWxl
bWVudFR5cGU7CiB9OwogCiB9CkBAIC03MCw0ICs3NSw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoUmVmZXJlbmNlVHlwZSwgaXNS
ZWZlcmVuY2VUeXBlKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaAppbmRleCBjNWJmYzllNDI4Ni4uYWM5
MzIzZDI0MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFJldHVybi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFJldHVybi5oCkBAIC01NCw4ICs1NCwxMSBAQCBwdWJsaWM6CiAKICAgICBF
eHByZXNzaW9uKiB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KIAorICAgIHZvaWQg
c2V0RnVuY3Rpb24oRnVuY3Rpb25EZWZpbml0aW9uKiBmdW5jdGlvbkRlZmluaXRpb24pIHsgbV9m
dW5jdGlvbiA9IGZ1bmN0aW9uRGVmaW5pdGlvbjsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxFeHByZXNzaW9uPiBtX3ZhbHVlOyAvLyBudWxsYWJsZQorICAgIEZ1bmN0aW9uRGVm
aW5pdGlvbiogbV9mdW5jdGlvbjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmlu
aXRpb24uaAppbmRleCA4N2NjNjJmMjM1Ni4uYThjOThlOTliNGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xT
dHJ1Y3R1cmVEZWZpbml0aW9uLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNM
TGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFN0cnVjdHVyZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJX
SExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMzksMTEgKzM5
LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBTdHJ1
Y3R1cmVEZWZpbml0aW9uIDogcHVibGljIFR5cGUgeworY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlv
biA6IHB1YmxpYyBOYW1lZFR5cGUgewogcHVibGljOgogICAgIFN0cnVjdHVyZURlZmluaXRpb24o
TGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1lLCBTdHJ1Y3R1cmVFbGVtZW50cyYm
IHN0cnVjdHVyZUVsZW1lbnRzKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkK
LSAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKKyAgICAgICAgOiBOYW1lZFR5cGUoV1RG
TW92ZShvcmlnaW4pLCBXVEZNb3ZlKG5hbWUpKQogICAgICAgICAsIG1fc3RydWN0dXJlRWxlbWVu
dHMoV1RGTW92ZShzdHJ1Y3R1cmVFbGVtZW50cykpCiAgICAgewogICAgIH0KQEAgLTUzLDE3ICs1
MiwxMSBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlRGVmaW5pdGlvbihjb25zdCBTdHJ1Y3R1cmVE
ZWZpbml0aW9uJikgPSBkZWxldGU7CiAgICAgU3RydWN0dXJlRGVmaW5pdGlvbihTdHJ1Y3R1cmVE
ZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKIAotICAgIFN0cnVjdHVyZUVsZW1lbnRzJiBzdHJ1Y3R1
cmVFbGVtZW50cygpIHsgcmV0dXJuIG1fc3RydWN0dXJlRWxlbWVudHM7IH0KKyAgICBib29sIGlz
U3RydWN0dXJlRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCi0gICAgewot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQorICAgIFN0cnVjdHVyZUVsZW1lbnRzJiBzdHJ1Y3R1cmVFbGVtZW50cygpIHsgcmV0dXJu
IG1fc3RydWN0dXJlRWxlbWVudHM7IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9v
cmlnaW47Ci0gICAgU3RyaW5nIG1fbmFtZTsKICAgICBTdHJ1Y3R1cmVFbGVtZW50cyBtX3N0cnVj
dHVyZUVsZW1lbnRzOwogfTsKIApAQCAtNzMsNCArNjYsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShTdHJ1Y3R1cmVEZWZpbml0aW9u
LCBpc1N0cnVjdHVyZURlZmluaXRpb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVF
bGVtZW50LmgKaW5kZXggMTRiZTQxYzcyOTguLmE4Y2JmOThkZjU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3Ry
dWN0dXJlRWxlbWVudC5oCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFz
cyBTdHJ1Y3R1cmVFbGVtZW50IDogcHVibGljIE5vZGUgewogcHVibGljOgotICAgIFN0cnVjdHVy
ZUVsZW1lbnQoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywg
c3RkOjp1bmlxdWVfcHRyPFR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgT3B0aW9uYWw8U2Vt
YW50aWM+IHNlbWFudGljKQorICAgIFN0cnVjdHVyZUVsZW1lbnQoTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBl
PiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIE9wdGlvbmFsPFNlbWFudGljPiBzZW1hbnRpYykKICAg
ICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9xdWFsaWZpZXJz
KFdURk1vdmUocXVhbGlmaWVycykpCiAgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCkBA
IC01NSwxMyArNTUsMTUgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZUVsZW1lbnQoY29uc3QgU3Ry
dWN0dXJlRWxlbWVudCYpID0gZGVsZXRlOwogICAgIFN0cnVjdHVyZUVsZW1lbnQoU3RydWN0dXJl
RWxlbWVudCYmKSA9IGRlZmF1bHQ7CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlw
ZTsgfQorICAgIExleGVyOjpUb2tlbiYgb3JpZ2luKCkgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAg
ICBVbm5hbWVkVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBjb25zdCBTdHJp
bmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KICAgICBPcHRpb25hbDxTZW1hbnRpYz4mIHNl
bWFudGljKCkgeyByZXR1cm4gbV9zZW1hbnRpYzsgfQogCiBwcml2YXRlOgogICAgIExleGVyOjpU
b2tlbiBtX29yaWdpbjsKICAgICBRdWFsaWZpZXJzIG1fcXVhbGlmaWVyczsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8VHlwZT4gbV90eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4g
bV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgT3B0aW9uYWw8U2VtYW50aWM+IG1fc2Vt
YW50aWM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZS5oCmluZGV4IGNmNGNiYzg4NzkwLi41NzNhOGJiNjhjNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGUuaApA
QCAtNDUsMTIgKzQ1LDggQEAgcHVibGljOgogICAgIFR5cGUoY29uc3QgVHlwZSYpID0gZGVsZXRl
OwogICAgIFR5cGUoVHlwZSYmKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNUeXBl
UmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQ
b2ludGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlz
QXJyYXlSZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdmlydHVh
bCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGlzTmFtZWRUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNVbm5hbWVkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKIHByaXZhdGU6CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVHlwZUFyZ3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKaW5kZXggN2U1ODAxZTNiNTYuLjFiOGFmNDFjMjk5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xUeXBlQXJndW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKQEAgLTI4LDkgKzI4LDExIEBACiAjaWYgRU5B
QkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJX
SExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCmluZGV4IGY3MzYyOWUyOWIx
Li42OWFhMjNhMWZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCkBAIC0yOSw3ICsyOSw4
IEBACiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCi0j
aW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNs
dWRlICJXSExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDExICszOSwxMCBAQCBuYW1lc3BhY2UgV0hM
U0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgVHlwZURlZmluaXRpb24gOiBwdWJsaWMg
VHlwZSB7CitjbGFzcyBUeXBlRGVmaW5pdGlvbiA6IHB1YmxpYyBOYW1lZFR5cGUgewogcHVibGlj
OgotICAgIFR5cGVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFt
ZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlKQotICAgICAgICA6IG1fb3JpZ2lu
KFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKKyAgICBU
eXBlRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUpCisgICAgICAgIDogTmFtZWRUeXBl
KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92
ZSh0eXBlKSkKICAgICB7CiAgICAgfQpAQCAtNTIsMTggKzUyLDE4IEBAIHB1YmxpYzoKICAgICBU
eXBlRGVmaW5pdGlvbihjb25zdCBUeXBlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFR5cGVE
ZWZpbml0aW9uKFR5cGVEZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKIAotICAgIEFTVDo6VHlwZSYg
dHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBib29sIGlzVHlwZURlZmluaXRpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQorICAgIEFTVDo6VW5uYW1lZFR5cGUmIHR5cGUoKSB7
IHJldHVybiAqbV90eXBlOyB9CisKKyAgICBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICBBU1NFUlQobV90eXBlKTsKKyAgICAgICAgcmV0dXJuIG1f
dHlwZS0+dW5pZnlOb2RlKCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBt
X29yaWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5
cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbV90eXBl
OwogfTsKIAogfQpAQCAtNzIsNCArNzIsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShUeXBlRGVmaW5pdGlvbiwgaXNUeXBlRGVmaW5p
dGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAppbmRleCA0OTQ0MWQ4YjVj
Ny4uOTI5M2FhMjY0ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKQEAgLTI4LDggKzI4LDkg
QEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1
ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRU
eXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM4LDEwICszOSwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2Ug
QVNUIHsKIAotY2xhc3MgVHlwZVJlZmVyZW5jZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFR5cGVS
ZWZlcmVuY2UgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgogICAgIFR5cGVSZWZlcmVu
Y2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1lLCBUeXBlQXJndW1lbnRzJiYg
dHlwZUFyZ3VtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCisgICAg
ICAgIDogVW5uYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fbmFtZShXVEZN
b3ZlKG5hbWUpKQogICAgICAgICAsIG1fdHlwZUFyZ3VtZW50cyhXVEZNb3ZlKHR5cGVBcmd1bWVu
dHMpKQogICAgIHsKQEAgLTUyLDI0ICs1Myw0NyBAQCBwdWJsaWM6CiAgICAgVHlwZVJlZmVyZW5j
ZShjb25zdCBUeXBlUmVmZXJlbmNlJikgPSBkZWxldGU7CiAgICAgVHlwZVJlZmVyZW5jZShUeXBl
UmVmZXJlbmNlJiYpID0gZGVmYXVsdDsKIAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZVJlZmVyZW5jZT4gd3JhcChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIE5hbWVkVHlwZSYgcmVzb2x2
ZWRUeXBlKQorICAgIHsKKyAgICAgICAgVHlwZUFyZ3VtZW50cyB0eXBlQXJndW1lbnRzOworICAg
ICAgICBpZiAoaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihyZXNvbHZlZFR5cGUpKQorICAgICAg
ICAgICAgdHlwZUFyZ3VtZW50cyA9IEFTVDo6Y2xvbmUoZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihyZXNvbHZlZFR5cGUpLnR5cGVBcmd1bWVudHMoKSk7CisgICAgICAgIGF1dG8gcmVz
dWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKG9yaWdpbiksIFN0
cmluZyhyZXNvbHZlZFR5cGUubmFtZSgpKSwgV1RGTW92ZSh0eXBlQXJndW1lbnRzKSk7CisgICAg
ICAgIHJlc3VsdC0+c2V0UmVzb2x2ZWRUeXBlKHJlc29sdmVkVHlwZSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCiAgICAgYm9vbCBpc1R5cGVSZWZlcmVuY2UoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25h
bWU7IH0KICAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gbV90eXBl
QXJndW1lbnRzOyB9CisgICAgTmFtZWRUeXBlKiByZXNvbHZlZFR5cGUoKSB7IHJldHVybiBtX3Jl
c29sdmVkVHlwZTsgfQorCisgICAgY29uc3QgVHlwZSYgdW5pZnlOb2RlKCkgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Jlc29sdmVkVHlwZSk7CisgICAgICAgIHJldHVy
biBtX3Jlc29sdmVkVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
UmVzb2x2ZWRUeXBlKE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBlKQorICAgIHsKKyAgICAgICAgbV9y
ZXNvbHZlZFR5cGUgPSAmcmVzb2x2ZWRUeXBlOworICAgIH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlUmVmZXJlbmNlPiBjbG9uZVR5cGVSZWZlcmVuY2UoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VHlwZVJlZmVyZW5jZT4oTGV4ZXI6OlRva2VuKG1f
b3JpZ2luKSwgU3RyaW5nKG1fbmFtZSksIEFTVDo6Y2xvbmUobV90eXBlQXJndW1lbnRzKSk7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVSZWZlcmVuY2U+KExleGVyOjpUb2tl
bihvcmlnaW4oKSksIFN0cmluZyhtX25hbWUpLCBBU1Q6OmNsb25lKG1fdHlwZUFyZ3VtZW50cykp
OwogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCiAgICAgewogICAgICAgICByZXR1cm4gY2xvbmVUeXBlUmVmZXJlbmNlKCk7CiAgICAgfQog
CiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9uYW1l
OwogICAgIFR5cGVBcmd1bWVudHMgbV90eXBlQXJndW1lbnRzOworICAgIE5hbWVkVHlwZSogbV9y
ZXNvbHZlZFR5cGUgeyBudWxscHRyIH07CiB9OwogCiB9CkBAIC03OCw2ICsxMDIsNiBAQCBwcml2
YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShUeXBlUmVmZXJl
bmNlLCBpc1R5cGVSZWZlcmVuY2UoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5O
QU1FRF9UWVBFKFR5cGVSZWZlcmVuY2UsIGlzVHlwZVJlZmVyZW5jZSgpKQogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVu
bmFtZWRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xVbm5hbWVkVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43
M2E4ZjBhMGM0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgVW5uYW1l
ZFR5cGUgOiBwdWJsaWMgVHlwZSB7CitwdWJsaWM6CisgICAgVW5uYW1lZFR5cGUoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luKQorICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB+VW5uYW1lZFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBV
bm5hbWVkVHlwZShjb25zdCBVbm5hbWVkVHlwZSYpID0gZGVsZXRlOworICAgIFVubmFtZWRUeXBl
KFVubmFtZWRUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNVbm5hbWVkVHlwZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBlUmVm
ZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNQb2lu
dGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQXJy
YXlSZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1JlZmVyZW5jZVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVh
bCBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCisgICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOwor
CisgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdp
bjsgfQorCitwcml2YXRlOgorICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKK307CisKK30KKwor
fQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZ
UEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGlj
IGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6OlVubmFtZWRUeXBlJiB0eXBl
KSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShVbm5hbWVkVHlwZSwgaXNV
bm5hbWVkVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24u
aAppbmRleCBmZjAzNjgxOTNiZC4uODUyMGNhZGNjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNz
IFZhcmlhYmxlRGVjbGFyYXRpb24gOiBwdWJsaWMgVmFsdWUgewogcHVibGljOgotICAgIFZhcmlh
YmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlm
aWVycywgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBP
cHRpb25hbDxTZW1hbnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
JiYgaW5pdGlhbGl6ZXIpCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBv
cmlnaW4sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5h
bWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4mJiBzZW1h
bnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5pdGlhbGl6ZXIpCiAgICAgICAg
IDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZN
b3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAtNjAs
MjAgKzYwLDIzIEBAIHB1YmxpYzoKICAgICBWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVj
bGFyYXRpb24mJikgPSBkZWZhdWx0OwogCiAgICAgTGV4ZXI6OlRva2VuIG9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1l
OyB9CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIFVubmFtZWRU
eXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQogICAgIE9wdGlvbmFsPFNlbWFudGljPiYg
c2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9CiAgICAgRXhwcmVzc2lvbiogaW5pdGlh
bGl6ZXIoKSB7IHJldHVybiBtX2luaXRpYWxpemVyLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAg
TGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIFF1YWxpZmllcnMgbV9xdWFsaWZpZXJzOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpVbm5hbWVkVHlwZT4gbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgT3B0aW9u
YWw8U2VtYW50aWM+IG1fc2VtYW50aWM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
IG1faW5pdGlhbGl6ZXI7CiB9OwogCit0eXBlZGVmIFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9u
PiBWYXJpYWJsZURlY2xhcmF0aW9uczsKKwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZl
cmVuY2UuaAppbmRleCAyYWU4MjhkNTI5NS4uZTM5ZWNmNWM1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFy
aWFibGVSZWZlcmVuY2UuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkK
IAotI2luY2x1ZGUgIldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lv
bi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVj
bGFyYXRpb24uaCIKQEAgLTU1LDE5ICs1NSwyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFZhcmlh
YmxlUmVmZXJlbmNlIHdyYXAoVmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlv
bikKICAgICB7CiAgICAgICAgIFZhcmlhYmxlUmVmZXJlbmNlIHJlc3VsdChMZXhlcjo6VG9rZW4o
dmFyaWFibGVEZWNsYXJhdGlvbi5vcmlnaW4oKSkpOwotICAgICAgICByZXN1bHQubV92YXJpYWJs
ZSA9IHsgJnZhcmlhYmxlRGVjbGFyYXRpb24gfTsKKyAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUg
PSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
LSAgICBzdGF0aWMgVmFyaWFibGVSZWZlcmVuY2Ugd3JhcChBbm9ueW1vdXNWYXJpYWJsZURlY2xh
cmF0aW9uJiBhbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKQorICAgIGJvb2wgaXNWYXJpYWJs
ZVJlZmVyZW5jZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmlu
ZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiog
dmFyaWFibGUoKSB7IHJldHVybiBtX3ZhcmlhYmxlOyB9CisKKyAgICB2b2lkIHNldFZhcmlhYmxl
KFZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgewotICAgICAg
ICBWYXJpYWJsZVJlZmVyZW5jZSByZXN1bHQoTGV4ZXI6OlRva2VuKGFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24ub3JpZ2luKCkpKTsKLSAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSB7ICZh
bm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uIH07Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIG1fdmFyaWFibGUgPSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKICAgICB9CiAKLSAgICBi
b29sIGlzVmFyaWFibGVSZWZlcmVuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
Ci0KIHByaXZhdGU6CiAgICAgVmFyaWFibGVSZWZlcmVuY2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
KQogICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQpAQCAtNzUsNyArNzcsNyBA
QCBwcml2YXRlOgogICAgIH0KIAogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgT3B0aW9uYWw8VmFy
aWFudDxWYXJpYWJsZURlY2xhcmF0aW9uKiwgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbio+
PiBtX3ZhcmlhYmxlOworICAgIFZhcmlhYmxlRGVjbGFyYXRpb24qIG1fdmFyaWFibGU7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42ZDVlZjM3NTY3NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMuY3BwCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTENoZWNrRHVwbGlj
YXRlRnVuY3Rpb25zLmgiCisKKyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgor
I2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgi
CisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIFdITFNMIHsKKworYm9vbCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25z
dCBQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4+IGZ1bmN0aW9uczsKKyAgICBmb3IgKGF1dG8mIGZ1
bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAg
ICBmdW5jdGlvbnMuYXBwZW5kKCpmdW5jdGlvbkRlZmluaXRpb24pOworICAgIGZvciAoYXV0byYg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbnMoKSkKKyAgICAgICAgZnVuY3Rpb25zLmFwcGVuZCgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbik7CisKKyAgICBzdGQ6OnNvcnQoZnVuY3Rpb25zLmJlZ2luKCksIGZ1bmN0aW9ucy5lbmQo
KSwgW10oY29uc3QgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBhLCBjb25zdCBBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24mIGIpIC0+IGJvb2wgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RkOjptaW4oYS5uYW1lKCkubGVuZ3RoKCksIGIubmFtZSgpLmxlbmd0aCgpKTsgKytp
KSB7CisgICAgICAgICAgICBpZiAoYS5uYW1lKClbaV0gPCBiLm5hbWUoKVtpXSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChhLm5hbWUoKVtpXSA+IGIubmFt
ZSgpW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gYS5uYW1lKCkubGVuZ3RoKCkgPCBiLm5hbWUoKS5sZW5ndGgoKTsKKyAgICB9KTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkgeworICAg
ICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpICE9IGZ1bmN0aW9uc1tq
XS5nZXQoKS5uYW1lKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAo
aXM8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihmdW5jdGlvbnNbaV0uZ2V0KCkpICYm
IGlzPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oZnVuY3Rpb25zW2pdLmdldCgpKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0u
Z2V0KCkucGFyYW1ldGVycygpLnNpemUoKSAhPSBmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVy
cygpLnNpemUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChm
dW5jdGlvbnNbaV0uZ2V0KCkuaXNDYXN0KCkpIHsKKyAgICAgICAgICAgICAgICBib29sIHNhbWUg
PSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCku
dHlwZSgpLCBmdW5jdGlvbnNbal0uZ2V0KCkudHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
c2FtZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCku
c2l6ZSgpOyArK2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5j
dGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSwgZnVuY3Rpb25zW2pdLmdldCgp
LnBhcmFtZXRlcnMoKVtrXS50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2FtZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChzYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJvb2wgc2Ft
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBmdW5jdGlv
bnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKTsgKytrKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUo
KSwgZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50eXBlKCkpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzYW1lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoc2FtZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoZnVuY3Rpb25zW2ld
LmdldCgpLm5hbWUoKSA9PSAib3BlcmF0b3ImW10iICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJh
bWV0ZXJzKCkuc2l6ZSgpID09IDIKKyAgICAgICAgICAgICYmIGlzPEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlPihmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpIHsKKyAg
ICAgICAgICAgIGF1dG8mIHR5cGUgPSBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFd
LnR5cGUoKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHJlc29sdmVkVHlwZSA9IGRvd25jYXN0PEFTVDo6
VHlwZVJlZmVyZW5jZT4odHlwZSkucmVzb2x2ZWRUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqcmVzb2x2ZWRUeXBlKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93
bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCpyZXNvbHZlZFR5cGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVp
bnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgi
ICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEKKyAgICAgICAg
ICAgICYmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpCisgICAgICAgICAgICB8fCBpczxBU1Q6OkFycmF5VHlwZT4o
ZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUo
KSA9PSAib3BlcmF0b3I9PSIKKyAgICAgICAgICAgICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJh
bWV0ZXJzKCkuc2l6ZSgpID09IDIKKyAgICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlw
ZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpCisgICAgICAgICAg
ICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJz
KClbMV0udHlwZSgpKQorICAgICAgICAgICAgJiYgbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCku
cGFyYW1ldGVycygpWzBdLnR5cGUoKSwgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsx
XS50eXBlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0
aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ZWNlZTc4MmM1
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaApAQCAtMCwwICsxLDQzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hM
U0xQcm9ncmFtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsK
KworYm9vbCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJik7CisKK30KKwor
fQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMQ2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjg2MjVmOTA0ZjlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV0hMU0xDaGVja2VyLmgiCisKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRl
ICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBX
SExTTCB7CisKK2NsYXNzIENoZWNrZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAg
Q2hlY2tlcihQcm9ncmFtJiBwcm9ncmFtKQorICAgICAgICA6IG1fcHJvZ3JhbShwcm9ncmFtKQor
ICAgIHsKKyAgICB9CisKKyAgICB+Q2hlY2tlcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlz
aXQoUHJvZ3JhbSYgcHJvZ3JhbSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYg
dHlwZURlZmluaXRpb24gOiBwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpKQorICAgICAgICAgICAg
VmlzaXRvcjo6dmlzaXQoKnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBzdHJ1
Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKQorICAgICAg
ICAgICAgVmlzaXRvcjo6dmlzaXQoKnN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBmb3Ig
KGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0
aW9ucygpKQorICAgICAgICAgICAgdmlzaXQoKmVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAg
ICAgIGZvciAoYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVUeXBl
RGVjbGFyYXRpb25zKCkpCisgICAgICAgICAgICBWaXNpdG9yOjp2aXNpdCgqbmF0aXZlVHlwZURl
Y2xhcmF0aW9uKTsKKworICAgICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHBy
b2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAgICAgICAgdmlzaXQoKmZ1bmN0aW9u
RGVmaW5pdGlvbik7CisgICAgICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgICAgIFZp
c2l0b3I6OnZpc2l0KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICB9CisKKyAgICBi
b29sIGNoZWNrU2hhZGVyVHlwZShBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZp
bml0aW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoICgqZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5
UG9pbnRUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbjo6RW50
cnlQb2ludFR5cGU6OlZlcnRleDoKKyAgICAgICAgICAgIHJldHVybiAhbV92ZXJ0ZXhFbnRyeVBv
aW50cy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkuaXNOZXdFbnRyeTsKKyAgICAgICAg
Y2FzZSBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbjo6RW50cnlQb2ludFR5cGU6OkZyYWdtZW50Ogor
ICAgICAgICAgICAgcmV0dXJuICFtX2ZyYWdtZW50RW50cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkpLmlzTmV3RW50cnk7CisgICAgICAgIGNhc2UgQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb246OkVudHJ5UG9pbnRUeXBlOjpDb21wdXRlOgorICAgICAgICAgICAgcmV0dXJuICFt
X2NvbXB1dGVFbnRyeVBvaW50cy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkuaXNOZXdF
bnRyeTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgY2hlY2tTZW1hbnRpY3MoQVNUOjpG
dW5jdGlvbkRlZmluaXRpb24mKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgY2hlY2tPcGVyYXRv
ck92ZXJsb2FkKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikKKyAgICB7CisgICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAg
ICAgICAgICAgIGlmICghY2hlY2tTaGFkZXJUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKKyAg
ICAgICAgICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNzKGZ1bmN0aW9uRGVm
aW5pdGlvbikpIHsKKyAgICAgICAgICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjaGVj
a09wZXJhdG9yT3ZlcmxvYWQoZnVuY3Rpb25EZWZpbml0aW9uKSkgeworICAgICAgICAgICAgbV9l
cnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBW
aXNpdG9yOjp2aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcworICAgICAgICBWaXNpdG9yOjp2aXNp
dChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpQ
b2ludGVyVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBGb2xsb3dpbmcgcG9pbnRl
ciB0eXBlcyBjYW4gY2F1c2UgaW5maW5pdGUgbG9vcHMgYmVjYXVzZSBvZiBkYXRhIHN0cnVjdHVy
ZXMKKyAgICAgICAgLy8gbGlrZSBsaW5rZWQgbGlzdHMuCisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBG
b2xsb3dpbmcgYXJyYXkgcmVmZXJlbmNlIHR5cGVzIGNhbiBjYXVzZSBpbmZpbml0ZSBsb29wcyBi
ZWNhdXNlIG9mIGRhdGEKKyAgICAgICAgLy8gc3RydWN0dXJlcyBsaWtlIGxpbmtlZCBsaXN0cy4K
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5j
ZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKwor
ICAgICAgICBWaXNpdG9yOjp2aXNpdCh0eXBlUmVmZXJlbmNlKTsKKyAgICB9CisKKyAgICAvLyBG
SVhNRTogRGVsZXRlIHRoaXMgYXMgc29vbiBhcyBtX3Byb2dyYW0gaXMgdXNlZC4KKyAgICBQcm9n
cmFtJiBwcm9ncmFtKCkgeyByZXR1cm4gbV9wcm9ncmFtOyB9CisKKyAgICBib29sIGVycm9yKCkg
eyByZXR1cm4gbV9lcnJvcjsgfQorCitwcml2YXRlOgorICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3Zl
cnRleEVudHJ5UG9pbnRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50RW50cnlQb2lu
dHM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fY29tcHV0ZUVudHJ5UG9pbnRzOworICAgIFByb2dy
YW0mIG1fcHJvZ3JhbTsKKyAgICBib29sIG1fZXJyb3IgeyBmYWxzZSB9OyAvLyBGSVhNRTogTWln
cmF0ZSB0aGlzIHRvIGJlIHNvbWUgc29ydCBvZiBkZXNjcmlwdGl2ZSBzdHJpbmcuCisgICAgLy8g
RklYTUU6IENvbnNpZGVyIG1vdmluZyB0aGUgZXJyb3IgaW50byBWaXNpdG9yCit9OworCitib29s
IGNoZWNrKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgQ2hlY2tlciBjaGVja2VyKHByb2dyYW0p
OworICAgIGNoZWNrZXIudmlzaXQocHJvZ3JhbSk7CisgICAgcmV0dXJuICFjaGVja2VyLmVycm9y
KCk7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmVkMjY4ZDczNDFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmgKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCiti
b29sIGNoZWNrKFByb2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNhNzc3OTU2NjI2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZl
clR5cGVzLmNwcApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgi
CisKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIFdITFNMIHsKKworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5
cGUmIHVubmFtZWRUeXBlLCBjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiBvdGhlcikKK3sKKyAgICBh
dXRvJiB1bmlmeVRoaXMgPSB1bm5hbWVkVHlwZS51bmlmeU5vZGUoKTsKKyAgICBhdXRvJiB1bmlm
eU90aGVyID0gb3RoZXIudW5pZnlOb2RlKCk7CisKKyAgICBpZiAoJnVuaWZ5VGhpcyA9PSAmdW5p
ZnlPdGhlcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXM8QVNUOjpOYW1lZFR5
cGU+KHVuaWZ5VGhpcykgJiYgaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5T3RoZXIpKSB7CisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBhdXRvJiBuYW1lZFRoaXMgPSBkb3duY2FzdDxBU1Q6
Ok5hbWVkVHlwZT4odW5pZnlUaGlzKTsKKyAgICAgICAgYXV0byYgbmFtZWRPdGhlciA9IGRvd25j
YXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU90aGVyKTsKKyAgICAgICAgQVNTRVJUKCFpczxBU1Q6
OlR5cGVEZWZpbml0aW9uPihuYW1lZFRoaXMpICYmICFpczxBU1Q6OlR5cGVEZWZpbml0aW9uPihu
YW1lZE90aGVyKSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBp
ZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlUaGlzKSAmJiBpczxBU1Q6OlVubmFtZWRUeXBl
Pih1bmlmeU90aGVyKSkgeworICAgICAgICBhdXRvJiB1bm5hbWVkVGhpcyA9IGRvd25jYXN0PEFT
VDo6VW5uYW1lZFR5cGU+KHVuaWZ5VGhpcyk7CisgICAgICAgIGF1dG8mIHVubmFtZWRPdGhlciA9
IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5T3RoZXIpOworICAgICAgICBBU1NFUlQo
IWlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFRoaXMpICYmICFpczxBU1Q6OlR5cGVSZWZl
cmVuY2U+KHVubmFtZWRPdGhlcikpOworICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFRoaXMpICYmIGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRPdGhlcikpIHsKKyAg
ICAgICAgICAgIGF1dG8mIHBvaW50ZXJUaGlzID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFRoaXMpOworICAgICAgICAgICAgYXV0byYgcG9pbnRlck90aGVyID0gZG93bmNhc3Q8
QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChwb2ludGVy
VGhpcy5hZGRyZXNzU3BhY2UoKSAhPSBwb2ludGVyT3RoZXIuYWRkcmVzc1NwYWNlKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMocG9p
bnRlclRoaXMuZWxlbWVudFR5cGUoKSwgcG9pbnRlck90aGVyLmVsZW1lbnRUeXBlKCkpOworICAg
ICAgICB9CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFRo
aXMpICYmIGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkT3RoZXIpKXsKKyAgICAg
ICAgICAgIGF1dG8mIGFycmF5UmVmZXJlbmNlVGhpcyA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5j
ZU90aGVyID0gZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhlcik7
CisgICAgICAgICAgICBpZiAoYXJyYXlSZWZlcmVuY2VUaGlzLmFkZHJlc3NTcGFjZSgpICE9IGFy
cmF5UmVmZXJlbmNlT3RoZXIuYWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlSZWZlcmVuY2VUaGlzLmVs
ZW1lbnRUeXBlKCksIGFycmF5UmVmZXJlbmNlT3RoZXIuZWxlbWVudFR5cGUoKSk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNU
OjpBcnJheVR5cGU+KHVubmFtZWRPdGhlcikpIHsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5VGhp
cyA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBh
dXRvJiBhcnJheU90aGVyID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRPdGhlcik7
CisgICAgICAgICAgICBpZiAoYXJyYXlUaGlzLm51bUVsZW1lbnRzKCkgIT0gYXJyYXlPdGhlci5u
dW1FbGVtZW50cygpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBtYXRjaGVzKGFycmF5VGhpcy50eXBlKCksIGFycmF5T3RoZXIudHlwZSgpKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBpbmZlclR5cGVzRm9yVHlwZUFyZ3VtZW50cyhBU1Q6Ok5hbWVkVHlwZSYgcG9z
c2libGVUeXBlLCBBU1Q6OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMpCit7CisgICAgaWYg
KGlzPEFTVDo6VHlwZURlZmluaXRpb24+KHBvc3NpYmxlVHlwZSkKKyAgICAgICAgfHwgaXM8QVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpCisgICAgICAgIHx8IGlzPEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpKSB7CisgICAgICAgIHJldHVybiB0
eXBlQXJndW1lbnRzLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICBBU1NFUlQoaXM8QVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24+KHBvc3NpYmxlVHlwZSkpOworICAgIGF1dG8mIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihwb3NzaWJs
ZVR5cGUpOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNp
emUoKSAhPSB0eXBlQXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVu
dHMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiogdHlw
ZUFyZ3VtZW50RXhwcmVzc2lvbiA9IG51bGxwdHI7CisgICAgICAgIEFTVDo6VHlwZVJlZmVyZW5j
ZSogdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSA9IG51bGxwdHI7CisgICAgICAgIEFTVDo6Q29u
c3RhbnRFeHByZXNzaW9uKiBuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uID0gbnVsbHB0cjsK
KyAgICAgICAgQVNUOjpUeXBlUmVmZXJlbmNlKiBuYXRpdmVUeXBlQXJndW1lbnRUeXBlUmVmZXJl
bmNlID0gbnVsbHB0cjsKKworICAgICAgICBhdXRvIGFzc2lnbiA9IFsmXShBU1Q6OlR5cGVBcmd1
bWVudCYgdHlwZUFyZ3VtZW50LCBBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiomIGV4cHJlc3Npb24s
IEFTVDo6VHlwZVJlZmVyZW5jZSomIHR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgIFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0
YW50RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSAmY29uc3RhbnRF
eHByZXNzaW9uOworICAgICAgICAgICAgfSwgWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVS
ZWZlcmVuY2U+JiB0aGVUeXBlUmVmZXJlbmNlKSB7CisgICAgICAgICAgICAgICAgdHlwZVJlZmVy
ZW5jZSA9IHRoZVR5cGVSZWZlcmVuY2UuZ2V0KCk7CisgICAgICAgICAgICB9KSwgdHlwZUFyZ3Vt
ZW50KTsKKyAgICAgICAgfTsKKworICAgICAgICBhc3NpZ24odHlwZUFyZ3VtZW50c1tpXSwgdHlw
ZUFyZ3VtZW50RXhwcmVzc2lvbiwgdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSk7CisgICAgICAg
IGFzc2lnbihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpW2ldLCBuYXRpdmVU
eXBlQXJndW1lbnRFeHByZXNzaW9uLCBuYXRpdmVUeXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlKTsK
KworICAgICAgICBpZiAodHlwZUFyZ3VtZW50RXhwcmVzc2lvbiAmJiBuYXRpdmVUeXBlQXJndW1l
bnRFeHByZXNzaW9uKSB7CisgICAgICAgICAgICBpZiAoIXR5cGVBcmd1bWVudEV4cHJlc3Npb24t
Pm1hdGNoZXMoKm5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24pKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlQXJndW1lbnRUeXBlUmVmZXJl
bmNlICYmIG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgIGlm
ICghbWF0Y2hlcygqdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSwgKm5hdGl2ZVR5cGVBcmd1bWVu
dFR5cGVSZWZlcmVuY2UpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlw
ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBl
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wZjdkNDQxZmRlZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMSW5mZXJUeXBlcy5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFj
ZSBBU1QgeworCitjbGFzcyBVbm5hbWVkVHlwZTsKK2NsYXNzIE5hbWVkVHlwZTsKKworfQorCiti
b29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNvbnN0IEFTVDo6VW5uYW1lZFR5
cGUmKTsKK2Jvb2wgaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMoQVNUOjpOYW1lZFR5cGUmIHBv
c3NpYmxlVHlwZSwgQVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKTsKKworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xJbnRyaW5zaWNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMSW50cmluc2ljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjBjNDQyMmQ1MTEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNwcApAQCAtMCwwICsxLDI1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisKKyNpbmNsdWRlICJXSExTTENvbnN0YW50RXhw
cmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdI
TFNMIHsKKworSW50cmluc2ljczo6SW50cmluc2ljcygpCisgICAgOiBtX3RleHR1cmVUeXBlTmFt
ZXMgeyBTdHJpbmcoIlRleHR1cmUxRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAor
ICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUxRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJUZXh0dXJlMURBcnJheSIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUxREFycmF5
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRl
eHR1cmUyRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3Ry
aW5nKCJSV1RleHR1cmUyRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAg
ICAgICAgU3RyaW5nKCJUZXh0dXJlMkRBcnJheSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLAorICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUyREFycmF5IiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUzRCIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUz
RCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJU
ZXh0dXJlQ3ViZSIsICBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSB9CisgICAgLCBtX3Rl
eHR1cmVJbm5lclR5cGVOYW1lcyB7IFN0cmluZygidWNoYXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygidXNob3J0IiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoInVpbnQiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiY2hhciIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJzaG9ydCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJpbnQiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiaGFsZiIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJmbG9hdCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0KKyAgICAsIG1fZGVwdGhUZXh0dXJlSW5uZXJU
eXBlcyB7IFN0cmluZygiaGFsZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAg
ICAgICAgICAgU3RyaW5nKCJmbG9hdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0K
K3sKKyAgICBBU1NFUlQobV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKSA9PSAxMSk7IC8vIGZ1bGxU
ZXh0dXJlcyBoYXJkY29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorICAgIEFTU0VSVCht
X3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCkgPT0gOCk7IC8vIGZ1bGxUZXh0dXJlcyBoYXJk
Y29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorICAgIEFTU0VSVChtX2RlcHRoVGV4dHVy
ZUlubmVyVHlwZXMuc2l6ZSgpID09IDIpOyAvLyB0ZXh0dXJlRGVwdGgyRCAmIGZyaWVuZHMgaGFy
ZGNvZGVzIHRoZSBsZW5ndGggb2YgdGhpcyBhcnJheS4KK30KKwordm9pZCBJbnRyaW5zaWNzOjph
ZGQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJikKK3sKKyAgICAvLyBGSVhNRTogUG9w
dWxhdGUgdGhpcy4KK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRQcmltaXRpdmUoQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgIT0gMCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0g
InZvaWQiKQorICAgICAgICBtX3ZvaWRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAg
ICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJib29sIikKKyAgICAg
ICAgbV9ib29sVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidWNoYXIiKQorICAgICAgICBtX3VjaGFyVHlw
ZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xh
cmF0aW9uLm5hbWUoKSA9PSAidXNob3J0IikKKyAgICAgICAgbV91c2hvcnRUeXBlID0gJm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJ1aW50IikKKyAgICAgICAgbV91aW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRp
b247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiY2hhciIp
CisgICAgICAgIG1fY2hhclR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2Ug
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInNob3J0IikKKyAgICAgICAgbV9z
aG9ydFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImludCIpCisgICAgICAgIG1faW50VHlwZSA9ICZuYXRp
dmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiaGFsZiIpCisgICAgICAgIG1faGFsZlR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0
aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImZsb2F0
IikKKyAgICAgICAgbV9mbG9hdFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVs
c2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21pY19pbnQiKQorICAg
ICAgICBtX2F0b21pY0ludFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2Ug
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21pY191aW50IikKKyAgICAg
ICAgbV9hdG9taWNVaW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBp
ZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAic2FtcGxlciIpCisgICAgICAgIG1f
c2FtcGxlclR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50cmlu
c2ljczo6YWRkVmVjdG9yKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgIT0gInZl
Y3RvciIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChuYXRpdmVUeXBlRGVj
bGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAyKTsKKyAgICBBU1NFUlQoV1RGOjpo
b2xkc19hbHRlcm5hdGl2ZTxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0
aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIEFTU0VSVChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVj
bGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlUG9pbnRl
ciA9IFdURjo6Z2V0PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVU
eXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBhdXRvJiBsZW5ndGhFeHBy
ZXNzaW9uID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pOworICAgIEFTU0VSVChpbm5lclR5cGVQb2ludGVy
KTsKKyAgICBhdXRvJiBpbm5lclR5cGUgPSAqaW5uZXJUeXBlUG9pbnRlcjsKKyAgICBBU1NFUlQo
aW5uZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMCk7CisgICAgQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24qKiBhcnJheTsKKyAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiYm9v
bCIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JCb29sOworICAgIGVsc2UgaWYgKGlubmVyVHlw
ZS5uYW1lKCkgPT0gInVjaGFyIikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvclVjaGFyOworICAg
IGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gInVzaG9ydCIpCisgICAgICAgIGFycmF5ID0g
bV92ZWN0b3JVc2hvcnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAidWludCIp
CisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JVaW50OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5u
YW1lKCkgPT0gImNoYXIiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yQ2hhcjsKKyAgICBlbHNl
IGlmIChpbm5lclR5cGUubmFtZSgpID09ICJzaG9ydCIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0
b3JTaG9ydDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJpbnQiKQorICAgICAg
ICBhcnJheSA9IG1fdmVjdG9ySW50OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0g
ImhhbGYiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9ySGFsZjsKKyAgICBlbHNlIGlmIChpbm5l
clR5cGUubmFtZSgpID09ICJmbG9hdCIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JGbG9hdDsK
KyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGludCBsZW5ndGgg
PSBsZW5ndGhFeHByZXNzaW9uLmludGVnZXJMaXRlcmFsKCkudmFsdWUoKTsKKyAgICBBU1NFUlQo
bGVuZ3RoID49IDIgJiYgbGVuZ3RoIDw9IDQpOworICAgIGFycmF5W2xlbmd0aCAtIDJdID0gJm5h
dGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5z
aWNzOjphZGRNYXRyaXgoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbikKK3sKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSAhPSAibWF0
cml4IikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDMpOworICAgIEFTU0VSVChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgQVNTRVJUKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5
cGVBcmd1bWVudHMoKVsyXSkpOworICAgIGF1dG8mIGlubmVyVHlwZVBvaW50ZXIgPSBXVEY6Omdl
dDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0
aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgYXV0byYgcm93RXhwcmVzc2lvbiA9IFdURjo6
Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFy
Z3VtZW50cygpWzFdKTsKKyAgICBhdXRvJiBjb2x1bW5FeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNU
OjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRz
KClbMl0pOworICAgIEFTU0VSVChpbm5lclR5cGVQb2ludGVyKTsKKyAgICBhdXRvJiBpbm5lclR5
cGUgPSAqaW5uZXJUeXBlUG9pbnRlcjsKKyAgICBBU1NFUlQoaW5uZXJUeXBlLnR5cGVBcmd1bWVu
dHMoKS5zaXplKCkgPT0gMCk7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qICgqYXJy
YXkpWzNdOworICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJoYWxmIikKKyAgICAgICAgYXJy
YXkgPSBtX21hdHJpeEhhbGY7CisgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImZsb2F0IikK
KyAgICAgICAgYXJyYXkgPSBtX21hdHJpeEZsb2F0OworICAgIGludCByb3cgPSByb3dFeHByZXNz
aW9uLmludGVnZXJMaXRlcmFsKCkudmFsdWUoKTsKKyAgICBBU1NFUlQocm93ID49IDIgJiYgcm93
IDw9IDQpOworICAgIGludCBjb2x1bW4gPSBjb2x1bW5FeHByZXNzaW9uLmludGVnZXJMaXRlcmFs
KCkudmFsdWUoKTsKKyAgICBBU1NFUlQoY29sdW1uID49IDIgJiYgY29sdW1uIDw9IDQpOworICAg
IGFycmF5W3JvdyAtIDJdW2NvbHVtbiAtIDJdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRGdWxsVGV4dHVyZShBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uLCBBU1Q6OlR5cGVS
ZWZlcmVuY2UmIGlubmVyVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB0ZXh0dXJlVHlwZUluZGV4ID0g
bV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09IG1fdGV4dHVyZVR5cGVOYW1lc1tpXSkKKyAgICAgICAgICAg
IHRleHR1cmVUeXBlSW5kZXggPSBpOworICAgIH0KKyAgICBpZiAodGV4dHVyZVR5cGVJbmRleCA9
PSBtX3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICB1bnNpZ25lZCBpbm5lclR5cGVJbmRleCA9IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUo
KTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChp
bm5lclR5cGUubmFtZSgpLnN0YXJ0c1dpdGgobV90ZXh0dXJlSW5uZXJUeXBlTmFtZXNbaV0pKSB7
CisgICAgICAgICAgICB0ZXh0dXJlVHlwZUluZGV4ID0gaTsKKyAgICAgICAgICAgIGlmIChpbm5l
clR5cGUubmFtZSgpID09IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzW2ldKQorICAgICAgICAgICAg
ICAgIHZlY3Rvckxlbmd0aCA9IDE7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSA9PSBtX3RleHR1cmVJbm5lclR5cGVO
YW1lc1tpXS5sZW5ndGgoKSArIDEpOworICAgICAgICAgICAgICAgIEFTU0VSVChpbm5lclR5cGUu
bmFtZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSA9PSAnMicKKyAgICAgICAgICAg
ICAgICAgICAgfHwgaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpIC0g
MV0gPT0gJzMnCisgICAgICAgICAgICAgICAgICAgIHx8IGlubmVyVHlwZS5uYW1lKClbaW5uZXJU
eXBlLm5hbWUoKS5sZW5ndGgoKSAtIDFdID09ICc0Jyk7CisgICAgICAgICAgICAgICAgdmVjdG9y
TGVuZ3RoID0gaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0g
LSAnMCc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGlubmVy
VHlwZUluZGV4ICE9IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKSk7CisgICAgbV9mdWxs
VGV4dHVyZXNbdGV4dHVyZVR5cGVJbmRleF1baW5uZXJUeXBlSW5kZXhdW3ZlY3Rvckxlbmd0aCAt
IDFdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBJbnRyaW5zaWNzOjphZGREZXB0aFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24m
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgQVNUOjpUeXBlUmVmZXJlbmNlJiBpbm5lclR5cGUpCit7
CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qKiB0ZXh0dXJlOworICAgIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlRGVwdGgyRCIpCisgICAgICAgIHRl
eHR1cmUgPSBtX3RleHR1cmVEZXB0aDJEOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIlJXVGV4dHVyZURlcHRoMkQiKQorICAgICAgICB0ZXh0dXJlID0gbV9y
d1RleHR1cmVEZXB0aDJEOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gIlRleHR1cmVEZXB0aDJEQXJyYXkiKQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJl
RGVwdGgyREFycmF5OworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gIlJXVGV4dHVyZURlcHRoMkRBcnJheSIpCisgICAgICAgIHRleHR1cmUgPSBtX3J3VGV4dHVy
ZURlcHRoMkRBcnJheTsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJUZXh0dXJlRGVwdGhDdWJlIikKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZURlcHRo
Q3ViZTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHVuc2ln
bmVkIGlubmVyVHlwZUluZGV4ID0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09IG1fZGVwdGhUZXh0dXJl
SW5uZXJUeXBlc1tpXSkKKyAgICAgICAgICAgIGlubmVyVHlwZUluZGV4ID0gaTsKKyAgICB9Cisg
ICAgQVNTRVJUKGlubmVyVHlwZUluZGV4ICE9IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcy5zaXpl
KCkpOworICAgIHRleHR1cmVbaW5uZXJUeXBlSW5kZXhdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlv
bjsKK30KKwordm9pZCBJbnRyaW5zaWNzOjphZGRUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgQVNTRVJUKG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDEpOworICAgIEFTU0VSVChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+Pihu
YXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYgaW5u
ZXJUeXBlUG9pbnRlciA9IFdURjo6Z2V0PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVu
Y2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBBU1NF
UlQoaW5uZXJUeXBlUG9pbnRlcik7CisgICAgYXV0byYgaW5uZXJUeXBlID0gKmlubmVyVHlwZVBv
aW50ZXI7CisgICAgQVNTRVJUKGlubmVyVHlwZS50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDAp
OworICAgIGlmIChhZGRGdWxsVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlubmVyVHlw
ZSkpCisgICAgICAgIHJldHVybjsKKyAgICBhZGREZXB0aFRleHR1cmUobmF0aXZlVHlwZURlY2xh
cmF0aW9uLCBpbm5lclR5cGUpOworfQorCit2b2lkIEludHJpbnNpY3M6OmFkZChBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlmIChhZGRQ
cmltaXRpdmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChhZGRWZWN0b3IobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChhZGRNYXRyaXgobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGFkZFRleHR1cmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKK30KKworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xJbnRyaW5zaWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEludHJpbnNpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDdi
NGUzODcyMWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTEludHJpbnNpY3MuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMTmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xh
cmF0aW9uLmgiCisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNz
IEludHJpbnNpY3MgeworcHVibGljOgorICAgIEludHJpbnNpY3MoKTsKKworICAgIHZvaWQgYWRk
KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZvaWQgYWRkKEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uJik7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYg
Ym9vbFR5cGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYm9vbFR5cGUpOworICAgICAgICBy
ZXR1cm4gKm1fYm9vbFR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mIHVpbnRUeXBlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3VpbnRUeXBlKTsKKyAgICAg
ICAgcmV0dXJuICptX3VpbnRUeXBlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGFkZFBy
aW1pdGl2ZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkVmVjdG9y
KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGRNYXRyaXgoQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBib29sIGFkZEZ1bGxUZXh0dXJlKEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uJiwgQVNUOjpUeXBlUmVmZXJlbmNlJik7CisgICAgdm9pZCBhZGRE
ZXB0aFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mLCBBU1Q6OlR5cGVSZWZlcmVu
Y2UmKTsKKyAgICB2b2lkIGFkZFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsK
KworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZvaWRUeXBlOworICAgIEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2Jvb2xUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uKiBtX3VjaGFyVHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiog
bV91c2hvcnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3VpbnRUeXBl
OworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2NoYXJUeXBlOworICAgIEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3Nob3J0VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV9pbnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBt
X2hhbGZUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2Zsb2F0VHlwZTsK
KyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9hdG9taWNJbnRUeXBlOworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2F0b21pY1VpbnRUeXBlOworICAgIEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uKiBtX3NhbXBsZXJUeXBlOworCisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qIG1fdmVjdG9yQm9vbFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiogbV92ZWN0b3JVY2hhclszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiog
bV92ZWN0b3JVc2hvcnRbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVj
dG9yVWludFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JDaGFy
WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvclNob3J0WzNdOwor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckludFszXTsKKyAgICBBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JIYWxmWzNdOworICAgIEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckZsb2F0WzNdOworCisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qIG1fbWF0cml4SGFsZlszXVszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiogbV9tYXRyaXhGbG9hdFszXVszXTsKKworICAgIFZlY3RvcjxTdHJpbmc+IG1fdGV4
dHVyZVR5cGVOYW1lczsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3RleHR1cmVJbm5lclR5cGVOYW1l
czsKKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2Z1bGxUZXh0dXJlc1sxMV1b
OF1bNF07CisKKyAgICBWZWN0b3I8U3RyaW5nPiBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXM7Cisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdGV4dHVyZURlcHRoMkRbMl07CisgICAg
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fcndUZXh0dXJlRGVwdGgyRFsyXTsKKyAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV90ZXh0dXJlRGVwdGgyREFycmF5WzJdOworICAg
IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3J3VGV4dHVyZURlcHRoMkRBcnJheVsyXTsK
KyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV90ZXh0dXJlRGVwdGhDdWJlWzJdOwor
fTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uZWQ5ZWZlN2EzMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcApAQCAt
MCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK05hbWVDb250ZXh0OjpOYW1lQ29udGV4
dChOYW1lQ29udGV4dCogcGFyZW50KQorICAgIDogbV9wYXJlbnQocGFyZW50KQoreworfQorCiti
b29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24p
Cit7CisgICAgaWYgKGV4aXN0cyh0eXBlRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZCh0eXBlRGVmaW5pdGlvbi5u
YW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4o
KSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHR5cGVEZWZpbml0aW9uKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoZXhpc3RzKHN0cnVjdHVy
ZURlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVz
dWx0ID0gbV90eXBlcy5hZGQoc3RydWN0dXJlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoZXhpc3RzKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBt
X3R5cGVzLmFkZChlbnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgIGlmICghcmVzdWx0Lmlz
TmV3RW50cnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmFwcGVuZChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9u
RGVmaW5pdGlvbikKK3sKKyAgICBpZiAobV90eXBlcy5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5u
YW1lKCkpICE9IG1fdHlwZXMuZW5kKCkKKyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChmdW5j
dGlvbkRlZmluaXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV9mdW5jdGlvbnMuYWRkKGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5k
KGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNv
bnRleHQ6OmFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pCit7CisgICAgaWYgKG1fdHlwZXMuZmluZChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQorICAgICAgICB8fCBtX3ZhcmlhYmxlcy5m
aW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV9mdW5jdGlvbnMu
YWRkKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG1fZnVuY3Rpb25z
LmZpbmQobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkK
KyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
KSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8g
cmVzdWx0ID0gbV90eXBlcy5hZGQobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSwgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQoreworICAgIGlmIChleGlzdHModmFyaWFibGVE
ZWNsYXJhdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1
bHQgPSBtX3ZhcmlhYmxlcy5hZGQoU3RyaW5nKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSwg
JnZhcmlhYmxlRGVjbGFyYXRpb24pOworICAgIHJldHVybiByZXN1bHQuaXNOZXdFbnRyeTsKK30K
KworVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiogTmFt
ZUNvbnRleHQ6OmdldFR5cGVzKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIGl0ZXJh
dG9yID0gbV90eXBlcy5maW5kKG5hbWUpOworICAgIGlmIChpdGVyYXRvciA9PSBtX3R5cGVzLmVu
ZCgpKSB7CisgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVu
dC0+Z2V0VHlwZXMobmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBy
ZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKK30KKworVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4qIE5hbWVDb250ZXh0OjpnZXRGdW5jdGlv
bnMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9u
cy5maW5kKG5hbWUpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2Z1bmN0aW9ucy5lbmQoKSkgewor
ICAgICAgICBpZiAobV9wYXJlbnQpCisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldEZ1
bmN0aW9ucyhuYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVy
biAmaXRlcmF0b3ItPnZhbHVlOworfQorCitBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIE5hbWVD
b250ZXh0OjpnZXRWYXJpYWJsZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byBpdGVy
YXRvciA9IG1fdmFyaWFibGVzLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fdmFy
aWFibGVzLmVuZCgpKSB7CisgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVy
biBtX3BhcmVudC0+Z2V0VmFyaWFibGUobmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKyAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOworfQorCitib29sIE5hbWVDb250ZXh0
OjpleGlzdHMoU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBtX3R5cGVzLmZpbmQobmFtZSkg
IT0gbV90eXBlcy5lbmQoKQorICAgICAgICB8fCBtX2Z1bmN0aW9ucy5maW5kKG5hbWUpICE9IG1f
ZnVuY3Rpb25zLmVuZCgpCisgICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmFtZSkgIT0gbV92
YXJpYWJsZXMuZW5kKCk7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDNkZjgwMDE0YWUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250
ZXh0LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
bmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIE5hbWVkVHlwZTsKK2NsYXNzIEZ1bmN0aW9uRGVjbGFy
YXRpb247CitjbGFzcyBUeXBlRGVmaW5pdGlvbjsKK2NsYXNzIFN0cnVjdHVyZURlZmluaXRpb247
CitjbGFzcyBFbnVtZXJhdGlvbkRlZmluaXRpb247CitjbGFzcyBGdW5jdGlvbkRlZmluaXRpb247
CitjbGFzcyBOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3MgTmF0aXZlVHlwZURlY2xh
cmF0aW9uOworY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbjsKKworfQorCitjbGFzcyBOYW1lQ29u
dGV4dCB7CitwdWJsaWM6CisgICAgTmFtZUNvbnRleHQoTmFtZUNvbnRleHQqIHBhcmVudCA9IG51
bGxwdHIpOworCisgICAgYm9vbCBhZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYpOworICAgIGJvb2wg
YWRkKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24m
KTsKKyAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICBi
b29sIGFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiYpOworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiogZ2V0VHlwZXMoY29uc3QgU3RyaW5nJik7CisgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4q
IGdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmKTsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24qIGdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgorICAgIGJvb2wgZXhp
c3RzKFN0cmluZyYpOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4+IG1fdHlwZXM7CisgICAgSGFzaE1hcDxTdHJp
bmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bj4sIDE+PiBtX2Z1bmN0aW9uczsKKyAgICBIYXNoTWFwPFN0cmluZywgQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uKj4gbV92YXJpYWJsZXM7CisgICAgTmFtZUNvbnRleHQqIG1fcGFyZW50OworfTsK
KworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCmluZGV4IDc4MGQ1YzU0MjVhLi41
MmZjMDJjYmExYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcApAQCAtMjgsMTkgKzI4LDI4NyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCiAKLSNpbmNs
dWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKKyNpbmNsdWRlICJXSExTTFJl
c29sdmVPdmVybG9hZEltcGwuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNp
bmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSWZTdGF0
ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRG9X
aGlsZUxvb3AuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNpbmNsdWRlICJXSExTTFZh
cmlhYmxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgi
CisjaW5jbHVkZSAiV0hMU0xSZXR1cm4uaCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUg
IldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVz
c2lvbi5oIgorI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKLWNsYXNzIE5hbWVSZXNvbHZlciA6IHB1YmxpYyBWaXNp
dG9yIHsKLSAgICB+TmFtZVJlc29sdmVyKCkgPSBkZWZhdWx0OwotfTsKK05hbWVSZXNvbHZlcjo6
TmFtZVJlc29sdmVyKE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKKyAgICA6IG1fbmFtZUNvbnRl
eHQobmFtZUNvbnRleHQpCit7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlR5
cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCit7CisgICAgaWYgKG1fZXJyb3IpCisgICAgICAg
IHJldHVybjsKKworICAgIFZpc2l0b3I6OnZpc2l0KHR5cGVSZWZlcmVuY2UpOworICAgIGlmICh0
eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
KiBjYW5kaWRhdGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyh0eXBlUmVmZXJlbmNlLm5hbWUo
KSk7CisgICAgaWYgKGNhbmRpZGF0ZXMgPT0gbnVsbHB0cikgeworICAgICAgICBtX2Vycm9yID0g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSByZXNv
bHZlVHlwZU92ZXJsb2FkSW1wbCgqY2FuZGlkYXRlcywgdHlwZVJlZmVyZW5jZS50eXBlQXJndW1l
bnRzKCkpKQorICAgICAgICB0eXBlUmVmZXJlbmNlLnNldFJlc29sdmVkVHlwZSgqcmVzdWx0KTsK
KyAgICBlbHNlIHsKKyAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIGlmIChtX2Vycm9yKQorICAgICAgICByZXR1
cm47CisKKyAgICBOYW1lQ29udGV4dCBuZXdOYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7Cisg
ICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcihuZXdOYW1lQ29udGV4dCk7CisgICAgdmlz
aXRVbm5hbWVkVHlwZShmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAgICBmb3IgKGF1dG8m
IHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkpIHsKKyAgICAgICAg
bmV3TmFtZVJlc29sdmVyLlZpc2l0b3I6OnZpc2l0KHBhcmFtZXRlcik7CisgICAgICAgIGF1dG8g
c3VjY2VzcyA9IG5ld05hbWVDb250ZXh0LmFkZChwYXJhbWV0ZXIpOworICAgICAgICBpZiAoIXN1
Y2Nlc3MpIHsKKyAgICAgICAgICAgIG1fZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfQorICAgIG5ld05hbWVSZXNvbHZlci52aXNpdChmdW5jdGlvbkRl
ZmluaXRpb24uYmxvY2soKSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkJs
b2NrJiBibG9jaykKK3sKKyAgICBpZiAobV9lcnJvcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
TmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZl
cihuYW1lQ29udGV4dCkuVmlzaXRvcjo6dmlzaXQoYmxvY2spOworfQorCit2b2lkIE5hbWVSZXNv
bHZlcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCit7CisgICAgaWYgKG1f
ZXJyb3IpCisgICAgICAgIHJldHVybjsKKworICAgIFZpc2l0b3I6OnZpc2l0KGlmU3RhdGVtZW50
LmNvbmRpdGlvbmFsKCkpOworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250
ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLlZpc2l0b3I6OnZpc2l0KGlmU3Rh
dGVtZW50LmJvZHkoKSk7CisgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpIHsKKyAgICAg
ICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgICAgICBOYW1l
UmVzb2x2ZXIobmFtZUNvbnRleHQpLlZpc2l0b3I6OnZpc2l0KCppZlN0YXRlbWVudC5lbHNlQm9k
eSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OldoaWxlTG9v
cCYgd2hpbGVMb29wKQoreworICAgIGlmIChtX2Vycm9yKQorICAgICAgICByZXR1cm47CisKKyAg
ICBWaXNpdG9yOjp2aXNpdCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgTmFtZUNvbnRl
eHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29u
dGV4dCkuVmlzaXRvcjo6dmlzaXQod2hpbGVMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgTmFtZVJl
c29sdmVyOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiB3aGlsZUxvb3ApCit7CisgICAgaWYgKG1f
ZXJyb3IpCisgICAgICAgIHJldHVybjsKKworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZt
X25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLlZpc2l0b3I6OnZp
c2l0KHdoaWxlTG9vcC5ib2R5KCkpOworICAgIFZpc2l0b3I6OnZpc2l0KHdoaWxlTG9vcC5jb25k
aXRpb25hbCgpKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Rm9yTG9vcCYg
Zm9yTG9vcCkKK3sKKyAgICBpZiAobV9lcnJvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgTmFt
ZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZlcihu
YW1lQ29udGV4dCkuVmlzaXRvcjo6dmlzaXQoZm9yTG9vcCk7Cit9CisKK3ZvaWQgTmFtZVJlc29s
dmVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24p
Cit7CisgICAgaWYgKG1fZXJyb3IpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmFtZUNvbnRl
eHQuYWRkKHZhcmlhYmxlRGVjbGFyYXRpb24pOworICAgIFZpc2l0b3I6OnZpc2l0KHZhcmlhYmxl
RGVjbGFyYXRpb24pOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpCit7CisgICAgaWYgKG1fZXJyb3IpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogdmFyaWFibGUgPSBtX25hbWVDb250ZXh0Lmdl
dFZhcmlhYmxlKHZhcmlhYmxlUmVmZXJlbmNlLm5hbWUoKSkpCisgICAgICAgIHZhcmlhYmxlUmVm
ZXJlbmNlLnNldFZhcmlhYmxlKCp2YXJpYWJsZSk7CisgICAgZWxzZSB7CisgICAgICAgIG1fZXJy
b3IgPSB0cnVlOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIE5hbWVSZXNvbHZl
cjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVybk5vZGUpCit7CisgICAgaWYgKG1fZXJyb3IpCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChtX2N1cnJlbnRGdW5jdGlvbik7CisgICAgcmV0
dXJuTm9kZS5zZXRGdW5jdGlvbihtX2N1cnJlbnRGdW5jdGlvbik7CisgICAgVmlzaXRvcjo6dmlz
aXQocmV0dXJuTm9kZSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQoreworICAgIGlm
IChtX2Vycm9yKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0byogZ2V0RnVuY3Rpb25z
ID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmdl
dEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldFBv
c3NpYmxlR2V0T3ZlcmxvYWRzKCpnZXRGdW5jdGlvbnMpOworICAgIGlmIChhdXRvKiBzZXRGdW5j
dGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uc2V0RnVuY3Rpb25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
c2V0UG9zc2libGVTZXRPdmVybG9hZHMoKnNldEZ1bmN0aW9ucyk7CisgICAgaWYgKGF1dG8qIGFu
ZEZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5hbmRGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbi5zZXRQb3NzaWJsZUFuZE92ZXJsb2FkcygqYW5kRnVuY3Rpb25zKTsKKyAgICBWaXNpdG9y
Ojp2aXNpdChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOworfQogCi12b2lkIHJlc29sdmVOYW1l
c0luVHlwZXMoUHJvZ3JhbSYpCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb3RFeHBy
ZXNzaW9uJiBkb3RFeHByZXNzaW9uKQogeworICAgIGlmIChtX2Vycm9yKQorICAgICAgICByZXR1
cm47CiAKKyAgICBpZiAoaXM8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5i
YXNlKCkpKSB7CisgICAgICAgIGlmIChhdXRvIGVudW1lcmF0aW9uVHlwZXMgPSBtX25hbWVDb250
ZXh0LmdldFR5cGVzKGRvd25jYXN0PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGRvdEV4cHJlc3Np
b24uYmFzZSgpKS5uYW1lKCkpKSB7CisgICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBl
cy0+c2l6ZSgpID09IDEpOworICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVu
dW1lcmF0aW9uVHlwZXMpWzBdOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uPih0eXBlKSkgeworICAgICAgICAgICAgICAgIEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbj4odHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi5tZW1iZXJCeU5hbWUoZG90RXhwcmVzc2lvbi5maWVsZE5hbWUo
KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpFbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwpIDw9IHNpemVvZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90
IGV4cHJlc3Npb25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgRW51bWVyYXRpb25NZW1iZXJM
aXRlcmFscyB3aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CisgICAgICAgICAgICAg
ICAgICAgIExleGVyOjpUb2tlbiBvcmlnaW4gPSBkb3RFeHByZXNzaW9uLm9yaWdpbigpOworICAg
ICAgICAgICAgICAgICAgICAvLyBGSVhNRTogUGVyaGFwcyBkbyB0aGlzIHdpdGggdmFyaWFudHMg
b3IgYSBSZXdyaXRlciBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICBkb3RFeHByZXNzaW9u
Ln5Eb3RFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAgIG5ldyAoJmRvdEV4cHJlc3Np
b24pIEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKFdURk1vdmUob3JpZ2luKSwgKm1lbWJl
cik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIFZpc2l0b3I6OnZpc2l0KGRvdEV4cHJlc3Npb24pOworfQorCit2b2lkIE5h
bWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCit7
CisgICAgaWYgKG1fZXJyb3IpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghY2FsbEV4cHJl
c3Npb24uaGFzT3ZlcmxvYWRzKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1f
bmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpCisgICAgICAg
ICAgICBjYWxsRXhwcmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7CisgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoKTsKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBmdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhjYWxs
RXhwcmVzc2lvbi5uYW1lKCkpKQorICAgICAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92
ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IG1fZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICBWaXNpdG9yOjp2aXNpdChjYWxsRXhwcmVzc2lvbik7Cit9
CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1l
cmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSkKK3sKKyAgICBpZiAobV9lcnJvcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoY29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UubGVmdCgpKSkgeworICAgICAg
ICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy0+c2l6ZSgpID09IDEpOworICAgICAgICBBU1Q6Ok5h
bWVkVHlwZSYgdHlwZSA9ICgqZW51bWVyYXRpb25UeXBlcylbMF07CisgICAgICAgIGlmIChpczxB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSkpIHsKKyAgICAgICAgICAgIEFTVDo6RW51
bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSk7CisgICAgICAgICAgICBpZiAoYXV0byogbWVt
YmVyID0gZW51bWVyYXRpb25EZWZpbml0aW9uLm1lbWJlckJ5TmFtZShjb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5yaWdodCgpKSkgeworICAgICAgICAgICAgICAg
IGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLnNldEVudW1lcmF0
aW9uTWVtYmVyKCptZW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2Vycm9yID0gdHJ1ZTsKK30KKworLy8g
RklYTUU6IE1ha2Ugc3VyZSBhbGwgdGhlIG5hbWVzIGhhdmUgYmVlbiByZXNvbHZlZC4KKworYm9v
bCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFt
ZVJlc29sdmVyKQoreworICAgIGZvciAoYXV0byYgdHlwZURlZmluaXRpb24gOiBwcm9ncmFtLnR5
cGVEZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5WaXNpdG9yOjp2aXNpdCgq
dHlwZURlZmluaXRpb24pOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVm
aW5pdGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1l
UmVzb2x2ZXIuVmlzaXRvcjo6dmlzaXQoKnN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBp
ZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJh
dGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLlZpc2l0b3I6OnZpc2l0
KCplbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9y
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAoYXV0byYgbmF0
aXZlVHlwZURlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkpIHsK
KyAgICAgICAgbmFtZVJlc29sdmVyLlZpc2l0b3I6OnZpc2l0KCpuYXRpdmVUeXBlRGVjbGFyYXRp
b24pOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIHJlc29sdmVOYW1l
c0luRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVy
KQoreworICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlv
bkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlv
bkRlZmluaXRpb24oZnVuY3Rpb25EZWZpbml0aW9uLmdldCgpKTsKKyAgICAgICAgbmFtZVJlc29s
dmVyLnZpc2l0KCpmdW5jdGlvbkRlZmluaXRpb24pOworICAgICAgICBpZiAobmFtZVJlc29sdmVy
LmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG5hbWVSZXNv
bHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKG51bGxwdHIpOworICAgIGZvciAoYXV0
byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuVmlzaXRvcjo6dmlzaXQoKm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TE5hbWVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xOYW1lUmVzb2x2ZXIuaAppbmRleCA0N2Q0ZDZhNTc5My4uZTc1Yzc0NmE5MDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVz
b2x2ZXIuaApAQCAtMjcsMTMgKzI3LDUzIEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5j
bHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIldITFNMVmlzaXRvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFj
ZSBXSExTTCB7CiAKLXZvaWQgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtKTsK
K2NsYXNzIFByb2dyYW07CisKK2NsYXNzIE5hbWVSZXNvbHZlciA6IHB1YmxpYyBWaXNpdG9yIHsK
K3B1YmxpYzoKKyAgICBOYW1lUmVzb2x2ZXIoTmFtZUNvbnRleHQmKTsKKworICAgIHZpcnR1YWwg
fk5hbWVSZXNvbHZlcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNl
dEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24oQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIGZ1bmN0
aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIG1fY3VycmVudEZ1bmN0aW9uID0gZnVuY3Rp
b25EZWZpbml0aW9uOworICAgIH0KKworICAgIGJvb2wgZXJyb3IoKSB7IHJldHVybiBtX2Vycm9y
OyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVS
ZWZlcmVuY2UpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYgYmxvY2spIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiB3aGlsZUxvb3ApIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKSBvdmVycmlkZTsKKyAgICB2
b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJs
ZVJlZmVyZW5jZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJu
Tm9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0
KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikgb3ZlcnJpZGU7CisgICAgdm9pZCB2
aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkgb3ZlcnJp
ZGU7CisKKyAgICBOYW1lQ29udGV4dCBtX25hbWVDb250ZXh0OworICAgIEFTVDo6RnVuY3Rpb25E
ZWZpbml0aW9uKiBtX2N1cnJlbnRGdW5jdGlvbiB7IG51bGxwdHIgfTsKKyAgICBib29sIG1fZXJy
b3IgeyBmYWxzZSB9OyAvLyBGSVhNRTogTWlncmF0ZSB0aGlzIHRvIGJlIHNvbWUgc29ydCBvZiBk
ZXNjcmlwdGl2ZSBzdHJpbmcuCisgICAgLy8gRklYTUU6IENvbnNpZGVyIG1vdmluZyB0aGUgZXJy
b3IgaW50byBWaXNpdG9yCit9OworCitib29sIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYs
IE5hbWVSZXNvbHZlciYpOworYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiwg
TmFtZVJlc29sdmVyJik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCmluZGV4IGJjNmU3M2U2YTFmLi5jYzcyODEyYWNj
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
YXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UGFyc2VyLmNwcApAQCAtMzgsNyArMzgsOCBAQCBQYXJzZXI6OlBhcnNlcigpCiB7CiB9CiAKLWF1
dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywg
TW9kZSBtb2RlKSAtPiBPcHRpb25hbDxFcnJvcj4KKy8vIEZJWE1FOiBSZXR1cm4gYSBiZXR0ZXIg
ZXJyb3IgY29kZSBmcm9tIHRoaXMsIGFuZCByZXBvcnQgaXQgdG8gSmF2YVNjcmlwdC4KK2F1dG8g
UGFyc2VyOjpwYXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1v
ZGUgbW9kZSkgLT4gT3B0aW9uYWw8RXJyb3I+CiB7CiAgICAgbV9sZXhlciA9IExleGVyKHN0cmlu
Z1ZpZXcpOwogICAgIG1fbW9kZSA9IG1vZGU7CkBAIC01NCw3ICs1NSwxMSBAQCBhdXRvIFBhcnNl
cjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9k
ZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVEZWZpbml0aW9u
KCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmICh0eXBlRGVmaW5pdGlvbikgewot
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqdHlwZURlZmluaXRpb24pKTsK
KyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCp0
eXBlRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAg
ICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgdHlwZURlZmluaXRp
b24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY0LDcgKzY5LDExIEBAIGF1dG8gUGFyc2Vy
OjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2Rl
KSAtPiBPcHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RydWN0dXJlRGVmaW5p
dGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlRGVmaW5p
dGlvbikgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqc3RydWN0dXJl
RGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBw
ZW5kKFdURk1vdmUoKnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9y
ISAlcyIsIHN0cnVjdHVyZURlZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc0
LDcgKzgzLDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1Zp
ZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHBhcnNlRW51bWVyYXRpb25EZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIGlmIChlbnVtZXJhdGlvbkRlZmluaXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAg
ICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVm
aW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAg
ICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgZW51bWVyYXRpb25EZWZpbml0
aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04NSw3ICs5OCwxMSBAQCBhdXRvIFBhcnNl
cjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9k
ZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVmaW5p
dGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlvbkRl
ZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVu
ZChXVEZNb3ZlKCpmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1
Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAl
cyIsIGZ1bmN0aW9uRGVmaW5pdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVycm9yID0g
ZnVuY3Rpb25EZWZpbml0aW9uLmVycm9yKCk7CkBAIC05Niw3ICsxMTMsMTEgQEAgYXV0byBQYXJz
ZXI6OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1v
ZGUpIC0+IE9wdGlvbmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZN
b3ZlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBz
dWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAg
ICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTA2LDcgKzEyNywxMSBAQCBhdXRvIFBhcnNl
cjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9k
ZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU5hdGl2ZVR5cGVEZWNs
YXJhdGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZURl
Y2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpuYXRp
dmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9n
cmFtLmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJO
YW1lIEVycm9yISAlcyIsIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRh
KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpAQCAtNDU0LDE2ICs0NzksNTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeE5v
bkFiYnJldmlhdGVkKCkgLT4gRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGUKICAgICAg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodFNxdWFyZUJyYWNrZXQuZXJyb3Io
KSk7CiAgICAgICAgIHJldHVybiB7eyAqdG9rZW4sIFdURjo6bnVsbG9wdCwgKm51bUVsZW1lbnRz
IH19OwogICAgIH0KLSAgICBhdXRvIGFkZHJlc3NTcGFjZSA9IGNvbnN1bWVUeXBlcyh7IExleGVy
OjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhl
cjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0p
OwotICAgIGlmICghYWRkcmVzc1NwYWNlKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4oYWRkcmVzc1NwYWNlLmVycm9yKCkpOwotICAgIHJldHVybiB7eyAqdG9rZW4sIHsgKmFkZHJl
c3NTcGFjZSB9LCBXVEY6Om51bGxvcHQgfX07CisgICAgYXV0byBhZGRyZXNzU3BhY2VUb2tlbiA9
IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tl
bjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6
VG9rZW46OlR5cGU6OlRocmVhZH0pOworICAgIGlmICghYWRkcmVzc1NwYWNlVG9rZW4pCisgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VUb2tlbi5lcnJvcigpKTsK
KyAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7CisgICAg
c3dpdGNoIChhZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpDb25zdGFudDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VU
eXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIExl
eGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJl
ZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIGFkZHJlc3NTcGFj
ZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZDoKKyAgICAgICAg
YWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJpbmcoIlNvbWV0
aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkp
KTsKKyAgICB9CisgICAgcmV0dXJuIHt7ICp0b2tlbiwgeyBhZGRyZXNzU3BhY2UgfSwgV1RGOjpu
dWxsb3B0IH19OwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBlKCkgLT4g
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiB7Ci0gICAgYXV0byBh
ZGRyZXNzU3BhY2UgPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0YW50
LCBMZXhlcjo6VG9rZW46OlR5cGU6OkRldmljZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRn
cm91cCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWR9KTsKLSAgICBpZiAoIWFkZHJlc3NTcGFj
ZSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZS5lcnJvcigp
KTsKK2F1dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiB7CisgICAgYXV0byBhZGRyZXNz
U3BhY2VUb2tlbiA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQs
IExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdy
b3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOworICAgIGlmICghYWRkcmVzc1NwYWNl
VG9rZW4pCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VUb2tl
bi5lcnJvcigpKTsKKyAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNz
U3BhY2U7CisgICAgc3dpdGNoIChhZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgeworICAgIGNhc2Ug
TGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNU
OjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworICAgICAgICBicmVhazsK
KyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlOgorICAgICAgICBhZGRyZXNzU3Bh
Y2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6CisgICAgICAg
IGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRn
cm91cDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVh
ZDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3Bh
Y2U6OlRocmVhZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihT
dHJpbmcoIlNvbWV0aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCkpKTsKKyAgICB9CiAgICAgYXV0byBuYW1lID0gY29uc3VtZVR5cGUoTGV4ZXI6
OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOwpAQCAtNDcxLDEyICs1MzIsMTIgQEAg
YXV0byBQYXJzZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnIKICAgICBpZiAoIXR5cGVBcmd1bWVudHMpCiAgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlQXJndW1lbnRzLmVycm9yKCkpOwogCi0gICAg
YXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVT
dWZmaXhBYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPiYmIHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiB7Cisg
ICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5
cGVTdWZmaXhBYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91cykgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6
VW5uYW1lZFR5cGU+IHsKICAgICAgICAgc3dpdGNoICh0eXBlU3VmZml4QWJicmV2aWF0ZWQudG9r
ZW4udHlwZSkgewogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3RhcjoKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpU
b2tlbih0eXBlU3VmZml4QWJicmV2aWF0ZWQudG9rZW4pLCBhZGRyZXNzU3BhY2UtPnN0cmluZ1Zp
ZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhB
YmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAg
ICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4
ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZS0+c3Ry
aW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2Vu
KHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2
aW91cykpOwogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNr
ZXQ6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5VHlwZT4o
TGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIFdURk1vdmUocHJldmlv
dXMpLCAqdHlwZVN1ZmZpeEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVs
dDoKQEAgLTQ4OCw3ICs1NDksNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBl
KCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycgogICAgIGF1dG8g
Zmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQgPSBwYXJzZVR5cGVTdWZmaXhBYmJyZXZpYXRlZCgp
OwogICAgIGlmICghZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQpCiAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZC5lcnJvcigpKTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFT
VDo6VHlwZVJlZmVyZW5jZT4oTGV4ZXI6OlRva2VuKCphZGRyZXNzU3BhY2UpLCBuYW1lLT5zdHJp
bmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6
OlR5cGVSZWZlcmVuY2U+KFdURk1vdmUoKmFkZHJlc3NTcGFjZVRva2VuKSwgbmFtZS0+c3RyaW5n
Vmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CiAgICAgcmVzdWx0ID0g
Y29uc3RydWN0VHlwZUZyb21TdWZmaXhBYmJyZXZpYXRlZCgqZmlyc3RUeXBlU3VmZml4QWJicmV2
aWF0ZWQsIFdURk1vdmUocmVzdWx0KSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0
byB0eXBlU3VmZml4QWJicmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxUeXBl
U3VmZml4QWJicmV2aWF0ZWQsIEVycm9yPj4oWyZdKCkgewpAQCAtNTAzLDcgKzU2NCw3IEBAIGF1
dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpUeXBlPiwgRXJyCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAot
YXV0byBQYXJzZXI6OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlTm9uQWRk
cmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRU
eXBlPiwgRXJyb3I+IHsKICAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKICAgICBpZiAoIW9yaWdp
bikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKQEAg
LTUxNCwxMiArNTc1LDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUo
KSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwKICAgICBpZiAoIXR5cGVB
cmd1bWVudHMpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlQXJndW1lbnRz
LmVycm9yKCkpOwogCi0gICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5vbkFiYnJldmlh
dGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeE5vbkFi
YnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHByZXZpb3VzKSAtPiBzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiB7CisgICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZp
eE5vbkFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlw
ZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4m
JiBwcmV2aW91cykgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAg
ICAgc3dpdGNoICh0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4udHlwZSkgewogICAgICAg
ICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3RhcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9u
QWJicmV2aWF0ZWQudG9rZW4pLCB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNl
LT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0
eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVk
LmFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExleGVyOjpU
b2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZm
aXhOb25BYmJyZXZpYXRlZC50b2tlbiksIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNz
U3BhY2UtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExl
eGVyOjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5v
bkFiYnJldmlhdGVkLmFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBj
YXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6CiAgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVT
dWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAqdHlwZVN1ZmZp
eE5vbkFiYnJldmlhdGVkLm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTUyOCw3
ICs1ODksNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sCiAgICAgICAgIH0KICAgICB9OwogCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxB
U1Q6OlR5cGVSZWZlcmVuY2U+KFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcudG9T
dHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlVubmFtZWRUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZVJlZmVy
ZW5jZT4oV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZN
b3ZlKCp0eXBlQXJndW1lbnRzKSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byB0
eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxUeXBl
U3VmZml4Tm9uQWJicmV2aWF0ZWQsIEVycm9yPj4oWyZdKCkgewogICAgICAgICAgICAgcmV0dXJu
IHBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkKCk7CkBAIC01NDIsMTQgKzYwMywxNCBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPEFTVDo6VHlwZT4sCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAot
YXV0byBQYXJzZXI6OnBhcnNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlR5cGU+LCBFcnJvcj4gewotICAgIGF1dG8gdHlwZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKK2F1dG8gUGFy
c2VyOjpwYXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVk
VHlwZT4sIEVycm9yPiB7CisgICAgYXV0byB0eXBlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKICAg
ICAgICAgcmV0dXJuIHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOwogICAgIH0pOwogICAgIGlmICh0
eXBlKQogICAgICAgICByZXR1cm4gdHlwZTsKIAotICAgIHR5cGUgPSBiYWNrdHJhY2tpbmdTY29w
ZTxFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+PihbJl0oKSB7Cisg
ICAgdHlwZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlVubmFtZWRUeXBlPiwgRXJyb3I+PihbJl0oKSB7CiAgICAgICAgIHJldHVybiBwYXJzZU5vbkFk
ZHJlc3NTcGFjZVR5cGUoKTsKICAgICB9KTsKICAgICBpZiAodHlwZSkKQEAgLTg0Nyw3ICs5MDgs
NyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKSAtPiBFeHBlY3Rl
ZDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbgogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpUeXBlPiB0eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBl
PiB0eXBlOwogICAgIGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29sb24pKSB7CiAg
ICAgICAgIGF1dG8gcGFyc2VkVHlwZSA9IHBhcnNlVHlwZSgpOwogICAgICAgICBpZiAoIXBhcnNl
ZFR5cGUpCkBAIC04NjMsMjEgKzkyNCwyNSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlv
bkRlZmluaXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbgogICAg
IGlmICghZmlyc3RFbnVtZXJhdGlvbk1lbWJlcikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KGZpcnN0RW51bWVyYXRpb25NZW1iZXIuZXJyb3IoKSk7CiAKLSAgICBBU1Q6OkVudW1l
cmF0aW9uTWVtYmVycyBtZW1iZXJzOwotICAgIG1lbWJlcnMuYXBwZW5kKFdURk1vdmUoKmZpcnN0
RW51bWVyYXRpb25NZW1iZXIpKTsKKyAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiByZXN1
bHQoV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3Zl
KHR5cGUpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSByZXN1bHQuYWRkKFdURk1vdmUoKmZpcnN0RW51
bWVyYXRpb25NZW1iZXIpKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWls
KFN0cmluZygiQ2Fubm90IGFkZCBlbnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6
OkNvbW1hKSkgewogICAgICAgICBhdXRvIG1lbWJlciA9IHBhcnNlRW51bWVyYXRpb25NZW1iZXIo
KTsKICAgICAgICAgaWYgKCFtZW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxF
cnJvcj4obWVtYmVyLmVycm9yKCkpOwotICAgICAgICBtZW1iZXJzLmFwcGVuZChXVEZNb3ZlKCpt
ZW1iZXIpKTsKKyAgICAgICAgc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgqbWVtYmVyKSk7
CisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgIHJldHVybiBmYWlsKFN0cmluZygi
Q2Fubm90IGFkZCBlbnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSk7CiAgICAgfQogCiAgICAgYXV0byByaWdodEN1cmx5QnJhY2tldCA9IGNvbnN1bWVUeXBl
KExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRDdXJseUJyYWNrZXQpOwogICAgIGlmICghcmlnaHRD
dXJseUJyYWNrZXQpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodEN1cmx5
QnJhY2tldC5lcnJvcigpKTsKIAotICAgIHJldHVybiBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlv
bihXVEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUo
dHlwZSksIFdURk1vdmUobWVtYmVycykpOworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9
CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uTWVtYmVyKCkgLT4gRXhwZWN0ZWQ8QVNU
OjpFbnVtZXJhdGlvbk1lbWJlciwgRXJyb3I+IHsKQEAgLTk4MSw3ICsxMDQ2LDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlQXR0cmlidXRlQmxvY2soKSAtPiBFeHBlY3RlZDxBU1Q6OkF0dHJpYnV0ZUJs
b2NrLCBFcnJvcj4gewogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLWF1dG8gUGFy
c2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4g
eworYXV0byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uLCBFcnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygpOwogICAgIGlm
ICghb3JpZ2luKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9y
KCkpOwpAQCAtOTkyLDcgKzEwNTcsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAt
PiBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHsKICAgICBpZiAoIXR5cGUpCiAgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOwogCi0gICAgT3B0aW9u
YWw8U3RyaW5nPiBuYW1lOworICAgIFN0cmluZyBuYW1lOwogICAgIGlmIChhdXRvIHRva2VuID0g
dHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIpKQogICAgICAgICBuYW1lID0g
dG9rZW4tPnN0cmluZ1ZpZXcudG9TdHJpbmcoKTsKIApAQCAtMTAwMCwxOCArMTA2NSwxOCBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwg
RXJyb3I+IHsKICAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAg
ICAgaWYgKCFzZW1hbnRpYykKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihz
ZW1hbnRpYy5lcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIEFTVDo6UGFyYW1ldGVyKFdURk1vdmUo
Km9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5h
bWUpLCBXVEZNb3ZlKCpzZW1hbnRpYykpOworICAgICAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUo
KnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIG51bGxwdHIpOwogICAg
IH0KIAotICAgIHJldHVybiBBU1Q6OlBhcmFtZXRlcihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3Zl
KHF1YWxpZmllcnMpLCBXVEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShuYW1lKSwgV1RGOjpudWxsb3B0
KTsKKyAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiks
IFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEY6
Om51bGxvcHQsIG51bGxwdHIpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXJzKCkg
LT4gRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXJzLCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNl
UGFyYW1ldGVycygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMsIEVycm9y
PiB7CiAgICAgYXV0byBsZWZ0UGFyZW50aGVzaXMgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46
OlR5cGU6OkxlZnRQYXJlbnRoZXNpcyk7CiAgICAgaWYgKCFsZWZ0UGFyZW50aGVzaXMpCiAgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihsZWZ0UGFyZW50aGVzaXMuZXJyb3IoKSk7CiAK
LSAgICBBU1Q6OlBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zIHBhcmFtZXRlcnM7CiAgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpS
aWdodFBhcmVudGhlc2lzKSkKICAgICAgICAgcmV0dXJuIFdURk1vdmUocGFyYW1ldGVycyk7CiAK
QEAgLTExNDksMTAgKzEyMTQsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlT3BlcmF0b3JGdW5jdGlv
bkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmEKICAgICAgICAg
YXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAgICAgaWYgKCFzZW1hbnRpYykK
ICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5lcnJvcigpKTsK
LSAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4p
LCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIFN0cmluZygiT3BlcmF0b3IgQ2Fz
dCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwg
V1RGTW92ZSgqc2VtYW50aWMpKTsKKyAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSks
IFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBX
VEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RG
OjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgU3RyaW5nKCJPcGVyYXRvciBDYXN0IiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEY6Om51bGxv
cHQpOworICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2lu
KSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yIGNh
c3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZSgqcGFyYW1ldGVycyks
IFdURjo6bnVsbG9wdCk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRp
b24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiB7CkBAIC0x
MjYxLDcgKzEzMjYsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlSWZTdGF0ZW1lbnQoKSAtPiBFeHBl
Y3RlZDxBU1Q6OklmU3RhdGVtZW50LCBFcnJvcj4gewogICAgICAgICBlbHNlQm9keSA9IFdURk1v
dmUoKnBhcnNlZEVsc2VCb2R5KTsKICAgICB9CiAKLSAgICByZXR1cm4gQVNUOjpJZlN0YXRlbWVu
dChXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKCpjb25kaXRpb25hbCksIFdURk1vdmUoKmJvZHkp
LCBXVEZNb3ZlKGVsc2VCb2R5KSk7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4
cHJlc3Npb24+PiBjYXN0QXJndW1lbnRzOworICAgIGNhc3RBcmd1bWVudHMuYXBwZW5kKFdURk1v
dmUoKmNvbmRpdGlvbmFsKSk7CisgICAgYXV0byBib29sQ2FzdCA9IHN0ZDo6bWFrZV91bmlxdWU8
QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpvcmlnaW4pLCBTdHJpbmcoImJvb2wi
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYXN0QXJndW1lbnRzKSk7
CisgICAgcmV0dXJuIEFTVDo6SWZTdGF0ZW1lbnQoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShi
b29sQ2FzdCksIFdURk1vdmUoKmJvZHkpLCBXVEZNb3ZlKGVsc2VCb2R5KSk7CiB9CiAKIGF1dG8g
UGFyc2VyOjpwYXJzZVN3aXRjaFN0YXRlbWVudCgpIC0+IEV4cGVjdGVkPEFTVDo6U3dpdGNoU3Rh
dGVtZW50LCBFcnJvcj4gewpAQCAtMTQ0Myw3ICsxNTExLDcgQEAgYXV0byBQYXJzZXI6OnBhcnNl
RG9XaGlsZUxvb3AoKSAtPiBFeHBlY3RlZDxBU1Q6OkRvV2hpbGVMb29wLCBFcnJvcj4gewogICAg
IHJldHVybiBBU1Q6OkRvV2hpbGVMb29wKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoKmJvZHkp
LCBXVEZNb3ZlKCpjb25kaXRpb25hbCkpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSkgLT4gRXhwZWN0
ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiB0
eXBlKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiB7CiAgICAg
YXV0byBvcmlnaW4gPSBwZWVrKCk7CiAgICAgaWYgKCFvcmlnaW4pCiAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CkBAIC0xNDg4LDcgKzE1NTYsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpIC0+IEV4cGVjdGVkPEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnNTdAogICAgIGlmICghdHlwZSkKICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7CiAKLSAgICBhdXRvIGZpcnN0VmFyaWFibGVE
ZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpUeXBlPigoKnR5cGUpLT5jbG9uZSgpKSk7CisgICAgYXV0byBmaXJzdFZhcmlhYmxlRGVjbGFy
YXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKCp0eXBlKS0+Y2xvbmUoKSk7CiAgICAg
aWYgKCFmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAKQEAgLTE0OTYsNyAr
MTU2NCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkgLT4gRXhw
ZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0CiAgICAgcmVzdWx0LmFwcGVuZChXVEZN
b3ZlKCpmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pKTsKIAogICAgIHdoaWxlICh0cnlUeXBlKExl
eGVyOjpUb2tlbjo6VHlwZTo6Q29tbWEpKSB7Ci0gICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJh
dGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBl
PigoKnR5cGUpLT5jbG9uZSgpKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9
IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKICAgICAgICAgaWYg
KCF2YXJpYWJsZURlY2xhcmF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KHZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
V1RGTW92ZSgqdmFyaWFibGVEZWNsYXJhdGlvbikpOwpAQCAtMTk1OSw4ICsyMDI3LDEwIEBAIGF1
dG8gUGFyc2VyOjpwYXJzZVRlcm5hcnlDb25kaXRpb25hbCgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OkV4cHJlc3NpCiAgICAgaWYgKCFlbHNlRXhwcmVzc2lvbikKICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGVsc2VFeHByZXNzaW9uLmVycm9yKCkpOwogCi0gICAg
Ly8gRklYTUU6IENhc3QgdGhlIHByZWRpY2F0ZSB0byBhIGJvb2wuCi0gICAgcmV0dXJuIHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUZXJuYXJ5
RXhwcmVzc2lvbj4oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZSgqcHJlZGljYXRlKSwgV1RGTW92
ZSgqYm9keUV4cHJlc3Npb24pLCBXVEZNb3ZlKCplbHNlRXhwcmVzc2lvbikpKTsKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4+IGNhc3RBcmd1bWVudHM7CisgICAg
Y2FzdEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSgqcHJlZGljYXRlKSk7CisgICAgYXV0byBib29s
Q2FzdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2Vu
KCpvcmlnaW4pLCBTdHJpbmcoImJvb2wiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwg
V1RGTW92ZShjYXN0QXJndW1lbnRzKSk7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OkV4cHJlc3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oV1RG
TW92ZSgqb3JpZ2luKSwgV1RGTW92ZShib29sQ2FzdCksIFdURk1vdmUoKmJvZHlFeHByZXNzaW9u
KSwgV1RGTW92ZSgqZWxzZUV4cHJlc3Npb24pKSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUFz
c2lnbm1lbnQoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPiwg
RXJyb3I+IHsKQEAgLTIxNzgsNyArMjI0OCw2IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxl
UmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbigpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0CiAg
ICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAg
ICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpuZXh0KSk7CiAgICAgICAgICAg
ICBwcmV2aW91cyA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6
OlRva2VuKCpyZWxhdGlvbmFsQmluYXJ5T3BlcmF0aW9uKSwgU3RyaW5nKCJvcGVyYXRvcj09Iiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpOwot
ICAgICAgICAgICAgLy8gRklYTUU6IENhc3QgdGhlIGFyZ3VtZW50IHRvIGEgYm9vbAogICAgICAg
ICAgICAgcHJldmlvdXMgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Np
b24+KFdURk1vdmUoKnJlbGF0aW9uYWxCaW5hcnlPcGVyYXRpb24pLCBXVEZNb3ZlKHByZXZpb3Vz
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjM2NCw4ICsyNDMzLDEyIEBA
IGF1dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlUHJlZml4KCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4sCiAgICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVu
ZChXVEZNb3ZlKCpuZXh0KSk7CiAgICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFT
VDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhl
cjo6VG9rZW4oKnByZWZpeCksIFN0cmluZygib3BlcmF0b3J+IiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpKTsKICAgICAgICAgfQotICAgICAg
ICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6RXhjbGFtYXRpb25Qb2ludDoKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1ha2VfdW5pcXVl
PEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwgV1RGTW92
ZSgqbmV4dCkpKTsKKyAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkV4Y2xhbWF0aW9u
UG9pbnQ6IHsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNz
aW9uPj4gY2FzdEFyZ3VtZW50czsKKyAgICAgICAgICAgIGNhc3RBcmd1bWVudHMuYXBwZW5kKFdU
Rk1vdmUoKm5leHQpKTsKKyAgICAgICAgICAgIGF1dG8gYm9vbENhc3QgPSBzdGQ6Om1ha2VfdW5p
cXVlPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwgU3RyaW5nKCJi
b29sIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FzdEFyZ3VtZW50
cykpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+
KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2Vu
KCpwcmVmaXgpLCBXVEZNb3ZlKGJvb2xDYXN0KSkpOworICAgICAgICB9CiAgICAgICAgIGNhc2Ug
TGV4ZXI6OlRva2VuOjpUeXBlOjpBbmQ6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEFTVDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok1ha2VQb2ludGVyRXhw
cmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpwcmVmaXgpLCBXVEZNb3ZlKCpuZXh0KSkpOwogICAgICAg
ICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6QXQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAppbmRleCBkYTNlMDZiMDFlNC4uODAxMzkx
NDk4MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQYXJzZXIuaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2lu
Y2x1ZGUgIldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKICNp
bmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCkBAIC02OCw3ICs2Nyw2IEBACiAj
aW5jbHVkZSAiV0hMU0xOb2RlLmgiCiAjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbC5oIgogI2lu
Y2x1ZGUgIldITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiV0hM
U0xQYXJhbWV0ZXIuaCIKICNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCiAjaW5jbHVkZSAi
V0hMU0xQcm9ncmFtLmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
aCIKQEAgLTE1NCwxMyArMTUyLDEzIEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8VHlwZVN1ZmZp
eEFiYnJldmlhdGVkLCBFcnJvcj4gcGFyc2VUeXBlU3VmZml4QWJicmV2aWF0ZWQoKTsKICAgICBz
dHJ1Y3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkIHsKICAgICAgICAgTGV4ZXI6OlRva2VuIHRv
a2VuOwotICAgICAgICBPcHRpb25hbDxMZXhlcjo6VG9rZW4+IGFkZHJlc3NTcGFjZTsKKyAgICAg
ICAgT3B0aW9uYWw8QVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFj
ZTsKICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG51bUVsZW1lbnRzOwogICAgIH07CiAgICAg
RXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBFcnJvcj4gcGFyc2VUeXBlU3VmZml4
Tm9uQWJicmV2aWF0ZWQoKTsKLSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBl
PiwgRXJyb3I+IHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOwotICAgIEV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4gcGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCk7Ci0g
ICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiBwYXJzZVR5cGUo
KTsKKyAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9y
PiBwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKTsKKyAg
ICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJz
ZVR5cGUoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlR5cGVEZWZpbml0aW9uLCBFcnJvcj4gcGFyc2VU
eXBlRGVmaW5pdGlvbigpOwogICAgIEV4cGVjdGVkPEFTVDo6QnVpbHRJblNlbWFudGljLCBFcnJv
cj4gcGFyc2VCdWlsdEluU2VtYW50aWMoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlJlc291cmNlU2Vt
YW50aWMsIEVycm9yPiBwYXJzZVJlc291cmNlU2VtYW50aWMoKTsKQEAgLTE3NSw4ICsxNzMsOCBA
QCBwcml2YXRlOgogICAgIEV4cGVjdGVkPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uLCBFcnJv
cj4gcGFyc2VOYXRpdmVUeXBlRGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6Ok51bVRo
cmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSwgRXJyb3I+IHBhcnNlTnVtVGhyZWFkc0Z1bmN0aW9uQXR0
cmlidXRlKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpBdHRyaWJ1dGVCbG9jaywgRXJyb3I+IHBhcnNl
QXR0cmlidXRlQmxvY2soKTsKLSAgICBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHBh
cnNlUGFyYW1ldGVyKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXJzLCBFcnJvcj4gcGFy
c2VQYXJhbWV0ZXJzKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBF
cnJvcj4gcGFyc2VQYXJhbWV0ZXIoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zLCBFcnJvcj4gcGFyc2VQYXJhbWV0ZXJzKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VFbnRyeVBvaW50RnVuY3Rpb25EZWNsYXJhdGlv
bigpOwogICAgIEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNl
UmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXJhdGlvbigpOwpA
QCAtMTkyLDcgKzE5MCw3IEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNUOjpGb3JMb29wLCBF
cnJvcj4gcGFyc2VGb3JMb29wKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpXaGlsZUxvb3AsIEVycm9y
PiBwYXJzZVdoaWxlTG9vcCgpOwogICAgIEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxvb3AsIEVycm9y
PiBwYXJzZURvV2hpbGVMb29wKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uLCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlR5cGU+JiYpOworICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+
IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlw
ZT4mJik7CiAgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCwg
RXJyb3I+IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKTsKICAgICBFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcj4gcGFyc2VTdGF0ZW1lbnQoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5j
cHAKaW5kZXggMGViNjRkZWNkNGQuLjQ2MGU5NDZmZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAgLTI4LDEwICsy
OCwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldITFNMUHJlcGFyZS5oIgog
CisjaW5jbHVkZSAiV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIldI
TFNMQ2hlY2tlci5oIgogI2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAi
V0hMU0xQYXJzZXIuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExT
TFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGFuZGFyZExpYnJhcnku
aCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgiCisjaW5j
bHVkZSAiV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50
aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVT
dHJ1Y3R1cmVBY2Nlc3NvcnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MCw4ICs1
NywyMyBAQCBPcHRpb25hbDxQcmVwYXJhdGlvblJlc3VsdD4gcHJlcGFyZShTdHJpbmdWaWV3IHNv
dXJjZSkKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICByZXNvbHZlTmFtZXNJblR5cGVzKHByb2dyYW0pOworICAgIE5hbWVSZXNvbHZlciBuYW1l
UmVzb2x2ZXIocHJvZ3JhbS5uYW1lQ29udGV4dCgpKTsKKyAgICBpZiAoIXJlc29sdmVOYW1lc0lu
VHlwZXMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICBpZiAoIWNoZWNrUmVjdXJzaXZlVHlwZXMocHJvZ3JhbSkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhwcm9ncmFt
KTsKKyAgICBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMocHJvZ3JhbSk7CisgICAgc3lu
dGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgocHJvZ3JhbSk7CisgICAgc3ludGhlc2l6ZUNvbnN0
cnVjdG9ycyhwcm9ncmFtKTsKKyAgICBpZiAoIWNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKHByb2dy
YW0pKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghcmVzb2x2ZU5hbWVz
SW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKwogCisgICAgaWYgKGNoZWNrKHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIHJldHVybiBQcmVwYXJhdGlvblJlc3VsdCgpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oCmluZGV4
IDU2MzBmZTY5ZWU0Li42MGVlNDc5MDE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKQEAgLTI5LDYgKzI5LDggQEAKIAogI2lu
Y2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5j
dGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKyNpbmNsdWRl
ICJXSExTTE5hbWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKICNpbmNs
dWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKQEAgLTQ0LDQ1ICs0Niw2NCBAQCBwdWJs
aWM6CiAgICAgUHJvZ3JhbSgpID0gZGVmYXVsdDsKICAgICBQcm9ncmFtKFByb2dyYW0mJikgPSBk
ZWZhdWx0OwogCi0gICAgdm9pZCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5pdGlvbiYmIHR5cGVEZWZp
bml0aW9uKQorICAgIGJvb2wgYXBwZW5kKEFTVDo6VHlwZURlZmluaXRpb24mJiB0eXBlRGVmaW5p
dGlvbikKICAgICB7Ci0gICAgICAgIG1fdHlwZURlZmluaXRpb25zLmFwcGVuZChXVEZNb3ZlKHR5
cGVEZWZpbml0aW9uKSk7CisgICAgICAgIG1fdHlwZURlZmluaXRpb25zLmFwcGVuZChzdGQ6Om1h
a2VfdW5pcXVlPEFTVDo6VHlwZURlZmluaXRpb24+KFdURk1vdmUodHlwZURlZmluaXRpb24pKSk7
CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV90eXBlRGVmaW5pdGlvbnMubGFz
dCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiYg
c3RydWN0dXJlRGVmaW5pdGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbiYmIHN0cnVjdHVyZURlZmluaXRpb24pCiAgICAgewotICAgICAgICBtX3N0cnVjdHVy
ZURlZmluaXRpb25zLmFwcGVuZChXVEZNb3ZlKHN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAg
ICAgbV9zdHJ1Y3R1cmVEZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlN0
cnVjdHVyZURlZmluaXRpb24+KFdURk1vdmUoc3RydWN0dXJlRGVmaW5pdGlvbikpKTsKKyAgICAg
ICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX3N0cnVjdHVyZURlZmluaXRpb25zLmxhc3Qo
KSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiYg
ZW51bWVyYXRpb25EZWZpbml0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24mJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCiAgICAgewotICAgICAgICBtX2Vu
dW1lcmF0aW9uRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoZW51bWVyYXRpb25EZWZpbml0aW9u
KSk7CisgICAgICAgIG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3Vu
aXF1ZTxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShlbnVtZXJhdGlvbkRlZmlu
aXRpb24pKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9lbnVtZXJhdGlv
bkRlZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiYgZnVuY3Rpb25EZWZpbml0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNU
OjpGdW5jdGlvbkRlZmluaXRpb24mJiBmdW5jdGlvbkRlZmluaXRpb24pCiAgICAgewotICAgICAg
ICBtX2Z1bmN0aW9uRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoZnVuY3Rpb25EZWZpbml0aW9u
KSk7CisgICAgICAgIG1fZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1
ZTxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShmdW5jdGlvbkRlZmluaXRpb24pKSk7
CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9mdW5jdGlvbkRlZmluaXRpb25z
Lmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiYmIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCisKKyAgICBib29sIGFwcGVuZChB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KQogICAgIHsKLSAgICAgICAgbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5hcHBlbmQoV1RG
TW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgIG1fbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uPihXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSk7CisgICAg
ICAgIG1faW50cmluc2ljcy5hZGQoKm1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMubGFzdCgp
KTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX25hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQorCisgICAgYm9vbCBhcHBlbmQo
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCiAgICAg
ewotICAgICAgICBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUobmF0aXZl
VHlwZURlY2xhcmF0aW9uKSk7CisgICAgICAgIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5hcHBl
bmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oV1RGTW92ZShu
YXRpdmVUeXBlRGVjbGFyYXRpb24pKSk7CisgICAgICAgIG1faW50cmluc2ljcy5hZGQoKm1fbmF0
aXZlVHlwZURlY2xhcmF0aW9ucy5sYXN0KCkpOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4
dC5hZGQoKm1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5sYXN0KCkpOwogICAgIH0KIAotICAgIFZl
Y3RvcjxBU1Q6OlR5cGVEZWZpbml0aW9uPiYgdHlwZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV90
eXBlRGVmaW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPiYg
c3RydWN0dXJlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3N0cnVjdHVyZURlZmluaXRpb25zOyB9
Ci0gICAgVmVjdG9yPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPiYgZW51bWVyYXRpb25EZWZp
bml0aW9ucygpIHsgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uczsgfQotICAgIFZlY3Rv
cjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMoKSB7IHJldHVy
biBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uPiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX25h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uPiYgbmF0aXZlVHlwZURlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlVHlw
ZURlY2xhcmF0aW9uczsgfQorICAgIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCgpIHsgcmV0dXJu
IG1fbmFtZUNvbnRleHQ7IH0KKyAgICBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKCkgeyByZXR1cm4g
bV9pbnRyaW5zaWNzOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVEZWZp
bml0aW9uPj4mIHR5cGVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fdHlwZURlZmluaXRpb25zOyB9
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+PiYg
c3RydWN0dXJlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3N0cnVjdHVyZURlZmluaXRpb25zOyB9
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4+
JiBlbnVtZXJhdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmluaXRp
b25zOyB9CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkZ1bmN0aW9uRGVm
aW5pdGlvbj4+JiBmdW5jdGlvbkRlZmluaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlv
bkRlZmluaXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbj4+JiBmdW5jdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRl
ZmluaXRpb25zOyB9CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSBjb25z
dCB7IHJldHVybiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOyB9CisgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiYgbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25z
OyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4+JiBuYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVUeXBlRGVjbGFy
YXRpb25zOyB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPEFTVDo6VHlwZURlZmluaXRpb24+IG1f
dHlwZURlZmluaXRpb25zOwotICAgIFZlY3RvcjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+IG1f
c3RydWN0dXJlRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uPiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6RnVuY3Rpb25E
ZWZpbml0aW9uPiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbj4gbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uczsKLSAgICBW
ZWN0b3I8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+IG1fbmF0aXZlVHlwZURlY2xhcmF0aW9u
czsKKyAgICBOYW1lQ29udGV4dCBtX25hbWVDb250ZXh0OworICAgIEludHJpbnNpY3MgbV9pbnRy
aW5zaWNzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlRGVmaW5pdGlvbj4+
IG1fdHlwZURlZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uPj4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsKKyAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPj4gbV9lbnVtZXJhdGlvbkRl
ZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24+PiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24+PiBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVj
a2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJz
aXZlVHlwZUNoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li44YjNkMGMyNzQzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCkBAIC0wLDAgKzEsMTE3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCisKKyNpbmNsdWRlICJX
SExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFJlY3Vyc2l2ZVR5cGVDaGVja2Vy
IDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIH5SZWN1cnNpdmVUeXBlQ2hlY2tlcigp
ID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURl
ZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAobV9lcnJvcikKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZXMuYWRkKCZ0eXBl
RGVmaW5pdGlvbik7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAg
ICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBWaXNpdG9yOjp2aXNpdCh0eXBlRGVmaW5pdGlvbik7CisKKyAgICAgICAgYXV0byBz
dWNjZXNzID0gbV90eXBlcy5yZW1vdmUoJnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChtX2Vycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV90eXBlcy5hZGQoJnN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAg
ICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIG1fZXJyb3IgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgVmlzaXRvcjo6dmlz
aXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisKKyAgICAgICAgYXV0byBzdWNjZXNzID0gbV90eXBl
cy5yZW1vdmUoJnN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN1
Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJl
bmNlJiB0eXBlUmVmZXJlbmNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKG1fZXJyb3Ip
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVz
LmFkZCgmdHlwZVJlZmVyZW5jZSk7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkg
eworICAgICAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBmb3IgKGF1dG8mIHR5cGVBcmd1bWVudCA6IHR5cGVSZWZlcmVuY2Uu
dHlwZUFyZ3VtZW50cygpKQorICAgICAgICAgICAgVmlzaXRvcjo6dmlzaXQodHlwZUFyZ3VtZW50
KTsKKyAgICAgICAgdmlzaXROYW1lZFR5cGUoKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkp
OworCisgICAgICAgIGF1dG8gc3VjY2VzcyA9IG1fdHlwZXMucmVtb3ZlKCZ0eXBlUmVmZXJlbmNl
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgIH0K
KworICAgIGJvb2wgZXJyb3IoKSB7IHJldHVybiBtX2Vycm9yOyB9CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBtX2Vycm9yIHsgZmFsc2UgfTsKKyAgICBIYXNoU2V0PEFTVDo6VHlwZSo+IG1fdHlwZXM7
Cit9OworCitib29sIGNoZWNrUmVjdXJzaXZlVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAg
ICBSZWN1cnNpdmVUeXBlQ2hlY2tlciByZWN1cnNpdmVUeXBlQ2hlY2tlcjsKKyAgICByZWN1cnNp
dmVUeXBlQ2hlY2tlci5WaXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKKyAgICByZXR1cm4gcmVjdXJz
aXZlVHlwZUNoZWNrZXIuZXJyb3IoKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBl
Q2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1
cnNpdmVUeXBlQ2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li45YTNhMTlkY2UyMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaApAQCAtMCwwICsxLDQzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsK
KworYm9vbCBjaGVja1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0mKTsKKworfQorCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xS
ZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmEyMjgzNWYxZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcApA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCIKKwor
I2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSBXSExTTCB7CisKK0FTVDo6TmFtZWRUeXBlKiByZXNvbHZlVHlwZU92ZXJsb2FkSW1w
bChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+JiBwb3Nz
aWJsZVR5cGVzLCBBU1Q6OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMpCit7CisgICAgQVNU
OjpOYW1lZFR5cGUqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgZm9yIChhdXRvJiBwb3NzaWJsZVR5
cGUgOiBwb3NzaWJsZVR5cGVzKSB7CisgICAgICAgIGlmIChpbmZlclR5cGVzRm9yVHlwZUFyZ3Vt
ZW50cyhwb3NzaWJsZVR5cGUsIHR5cGVBcmd1bWVudHMpKSB7CisgICAgICAgICAgICBpZiAocmVz
dWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmVzdWx0
ID0gJnN0YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlJj4ocG9zc2libGVUeXBlKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFu
b255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCnNpbWlsYXJpdHkgaW5kZXggNzMl
CnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24uaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKaW5kZXggZWY2
MWVkMTI2MTkuLmMzZjYwZWE5ZDY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3Zlcmxv
YWRJbXBsLmgKQEAgLTI3LDggKzI3LDkgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNs
dWRlICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgorI2luY2x1ZGUgIldI
TFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsMjYgKzM3LDEyIEBAIG5h
bWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBBbm9ueW1vdXNWYXJp
YWJsZURlY2xhcmF0aW9uIDogcHVibGljIFZhbHVlIHsKLXB1YmxpYzoKLSAgICBBbm9ueW1vdXNW
YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbikKLSAgICAgICAgOiBtX29y
aWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgfkFub255
bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oKSA9IGRlZmF1bHQ7Ci0KLSAgICBBbm9ueW1vdXNWYXJp
YWJsZURlY2xhcmF0aW9uKGNvbnN0IEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24mKSA9IGRl
bGV0ZTsKLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKEFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OwotCi0gICAgTGV4ZXI6OlRva2VuIG9yaWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9Ci0KLXByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1f
b3JpZ2luOwotfTsKK2NsYXNzIE5hbWVkVHlwZTsKIAogfQogCitBU1Q6Ok5hbWVkVHlwZSogcmVz
b2x2ZVR5cGVPdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpO
YW1lZFR5cGU+LCAxPiYsIEFTVDo6VHlwZUFyZ3VtZW50cyYpOworCiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFy
cmF5T3BlcmF0b3JMZW5ndGguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBiNGJkNTAwODZiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlP
cGVyYXRvckxlbmd0aC5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVz
aXplQXJyYXlPcGVyYXRvckxlbmd0aC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK2NsYXNzIEZpbmRBcnJheVR5cGVzIDogcHVibGljIFZpc2l0b3Igewor
cHVibGljOgorICAgIH5GaW5kQXJyYXlUeXBlcygpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlz
aXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1f
YXJyYXlUeXBlcy5hcHBlbmQoYXJyYXlUeXBlKTsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoYXJy
YXlUeXBlKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6
OkFycmF5VHlwZT4+JiYgdGFrZUFycmF5VHlwZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdU
Rk1vdmUobV9hcnJheVR5cGVzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpBcnJheVR5cGU+PiBtX2FycmF5VHlwZXM7Cit9OworCit2
b2lkIHN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoKFByb2dyYW0mIHByb2dyYW0pCit7Cisg
ICAgRmluZEFycmF5VHlwZXMgZmluZEFycmF5VHlwZXM7CisgICAgZmluZEFycmF5VHlwZXMuVmlz
aXRvcjo6dmlzaXQocHJvZ3JhbSk7CisgICAgYXV0byBhcnJheVR5cGVzID0gZmluZEFycmF5VHlw
ZXMudGFrZUFycmF5VHlwZXMoKTsKKworICAgIGZvciAoYXV0byYgYXJyYXlUeXBlIDogYXJyYXlU
eXBlcykgeworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIGFycmF5VHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBu
dWxscHRyKTsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwor
ICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsK
KyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0
cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4
ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIHByb2dyYW0uaW50cmluc2ljcygp
LnVpbnRUeXBlKCkpLCBTdHJpbmcoIm9wZXJhdG9yLmxlbmd0aCIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsK
KyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KSk7CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVu
Z3RoLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVBcnJheU9wZXJhdG9yTGVuZ3RoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmU5YTlhMTE0ZjI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xh
c3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChQcm9ncmFt
Jik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45MWY5ZGMwNGFlYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEZpbmRBbGxUeXBlcyA6IHB1YmxpYyBWaXNpdG9y
IHsKK3B1YmxpYzoKKyAgICB+RmluZEFsbFR5cGVzKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2
aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChwb2ludGVyVHlwZSk7CisgICAgICAgIFZpc2l0b3I6
OnZpc2l0KHBvaW50ZXJUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBtX3VubmFtZWRUeXBlcy5hcHBlbmQoYXJyYXlSZWZlcmVuY2VUeXBlKTsKKyAgICAgICAgVmlz
aXRvcjo6dmlzaXQoYXJyYXlSZWZlcmVuY2VUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3Vu
bmFtZWRUeXBlcy5hcHBlbmQoYXJyYXlUeXBlKTsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoYXJy
YXlUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX25h
bWVkVHlwZXMuYXBwZW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIFZpc2l0b3I6
OnZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOwor
ICAgICAgICBWaXNpdG9yOjp2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbik7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbik7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpVbm5hbWVkVHlwZT4+JiYgdGFrZVVubmFtZWRUeXBlcygpCisgICAgeworICAgICAgICByZXR1
cm4gV1RGTW92ZShtX3VubmFtZWRUeXBlcyk7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiYmIHRha2VOYW1lZFR5cGVzKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fbmFtZWRUeXBlcyk7CisgICAgfQorCitwcml2YXRl
OgorICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+PiBt
X3VubmFtZWRUeXBlczsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5h
bWVkVHlwZT4+IG1fbmFtZWRUeXBlczsKK307CisKK3ZvaWQgc3ludGhlc2l6ZUNvbnN0cnVjdG9y
cyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIEZpbmRBbGxUeXBlcyBmaW5kQWxsVHlwZXM7Cisg
ICAgZmluZEFsbFR5cGVzLlZpc2l0b3I6OnZpc2l0KHByb2dyYW0pOworICAgIGF1dG8gbV91bm5h
bWVkVHlwZXMgPSBmaW5kQWxsVHlwZXMudGFrZVVubmFtZWRUeXBlcygpOworICAgIGF1dG8gbV9u
YW1lZFR5cGVzID0gZmluZEFsbFR5cGVzLnRha2VOYW1lZFR5cGVzKCk7CisKKyAgICBmb3IgKGF1
dG8mIHVubmFtZWRUeXBlIDogbV91bm5hbWVkVHlwZXMpIHsKKyAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBl
LmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHVubmFtZWRUeXBlLmdldCgpLmNs
b25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5k
KFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9yKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5n
ZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5h
bWVkVHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBm
YWxzZSk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoY29weUNvbnN0cnVjdG9yKSk7
CisKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1
Y3RvcihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJp
YnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgU3Ry
aW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnMoKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAgIHBy
b2dyYW0uYXBwZW5kKFdURk1vdmUoZGVmYXVsdENvbnN0cnVjdG9yKSk7CisgICAgfQorCisgICAg
Zm9yIChhdXRvJiBuYW1lZFR5cGUgOiBtX25hbWVkVHlwZXMpIHsKKyAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKG5hbWVkVHlw
ZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5n
ZXQoKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5k
KFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9yKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0
KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkp
LCBuYW1lZFR5cGUuZ2V0KCkpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxz
ZSk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoY29weUNvbnN0cnVjdG9yKSk7CisK
KyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1Y3Rv
cihMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVC
bG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9r
ZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgU3RyaW5nKCJv
cGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbnMoKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAgIHByb2dyYW0u
YXBwZW5kKFdURk1vdmUoZGVmYXVsdENvbnN0cnVjdG9yKSk7CisgICAgfQorfQorCit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MDAyMGRkN2M3MAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0
cnVjdG9ycy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdI
TFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplQ29uc3RydWN0b3JzKFBy
b2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXpl
RW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi4zYjIzMDdmMzMzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNw
cApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1
bmN0aW9ucy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K3ZvaWQgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCit7
CisgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0
aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICB7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjEoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJl
bmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwg
KmVudW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIp
OworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRp
b24yKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdU
Rk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjIpKTsKKyAgICAgICAgICAgIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpU
b2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIHByb2dyYW0uaW50cmluc2ljcygpLmJv
b2xUeXBlKCkpLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAg
ICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsK
KyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRp
b24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3Jh
cChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJh
dGlvbkRlZmluaXRpb24pLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAg
ICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAg
IHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAg
ICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6
OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50
eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCJvcGVyYXRvci52YWx1ZSIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsK
KyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJl
bmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwg
KmVudW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIp
OworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4o
KSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBm
YWxzZSk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGVudW1lcmF0
aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51
bGxwdHIpOworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJz
OworICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0
aW9uKSk7CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5v
cmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2lu
KCkpLCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVs
bG9wdCwgZmFsc2UpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYzEwNzg3MmVmOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
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
ZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYTIzMDI3ODdkYQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xT
eW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmgiCisKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJU
eXBlLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVu
Y2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNw
YWNlIFdITFNMIHsKKwordm9pZCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0m
IHByb2dyYW0pCit7CisgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3Jh
bS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKSB7CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJl
RWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24tPnN0cnVjdHVyZUVsZW1lbnRzKCkpIHsKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVs
ZAorICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xh
cmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJl
RWxlbWVudC5vcmlnaW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6
bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1v
dmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihz
dHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51
bGxvcHQsIHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZzo6Zm9ybWF0KCJv
cGVyYXRvci4lcyIsIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBw
cm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6
IG9wZXJhdG9yLmZpZWxkPQorICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmln
aW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6
OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCAqc3RydWN0dXJlRGVmaW5pdGlvbiks
IFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oc3Ry
dWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBzdHJ1Y3R1cmVFbGVt
ZW50LnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAg
ICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAg
ICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9u
MSkpOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVE
ZWNsYXJhdGlvbjIpKTsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxl
bWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6
OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2lu
KCkpLCAqc3RydWN0dXJlRGVmaW5pdGlvbiksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0i
LCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShwYXJhbWV0
ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbS5hcHBl
bmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCisgICAgICAgICAgICBh
dXRvIGNyZWF0ZUFuZGVyID0gWyZdKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFk
ZHJlc3NTcGFjZSkgLT4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVy
VHlwZT4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBhZGRyZXNzU3Bh
Y2UsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVu
dC5vcmlnaW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CisgICAgICAgICAgICAgICAgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0
cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgV1RGTW92ZShhcmd1
bWVudFR5cGUpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAg
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAg
ICAgICAgICAgICAgYXV0byByZXR1cm5UeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlBvaW50
ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFkZHJlc3NT
cGFjZSwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICAgICAg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
TGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nOjpmb3JtYXQo
Im9wZXJhdG9yJi4lcyIsIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICBwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFk
ZHJlc3NTcGFjZTo6Q29uc3RhbnQpKTsKKyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0
ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2UpKTsKKyAgICAg
ICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRk
cmVzc1NwYWNlOjpUaHJlYWRncm91cCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3Jl
YXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZCkpOworICAg
ICAgICB9CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nl
c3NvcnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi40ZTliOWZmNzBjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xh
c3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0m
KTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmIzODAzNWRjOWJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcApAQCAtMCwwICsxLDU4NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIK
KyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJy
YXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIgorI2luY2x1
ZGUgIldITFNMQmFzZUZ1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xCYXNlU2Vt
YW50aWMuaCIKKyNpbmNsdWRlICJXSExTTEJsb2NrLmgiCisjaW5jbHVkZSAiV0hMU0xCb29sZWFu
TGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMQnJlYWsuaCIKKyNpbmNsdWRlICJXSExTTEJ1aWx0
SW5TZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTENvbW1hRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMQ29udGludWUuaCIKKyNpbmNsdWRlICJXSExT
TERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG9XaGlsZUxvb3AuaCIK
KyNpbmNsdWRlICJXSExTTERvdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEVmZmVjdGZ1
bEV4cHJlc3Npb25TdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5p
dGlvbi5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKKyNpbmNsdWRlICJX
SExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEZhbGx0aHJvdWdoLmgiCisjaW5jbHVk
ZSAiV0hMU0xGbG9hdExpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNpbmNs
dWRlICJXSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNs
dWRlICJXSExTTElmU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xJbmRleEV4cHJlc3Npb24u
aCIKKyNpbmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dp
Y2FsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCisjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbC5o
IgorI2luY2x1ZGUgIldITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVk
ZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKKyNpbmNsdWRlICJXSExTTFJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUu
aCIKKyNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFJl
dHVybi5oIgorI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFNwZWNp
YWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RhZ2VJbk91dFNl
bWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFN0
cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJXSExTTFN3aXRjaENhc2UuaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaFN0YXRl
bWVudC5oIgorI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJX
SExTTFRyYXAuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVB
cmd1bWVudC5oIgorI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJX
SExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVy
YWwuaCIKKyNpbmNsdWRlICJXSExTTFZhbHVlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dC5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExT
TFdoaWxlTG9vcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7
CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBmb3IgKGF1
dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkKKyAgICAgICAg
dmlzaXQoKnR5cGVEZWZpbml0aW9uKTsKKyAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZURlZmluaXRp
b24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpCisgICAgICAgIHZpc2l0KCpzdHJ1
Y3R1cmVEZWZpbml0aW9uKTsKKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6
IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKQorICAgICAgICB2aXNpdCgqZW51bWVy
YXRpb25EZWZpbml0aW9uKTsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHBy
b2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAgICB2aXNpdCgqZnVuY3Rpb25EZWZp
bml0aW9uKTsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9n
cmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCisgICAgICAgIHZpc2l0KCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
biA6IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpKQorICAgICAgICB2aXNpdCgqbmF0
aXZlVHlwZURlY2xhcmF0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdFVubmFtZWRUeXBl
KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQoreworICAgIGlmIChpczxBU1Q6OlR5cGVS
ZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpUeXBl
UmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6UG9pbnRlclR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlw
ZT4odW5uYW1lZFR5cGUpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZT4odW5uYW1lZFR5cGUpKQorICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJl
bmNlVHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzPEFT
VDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6
OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXROYW1lZFR5cGUoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKK3sKKyAgICBpZiAoaXM8QVNU
OjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNU
OjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6
OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICB2aXNpdChkb3duY2Fz
dDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4obmFtZWRUeXBlKSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIEFTU0VSVChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSk7
CisgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1l
ZFR5cGUpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpUeXBlRGVmaW5p
dGlvbiYgdHlwZURlZmluaXRpb24pCit7CisgICAgdmlzaXRVbm5hbWVkVHlwZSh0eXBlRGVmaW5p
dGlvbi50eXBlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICBmb3IgKGF1dG8mIHN0cnVjdHVy
ZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpCisgICAg
ICAgIHZpc2l0KHN0cnVjdHVyZUVsZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCit7CisgICAg
dmlzaXRVbm5hbWVkVHlwZShlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAgICBmb3Ig
KGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0
aW9uTWVtYmVycygpKQorICAgICAgICB2aXNpdChlbnVtZXJhdGlvbk1lbWJlcik7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5p
dGlvbikKK3sKKyAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24m
PihmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICB2aXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxv
Y2soKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIHZpc2l0KHN0YXRpY19j
YXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24p
KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYg
bmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDog
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKSkKKyAgICAgICAgdmlzaXQodHlw
ZUFyZ3VtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2Um
IHR5cGVSZWZlcmVuY2UpCit7CisgICAgZm9yIChhdXRvJiB0eXBlQXJndW1lbnQgOiB0eXBlUmVm
ZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkKKyAgICAgICAgdmlzaXQodHlwZUFyZ3VtZW50KTsKKyAg
ICBpZiAodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSAmJiBpczxBU1Q6OlR5cGVEZWZpbml0
aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAgIHZpc2l0VW5uYW1l
ZFR5cGUoZG93bmNhc3Q8QVNUOjpUeXBlRGVmaW5pdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2
ZWRUeXBlKCkpLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpQb2ludGVy
VHlwZSYgcG9pbnRlclR5cGUpCit7CisgICAgdmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVu
Y2VUeXBlJj4ocG9pbnRlclR5cGUpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBlKQoreworICAgIHZpc2l0KHN0YXRp
Y19jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZSY+KGFycmF5UmVmZXJlbmNlVHlwZSkpOworfQorCit2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCit7CisgICAgdmlz
aXRVbm5hbWVkVHlwZShhcnJheVR5cGUudHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpCit7CisgICAgdmlzaXRV
bm5hbWVkVHlwZShzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKSk7CisgICAgaWYgKHN0cnVjdHVyZUVs
ZW1lbnQuc2VtYW50aWMoKSkKKyAgICAgICAgdmlzaXQoKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50
aWMoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYg
ZW51bWVyYXRpb25NZW1iZXIpCit7CisgICAgaWYgKGVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkp
CisgICAgICAgIHZpc2l0KCplbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKTsKK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRp
b24pCit7CisgICAgdmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbi5hdHRyaWJ1dGVCbG9jaygpKTsK
KyAgICB2aXNpdFVubmFtZWRUeXBlKGZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICBm
b3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpKQor
ICAgICAgICB2aXNpdChwYXJhbWV0ZXIpOworICAgIGlmIChmdW5jdGlvbkRlY2xhcmF0aW9uLnNl
bWFudGljKCkpCisgICAgICAgIHZpc2l0KCpmdW5jdGlvbkRlY2xhcmF0aW9uLnNlbWFudGljKCkp
OworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBlQXJndW1l
bnQpCit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKSB7CisgICAgICAgIHZpc2l0KGNvbnN0YW50
RXhwcmVzc2lvbik7CisgICAgfSwgWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVu
Y2U+JiB0eXBlUmVmZXJlbmNlKSB7CisgICAgICAgIHZpc2l0KCp0eXBlUmVmZXJlbmNlKTsKKyAg
ICB9KSwgdHlwZUFyZ3VtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlZmVy
ZW5jZVR5cGUmIHJlZmVyZW5jZVR5cGUpCit7CisgICAgdmlzaXRVbm5hbWVkVHlwZShyZWZlcmVu
Y2VUeXBlLmVsZW1lbnRUeXBlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U2Vt
YW50aWMmIHNlbWFudGljKQoreworICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
QVNUOjpCdWlsdEluU2VtYW50aWMmIGJ1aWx0SW5TZW1hbnRpYykgeworICAgICAgICB2aXNpdChi
dWlsdEluU2VtYW50aWMpOworICAgIH0sIFsmXShBU1Q6OlJlc291cmNlU2VtYW50aWMmIHJlc291
cmNlU2VtYW50aWMpIHsKKyAgICAgICAgdmlzaXQocmVzb3VyY2VTZW1hbnRpYyk7CisgICAgfSwg
WyZdKEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJiBzcGVjaWFsaXphdGlvbkNv
bnN0YW50U2VtYW50aWMpIHsKKyAgICAgICAgdmlzaXQoc3BlY2lhbGl6YXRpb25Db25zdGFudFNl
bWFudGljKTsKKyAgICB9LCBbJl0oQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmIHN0YWdlSW5PdXRT
ZW1hbnRpYykgeworICAgICAgICB2aXNpdChzdGFnZUluT3V0U2VtYW50aWMpOworICAgIH0pLCBz
ZW1hbnRpYyk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Np
b24mIGNvbnN0YW50RXhwcmVzc2lvbikKK3sKKyAgICBjb25zdGFudEV4cHJlc3Npb24udmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwp
IHsKKyAgICAgICAgdmlzaXQoaW50ZWdlckxpdGVyYWwpOworICAgIH0sIFsmXShBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgdmlz
aXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCk7CisgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFs
JiBmbG9hdExpdGVyYWwpIHsKKyAgICAgICAgdmlzaXQoZmxvYXRMaXRlcmFsKTsKKyAgICB9LCBb
Jl0oQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIHsKKyAgICAgICAgdmlzaXQobnVsbExp
dGVyYWwpOworICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkg
eworICAgICAgICB2aXNpdChib29sZWFuTGl0ZXJhbCk7CisgICAgfSwgWyZdKEFTVDo6Q29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSB7CisgICAgICAgIHZpc2l0KGNvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKTsKKyAgICB9KSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRlQmxvY2spCit7Cisg
ICAgZm9yIChhdXRvJiBmdW5jdGlvbkF0dHJpYnV0ZSA6IGF0dHJpYnV0ZUJsb2NrKQorICAgICAg
ICB2aXNpdChmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpCdWlsdEluU2VtYW50aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UmVz
b3VyY2VTZW1hbnRpYyYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTcGVjaWFs
aXphdGlvbkNvbnN0YW50U2VtYW50aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6U3RhZ2VJbk91dFNlbWFudGljJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OkludGVnZXJMaXRlcmFsJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWwmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6Rmxv
YXRMaXRlcmFsJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok51bGxMaXRlcmFs
JikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFsJikKK3sK
K30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0
aW9uTWVtYmVyUmVmZXJlbmNlJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkZ1
bmN0aW9uQXR0cmlidXRlJiBmdW5jdGlvbkF0dHJpYnV0ZSkKK3sKKyAgICBXVEY6OnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJiBudW1U
aHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUpIHsKKyAgICAgICAgdmlzaXQobnVtVGhyZWFkc0Z1bmN0
aW9uQXR0cmlidXRlKTsKKyAgICB9KSwgZnVuY3Rpb25BdHRyaWJ1dGUpOworfQorCit2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJikKK3sKK30KKwor
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkJsb2NrJiBibG9jaykKK3sKKyAgICBmb3IgKGF1dG8m
IHN0YXRlbWVudCA6IGJsb2NrLnN0YXRlbWVudHMoKSkKKyAgICAgICAgdmlzaXQoKnN0YXRlbWVu
dCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkK
K3sKKyAgICBpZiAoaXM8QVNUOjpCbG9jaz4oc3RhdGVtZW50KSkKKyAgICAgICAgdmlzaXQoZG93
bmNhc3Q8QVNUOjpCbG9jaz4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpCcmVh
az4oc3RhdGVtZW50KSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpCcmVhaz4oc3RhdGVt
ZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSkKKyAgICAg
ICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBp
ZiAoaXM8QVNUOjpEb1doaWxlTG9vcD4oc3RhdGVtZW50KSkKKyAgICAgICAgdmlzaXQoZG93bmNh
c3Q8QVNUOjpEb1doaWxlTG9vcD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpF
ZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50PihzdGF0ZW1lbnQpKQorICAgICAgICB2aXNpdChk
b3duY2FzdDxBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOwor
ICAgIGVsc2UgaWYgKGlzPEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVudCkpCisgICAgICAgIHZp
c2l0KGRvd25jYXN0PEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYg
KGlzPEFTVDo6Rm9yTG9vcD4oc3RhdGVtZW50KSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNU
OjpGb3JMb29wPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OklmU3RhdGVtZW50
PihzdGF0ZW1lbnQpKQorICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OklmU3RhdGVtZW50Pihz
dGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlJldHVybj4oc3RhdGVtZW50KSkKKyAg
ICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpSZXR1cm4+KHN0YXRlbWVudCkpOworICAgIGVsc2Ug
aWYgKGlzPEFTVDo6U3dpdGNoQ2FzZT4oc3RhdGVtZW50KSkKKyAgICAgICAgdmlzaXQoZG93bmNh
c3Q8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlN3
aXRjaFN0YXRlbWVudD4oc3RhdGVtZW50KSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpT
d2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6VHJhcD4o
c3RhdGVtZW50KSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpUcmFwPihzdGF0ZW1lbnQp
KTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Pihz
dGF0ZW1lbnQpKQorICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlz
PEFTVDo6V2hpbGVMb29wPihzdGF0ZW1lbnQpKTsKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNU
OjpXaGlsZUxvb3A+KHN0YXRlbWVudCkpOworICAgIH0KK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OkJyZWFrJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNvbnRpbnVl
JikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxl
TG9vcCkKK3sKKyAgICB2aXNpdChkb1doaWxlTG9vcC5ib2R5KCkpOworICAgIHZpc2l0KGRvV2hp
bGVMb29wLmNvbmRpdGlvbmFsKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RXhw
cmVzc2lvbiYgZXhwcmVzc2lvbikKK3sKKyAgICBpZiAoaXM8QVNUOjpBc3NpZ25tZW50RXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6QXNzaWdubWVu
dEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkJvb2xlYW5M
aXRlcmFsPihleHByZXNzaW9uKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpCb29sZWFu
TGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6Q2FsbEV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKQorICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkNhbGxFeHByZXNz
aW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpDb21tYUV4cHJlc3Npb24+
KGV4cHJlc3Npb24pKQorICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkNvbW1hRXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNz
aW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpEZXJlZmVyZW5j
ZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkZsb2F0TGl0
ZXJhbD4oZXhwcmVzc2lvbikpCisgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6RmxvYXRMaXRl
cmFsPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbD4o
ZXhwcmVzc2lvbikpCisgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWw+
KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uPihl
eHByZXNzaW9uKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsRXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKQorICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkxvZ2ljYWxOb3RF
eHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpNYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8
QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxz
ZSBpZiAoaXM8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAg
ICB2aXNpdChkb3duY2FzdDxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
OworICAgIGVsc2UgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAg
ICB2aXNpdChkb3duY2FzdDxBU1Q6Ok51bGxMaXRlcmFsPihleHByZXNzaW9uKSk7CisgICAgZWxz
ZSBpZiAoaXM8QVNUOjpEb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgdmlzaXQo
ZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAo
aXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICB2aXNpdChkb3du
Y2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlz
PEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIHZp
c2l0KGRvd25jYXN0PEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
OworICAgIGVsc2UgaWYgKGlzPEFTVDo6VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQor
ICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlRlcm5hcnlFeHByZXNzaW9uPihleHByZXNzaW9u
KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihleHByZXNz
aW9uKSkKKyAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
PihleHByZXNzaW9uKSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlZhcmlh
YmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSk7CisgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6
VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24pKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAgIHZpc2l0
KHN0YXRpY19jYXN0PEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJj4oZG90RXhwcmVzc2lv
bikpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRl
eEV4cHJlc3Npb24pCit7CisgICAgdmlzaXQoaW5kZXhFeHByZXNzaW9uLmluZGV4RXhwcmVzc2lv
bigpKTsKKyAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
biY+KGluZGV4RXhwcmVzc2lvbikpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIHZpc2l0KGV4cHJlc3Np
b24uYmFzZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJl
c3Npb25TdGF0ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpCit7CisgICAgdmlz
aXQoZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNzaW9uKCkpOwor
fQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKQoreworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKK3sKKyAgICBXVEY6OnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQm
IHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7CisgICAgICAgIHZpc2l0KHZhcmlhYmxl
RGVjbGFyYXRpb25zU3RhdGVtZW50KTsKKyAgICB9LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6
RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24pIHsKKyAgICAgICAgdmlzaXQoKmV4cHJlc3Npb24pOwor
ICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkpOworICAgIGlmIChmb3JMb29wLmNvbmRp
dGlvbigpKQorICAgICAgICB2aXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7CisgICAgaWYgKGZv
ckxvb3AuaW5jcmVtZW50KCkpCisgICAgICAgIHZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgpKTsK
KyAgICB2aXNpdChmb3JMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCit7CisgICAgdmlzaXQoaWZTdGF0ZW1lbnQuY29u
ZGl0aW9uYWwoKSk7CisgICAgdmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKKyAgICBpZiAoaWZT
dGF0ZW1lbnQuZWxzZUJvZHkoKSkKKyAgICAgICAgdmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5
KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1l
bnQpCit7CisgICAgaWYgKHJldHVyblN0YXRlbWVudC52YWx1ZSgpKQorICAgICAgICB2aXNpdCgq
cmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6
U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBpZiAoc3dpdGNoQ2FzZS52YWx1ZSgpKQor
ICAgICAgICB2aXNpdCgqc3dpdGNoQ2FzZS52YWx1ZSgpKTsKKyAgICB2aXNpdChzd2l0Y2hDYXNl
LmJsb2NrKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50
JiBzd2l0Y2hTdGF0ZW1lbnQpCit7CisgICAgdmlzaXQoc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkp
OworICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNl
cygpKQorICAgICAgICB2aXNpdChzd2l0Y2hDYXNlKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OlRyYXAmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQorewor
ICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IHZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50LnZhcmlhYmxlRGVjbGFyYXRpb25zKCkpCisgICAgICAgIHZpc2l0KHZhcmlhYmxl
RGVjbGFyYXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6V2hpbGVMb29wJiB3
aGlsZUxvb3ApCit7CisgICAgdmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgIHZp
c2l0KHdoaWxlTG9vcC5ib2R5KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKK3sKKyAgICB2aXNpdFVubmFt
ZWRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICBpZiAodmFyaWFibGVEZWNs
YXJhdGlvbi5zZW1hbnRpYygpKQorICAgICAgICB2aXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5z
ZW1hbnRpYygpKTsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKQor
ICAgICAgICB2aXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKK30KKwor
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50
RXhwcmVzc2lvbikKK3sKKyAgICB2aXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOwor
ICAgIHZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQoreworICAgIGZv
ciAoYXV0byYgYXJndW1lbnQgOiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkKKyAgICAgICAg
dmlzaXQoKmFyZ3VtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNvbW1hRXhw
cmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQoreworICAgIGZvciAoYXV0byYgZXhwcmVzc2lvbiA6
IGNvbW1hRXhwcmVzc2lvbi5saXN0KCkpCisgICAgICAgIHZpc2l0KCpleHByZXNzaW9uKTsKK30K
Kwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZl
cmVuY2VFeHByZXNzaW9uKQoreworICAgIHZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2lu
dGVyKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24m
IGxvZ2ljYWxFeHByZXNzaW9uKQoreworICAgIHZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLmxlZnQo
KSk7CisgICAgdmlzaXQobG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Np
b24pCit7CisgICAgdmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKK30KKwor
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgdmlzaXQobWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpN
YWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKK3sKKyAgICB2aXNp
dChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZp
c2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbikKK3sKKyAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsK
KyAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhbHVlKCkpOworICAgIHZp
c2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWUoKSk7CisgICAgdmlzaXQocmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSk7CisgICAgdmlzaXQo
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHByZXNzaW9uKCkpOworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mIHRlcm5hcnlFeHByZXNzaW9u
KQoreworICAgIHZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKKyAgICB2aXNp
dCh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKKyAgICB2aXNpdCh0ZXJuYXJ5
RXhwcmVzc2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikKK3sKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaAppbmRl
eCA1MTY4NTZlNDFkMC4uZDAyMmFkY2I5YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCkBAIC0yNyw1NDMgKzI3LDE0OSBAQAog
CiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgotI2luY2x1
ZGUgIldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNM
QXJyYXlSZWZlcmVuY2VUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKLSNpbmNs
dWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xCYXNlRnVu
Y3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTEJhc2VTZW1hbnRpYy5oIgotI2luY2x1
ZGUgIldITFNMQmxvY2suaCIKLSNpbmNsdWRlICJXSExTTEJvb2xlYW5MaXRlcmFsLmgiCi0jaW5j
bHVkZSAiV0hMU0xCcmVhay5oIgotI2luY2x1ZGUgIldITFNMQnVpbHRJblNlbWFudGljLmgiCi0j
aW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMQ29tbWFFeHBy
ZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKLSNpbmNsdWRl
ICJXSExTTENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgiCi0j
aW5jbHVkZSAiV0hMU0xDb250aW51ZS5oIgotI2luY2x1ZGUgIldITFNMRGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgotI2luY2x1ZGUgIldITFNM
RG90RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRl
bWVudC5oIgotI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIgotI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5o
IgotI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIKLSNpbmNsdWRlICJXSExTTEZsb2F0TGl0
ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rp
b25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKLSNp
bmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgotI2luY2x1ZGUgIldITFNMSWZTdGF0
ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTEluZGV4RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldI
TFNMSW50ZWdlckxpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTExvZ2ljYWxFeHByZXNzaW9uLmgi
Ci0jaW5jbHVkZSAiV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNM
TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTWFrZVBvaW50
ZXJFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LmgiCi0jaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJX
SExTTE5vZGUuaCIKLSNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hM
U0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTFBhcmFtZXRl
ci5oIgotI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKLSNpbmNsdWRlICJXSExTTFByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgiCi0jaW5j
bHVkZSAiV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xS
ZWZlcmVuY2VUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGljLmgiCi0jaW5j
bHVkZSAiV0hMU0xSZXR1cm4uaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCi0jaW5jbHVk
ZSAiV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExT
TFN0YWdlSW5PdXRTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCi0jaW5j
bHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1
cmVFbGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xTd2l0Y2hDYXNlLmgiCi0jaW5jbHVkZSAiV0hM
U0xTd2l0Y2hTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFRlcm5hcnlFeHByZXNzaW9uLmgi
Ci0jaW5jbHVkZSAiV0hMU0xUcmFwLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCiAjaW5jbHVk
ZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgi
Ci0jaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiV0hMU0xVbnNpZ25l
ZEludGVnZXJMaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgotI2luY2x1ZGUgIldI
TFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJh
dGlvbnNTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCi0j
aW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKLQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5h
bWVzcGFjZSBXSExTTCB7CiAKLWNsYXNzIFZpc2l0b3IgewotICAgIH5WaXNpdG9yKCkgPSBkZWZh
dWx0OwotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KFByb2dyYW0mIHByb2dyYW0pCi0gICAgewot
ICAgICAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlv
bnMoKSkKLSAgICAgICAgICAgIHZpc2l0KHR5cGVEZWZpbml0aW9uKTsKLSAgICAgICAgZm9yIChh
dXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygp
KQotICAgICAgICAgICAgdmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7Ci0gICAgICAgIGZvciAo
YXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRp
b25zKCkpCi0gICAgICAgICAgICB2aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24pOwotICAgICAg
ICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0
aW9ucygpKQotICAgICAgICAgICAgdmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbik7Ci0gICAgICAgIGZvciAoYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHJv
Z3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdChuYXRpdmVU
eXBlRGVjbGFyYXRpb24pOwotICAgIH0KLQotICAgIHZvaWQgdmlzaXRUeXBlKEFTVDo6VHlwZSYg
dHlwZSkKLSAgICB7Ci0gICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpKQot
ICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHR5cGUpKQotICAgICAgICAgICAg
dmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odHlwZSkpOwotICAgICAgICBlbHNlIGlm
IChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odHlwZSkpCi0gICAgICAgICAgICB2aXNpdChk
b3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odHlwZSkpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OkFycmF5VHlwZT4odHlwZSkpOwotICAgICAgICAg
ICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHR5cGUpKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVm
aW5pdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZSh0eXBlRGVmaW5pdGlvbi50eXBlKCkp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24mIHN0cnVjdHVyZURlZmluaXRpb24pCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHN0cnVj
dHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpCi0g
ICAgICAgICAgICB2aXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShlbnVtZXJhdGlvbkRlZmluaXRpb24udHlw
ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGVudW1lcmF0aW9u
RGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1lbWJlcnMoKSkKLSAgICAgICAgICAgIHZpc2l0KGVudW1l
cmF0aW9uTWVtYmVyKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0
KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlv
bikpOwotICAgICAgICB2aXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KHN0YXRpY19j
YXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24p
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYg
dHlwZUFyZ3VtZW50IDogbmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKSkKLSAg
ICAgICAgICAgIHZpc2l0KHR5cGVBcmd1bWVudCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKLSAgICB7Ci0gICAgICAg
IGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkp
Ci0gICAgICAgICAgICB2aXNpdCh0eXBlQXJndW1lbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkKLSAgICB7Ci0gICAgICAg
IHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZSY+KHBvaW50ZXJUeXBlKSk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBh
cnJheVJlZmVyZW5jZVR5cGUpCi0gICAgewotICAgICAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6
OlJlZmVyZW5jZVR5cGUmPihhcnJheVJlZmVyZW5jZVR5cGUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkKLSAgICB7Ci0gICAgICAg
IHZpc2l0VHlwZShhcnJheVR5cGUudHlwZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1cmVFbGVtZW50KQotICAgIHsKLSAg
ICAgICAgdmlzaXRUeXBlKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKTsKLSAgICAgICAgaWYgKHN0
cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSkKLSAgICAgICAgICAgIHZpc2l0KCpzdHJ1Y3R1cmVF
bGVtZW50LnNlbWFudGljKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKLSAgICB7Ci0gICAgICAgIGlm
IChlbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKQotICAgICAgICAgICAgdmlzaXQoKmVudW1lcmF0
aW9uTWVtYmVyLnZhbHVlKCkpOwotICAgIH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQotICAgIHsKLSAg
ICAgICAgdmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbi5hdHRyaWJ1dGVCbG9jaygpKTsKLSAgICAg
ICAgdmlzaXRUeXBlKGZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKLSAgICAgICAgZm9yIChh
dXRvJiBwYXJhbWV0ZXIgOiBmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKSkKLSAgICAg
ICAgICAgIHZpc2l0KHBhcmFtZXRlcik7Ci0gICAgICAgIGlmIChmdW5jdGlvbkRlY2xhcmF0aW9u
LnNlbWFudGljKCkpCi0gICAgICAgICAgICB2aXNpdCgqZnVuY3Rpb25EZWNsYXJhdGlvbi5zZW1h
bnRpYygpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUeXBlQXJndW1l
bnQmIHR5cGVBcmd1bWVudCkKLSAgICB7Ci0gICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlz
aXRvcihbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikgewot
ICAgICAgICAgICAgdmlzaXQoY29uc3RhbnRFeHByZXNzaW9uKTsKLSAgICAgICAgfSwgWyZdKHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+JiB0eXBlUmVmZXJlbmNlKSB7Ci0gICAg
ICAgICAgICB2aXNpdCgqdHlwZVJlZmVyZW5jZSk7Ci0gICAgICAgIH0pLCB0eXBlQXJndW1lbnQp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmIHJl
ZmVyZW5jZVR5cGUpCi0gICAgewotICAgICAgICB2aXNpdFR5cGUocmVmZXJlbmNlVHlwZS5lbGVt
ZW50VHlwZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTZW1hbnRp
YyYgc2VtYW50aWMpCi0gICAgewotICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKEFTVDo6QnVpbHRJblNlbWFudGljJiBidWlsdEluU2VtYW50aWMpIHsKLSAgICAgICAgICAg
IHZpc2l0KGJ1aWx0SW5TZW1hbnRpYyk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OlJlc291cmNlU2Vt
YW50aWMmIHJlc291cmNlU2VtYW50aWMpIHsKLSAgICAgICAgICAgIHZpc2l0KHJlc291cmNlU2Vt
YW50aWMpOwotICAgICAgICB9LCBbJl0oQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50
aWMmIHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYykgewotICAgICAgICAgICAgdmlzaXQo
c3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6U3Rh
Z2VJbk91dFNlbWFudGljJiBzdGFnZUluT3V0U2VtYW50aWMpIHsKLSAgICAgICAgICAgIHZpc2l0
KHN0YWdlSW5PdXRTZW1hbnRpYyk7Ci0gICAgICAgIH0pLCBzZW1hbnRpYyk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4
cHJlc3Npb24pCi0gICAgewotICAgICAgICBjb25zdGFudEV4cHJlc3Npb24udmlzaXQoV1RGOjpt
YWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKLSAg
ICAgICAgICAgIHZpc2l0KGludGVnZXJMaXRlcmFsKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6VW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgewotICAgICAgICAg
ICAgdmlzaXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OkZs
b2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7Ci0gICAgICAgICAgICB2aXNpdChmbG9hdExpdGVy
YWwpOwotICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIHsKLSAg
ICAgICAgICAgIHZpc2l0KG51bGxMaXRlcmFsKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVh
bkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSB7Ci0gICAgICAgICAgICB2aXNpdChib29sZWFuTGl0
ZXJhbCk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9u
TWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZSkgewotICAgICAgICAgICAgdmlzaXQoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25N
ZW1iZXJSZWZlcmVuY2UpOwotICAgICAgICB9KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJsb2NrKQotICAgIHsKLSAgICAg
ICAgZm9yIChhdXRvJiBmdW5jdGlvbkF0dHJpYnV0ZSA6IGF0dHJpYnV0ZUJsb2NrKQotICAgICAg
ICAgICAgdmlzaXQoZnVuY3Rpb25BdHRyaWJ1dGUpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlBhcmFtZXRlciYgcGFyYW1ldGVyKQotICAgIHsKLSAgICAgICAgdmlzaXRU
eXBlKHBhcmFtZXRlci50eXBlKCkpOwotICAgICAgICBpZiAocGFyYW1ldGVyLnNlbWFudGljKCkp
Ci0gICAgICAgICAgICB2aXNpdCgqcGFyYW1ldGVyLnNlbWFudGljKCkpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmKQotICAgIHsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0
YW50U2VtYW50aWMmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpTdGFnZUluT3V0U2VtYW50aWMmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKQotICAgIHsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYpCi0gICAgewotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFsJikKLSAgICB7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKQotICAgIHsKLSAgICB9CitjbGFzcyBQcm9ncmFt
OworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgVHlwZURlZmluaXRpb247CitjbGFzcyBTdHJ1
Y3R1cmVEZWZpbml0aW9uOworY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uOworY2xhc3MgRnVu
Y3Rpb25EZWZpbml0aW9uOworY2xhc3MgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNz
IE5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKK2NsYXNzIFR5cGVSZWZlcmVuY2U7CitjbGFzcyBQb2lu
dGVyVHlwZTsKK2NsYXNzIEFycmF5UmVmZXJlbmNlVHlwZTsKK2NsYXNzIEFycmF5VHlwZTsKK2Ns
YXNzIFN0cnVjdHVyZUVsZW1lbnQ7CitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlcjsKK2NsYXNzIEZ1
bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBSZWZlcmVuY2VUeXBlOworY2xhc3MgQ29uc3RhbnRF
eHByZXNzaW9uOworY2xhc3MgQnVpbHRJblNlbWFudGljOworY2xhc3MgUmVzb3VyY2VTZW1hbnRp
YzsKK2NsYXNzIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYzsKK2NsYXNzIFN0YWdlSW5P
dXRTZW1hbnRpYzsKK2NsYXNzIEludGVnZXJMaXRlcmFsOworY2xhc3MgVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbDsKK2NsYXNzIEZsb2F0TGl0ZXJhbDsKK2NsYXNzIE51bGxMaXRlcmFsOworY2xhc3Mg
Qm9vbGVhbkxpdGVyYWw7CitjbGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZTsKK2NsYXNzIE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZTsKK2NsYXNzIEJs
b2NrOworY2xhc3MgU3RhdGVtZW50OworY2xhc3MgQnJlYWs7CitjbGFzcyBDb250aW51ZTsKK2Ns
YXNzIERvV2hpbGVMb29wOworY2xhc3MgRXhwcmVzc2lvbjsKK2NsYXNzIERvdEV4cHJlc3Npb247
CitjbGFzcyBJbmRleEV4cHJlc3Npb247CitjbGFzcyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb247
CitjbGFzcyBFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50OworY2xhc3MgRmFsbHRocm91Z2g7
CitjbGFzcyBGb3JMb29wOworY2xhc3MgSWZTdGF0ZW1lbnQ7CitjbGFzcyBSZXR1cm47CitjbGFz
cyBTd2l0Y2hDYXNlOworY2xhc3MgU3dpdGNoU3RhdGVtZW50OworY2xhc3MgVHJhcDsKK2NsYXNz
IFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50OworY2xhc3MgV2hpbGVMb29wOworY2xhc3Mg
VmFyaWFibGVEZWNsYXJhdGlvbjsKK2NsYXNzIEFzc2lnbm1lbnRFeHByZXNzaW9uOworY2xhc3Mg
Q2FsbEV4cHJlc3Npb247CitjbGFzcyBDb21tYUV4cHJlc3Npb247CitjbGFzcyBEZXJlZmVyZW5j
ZUV4cHJlc3Npb247CitjbGFzcyBMb2dpY2FsRXhwcmVzc2lvbjsKK2NsYXNzIExvZ2ljYWxOb3RF
eHByZXNzaW9uOworY2xhc3MgTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjsKK2NsYXNzIE1h
a2VQb2ludGVyRXhwcmVzc2lvbjsKK2NsYXNzIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb247Citj
bGFzcyBUZXJuYXJ5RXhwcmVzc2lvbjsKK2NsYXNzIFZhcmlhYmxlUmVmZXJlbmNlOworY2xhc3Mg
VW5uYW1lZFR5cGU7CitjbGFzcyBOYW1lZFR5cGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpGdW5jdGlvbkF0dHJpYnV0ZSYgZnVuY3Rpb25BdHRyaWJ1dGUpCi0gICAgewotICAgICAg
ICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9u
QXR0cmlidXRlJiBudW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUpIHsKLSAgICAgICAgICAgIHZp
c2l0KG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSk7Ci0gICAgICAgIH0pLCBmdW5jdGlvbkF0
dHJpYnV0ZSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TnVtVGhyZWFk
c0Z1bmN0aW9uQXR0cmlidXRlJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6QmxvY2smIGJsb2NrKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBzdGF0ZW1l
bnQgOiBibG9jay5zdGF0ZW1lbnRzKCkpCi0gICAgICAgICAgICB2aXNpdCgqc3RhdGVtZW50KTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0YXRlbWVu
dCkKLSAgICB7Ci0gICAgICAgIGlmIChpczxBU1Q6OkJsb2NrPihzdGF0ZW1lbnQpKQotICAgICAg
ICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpCbG9jaz4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVs
c2UgaWYgKGlzPEFTVDo6QnJlYWs+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3du
Y2FzdDxBU1Q6OkJyZWFrPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpD
b250aW51ZT4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6Q29u
dGludWU+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkRvV2hpbGVMb29w
PihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpEb1doaWxlTG9v
cD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6RWZmZWN0ZnVsRXhwcmVz
c2lvblN0YXRlbWVudD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFT
VDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVs
c2UgaWYgKGlzPEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNp
dChkb3duY2FzdDxBU1Q6OkZhbGx0aHJvdWdoPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXM8QVNUOjpGb3JMb29wPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNh
c3Q8QVNUOjpGb3JMb29wPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpJ
ZlN0YXRlbWVudD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6
SWZTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlJldHVy
bj4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6UmV0dXJuPihz
dGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1l
bnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1l
bnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVu
dCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlN3aXRjaFN0YXRlbWVudD4oc3Rh
dGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6VHJhcD4oc3RhdGVtZW50KSkKLSAg
ICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VHJhcD4oc3RhdGVtZW50KSk7Ci0gICAgICAg
IGVsc2UgaWYgKGlzPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVu
dCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NF
UlQoaXM8QVNUOjpXaGlsZUxvb3A+KHN0YXRlbWVudCkpOwotICAgICAgICAgICAgdmlzaXQoZG93
bmNhc3Q8QVNUOjpXaGlsZUxvb3A+KHN0YXRlbWVudCkpOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QnJlYWsmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb250aW51ZSYpCi0gICAgewotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkKLSAgICB7Ci0g
ICAgICAgIHZpc2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7Ci0gICAgICAgIHZpc2l0KGRvV2hpbGVM
b29wLmNvbmRpdGlvbmFsKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pCi0gICAgewotICAgICAgICBpZiAoaXM8QVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2Fz
dDxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzPEFTVDo6Qm9vbGVhbkxpdGVyYWw+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlz
aXQoZG93bmNhc3Q8QVNUOjpCb29sZWFuTGl0ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAgICBl
bHNlIGlmIChpczxBU1Q6OkNhbGxFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAg
IHZpc2l0KGRvd25jYXN0PEFTVDo6Q2FsbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAg
ICAgZWxzZSBpZiAoaXM8QVNUOjpDb21tYUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAg
ICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpDb21tYUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsK
LSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Np
b24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpGbG9hdExpdGVyYWw+
KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVy
YWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJh
bD4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkludGVnZXJM
aXRlcmFsPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6TG9naWNhbEV4
cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpM
b2dpY2FsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6
OkxvZ2ljYWxOb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRv
d25jYXN0PEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAg
ZWxzZSBpZiAoaXM8QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9u
KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6Ok1ha2VQb2lu
dGVyRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxB
U1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlm
IChpczxBU1Q6Ok51bGxMaXRlcmFsPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRv
d25jYXN0PEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAo
aXM8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAg
ICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KGV4cHJlc3Np
b24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
PihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6UmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6
OlRlcm5hcnlFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25j
YXN0PEFTVDo6VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSkKLSAgICAgICAg
ICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lv
bikpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlPihleHByZXNzaW9uKSk7Ci0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBl
ZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KQotICAgIHsKLSAgICAgICAgdmlzaXQoZWZmZWN0
ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNzaW9uKCkpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZhbGx0aHJvdWdoJikKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKLSAgICB7Ci0g
ICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpIHsKLSAgICAg
ICAgICAgIHZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKLSAgICAgICAgfSwg
WyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7Ci0gICAg
ICAgICAgICB2aXNpdCgqZXhwcmVzc2lvbik7Ci0gICAgICAgIH0pLCBmb3JMb29wLmluaXRpYWxp
emF0aW9uKCkpOwotICAgICAgICBpZiAoZm9yTG9vcC5jb25kaXRpb24oKSkKLSAgICAgICAgICAg
IHZpc2l0KCpmb3JMb29wLmNvbmRpdGlvbigpKTsKLSAgICAgICAgaWYgKGZvckxvb3AuaW5jcmVt
ZW50KCkpCi0gICAgICAgICAgICB2aXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7Ci0gICAgICAg
IHZpc2l0KGZvckxvb3AuYm9keSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCi0gICAgewotICAgICAgICB2aXNpdChpZlN0
YXRlbWVudC5jb25kaXRpb25hbCgpKTsKLSAgICAgICAgdmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgp
KTsKLSAgICAgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpCi0gICAgICAgICAgICB2aXNp
dCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpCi0gICAgewotICAgICAgICBpZiAocmV0
dXJuU3RhdGVtZW50LnZhbHVlKCkpCi0gICAgICAgICAgICB2aXNpdCgqcmV0dXJuU3RhdGVtZW50
LnZhbHVlKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaENh
c2UmIHN3aXRjaENhc2UpCi0gICAgewotICAgICAgICBpZiAoc3dpdGNoQ2FzZS52YWx1ZSgpKQot
ICAgICAgICAgICAgdmlzaXQoKnN3aXRjaENhc2UudmFsdWUoKSk7Ci0gICAgICAgIHZpc2l0KHN3
aXRjaENhc2UuYmxvY2soKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpCi0gICAgewotICAgICAgICB2aXNpdChz
d2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6
IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKQotICAgICAgICAgICAgdmlzaXQoc3dpdGNo
Q2FzZSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpCi0gICAg
ewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkKLSAgICB7Ci0gICAg
ICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IHZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50LnZhcmlhYmxlRGVjbGFyYXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdCh2YXJp
YWJsZURlY2xhcmF0aW9uKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpX
aGlsZUxvb3AmIHdoaWxlTG9vcCkKLSAgICB7Ci0gICAgICAgIHZpc2l0KHdoaWxlTG9vcC5jb25k
aXRpb25hbCgpKTsKLSAgICAgICAgdmlzaXQod2hpbGVMb29wLmJvZHkoKSk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVE
ZWNsYXJhdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9u
LnR5cGUoKSk7Ci0gICAgICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpCi0g
ICAgICAgICAgICB2aXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsKLSAgICAg
ICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSkKLSAgICAgICAgICAgIHZp
c2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpOwotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhw
cmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQo
KSk7Ci0gICAgICAgIHZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOwotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVz
c2lvbikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgYXJndW1lbnQgOiBjYWxsRXhwcmVzc2lv
bi5hcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHZpc2l0KCphcmd1bWVudCk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Np
b24pCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBjb21tYUV4cHJlc3Np
b24ubGlzdCgpKQotICAgICAgICAgICAgdmlzaXQoKmV4cHJlc3Npb24pOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVu
Y2VFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQoZGVyZWZlcmVuY2VFeHByZXNzaW9u
LnBvaW50ZXIoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TG9naWNh
bEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQobG9n
aWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKLSAgICAgICAgdmlzaXQobG9naWNhbEV4cHJlc3Npb24u
cmlnaHQoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbE5v
dEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQo
bG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQobWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCi0gICAgewot
ICAgICAgICB2aXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQocHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLmJhc2UoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikK
LSAgICB7Ci0gICAgICAgIHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCkp
OwotICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhbHVlKCkpOwot
ICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlKCkpOwotICAg
ICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigp
KTsKLSAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHByZXNz
aW9uKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHBy
ZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KHRlcm5hcnlF
eHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKLSAgICAgICAgdmlzaXQodGVybmFyeUV4cHJlc3Npb24u
Ym9keUV4cHJlc3Npb24oKSk7Ci0gICAgICAgIHZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VF
eHByZXNzaW9uKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlh
YmxlUmVmZXJlbmNlJikKLSAgICB7Ci0gICAgfQorfQogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYpCi0gICAgewotICAgIH0KK2NsYXNz
IFZpc2l0b3IgeworcHVibGljOgorICAgIHZpcnR1YWwgflZpc2l0b3IoKSA9IGRlZmF1bHQ7CisK
KyAgICB2b2lkIHZpc2l0VW5uYW1lZFR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUp
OworICAgIHZvaWQgdmlzaXROYW1lZFR5cGUoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSk7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVu
Y2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlN0cnVjdHVyZUVsZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJh
dGlvbk1lbWJlciYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUeXBlQXJndW1lbnQmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6U2VtYW50aWMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpD
b25zdGFudEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBdHRyaWJ1
dGVCbG9jayYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpO
dWxsTGl0ZXJhbCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFs
Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5j
dGlvbkF0dHJpYnV0ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bVRocmVhZHNG
dW5jdGlvbkF0dHJpYnV0ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6QnJlYWsmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb250
aW51ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJik7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJ
bmRleEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxF
eHByZXNzaW9uU3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RmFsbHRo
cm91Z2gmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpSZXR1cm4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hDYXNl
Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50Jik7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6V2hpbGVMb29wJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRF
eHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlJik7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNjMGUz
NjQ3MDU0Li42YThiYTFkMmE1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTMwNiw4ICszMDYsMjAgQEAg
TW9kdWxlcy93ZWJncHUvRE9NV2luZG93V2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xMZXhlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xJbnRyaW5zaWNzLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNw
cAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TE5hbWVDb250ZXh0LmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBl
Q2hlY2tlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5j
dGlvbnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVB
Y2Nlc3NvcnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJh
dGlvbkZ1bmN0aW9ucy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFy
cmF5T3BlcmF0b3JMZW5ndGguY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVDb25zdHJ1Y3RvcnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3Bw
CiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCitNb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCiBNb2R1bGVzL3dlYmdw
dS9XZWJHUFUuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVBZGFwdGVyLmNwcAogTW9kdWxlcy93
ZWJncHUvV2ViR1BVQmluZEdyb3VwTGF5b3V0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDA3YzE2ZWYxNzc1Li4wZTEyMWU4
ZTRiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNjQwMyw5ICs2NDAzLDIwIEBACiAJCTFDMjRFRUE3MUM3MkE3QjQwMDgwRjhG
QyAvKiBKU0ZvbnRGYWNlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpT
Rm9udEZhY2VTZXQuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZVNl
dC5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQzI2NDk3OTBEN0Uy
NDhBMDBCRDEwRjIgLyogRG9jdW1lbnRMb2FkZXJNYWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRMb2FkZXJNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQzMyNDkxMDFDNkQ2QTNCMDA3RURCMzIgLyogRm9udFZhcmlhbnRCdWls
ZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRWYXJpYW50
QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzZDMjFDRURB
NDIwMDBEQzlGMiAvKiBXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzMzMjc2RTIxQ0VGRjc0MDAwREM5RjIgLyogV0hMU0xSZXNvbHZlT3Zlcmxv
YWRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc2RjIxQ0YwMTMxMDAwREM5RjIgLyogV0hM
U0xJbmZlclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMSW5mZXJUeXBlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3MTIxQ0YwQkUxMDAwREM5RjIgLyogV0hMU0xO
YW1lZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1lZFR5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzIyMUNGMEQyRTAwMERDOUYyIC8qIFdITFNMVW5uYW1l
ZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xVbm5hbWVkVHlwZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQzMzMjc3NDIxRDVBNzA2MDAwREM5RjIgLyogV0hMU0xSZWN1cnNp
dmVUeXBlQ2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc1MjFENUIwRjgwMDBEQzlG
MiAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
Q2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUMzMzI3NzYyMUQ1QzA3RTAwMERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vz
c29ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzcyMUQ1Q0E4MzAwMERDOUYy
IC8qIFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDMzMyNzc4MjFENUNFRDQwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVB
cnJheU9wZXJhdG9yTGVuZ3RoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUFycmF5
T3BlcmF0b3JMZW5ndGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMzOTY5Q0Yx
Qjc0MjExRTAwMkJDRkE3IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNoZUNvcmVUZXh0LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUM2NjI2MEUxQzZFN0NBNjAwQUI1MjdDIC8qIEZvbnRGYWNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRGYWNlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2NjI2MEYxQzZFN0NBNjAwQUI1MjdDIC8qIEZv
bnRGYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRGYWNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDN0NDMjFEMjFDREUxOTgwMEMxRkEyQyAvKiBX
SExTTE5hbWVDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTmFtZUNvbnRleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIElu
c3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5z
cGVjdG9yQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1
NzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDb250cm9sbGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3Bl
Y3RvckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjE0LDYgKzEzMjI1LDkg
QEAKIAkJQzExQTlFQ0QyMTQwM0E1QzAwQ0ZCMjBBIC8qIFN3aXRjaGluZ0dQVUNsaWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTd2l0Y2hpbmdHUFVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzExQTlFRDIyMTQwNTc4QjAwQ0ZCMjBBIC8qIFN3aXRjaGluZ0dQVUNsaWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTd2l0Y2hpbmdHUFVDbGllbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDMUUxRDIzNTIwM0RGMTU0MDA1ODQ2NjUgLyogU2NyZWVuUHJv
cGVydGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JlZW5Qcm9wZXJ0aWVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMDEzMzQ0MjFEQUMwOTUwMEI2MEMyNyAvKiBXSExTTEludHJp
bnNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyMDEzMzQ2MjFEQUVFNkUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNp
Y3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwMTMzNDcyMURCNDM2MzAwQjYwQzI3IC8qIFdITFNMU3lu
dGhlc2l6ZUNvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVDb25z
dHJ1Y3RvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIwMTVDMDkxQkU2RkUy
QzAwODIyMzg5IC8qIEZvbnRWYXJpYW50QnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250VmFy
aWFudEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMEU5MTEyMUI0
QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xM
ZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMTBFOTEyMjFCNEJEMTAw
MEI3RjgzRCAvKiBXSExTTExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTGV4ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjQ1LDcgKzEzMjU5LDYgQEAKIAkJQzIxQkY3
MEMyMUNEODlDQzAwMjI3OTc5IC8qIFdITFNMRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MEQy
MUNEODlDRDAwMjI3OTc5IC8qIFdITFNMUmVmZXJlbmNlVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTFJlZmVyZW5jZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3
MEUyMUNEODlDRTAwMjI3OTc5IC8qIFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUMyMUJGNzBGMjFDRDg5Q0YwMDIyNzk3OSAvKiBXSExTTEFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xh
cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzEwMjFDRDg5RDAw
MDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
MUJGNzExMjFDRDg5RDEwMDIyNzk3OSAvKiBXSExTTFR5cGVBcmd1bWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTFR5cGVBcmd1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFCRjcxMjIxQ0Q4OUQxMDAyMjc5NzkgLyogV0hMU0xTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0hMU0xTdGF0ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjUz
LDcgKzEzMjY2LDYgQEAKIAkJQzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFyaWFi
bGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xWYXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFC
RjcxNTIxQ0Q4OUQ0MDAyMjc5NzkgLyogV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMUJGNzE2MjFDRDg5RDUwMDIyNzk3OSAvKiBXSExTTENhbGxFeHByZXNz
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ2FsbEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQzIxQkY3MTcyMUNEODlENjAwMjI3OTc5IC8qIFdITFNMUGFyYW1l
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUGFyYW1ldGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMUJGNzE4MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTERvdEV4cHJlc3Np
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xEb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyMUJGNzE5MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTFN3aXRjaENh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMUJGNzFBMjFDRDg5RDgwMDIyNzk3OSAvKiBXSExTTEJyZWFrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMQnJlYWsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEzMjk5LDE1ICsxMzMxMSwyNyBAQAogCQlDMjgwODMzRDFDNkRDMjJDMDAxNDUxQjYgLyogSlNG
b250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU0ZvbnRG
YWNlLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZS5jcHA7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUMyODA4MzNFMUM2REMyMkMwMDE0
NTFCNiAvKiBKU0ZvbnRGYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpT
Rm9udEZhY2UuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZS5oOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlDMjgwQjNGRDFFRjQ2MDg5MDBE
MzUxMzUgLyogRm9udEZhbWlseVNwZWNpZmljYXRpb25OdWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyODZFRDlFMjFEQjVBQkEwMDcxM0M0MCAvKiBX
SExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xSZXNv
bHZlT3ZlcmxvYWRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3
MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MjkyMUM4Q0E1
MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFBy
ZXBhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyQTIxQzhDQTUw
MDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUHJlcGFyZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjg4QzcyQjIxQzhDQ0MyMDAyREY1Q0Eg
LyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lUmVz
b2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyQzIxQzhDQ0My
MDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1l
UmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MkQyMUM5OTFE
QTAwMkRGNUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMVHlwZUFyZ3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJBQjBB
RjQxRTZCM0M2QzAwMTM0OEM1IC8qIEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udFNlbGVjdGlvbkFsZ29yaXRobS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQUIwQUY1MUU2QjNDNkMwMDEzNDhDNSAv
KiBGb250U2VsZWN0aW9uQWxnb3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzJBQjBCMDMxRTZERTkyQzAwMTM0OEM1IC8qIEZvbnRTZWxlY3Rpb25WYWx1ZUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRm9udFNlbGVjdGlvblZhbHVlSW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3MDIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVj
a2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTcxMjFEQjRCNDgwMDRCRTI2RSAvKiBXSExTTENoZWNr
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyQjU1MTczMjFEQjRCQkQwMDRCRTI2RSAvKiBXSExTTE5hbWVSZXNvbHZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTE5hbWVSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc0MjFEQjUxMEYwMDRCRTI2RSAvKiBXSExTTE5hbWVD
b250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTmFtZUNvbnRleHQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3NTIxREI1MjY2MDA0QkUyNkUgLyogV0hM
U0xJbmZlclR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW5mZXJUeXBlcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc2MjFEQjUzOTQwMDRCRTI2RSAv
KiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNM
UmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MkI1NTE3NzIxREI1NDBGMDA0QkUyNkUgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzgyMURCNTU3NTAwNEJFMjZFIC8q
IFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMkI1NTE3OTIxREI1NThGMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXpl
RW51bWVyYXRpb25GdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVz
aXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMkI1NTE3QTIxREI1NTlFMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRv
ckxlbmd0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxN0IyMURC
NTVBRjAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMkI1NTE3QzIxREI1N0VEMDA0QkUyNkUgLyogV0hMU0xWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyQzJDRjU1MUVGMzc2MUEwMDQyODFBOCAvKiBGb250RmFtaWx5U3Bl
Y2lmaWNhdGlvbk51bGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udEZh
bWlseVNwZWNpZmljYXRpb25OdWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
RTM4RUZCMUU4Mzk2RkQwMENBM0FERiAvKiBDU1NGb250U3R5bGVWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250U3R5bGVWYWx1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRTM4RUZDMUU4Mzk2RkQwMENBM0FERiAvKiBDU1NG
b250U3R5bGVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250
U3R5bGVWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzMzIsMTEgKzI1
MzU2LDM0IEBACiAJCQkJQzIxQkY3MzcyMUNEOEEwMjAwMjI3OTc5IC8qIFdITFNMUGFyc2VyLmNw
cCAqLywKIAkJCQlDMjFCRjczODIxQ0Q4QTAzMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuaCAqLywK
IAkJCQlDMjFCRjczQTIxQ0Q4RDcwMDAyMjc5NzkgLyogV0hMU0xQcm9ncmFtLmggKi8sCi0gCQkJ
CUMyODhDNzI3MjFDOEM2RUYwMDJERjVDQSAvKiBXSExTTFZpc2l0b3IuaCAqLywKLSAJCQkJQzI4
OEM3MjkyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8sCi0gCQkJCUMyODhD
NzJBMjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuaCAqLywKLSAJCQkJQzI4OEM3MkIy
MUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLywKLSAJCQkJQzI4OEM3
MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmggKi8sCisJCQkJQzI4OEM3
MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5oICovLAorCQkJCUMyQjU1MTdDMjFE
QjU3RUQwMDRCRTI2RSAvKiBXSExTTFZpc2l0b3IuY3BwICovLAorCQkJCUMyODhDNzI5MjFDOENB
NTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuY3BwICovLAorCQkJCUMyODhDNzJBMjFDOENBNTAw
MDJERjVDQSAvKiBXSExTTFByZXBhcmUuaCAqLywKKwkJCQlDMjg4QzcyQzIxQzhDQ0MyMDAyREY1
Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLywKKwkJCQlDMkI1NTE3MzIxREI0QkJEMDA0QkUy
NkUgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovLAorCQkJCTFDN0NDMjFEMjFDREUxOTgwMEMx
RkEyQyAvKiBXSExTTE5hbWVDb250ZXh0LmggKi8sCisJCQkJQzJCNTUxNzQyMURCNTEwRjAwNEJF
MjZFIC8qIFdITFNMTmFtZUNvbnRleHQuY3BwICovLAorCQkJCTFDMzMyNzZFMjFDRUZGNzQwMDBE
QzlGMiAvKiBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCAqLywKKwkJCQlDMjg2RUQ5RTIxREI1
QUJBMDA3MTNDNDAgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCAqLywKKwkJCQkxQzMz
Mjc2RjIxQ0YwMTMxMDAwREM5RjIgLyogV0hMU0xJbmZlclR5cGVzLmggKi8sCisJCQkJQzJCNTUx
NzUyMURCNTI2NjAwNEJFMjZFIC8qIFdITFNMSW5mZXJUeXBlcy5jcHAgKi8sCisJCQkJMUMzMzI3
NzQyMUQ1QTcwNjAwMERDOUYyIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCAqLywKKwkJ
CQlDMkI1NTE3NjIxREI1Mzk0MDA0QkUyNkUgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5j
cHAgKi8sCisJCQkJMUMzMzI3NzUyMUQ1QjBGODAwMERDOUYyIC8qIFdITFNMQ2hlY2tEdXBsaWNh
dGVGdW5jdGlvbnMuaCAqLywKKwkJCQlDMkI1NTE3NzIxREI1NDBGMDA0QkUyNkUgLyogV0hMU0xD
aGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJMUMzMzI3NzYyMUQ1QzA3RTAwMERD
OUYyIC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICovLAorCQkJCUMyQjU1
MTc4MjFEQjU1NzUwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMu
Y3BwICovLAorCQkJCTFDMzMyNzc3MjFENUNBODMwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVF
bnVtZXJhdGlvbkZ1bmN0aW9ucy5oICovLAorCQkJCUMyQjU1MTc5MjFEQjU1OEYwMDRCRTI2RSAv
KiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJMUMzMzI3
NzgyMUQ1Q0VENDAwMERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgu
aCAqLywKKwkJCQlDMkI1NTE3QTIxREI1NTlFMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplQXJy
YXlPcGVyYXRvckxlbmd0aC5jcHAgKi8sCisJCQkJQzIwMTMzNDcyMURCNDM2MzAwQjYwQzI3IC8q
IFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oICovLAorCQkJCUMyQjU1MTdCMjFEQjU1QUYw
MDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwICovLAorCQkJCUMyMDEz
MzQ0MjFEQUMwOTUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNpY3MuaCAqLywKKwkJCQlDMjAxMzM0
NjIxREFFRTZFMDBCNjBDMjcgLyogV0hMU0xJbnRyaW5zaWNzLmNwcCAqLywKKwkJCQlDMkI1NTE3
MDIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVja2VyLmNwcCAqLywKKwkJCQlDMkI1NTE3MTIx
REI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVja2VyLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IFdI
TFNMOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI1MzQ0LDcgKzI1MzkxLDYgQEAK
IAkJQzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5IC8qIEFTVCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQzIxQkY3MEYyMUNEODlDRjAwMjI3OTc5IC8qIFdI
TFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oICovLAogCQkJCUMyMUJGNzI1MjFDRDg5
RTIwMDIyNzk3OSAvKiBXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oICovLAogCQkJCUMyMUJGNzA5
MjFDRDg5Q0EwMDIyNzk3OSAvKiBXSExTTEFycmF5VHlwZS5oICovLAogCQkJCUMyMUJGNzMwMjFD
RDg5RUQwMDIyNzk3OSAvKiBXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmggKi8sCkBAIC0yNTM4
NCw3ICsyNTQzMCw2IEBACiAJCQkJQzIxQkY3MjQyMUNEODlFMTAwMjI3OTc5IC8qIFdITFNMTm9k
ZS5oICovLAogCQkJCUMyMUJGNzA3MjFDRDg5QzgwMDIyNzk3OSAvKiBXSExTTE51bGxMaXRlcmFs
LmggKi8sCiAJCQkJQzIxQkY3MjEyMUNEODlERTAwMjI3OTc5IC8qIFdITFNMTnVtVGhyZWFkc0Z1
bmN0aW9uQXR0cmlidXRlLmggKi8sCi0JCQkJQzIxQkY3MTcyMUNEODlENjAwMjI3OTc5IC8qIFdI
TFNMUGFyYW1ldGVyLmggKi8sCiAJCQkJQzIxQkY3MkYyMUNEODlFQzAwMjI3OTc5IC8qIFdITFNM
UG9pbnRlclR5cGUuaCAqLywKIAkJCQlDMjFCRjcyRTIxQ0Q4OUVBMDAyMjc5NzkgLyogV0hMU0xQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCAqLywKIAkJCQlDMjFCRjcwQjIxQ0Q4OUNDMDAyMjc5
NzkgLyogV0hMU0xRdWFsaWZpZXIuaCAqLywKQEAgLTI1NDEyLDcgKzI1NDU3LDEwIEBACiAJCQkJ
QzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQuaCAqLywKIAkJCQlDMjFCRjcxMzIxQ0Q4OUQyMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJs
ZVJlZmVyZW5jZS5oICovLAogCQkJCUMyMUJGNzA0MjFDRDg5QzYwMDIyNzk3OSAvKiBXSExTTFdo
aWxlTG9vcC5oICovLAotIAkJCQlDMjg4QzcyRDIxQzk5MURBMDAyREY1Q0EgLyogV0hMU0xUeXBl
QXJndW1lbnQuY3BwICovLAorCQkJCUMyODhDNzJEMjFDOTkxREEwMDJERjVDQSAvKiBXSExTTFR5
cGVBcmd1bWVudC5jcHAgKi8sCisJCQkJMUMzMzI3NkMyMUNFREE0MjAwMERDOUYyIC8qIFdITFNM
RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmggKi8sCisJCQkJMUMzMzI3NzEyMUNGMEJFMTAwMERD
OUYyIC8qIFdITFNMTmFtZWRUeXBlLmggKi8sCisJCQkJMUMzMzI3NzIyMUNGMEQyRTAwMERDOUYy
IC8qIFdITFNMVW5uYW1lZFR5cGUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gQVNUOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358234</attachid>
            <date>2019-01-02 18:01:34 -0800</date>
            <delta_ts>2019-01-03 02:33:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>file.txt</filename>
            <type>text/plain</type>
            <size>266690</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXggMmQ1NjdmMDBlNzAuLmViMzkw
ZTQyZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaApAQCAtMzksOCArMzks
OCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVibGlj
IFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFR5
cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgQXJy
YXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAg
ICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJs
aWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYpID0g
ZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhh
ZGRyZXNzU3BhY2UoKSksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfVFlQRShBcnJheVJlZmVyZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBl
KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShBcnJheVJlZmVy
ZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAppbmRleCA0MGI1ZjhkZjZmZS4uYTI4NzE0MDRjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBBcnJh
eVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIEFycmF5VHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlLCB1
bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgQXJyYXlUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRz
KQogICAgIHsKQEAgLTUyLDIwICs1MiwxOSBAQCBwdWJsaWM6CiAgICAgQXJyYXlUeXBlKGNvbnN0
IEFycmF5VHlwZSYpID0gZGVsZXRlOwogICAgIEFycmF5VHlwZShBcnJheVR5cGUmJikgPSBkZWZh
dWx0OwogCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVs
ZW1lbnRzOyB9Ci0KLSAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQorICAg
IGNvbnN0IFVubmFtZWRUeXBlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gKm1fZWxlbWVudFR5cGU7
IH0KKyAgICB1bnNpZ25lZCBudW1FbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtRWxlbWVu
dHM7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRl
CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRl
CiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVR5cGU+KExleGVy
OjpUb2tlbihtX29yaWdpbiksIG1fZWxlbWVudFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMp
OworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVR5cGU+KExleGVyOjpUb2tl
bihvcmlnaW4oKSksIG1fZWxlbWVudFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMpOwogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFR5cGU+IG1fZWxlbWVudFR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRU
eXBlPiBtX2VsZW1lbnRUeXBlOwogICAgIHVuc2lnbmVkIG1fbnVtRWxlbWVudHM7CiB9OwogCkBA
IC03NSw2ICs3NCw2IEBAIHByaXZhdGU6CiAKIH0KIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
SExTTF9UWVBFKEFycmF5VHlwZSwgaXNBcnJheVR5cGUoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfVU5OQU1FRF9UWVBFKEFycmF5VHlwZSwgaXNBcnJheVR5cGUoKSkKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xDYWxsRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaAppbmRleCA2NGFmNzEzMjk5Yy4uOGIyYmRhZjRiZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENhbGxFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJM
RShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTU0LDkgKzU1LDMxIEBAIHB1YmxpYzoKIAogICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+JiBhcmd1bWVudHMoKSB7IHJldHVybiBtX2FyZ3Vt
ZW50czsgfQogCisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICB2
b2lkIHNldENhc3REYXRhKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cworICAgIH0KKworICAgIGJvb2wgaGFzT3ZlcmxvYWRzKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Ym9vbD4obV9vdmVybG9hZHMpOyB9CisgICAgdm9pZCBzZXRPdmVybG9hZHMoY29uc3Qg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBv
dmVybG9hZHMpCisgICAgeworICAgICAgICBhc3NlcnQoIWhhc092ZXJsb2FkcygpKTsKKyAgICAg
ICAgbV9vdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAgfQorCisgICAgdm9pZCBzZXRGdW5jdGlv
bihGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQorICAgIHsKKyAgICAg
ICAgYXNzZXJ0KCFtX2Z1bmN0aW9uKTsKKyAgICAgICAgbV9mdW5jdGlvbiA9ICZmdW5jdGlvbkRl
Y2xhcmF0aW9uOworICAgIH0KKwogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+IG1fYXJndW1lbnRzOworICAgIE9wdGlv
bmFsPFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
Pj4gbV9vdmVybG9hZHM7CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiogbV9mdW5jdGlvbiB7IG51
bGxwdHIgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgKaW5kZXgg
YTM4YjBkNWIzYTEuLmYwNDIwNTMyNDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Np
b24uaApAQCAtNzYsMTEgKzc2LDY5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgSW50
ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPEludGVnZXJMaXRlcmFsPihtX3ZhcmlhbnQpKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6Z2V0PEludGVnZXJMaXRlcmFsPihtX3ZhcmlhbnQpOworICAgIH0KKwogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdmlzaXQoVCYmIHQpCiAgICAgewogICAgICAgICBX
VEY6OnZpc2l0KFdURk1vdmUodCksIG1fdmFyaWFudCk7CiAgICAgfQogCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gdm9pZCB2aXNpdChUJiYgdCkgY29uc3QKKyAgICB7CisgICAgICAgIFdURjo6
dmlzaXQoV1RGTW92ZSh0KSwgbV92YXJpYW50KTsKKyAgICB9CisKKyAgICBib29sIG1hdGNoZXMo
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIE9w
dGlvbmFsPGJvb2w+IHJlc3VsdDsKKyAgICAgICAgZG91YmxlIHZhbHVlOworICAgICAgICB2aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVy
YWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAg
ICAgfSwgWyZdKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxp
dGVyYWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgRmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsK
KyAgICAgICAgICAgIHZhbHVlID0gZmxvYXRMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8TnVsbExpdGVyYWw+KG90aGVyLm1fdmFyaWFudCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIHsKKyAgICAgICAgICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEJvb2xlYW5MaXRlcmFsPihvdGhlci5tX3ZhcmlhbnQp
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgYXV0byYgb3RoZXJCb29sZWFuTGl0ZXJhbCA9IFdU
Rjo6Z2V0PEJvb2xlYW5MaXRlcmFsPihvdGhlci5tX3ZhcmlhbnQpOworICAgICAgICAgICAgICAg
IHJlc3VsdCA9IGJvb2xlYW5MaXRlcmFsLnZhbHVlKCkgPT0gb3RoZXJCb29sZWFuTGl0ZXJhbC52
YWx1ZSgpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFs
c2U7CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UpIHsKKyAgICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlPihvdGhlci5tX3ZhcmlhbnQpKSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgYXV0byYgb3RoZXJNZW1iZXJSZWZlcmVuY2UgPSBXVEY6Omdl
dDxDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZT4ob3RoZXIubV92
YXJpYW50KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAmY29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKSA9PSAmb3RoZXJNZW1i
ZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9KSk7CisKKyAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAqcmVzdWx0OworCisgICAgICAgIG90aGVyLnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0
ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUgPT0gaW50ZWdlckxpdGVyYWwudmFs
dWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlID09IHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEZsb2F0TGl0
ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZSA9PSBmbG9h
dExpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IE51bGxMaXRlcmFsJikgewor
ICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIH0sIFsmXShjb25zdCBCb29sZWFu
TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9LCBbJl0o
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgfSkpOworCisgICAgICAgIEFTU0VS
VChyZXN1bHQpOworICAgICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICB9CisKIHByaXZhdGU6CiAg
ICAgVmFyaWFudDwKICAgICAgICAgSW50ZWdlckxpdGVyYWwsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UuaAppbmRleCAyYzI0YTk4YjJjYS4uMjEwMGQ3Y2E0MGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UuaApAQCAtMzYsMTAgKzM2LDEyIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5h
bWVzcGFjZSBBU1QgewogCi1jbGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVudW1lcmF0aW9uTWVtYmVyOworCitj
bGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSA6IHB1Ymxp
YyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKICAgICBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGxlZnQsIFN0
cmluZyYmIHJpZ2h0KQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICAg
ICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2xlZnQoV1RGTW92
ZShsZWZ0KSkKICAgICAgICAgLCBtX3JpZ2h0KFdURk1vdmUocmlnaHQpKQogICAgIHsKQEAgLTUw
LDEwICs1MiwzMCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UmKSA9IGRlZmF1bHQ7CiAgICAgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UmJikgPSBkZWZhdWx0OwogCisgICAgY29uc3QgU3RyaW5nJiBsZWZ0KCkgY29u
c3QgeyByZXR1cm4gbV9sZWZ0OyB9CisgICAgY29uc3QgU3RyaW5nJiByaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmlnaHQ7IH0KKworICAgIEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0
aW9uTWVtYmVyKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VudW1lcmF0aW9uTWVtYmVyKTsK
KyAgICAgICAgcmV0dXJuICptX2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIGNvbnN0
IEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2VudW1lcmF0aW9uTWVtYmVyKTsKKyAgICAgICAgcmV0dXJuICpt
X2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIHZvaWQgc2V0RW51bWVyYXRpb25NZW1i
ZXIoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAg
ICAgICBtX2VudW1lcmF0aW9uTWVtYmVyID0gJmVudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKwog
cHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3RyaW5nIG1fbGVmdDsK
ICAgICBTdHJpbmcgbV9yaWdodDsKKyAgICBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKiBtX2VudW1l
cmF0aW9uTWVtYmVyIHsgbnVsbHB0ciB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5o
CmluZGV4IGM0M2M2OWVlNTQxLi5lYmY3MjMyNmNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24u
aApAQCAtNDksNiArNDksMjUgQEAgcHVibGljOgogICAgIERvdEV4cHJlc3Npb24oY29uc3QgRG90
RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAgIERvdEV4cHJlc3Npb24oRG90RXhwcmVzc2lvbiYm
KSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRG90RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4l
cyIsIG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIFN0cmluZyBzZXRG
dW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmlu
Zzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0iLCBtX2ZpZWxkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3ImLiVzIiwgbV9maWVsZE5h
bWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgU3RyaW5nJiBmaWVsZE5hbWUoKSB7IHJl
dHVybiBtX2ZpZWxkTmFtZTsgfQorCiBwcml2YXRlOgogICAgIFN0cmluZyBtX2ZpZWxkTmFtZTsK
IH07CkBAIC01OSw0ICs3OCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19XSExTTF9FWFBSRVNTSU9OKERvdEV4cHJlc3Npb24sIGlzRG90RXhwcmVzc2lvbigpKQor
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgKaW5kZXggNzk3
MGI1OWU1NGEuLjI0YThkNTlkYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmlu
aXRpb24uaApAQCAtMjksOCArMjksMTEgQEAKIAogI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25N
ZW1iZXIuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBl
LmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwxMyArNDIsMTEgQEAgbmFtZXNw
YWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIEVudW1lcmF0aW9uRGVmaW5p
dGlvbiA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1Ymxp
YyBOYW1lZFR5cGUgewogcHVibGljOgotICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIHR5
cGUsIEVudW1lcmF0aW9uTWVtYmVycyYmIG1lbWJlcnMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RG
TW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgIEVudW1l
cmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0
ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiB0eXBlKQorICAgICAgICA6IE5hbWVkVHlwZShX
VEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlKFdURk1vdmUo
dHlwZSkpCi0gICAgICAgICwgbV9tZW1iZXJzKFdURk1vdmUobWVtYmVycykpCiAgICAgewogICAg
IH0KIApAQCAtNTQsMTQgKzU1LDM1IEBAIHB1YmxpYzoKICAgICBFbnVtZXJhdGlvbkRlZmluaXRp
b24oY29uc3QgRW51bWVyYXRpb25EZWZpbml0aW9uJikgPSBkZWxldGU7CiAgICAgRW51bWVyYXRp
b25EZWZpbml0aW9uKEVudW1lcmF0aW9uRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBU
eXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQotICAgIEVudW1lcmF0aW9uTWVtYmVycyYg
ZW51bWVyYXRpb25NZW1iZXJzKCkgeyByZXR1cm4gbV9tZW1iZXJzOyB9CisgICAgYm9vbCBpc0Vu
dW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorCisgICAgYm9vbCBh
ZGQoRW51bWVyYXRpb25NZW1iZXImJiBtZW1iZXIpCisgICAgeworICAgICAgICBhdXRvIHJlc3Vs
dCA9IG1fbWVtYmVycy5hZGQobWVtYmVyLm5hbWUoKSwgc3RkOjptYWtlX3VuaXF1ZTxFbnVtZXJh
dGlvbk1lbWJlcj4oV1RGTW92ZShtZW1iZXIpKSk7CisgICAgICAgIHJldHVybiAhcmVzdWx0Lmlz
TmV3RW50cnk7CisgICAgfQorCisgICAgRW51bWVyYXRpb25NZW1iZXIqIG1lbWJlckJ5TmFtZShj
b25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9tZW1i
ZXJzLmZpbmQobmFtZSk7CisgICAgICAgIGlmIChpdGVyYXRvciA9PSBtX21lbWJlcnMuZW5kKCkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT52
YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxF
bnVtZXJhdGlvbk1lbWJlcj4+IGVudW1lcmF0aW9uTWVtYmVycygpCisgICAgeworICAgICAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxFbnVtZXJhdGlvbk1lbWJlcj4+IHJlc3VsdDsK
KyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9tZW1iZXJzKQorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgqcGFpci52YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCiBw
cml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX3R5cGU7Ci0gICAgRW51bWVyYXRpb25NZW1iZXJz
IG1fbWVtYmVyczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IG1fdHlwZTsKKyAg
ICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEVudW1lcmF0aW9uTWVtYmVyPj4gbV9t
ZW1iZXJzOwogfTsKIAogfQpAQCAtNzAsNCArOTIsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShFbnVtZXJhdGlvbkRlZmluaXRpb24s
IGlzRW51bWVyYXRpb25EZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0
aW9uTWVtYmVyLmgKaW5kZXggOWQ5ZDg1NDg4M2UuLjRmMzg1MTk1NTA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1l
bWJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEVudW1lcmF0aW9uTWVtYmVyLmgKQEAgLTU0LDYgKzU0LDcgQEAgcHVibGljOgogICAgIEVudW1l
cmF0aW9uTWVtYmVyKGNvbnN0IEVudW1lcmF0aW9uTWVtYmVyJikgPSBkZWxldGU7CiAgICAgRW51
bWVyYXRpb25NZW1iZXIoRW51bWVyYXRpb25NZW1iZXImJikgPSBkZWZhdWx0OwogCisgICAgU3Ry
aW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgT3B0aW9uYWw8Q29uc3RhbnRFeHBy
ZXNzaW9uPiYgdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJh
dGlvbk1lbWJlckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5jOWU5NjI5Mzk4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyLmgi
CisjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBB
U1QgeworCitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwgOiBwdWJsaWMgRXhwcmVzc2lv
biB7CitwdWJsaWM6CisgICAgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKExleGVyOjpUb2tlbiYm
IG9yaWdpbiwgRW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQorICAgICAgICA6
IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fZW51bWVyYXRpb25NZW1i
ZXIoZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbCgpID0gZGVmYXVsdDsKKworICAgIGV4cGxpY2l0IEVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbChjb25zdCBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmKSA9IGRlZmF1
bHQ7CisgICAgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bCYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgRW51bWVyYXRpb25NZW1iZXIm
IGVudW1lcmF0aW9uTWVtYmVyKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbk1lbWJlcjsgfQorCitw
cml2YXRlOgorICAgIEVudW1lcmF0aW9uTWVtYmVyJiBtX2VudW1lcmF0aW9uTWVtYmVyOworfTsK
KworfQorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9FWFBSRVNTSU9O
KEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCwgaXNFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoKSkK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKaW5kZXggZTM2ODM4MzY0NmQuLmE3ODg2ZmJhNmIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRXhwcmVzc2lvbi5oCkBAIC01NSw3ICs1NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIGJvb2wgaXNDYWxsRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzQ29tbWFFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgaXNEZXJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0RvdEV4cHJlc3Npb24oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Zsb2F0TGl0ZXJhbCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzSW5kZXhFeHByZXNzaW9uKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbnRlZ2VyTGl0ZXJhbCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9naWNhbEV4cHJl
c3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0xvZ2lj
YWxOb3RFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY3LDYgKzY5LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1Rlcm5hcnlFeHByZXNzaW9uKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZEludGVnZXJMaXRl
cmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNWYXJpYWJs
ZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlz
RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogcHJp
dmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRl
Y2xhcmF0aW9uLmgKaW5kZXggN2E3ZTBhMDY1NmMuLjRiMDc2OGM5MzI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xh
cmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAiV0hM
U0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRl
ICJXSExTTE5vZGUuaCIKLSNpbmNsdWRlICJXSExTTFBhcmFtZXRlci5oIgogI2luY2x1ZGUgIldI
TFNMU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVu
bmFtZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ2
LDEwICs0NiwxMSBAQCBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBFbnRyeVBvaW50VHlwZSB7CiAg
ICAgICAgIFZlcnRleCwKICAgICAgICAgRnJhZ21lbnQsCi0gICAgICAgIENvbXB1dGUKKyAgICAg
ICAgQ29tcHV0ZSwKKyAgICAgICAgLy8gRklYTUU6IEFkZCBhbiBlbnRyeSBwb2ludCB0eXBlIGZv
ciB0ZXN0aW5nCiAgICAgfTsKIAotICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2Vu
JiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9jayYmIGF0dHJpYnV0ZUJsb2NrLCBPcHRpb25hbDxFbnRy
eVBvaW50VHlwZT4gZW50cnlQb2ludFR5cGUsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYg
dHlwZSwgU3RyaW5nJiYgbmFtZSwgUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMsIE9wdGlvbmFsPEFT
VDo6U2VtYW50aWM+JiYgc2VtYW50aWMpCisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFs
PEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBvaW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5u
YW1lZFR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgVmFyaWFibGVEZWNsYXJhdGlvbnMmJiBw
YXJhbWV0ZXJzLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFudGljKQogICAgICAgICA6
IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2F0dHJpYnV0ZUJsb2NrKFdU
Rk1vdmUoYXR0cmlidXRlQmxvY2spKQogICAgICAgICAsIG1fZW50cnlQb2ludFR5cGUoZW50cnlQ
b2ludFR5cGUpCkBAIC02NSwyNiArNjYsMzUgQEAgcHVibGljOgogICAgIEZ1bmN0aW9uRGVjbGFy
YXRpb24oY29uc3QgRnVuY3Rpb25EZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIEZ1bmN0aW9u
RGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICB2aXJ0
dWFsIGJvb2wgaXNGdW5jdGlvbkRlZmluaXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorCiAgICAgQXR0cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJsb2NrKCkgeyBy
ZXR1cm4gbV9hdHRyaWJ1dGVCbG9jazsgfQotICAgIEFTVDo6VHlwZSYgdHlwZSgpIHsgcmV0dXJu
ICptX3R5cGU7IH0KLSAgICBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJh
bWV0ZXJzOyB9CisgICAgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+JiBlbnRyeVBvaW50VHlwZSgp
IHsgcmV0dXJuIG1fZW50cnlQb2ludFR5cGU7IH0KKyAgICBjb25zdCBBU1Q6OlVubmFtZWRUeXBl
JiB0eXBlKCkgY29uc3QgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIEFTVDo6VW5uYW1lZFR5cGUm
IHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1l
OyB9CisgICAgYm9vbCBpc0Nhc3QoKSBjb25zdCB7IHJldHVybiBtX25hbWUgPT0gIm9wZXJhdG9y
IGNhc3QiOyB9CisgICAgY29uc3QgVmFyaWFibGVEZWNsYXJhdGlvbnMmIHBhcmFtZXRlcnMoKSBj
b25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyYg
cGFyYW1ldGVycygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQogICAgIE9wdGlvbmFsPEFTVDo6
U2VtYW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KIAogICAgIExleGVy
OjpUb2tlbiYmIHRha2VPcmlnaW4oKSB7IHJldHVybiBXVEZNb3ZlKG1fb3JpZ2luKTsgfQogICAg
IEF0dHJpYnV0ZUJsb2NrJiYgdGFrZUF0dHJpYnV0ZUJsb2NrKCkgeyByZXR1cm4gV1RGTW92ZSht
X2F0dHJpYnV0ZUJsb2NrKTsgfQogICAgIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiYmIHRha2VF
bnRyeVBvaW50VHlwZSgpIHsgcmV0dXJuIFdURk1vdmUobV9lbnRyeVBvaW50VHlwZSk7IH0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHRha2VUeXBlKCkgeyByZXR1cm4gV1RGTW92
ZShtX3R5cGUpOyB9CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYgdGFr
ZVR5cGUoKSB7IHJldHVybiBXVEZNb3ZlKG1fdHlwZSk7IH0KICAgICBTdHJpbmcmJiB0YWtlTmFt
ZSgpIHsgcmV0dXJuIFdURk1vdmUobV9uYW1lKTsgfQotICAgIFBhcmFtZXRlcnMmJiB0YWtlUGFy
YW1ldGVycygpIHsgcmV0dXJuIFdURk1vdmUobV9wYXJhbWV0ZXJzKTsgfQorICAgIFZhcmlhYmxl
RGVjbGFyYXRpb25zJiYgdGFrZVBhcmFtZXRlcnMoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGFyYW1l
dGVycyk7IH0KICAgICBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHRha2VTZW1hbnRpYygpIHsg
cmV0dXJuIFdURk1vdmUobV9zZW1hbnRpYyk7IH0KIAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9r
ZW4gbV9vcmlnaW47CiAgICAgQXR0cmlidXRlQmxvY2sgbV9hdHRyaWJ1dGVCbG9jazsKICAgICBP
cHRpb25hbDxFbnRyeVBvaW50VHlwZT4gbV9lbnRyeVBvaW50VHlwZTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpUeXBlPiBtX3R5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBl
PiBtX3R5cGU7CiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICBQYXJhbWV0ZXJzIG1fcGFyYW1ldGVy
czsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyBtX3BhcmFtZXRlcnM7CiAgICAgT3B0aW9uYWw8
QVNUOjpTZW1hbnRpYz4gbV9zZW1hbnRpYzsKIH07CiAKQEAgLTk0LDQgKzEwNCw5IEBAIHByaXZh
dGU6CiAKIH0KIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0ZVTkNUSU9O
X0RFQ0xBUkFUSU9OKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OldITFNMOjpBU1Q6OlRvVmFsdWVUeXBlTmFtZSkgXAor
ICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpXSExTTDo6QVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uJiB0eXBlKSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWZpbml0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlZmlu
aXRpb24uaAppbmRleCBhNDkwN2IwZDI5OC4uYjZiN2JhMDc3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1
bmN0aW9uRGVmaW5pdGlvbi5oCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICBGdW5jdGlv
bkRlZmluaXRpb24oY29uc3QgRnVuY3Rpb25EZWZpbml0aW9uJikgPSBkZWxldGU7CiAgICAgRnVu
Y3Rpb25EZWZpbml0aW9uKEZ1bmN0aW9uRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBi
b29sIGlzRnVuY3Rpb25EZWZpbml0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQorCiAgICAgQmxvY2smIGJsb2NrKCkgeyByZXR1cm4gbV9ibG9jazsgfQogICAgIGJvb2wgcmVz
dHJpY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3RlZDsgfQogCkBAIC02NCw0ICs2Niw2
IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9GVU5DVElP
Tl9ERUNMQVJBVElPTihGdW5jdGlvbkRlZmluaXRpb24sIGlzRnVuY3Rpb25EZWZpbml0aW9uKCkp
CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaAppbmRleCA2YmI2YTBmMGRhYi4u
NDNlNjBhMTA0OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCkBAIC00OSw2ICs0OSwy
NSBAQCBwdWJsaWM6CiAgICAgSW5kZXhFeHByZXNzaW9uKGNvbnN0IEluZGV4RXhwcmVzc2lvbiYp
ID0gZGVsZXRlOwogICAgIEluZGV4RXhwcmVzc2lvbihJbmRleEV4cHJlc3Npb24mJikgPSBkZWZh
dWx0OwogCisgICAgYm9vbCBpc0luZGV4RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZygib3BlcmF0b3JbXSIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworICAgIH0KKworICAgIFN0cmluZyBzZXRGdW5jdGlvbk5hbWUo
KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZygib3BlcmF0b3Im
W10iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICB9CisKKyAgICBTdHJpbmcg
YW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBT
dHJpbmcoIm9wZXJhdG9yW109IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
fQorCisgICAgRXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKCkgeyByZXR1cm4gKm1faW5kZXg7
IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9pbmRleDsK
IH07CkBAIC01OSw0ICs3OCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19XSExTTF9FWFBSRVNTSU9OKEluZGV4RXhwcmVzc2lvbiwgaXNJbmRleEV4cHJlc3Npb24o
KSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQYXJhbWV0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oCnNpbWlsYXJpdHkgaW5kZXggNjElCnJlbmFtZSBm
cm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBhcmFtZXRl
ci5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xOYW1lZFR5cGUuaAppbmRleCA5MjU4NmY4NjkxZi4uMjQ0N2VjNzRlZTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBhcmFtZXRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVk
VHlwZS5oCkBAIC0yOCwxMSArMjgsOCBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRl
ICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKLSNpbmNsdWRlICJX
SExTTFNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCiAjaW5jbHVkZSAiV0hMU0xU
eXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDEsMzkgKzM4LDQ2IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1Qgewog
Ci1jbGFzcyBQYXJhbWV0ZXIgOiBwdWJsaWMgVmFsdWUgeworY2xhc3MgTmFtZWRUeXBlIDogcHVi
bGljIFR5cGUgewogcHVibGljOgotICAgIFBhcmFtZXRlcihMZXhlcjo6VG9rZW4mJiBvcmlnaW4s
IFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5
cGUsIE9wdGlvbmFsPFN0cmluZz4mJiBuYW1lLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNl
bWFudGljKQorICAgIE5hbWVkVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5h
bWUpCiAgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fcXVh
bGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQotICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5
cGUpKQogICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAgICAgICAsIG1fc2VtYW50
aWMoV1RGTW92ZShzZW1hbnRpYykpCiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgflBhcmFt
ZXRlcigpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIH5OYW1lZFR5cGUoKSA9IGRlZmF1bHQ7CiAK
LSAgICBQYXJhbWV0ZXIoY29uc3QgUGFyYW1ldGVyJikgPSBkZWxldGU7Ci0gICAgUGFyYW1ldGVy
KFBhcmFtZXRlciYmKSA9IGRlZmF1bHQ7CisgICAgTmFtZWRUeXBlKGNvbnN0IE5hbWVkVHlwZSYp
ID0gZGVsZXRlOworICAgIE5hbWVkVHlwZShOYW1lZFR5cGUmJikgPSBkZWZhdWx0OwogCi0gICAg
VHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KLSAgICBPcHRpb25hbDxBU1Q6OlNlbWFu
dGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9CisgICAgTGV4ZXI6OlRva2Vu
JiBvcmlnaW4oKSB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0
dXJuIG1fbmFtZTsgfQorCisgICAgYm9vbCBpc05hbWVkVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBlRGVmaW5pdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU3RydWN0dXJlRGVmaW5pdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRp
b25EZWZpbml0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNOYXRpdmVUeXBlRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
dmlydHVhbCBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQog
CiBwcml2YXRlOgogICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBRdWFsaWZpZXJzIG1f
cXVhbGlmaWVyczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiBtX3R5cGU7Ci0gICAg
T3B0aW9uYWw8U3RyaW5nPiBtX25hbWU7Ci0gICAgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4gbV9z
ZW1hbnRpYzsKKyAgICBTdHJpbmcgbV9uYW1lOwogfTsKIAotdHlwZWRlZiBWZWN0b3I8UGFyYW1l
dGVyPiBQYXJhbWV0ZXJzOwotCiB9CiAKIH0KIAogfQogCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXSExTTDo6QVNUOjpUb1ZhbHVl
VHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6V0hMU0w6
OkFTVDo6TmFtZWRUeXBlJiB0eXBlKSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xf
VFlQRShOYW1lZFR5cGUsIGlzTmFtZWRUeXBlKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oCmluZGV4IDAxMGU2ZWJhNzAwLi4yNDRlODQx
MDExYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaApA
QCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiA6IHB1YmxpYyBGdW5jdGlvbkRlY2xhcmF0aW9uIHsKIHB1YmxpYzoKLSAgICBO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQXR0cmlidXRl
QmxvY2smJiBhdHRyaWJ1dGVCbG9jaywgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IGVudHJ5UG9p
bnRUeXBlLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUs
IFBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFu
dGljLCBib29sIHJlc3RyaWN0ZWQpCisgICAgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlv
bmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBvaW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6
VW5uYW1lZFR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgVmFyaWFibGVEZWNsYXJhdGlvbnMm
JiBwYXJhbWV0ZXJzLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFudGljLCBib29sIHJl
c3RyaWN0ZWQpCiAgICAgICAgIDogRnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKG9yaWdpbiks
IFdURk1vdmUoYXR0cmlidXRlQmxvY2spLCBXVEZNb3ZlKGVudHJ5UG9pbnRUeXBlKSwgV1RGTW92
ZSh0eXBlKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGTW92ZShzZW1h
bnRpYykpCiAgICAgICAgICwgbV9yZXN0cmljdGVkKHJlc3RyaWN0ZWQpCiAgICAgewpAQCAtNDgs
NiArNDgsOCBAQCBwdWJsaWM6CiAgICAgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihjb25zdCBO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJikgPSBkZWxldGU7CiAgICAgTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbihOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiYpID0gZGVmYXVsdDsKIAorICAg
IGJvb2wgaXNOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQorCiAgICAgYm9vbCByZXN0cmljdGVkKCkgY29uc3QgeyByZXR1cm4gbV9yZXN0
cmljdGVkOyB9CiAKIHByaXZhdGU6CkBAIC02MCw0ICs2Miw2IEBAIHByaXZhdGU6CiAKIH0KIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9GVU5DVElPTl9ERUNMQVJBVElPTihOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLCBpc05hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSkKKwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCmluZGV4IDMyMGFiYzNj
NDc1Li42ZWQ5OGVjNzQxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9u
LmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hM
U0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRU
eXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIApAQCAtMzgsMTEgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAK
IG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBOYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwdWJsaWMg
VHlwZSB7CitjbGFzcyBOYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsK
IHB1YmxpYzoKICAgICBOYXRpdmVUeXBlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
LCBTdHJpbmcmJiBuYW1lLCBUeXBlQXJndW1lbnRzJiYgdHlwZUFyZ3VtZW50cykKLSAgICAgICAg
OiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFt
ZSkpCisgICAgICAgIDogTmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkK
ICAgICAgICAgLCBtX3R5cGVBcmd1bWVudHMoV1RGTW92ZSh0eXBlQXJndW1lbnRzKSkKICAgICB7
CiAgICAgfQpAQCAtNTIsMTYgKzUxLDEzIEBAIHB1YmxpYzoKICAgICBOYXRpdmVUeXBlRGVjbGFy
YXRpb24oY29uc3QgTmF0aXZlVHlwZURlY2xhcmF0aW9uJikgPSBkZWxldGU7CiAgICAgTmF0aXZl
VHlwZURlY2xhcmF0aW9uKE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAg
ICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gbV90eXBlQXJndW1lbnRz
OyB9CisgICAgYm9vbCBpc05hdGl2ZVR5cGVEZWNsYXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0
IG92ZXJyaWRlCi0gICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbmFtZTsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQor
ICAgIFR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMoKSB7IHJldHVybiBtX3R5cGVBcmd1bWVu
dHM7IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3RyaW5n
IG1fbmFtZTsKICAgICBUeXBlQXJndW1lbnRzIG1fdHlwZUFyZ3VtZW50czsKIH07CkBAIC03Miw0
ICs2OCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9O
QU1FRF9UWVBFKE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgaXNOYXRpdmVUeXBlRGVjbGFyYXRpb24o
KSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAppbmRleCAxNTI5NDI2YTJlZC4uNjNjMjA5
M2M1MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFBvaW50ZXJUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaApAQCAtMzksOCArMzksOCBAQCBuYW1lc3BhY2Ug
QVNUIHsKIAogY2xhc3MgUG9pbnRlclR5cGUgOiBwdWJsaWMgUmVmZXJlbmNlVHlwZSB7CiBwdWJs
aWM6Ci0gICAgUG9pbnRlclR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBhZGRy
ZXNzU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBlbGVtZW50VHlwZSkKLSAgICAgICAgOiBS
ZWZlcmVuY2VUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShhZGRyZXNzU3BhY2UpLCBXVEZN
b3ZlKGVsZW1lbnRUeXBlKSkKKyAgICBQb2ludGVyVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4s
IEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4g
ZWxlbWVudFR5cGUpCisgICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdpbiksIGFk
ZHJlc3NTcGFjZSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCiAgICAgewogICAgIH0KIApAQCAtNDks
MTEgKzQ5LDExIEBAIHB1YmxpYzoKICAgICBQb2ludGVyVHlwZShjb25zdCBQb2ludGVyVHlwZSYp
ID0gZGVsZXRlOwogICAgIFBvaW50ZXJUeXBlKFBvaW50ZXJUeXBlJiYpID0gZGVmYXVsdDsKIAot
ICAgIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgYm9vbCBpc1BvaW50ZXJUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKICAg
ICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBvaW50ZXJUeXBlPihMZXhlcjo6
VG9rZW4ob3JpZ2luKCkpLCBTdHJpbmcoYWRkcmVzc1NwYWNlKCkpLCBlbGVtZW50VHlwZSgpLmNs
b25lKCkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQb2ludGVyVHlwZT4oTGV4
ZXI6OlRva2VuKG9yaWdpbigpKSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUo
KSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShQb2ludGVyVHlwZSwgaXNQb2ludGVy
VHlwZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoUG9pbnRl
clR5cGUsIGlzUG9pbnRlclR5cGUoKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5oCmluZGV4IGJhMzhhNWMwMWVhLi5kMDVhNzJjMWZjNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKQEAgLTUxLDEwICs1
MSwzMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0
RnVuY3Rpb25OYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHNldEZ1bmN0aW9u
TmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBhbmRGdW5jdGlvbk5hbWUoKSBj
b25zdCA9IDA7CisKKyAgICB2b2lkIHNldFBvc3NpYmxlR2V0T3ZlcmxvYWRzKGNvbnN0IFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3Zlcmxv
YWRzKQorICAgIHsKKyAgICAgICAgbV9wb3NzaWJsZUdldE92ZXJsb2FkcyA9IG92ZXJsb2FkczsK
KyAgICB9CisgICAgdm9pZCBzZXRQb3NzaWJsZVNldE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykK
KyAgICB7CisgICAgICAgIG1fcG9zc2libGVTZXRPdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAg
fQorICAgIHZvaWQgc2V0UG9zc2libGVBbmRPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMpCisgICAg
eworICAgICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAgIH0KKwog
ICAgIEV4cHJlc3Npb24mIGJhc2UoKSB7IHJldHVybiAqbV9iYXNlOyB9CiAKIHByaXZhdGU6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fYmFzZTsKKyAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZUdldE92
ZXJsb2FkczsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4gbV9wb3NzaWJsZVNldE92ZXJsb2FkczsKKyAgICBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZUFuZE92ZXJs
b2FkczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24uaAppbmRleCBhNGMxNGNlMWNmMy4uY2Q1NTYzMjBkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVO
QUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRp
b24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJX
SExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hM
U0xWYXJpYWJsZVJlZmVyZW5jZS5oIgpAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgUmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVl
X3B0cjxFeHByZXNzaW9uPiBsVmFsdWUpCiAgICAgICAgIDogRXhwcmVzc2lvbihMZXhlcjo6VG9r
ZW4ob3JpZ2luKSkKICAgICAgICAgLCBtX2xWYWx1ZShXVEZNb3ZlKGxWYWx1ZSkpCi0gICAgICAg
ICwgbV9vbGRWYWx1ZShMZXhlcjo6VG9rZW4ob3JpZ2luKSkKLSAgICAgICAgLCBtX25ld1ZhbHVl
KFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgLCBtX29sZFZhbHVlKExleGVyOjpUb2tlbihvcmln
aW4pLCBRdWFsaWZpZXJzKCksIG51bGxwdHIsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxw
dHIpCisgICAgICAgICwgbV9uZXdWYWx1ZShXVEZNb3ZlKG9yaWdpbiksIFF1YWxpZmllcnMoKSwg
bnVsbHB0ciwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cikKICAgICB7CiAgICAgfQog
CkBAIC04NywxNSArODcsMTUgQEAgcHVibGljOgogICAgIGJvb2wgaXNSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgRXhwcmVz
c2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gKm1fbFZhbHVlOyB9Ci0gICAgQW5vbnltb3VzVmFyaWFi
bGVEZWNsYXJhdGlvbiYgb2xkVmFsdWUoKSB7IHJldHVybiBtX29sZFZhbHVlOyB9Ci0gICAgQW5v
bnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYgbmV3VmFsdWUoKSB7IHJldHVybiBtX25ld1ZhbHVl
OyB9CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiYgb2xkVmFsdWUoKSB7IHJldHVybiBtX29sZFZh
bHVlOyB9CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiYgbmV3VmFsdWUoKSB7IHJldHVybiBtX25l
d1ZhbHVlOyB9CiAgICAgRXhwcmVzc2lvbiYgbmV3VmFsdWVFeHByZXNzaW9uKCkgeyByZXR1cm4g
Km1fbmV3VmFsdWVFeHByZXNzaW9uOyB9CiAgICAgRXhwcmVzc2lvbiYgcmVzdWx0RXhwcmVzc2lv
bigpIHsgcmV0dXJuICptX3Jlc3VsdEV4cHJlc3Npb247IH0KIAogcHJpdmF0ZToKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9sVmFsdWU7Ci0gICAgQW5vbnltb3VzVmFyaWFibGVE
ZWNsYXJhdGlvbiBtX29sZFZhbHVlOwotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24g
bV9uZXdWYWx1ZTsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG1fb2xkVmFsdWU7CisgICAgVmFy
aWFibGVEZWNsYXJhdGlvbiBtX25ld1ZhbHVlOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNz
aW9uPiBtX25ld1ZhbHVlRXhwcmVzc2lvbjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lv
bj4gbV9yZXN1bHRFeHByZXNzaW9uOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaAppbmRleCAy
MjU3ZjliZTI0MC4uNGU2OWY3OWI4ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgKQEAgLTI4
LDcgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5o
IgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMzcsMTEgKzM3LDE4IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1Qgewog
Ci1jbGFzcyBSZWZlcmVuY2VUeXBlIDogcHVibGljIFR5cGUgeworY2xhc3MgUmVmZXJlbmNlVHlw
ZSA6IHB1YmxpYyBVbm5hbWVkVHlwZSB7CiBwdWJsaWM6Ci0gICAgUmVmZXJlbmNlVHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRy
PFR5cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4p
KQotICAgICAgICAsIG1fYWRkcmVzc1NwYWNlKFdURk1vdmUoYWRkcmVzc1NwYWNlKSkKKyAgICBl
bnVtIGNsYXNzIEFkZHJlc3NTcGFjZSB7CisgICAgICAgIENvbnN0YW50LAorICAgICAgICBEZXZp
Y2UsCisgICAgICAgIFRocmVhZGdyb3VwLAorICAgICAgICBUaHJlYWQKKyAgICB9OworCisgICAg
UmVmZXJlbmNlVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEFkZHJlc3NTcGFjZSBhZGRyZXNz
U3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiBlbGVtZW50VHlwZSkKKyAgICAg
ICAgOiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9hZGRyZXNzU3Bh
Y2UoYWRkcmVzc1NwYWNlKQogICAgICAgICAsIG1fZWxlbWVudFR5cGUoV1RGTW92ZShlbGVtZW50
VHlwZSkpCiAgICAgewogICAgIH0KQEAgLTUwLDE4ICs1NywxNiBAQCBwdWJsaWM6CiAKICAgICBS
ZWZlcmVuY2VUeXBlKGNvbnN0IFJlZmVyZW5jZVR5cGUmKSA9IGRlbGV0ZTsKICAgICBSZWZlcmVu
Y2VUeXBlKFJlZmVyZW5jZVR5cGUmJikgPSBkZWZhdWx0OwotICAgIAotICAgIFR5cGUmIGVsZW1l
bnRUeXBlKCkgeyByZXR1cm4gKm1fZWxlbWVudFR5cGU7IH0KIAotcHJvdGVjdGVkOgotICAgIGNv
bnN0IExleGVyOjpUb2tlbiYgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KLSAg
ICBjb25zdCBTdHJpbmcmIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1Nw
YWNlOyB9Ci0gICAgY29uc3QgVHlwZSYgZWxlbWVudFR5cGUoKSBjb25zdCB7IHJldHVybiAqbV9l
bGVtZW50VHlwZTsgfQorICAgIGJvb2wgaXNSZWZlcmVuY2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KKworICAgIEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UoKSBjb25z
dCB7IHJldHVybiBtX2FkZHJlc3NTcGFjZTsgfQorICAgIGNvbnN0IFVubmFtZWRUeXBlJiBlbGVt
ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9CisgICAgVW5uYW1lZFR5
cGUmIGVsZW1lbnRUeXBlKCkgeyByZXR1cm4gKm1fZWxlbWVudFR5cGU7IH0KIAogcHJpdmF0ZToK
LSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgU3RyaW5nIG1fYWRkcmVzc1NwYWNlOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX2VsZW1lbnRUeXBlOworICAgIEFkZHJlc3NTcGFj
ZSBtX2FkZHJlc3NTcGFjZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IG1fZWxl
bWVudFR5cGU7CiB9OwogCiB9CkBAIC03MCw0ICs3NSw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoUmVmZXJlbmNlVHlwZSwgaXNS
ZWZlcmVuY2VUeXBlKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaAppbmRleCBjNWJmYzllNDI4Ni4uYWM5
MzIzZDI0MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFJldHVybi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFJldHVybi5oCkBAIC01NCw4ICs1NCwxMSBAQCBwdWJsaWM6CiAKICAgICBF
eHByZXNzaW9uKiB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KIAorICAgIHZvaWQg
c2V0RnVuY3Rpb24oRnVuY3Rpb25EZWZpbml0aW9uKiBmdW5jdGlvbkRlZmluaXRpb24pIHsgbV9m
dW5jdGlvbiA9IGZ1bmN0aW9uRGVmaW5pdGlvbjsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxFeHByZXNzaW9uPiBtX3ZhbHVlOyAvLyBudWxsYWJsZQorICAgIEZ1bmN0aW9uRGVm
aW5pdGlvbiogbV9mdW5jdGlvbjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmlu
aXRpb24uaAppbmRleCA4N2NjNjJmMjM1Ni4uYThjOThlOTliNGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xT
dHJ1Y3R1cmVEZWZpbml0aW9uLmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNM
TGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFN0cnVjdHVyZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJX
SExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMzksMTEgKzM5
LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBTdHJ1
Y3R1cmVEZWZpbml0aW9uIDogcHVibGljIFR5cGUgeworY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlv
biA6IHB1YmxpYyBOYW1lZFR5cGUgewogcHVibGljOgogICAgIFN0cnVjdHVyZURlZmluaXRpb24o
TGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1lLCBTdHJ1Y3R1cmVFbGVtZW50cyYm
IHN0cnVjdHVyZUVsZW1lbnRzKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkK
LSAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKKyAgICAgICAgOiBOYW1lZFR5cGUoV1RG
TW92ZShvcmlnaW4pLCBXVEZNb3ZlKG5hbWUpKQogICAgICAgICAsIG1fc3RydWN0dXJlRWxlbWVu
dHMoV1RGTW92ZShzdHJ1Y3R1cmVFbGVtZW50cykpCiAgICAgewogICAgIH0KQEAgLTUzLDE3ICs1
MiwxMSBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlRGVmaW5pdGlvbihjb25zdCBTdHJ1Y3R1cmVE
ZWZpbml0aW9uJikgPSBkZWxldGU7CiAgICAgU3RydWN0dXJlRGVmaW5pdGlvbihTdHJ1Y3R1cmVE
ZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKIAotICAgIFN0cnVjdHVyZUVsZW1lbnRzJiBzdHJ1Y3R1
cmVFbGVtZW50cygpIHsgcmV0dXJuIG1fc3RydWN0dXJlRWxlbWVudHM7IH0KKyAgICBib29sIGlz
U3RydWN0dXJlRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCi0gICAgewot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQorICAgIFN0cnVjdHVyZUVsZW1lbnRzJiBzdHJ1Y3R1cmVFbGVtZW50cygpIHsgcmV0dXJu
IG1fc3RydWN0dXJlRWxlbWVudHM7IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9v
cmlnaW47Ci0gICAgU3RyaW5nIG1fbmFtZTsKICAgICBTdHJ1Y3R1cmVFbGVtZW50cyBtX3N0cnVj
dHVyZUVsZW1lbnRzOwogfTsKIApAQCAtNzMsNCArNjYsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShTdHJ1Y3R1cmVEZWZpbml0aW9u
LCBpc1N0cnVjdHVyZURlZmluaXRpb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVF
bGVtZW50LmgKaW5kZXggMTRiZTQxYzcyOTguLmE4Y2JmOThkZjU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3Ry
dWN0dXJlRWxlbWVudC5oCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFz
cyBTdHJ1Y3R1cmVFbGVtZW50IDogcHVibGljIE5vZGUgewogcHVibGljOgotICAgIFN0cnVjdHVy
ZUVsZW1lbnQoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywg
c3RkOjp1bmlxdWVfcHRyPFR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgT3B0aW9uYWw8U2Vt
YW50aWM+IHNlbWFudGljKQorICAgIFN0cnVjdHVyZUVsZW1lbnQoTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBl
PiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIE9wdGlvbmFsPFNlbWFudGljPiBzZW1hbnRpYykKICAg
ICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9xdWFsaWZpZXJz
KFdURk1vdmUocXVhbGlmaWVycykpCiAgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCkBA
IC01NSwxMyArNTUsMTUgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZUVsZW1lbnQoY29uc3QgU3Ry
dWN0dXJlRWxlbWVudCYpID0gZGVsZXRlOwogICAgIFN0cnVjdHVyZUVsZW1lbnQoU3RydWN0dXJl
RWxlbWVudCYmKSA9IGRlZmF1bHQ7CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlw
ZTsgfQorICAgIExleGVyOjpUb2tlbiYgb3JpZ2luKCkgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAg
ICBVbm5hbWVkVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBjb25zdCBTdHJp
bmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KICAgICBPcHRpb25hbDxTZW1hbnRpYz4mIHNl
bWFudGljKCkgeyByZXR1cm4gbV9zZW1hbnRpYzsgfQogCiBwcml2YXRlOgogICAgIExleGVyOjpU
b2tlbiBtX29yaWdpbjsKICAgICBRdWFsaWZpZXJzIG1fcXVhbGlmaWVyczsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8VHlwZT4gbV90eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4g
bV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgT3B0aW9uYWw8U2VtYW50aWM+IG1fc2Vt
YW50aWM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZS5oCmluZGV4IGNmNGNiYzg4NzkwLi41NzNhOGJiNjhjNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGUuaApA
QCAtNDUsMTIgKzQ1LDggQEAgcHVibGljOgogICAgIFR5cGUoY29uc3QgVHlwZSYpID0gZGVsZXRl
OwogICAgIFR5cGUoVHlwZSYmKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNUeXBl
UmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQ
b2ludGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlz
QXJyYXlSZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdmlydHVh
bCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGlzTmFtZWRUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNVbm5hbWVkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKIHByaXZhdGU6CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVHlwZUFyZ3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKaW5kZXggN2U1ODAxZTNiNTYuLjFiOGFmNDFjMjk5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xUeXBlQXJndW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKQEAgLTI4LDkgKzI4LDExIEBACiAjaWYgRU5B
QkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJX
SExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCmluZGV4IGY3MzYyOWUyOWIx
Li42OWFhMjNhMWZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCkBAIC0yOSw3ICsyOSw4
IEBACiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCi0j
aW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNs
dWRlICJXSExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDExICszOSwxMCBAQCBuYW1lc3BhY2UgV0hM
U0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgVHlwZURlZmluaXRpb24gOiBwdWJsaWMg
VHlwZSB7CitjbGFzcyBUeXBlRGVmaW5pdGlvbiA6IHB1YmxpYyBOYW1lZFR5cGUgewogcHVibGlj
OgotICAgIFR5cGVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFt
ZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlKQotICAgICAgICA6IG1fb3JpZ2lu
KFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKKyAgICBU
eXBlRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUpCisgICAgICAgIDogTmFtZWRUeXBl
KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92
ZSh0eXBlKSkKICAgICB7CiAgICAgfQpAQCAtNTIsMTggKzUyLDE4IEBAIHB1YmxpYzoKICAgICBU
eXBlRGVmaW5pdGlvbihjb25zdCBUeXBlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFR5cGVE
ZWZpbml0aW9uKFR5cGVEZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKIAotICAgIEFTVDo6VHlwZSYg
dHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBib29sIGlzVHlwZURlZmluaXRpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQorICAgIEFTVDo6VW5uYW1lZFR5cGUmIHR5cGUoKSB7
IHJldHVybiAqbV90eXBlOyB9CisKKyAgICBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICBBU1NFUlQobV90eXBlKTsKKyAgICAgICAgcmV0dXJuIG1f
dHlwZS0+dW5pZnlOb2RlKCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBt
X29yaWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5
cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbV90eXBl
OwogfTsKIAogfQpAQCAtNzIsNCArNzIsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShUeXBlRGVmaW5pdGlvbiwgaXNUeXBlRGVmaW5p
dGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAppbmRleCA0OTQ0MWQ4YjVj
Ny4uOTI5M2FhMjY0ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKQEAgLTI4LDggKzI4LDkg
QEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1
ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRU
eXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTM4LDEwICszOSwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2Ug
QVNUIHsKIAotY2xhc3MgVHlwZVJlZmVyZW5jZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFR5cGVS
ZWZlcmVuY2UgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgogICAgIFR5cGVSZWZlcmVu
Y2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1lLCBUeXBlQXJndW1lbnRzJiYg
dHlwZUFyZ3VtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCisgICAg
ICAgIDogVW5uYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fbmFtZShXVEZN
b3ZlKG5hbWUpKQogICAgICAgICAsIG1fdHlwZUFyZ3VtZW50cyhXVEZNb3ZlKHR5cGVBcmd1bWVu
dHMpKQogICAgIHsKQEAgLTUyLDI0ICs1Myw0NyBAQCBwdWJsaWM6CiAgICAgVHlwZVJlZmVyZW5j
ZShjb25zdCBUeXBlUmVmZXJlbmNlJikgPSBkZWxldGU7CiAgICAgVHlwZVJlZmVyZW5jZShUeXBl
UmVmZXJlbmNlJiYpID0gZGVmYXVsdDsKIAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZVJlZmVyZW5jZT4gd3JhcChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIE5hbWVkVHlwZSYgcmVzb2x2
ZWRUeXBlKQorICAgIHsKKyAgICAgICAgVHlwZUFyZ3VtZW50cyB0eXBlQXJndW1lbnRzOworICAg
ICAgICBpZiAoaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihyZXNvbHZlZFR5cGUpKQorICAgICAg
ICAgICAgdHlwZUFyZ3VtZW50cyA9IEFTVDo6Y2xvbmUoZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihyZXNvbHZlZFR5cGUpLnR5cGVBcmd1bWVudHMoKSk7CisgICAgICAgIGF1dG8gcmVz
dWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKG9yaWdpbiksIFN0
cmluZyhyZXNvbHZlZFR5cGUubmFtZSgpKSwgV1RGTW92ZSh0eXBlQXJndW1lbnRzKSk7CisgICAg
ICAgIHJlc3VsdC0+c2V0UmVzb2x2ZWRUeXBlKHJlc29sdmVkVHlwZSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCiAgICAgYm9vbCBpc1R5cGVSZWZlcmVuY2UoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25h
bWU7IH0KICAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gbV90eXBl
QXJndW1lbnRzOyB9CisgICAgTmFtZWRUeXBlKiByZXNvbHZlZFR5cGUoKSB7IHJldHVybiBtX3Jl
c29sdmVkVHlwZTsgfQorCisgICAgY29uc3QgVHlwZSYgdW5pZnlOb2RlKCkgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Jlc29sdmVkVHlwZSk7CisgICAgICAgIHJldHVy
biBtX3Jlc29sdmVkVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
UmVzb2x2ZWRUeXBlKE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBlKQorICAgIHsKKyAgICAgICAgbV9y
ZXNvbHZlZFR5cGUgPSAmcmVzb2x2ZWRUeXBlOworICAgIH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlUmVmZXJlbmNlPiBjbG9uZVR5cGVSZWZlcmVuY2UoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VHlwZVJlZmVyZW5jZT4oTGV4ZXI6OlRva2VuKG1f
b3JpZ2luKSwgU3RyaW5nKG1fbmFtZSksIEFTVDo6Y2xvbmUobV90eXBlQXJndW1lbnRzKSk7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVSZWZlcmVuY2U+KExleGVyOjpUb2tl
bihvcmlnaW4oKSksIFN0cmluZyhtX25hbWUpLCBBU1Q6OmNsb25lKG1fdHlwZUFyZ3VtZW50cykp
OwogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCiAgICAgewogICAgICAgICByZXR1cm4gY2xvbmVUeXBlUmVmZXJlbmNlKCk7CiAgICAgfQog
CiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9uYW1l
OwogICAgIFR5cGVBcmd1bWVudHMgbV90eXBlQXJndW1lbnRzOworICAgIE5hbWVkVHlwZSogbV9y
ZXNvbHZlZFR5cGUgeyBudWxscHRyIH07CiB9OwogCiB9CkBAIC03OCw2ICsxMDIsNiBAQCBwcml2
YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShUeXBlUmVmZXJl
bmNlLCBpc1R5cGVSZWZlcmVuY2UoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5O
QU1FRF9UWVBFKFR5cGVSZWZlcmVuY2UsIGlzVHlwZVJlZmVyZW5jZSgpKQogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVu
bmFtZWRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xVbm5hbWVkVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43
M2E4ZjBhMGM0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgVW5uYW1l
ZFR5cGUgOiBwdWJsaWMgVHlwZSB7CitwdWJsaWM6CisgICAgVW5uYW1lZFR5cGUoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luKQorICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB+VW5uYW1lZFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBV
bm5hbWVkVHlwZShjb25zdCBVbm5hbWVkVHlwZSYpID0gZGVsZXRlOworICAgIFVubmFtZWRUeXBl
KFVubmFtZWRUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNVbm5hbWVkVHlwZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBlUmVm
ZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNQb2lu
dGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQXJy
YXlSZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1JlZmVyZW5jZVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVh
bCBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorCisgICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOwor
CisgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdp
bjsgfQorCitwcml2YXRlOgorICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKK307CisKK30KKwor
fQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZ
UEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGlj
IGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6OlVubmFtZWRUeXBlJiB0eXBl
KSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShVbm5hbWVkVHlwZSwgaXNV
bm5hbWVkVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24u
aAppbmRleCBmZjAzNjgxOTNiZC4uODUyMGNhZGNjMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNz
IFZhcmlhYmxlRGVjbGFyYXRpb24gOiBwdWJsaWMgVmFsdWUgewogcHVibGljOgotICAgIFZhcmlh
YmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlm
aWVycywgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBP
cHRpb25hbDxTZW1hbnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
JiYgaW5pdGlhbGl6ZXIpCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBv
cmlnaW4sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5h
bWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4mJiBzZW1h
bnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5pdGlhbGl6ZXIpCiAgICAgICAg
IDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZN
b3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAtNjAs
MjAgKzYwLDIzIEBAIHB1YmxpYzoKICAgICBWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVj
bGFyYXRpb24mJikgPSBkZWZhdWx0OwogCiAgICAgTGV4ZXI6OlRva2VuIG9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1l
OyB9CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIFVubmFtZWRU
eXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQogICAgIE9wdGlvbmFsPFNlbWFudGljPiYg
c2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9CiAgICAgRXhwcmVzc2lvbiogaW5pdGlh
bGl6ZXIoKSB7IHJldHVybiBtX2luaXRpYWxpemVyLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAg
TGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIFF1YWxpZmllcnMgbV9xdWFsaWZpZXJzOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpVbm5hbWVkVHlwZT4gbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgT3B0aW9u
YWw8U2VtYW50aWM+IG1fc2VtYW50aWM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
IG1faW5pdGlhbGl6ZXI7CiB9OwogCit0eXBlZGVmIFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9u
PiBWYXJpYWJsZURlY2xhcmF0aW9uczsKKwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZl
cmVuY2UuaAppbmRleCAyYWU4MjhkNTI5NS4uZTM5ZWNmNWM1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFy
aWFibGVSZWZlcmVuY2UuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkK
IAotI2luY2x1ZGUgIldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lv
bi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVj
bGFyYXRpb24uaCIKQEAgLTU1LDE5ICs1NSwyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFZhcmlh
YmxlUmVmZXJlbmNlIHdyYXAoVmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlv
bikKICAgICB7CiAgICAgICAgIFZhcmlhYmxlUmVmZXJlbmNlIHJlc3VsdChMZXhlcjo6VG9rZW4o
dmFyaWFibGVEZWNsYXJhdGlvbi5vcmlnaW4oKSkpOwotICAgICAgICByZXN1bHQubV92YXJpYWJs
ZSA9IHsgJnZhcmlhYmxlRGVjbGFyYXRpb24gfTsKKyAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUg
PSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
LSAgICBzdGF0aWMgVmFyaWFibGVSZWZlcmVuY2Ugd3JhcChBbm9ueW1vdXNWYXJpYWJsZURlY2xh
cmF0aW9uJiBhbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKQorICAgIGJvb2wgaXNWYXJpYWJs
ZVJlZmVyZW5jZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmlu
ZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiog
dmFyaWFibGUoKSB7IHJldHVybiBtX3ZhcmlhYmxlOyB9CisKKyAgICB2b2lkIHNldFZhcmlhYmxl
KFZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgewotICAgICAg
ICBWYXJpYWJsZVJlZmVyZW5jZSByZXN1bHQoTGV4ZXI6OlRva2VuKGFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24ub3JpZ2luKCkpKTsKLSAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSB7ICZh
bm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uIH07Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIG1fdmFyaWFibGUgPSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKICAgICB9CiAKLSAgICBi
b29sIGlzVmFyaWFibGVSZWZlcmVuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
Ci0KIHByaXZhdGU6CiAgICAgVmFyaWFibGVSZWZlcmVuY2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
KQogICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQpAQCAtNzUsNyArNzcsNyBA
QCBwcml2YXRlOgogICAgIH0KIAogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgT3B0aW9uYWw8VmFy
aWFudDxWYXJpYWJsZURlY2xhcmF0aW9uKiwgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbio+
PiBtX3ZhcmlhYmxlOworICAgIFZhcmlhYmxlRGVjbGFyYXRpb24qIG1fdmFyaWFibGU7CiB9Owog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42ZDVlZjM3NTY3NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMuY3BwCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTENoZWNrRHVwbGlj
YXRlRnVuY3Rpb25zLmgiCisKKyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgor
I2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgi
CisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIFdITFNMIHsKKworYm9vbCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25z
dCBQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4+IGZ1bmN0aW9uczsKKyAgICBmb3IgKGF1dG8mIGZ1
bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAg
ICBmdW5jdGlvbnMuYXBwZW5kKCpmdW5jdGlvbkRlZmluaXRpb24pOworICAgIGZvciAoYXV0byYg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbnMoKSkKKyAgICAgICAgZnVuY3Rpb25zLmFwcGVuZCgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbik7CisKKyAgICBzdGQ6OnNvcnQoZnVuY3Rpb25zLmJlZ2luKCksIGZ1bmN0aW9ucy5lbmQo
KSwgW10oY29uc3QgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBhLCBjb25zdCBBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24mIGIpIC0+IGJvb2wgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RkOjptaW4oYS5uYW1lKCkubGVuZ3RoKCksIGIubmFtZSgpLmxlbmd0aCgpKTsgKytp
KSB7CisgICAgICAgICAgICBpZiAoYS5uYW1lKClbaV0gPCBiLm5hbWUoKVtpXSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChhLm5hbWUoKVtpXSA+IGIubmFt
ZSgpW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gYS5uYW1lKCkubGVuZ3RoKCkgPCBiLm5hbWUoKS5sZW5ndGgoKTsKKyAgICB9KTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkgeworICAg
ICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpICE9IGZ1bmN0aW9uc1tq
XS5nZXQoKS5uYW1lKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAo
aXM8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihmdW5jdGlvbnNbaV0uZ2V0KCkpICYm
IGlzPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oZnVuY3Rpb25zW2pdLmdldCgpKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0u
Z2V0KCkucGFyYW1ldGVycygpLnNpemUoKSAhPSBmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVy
cygpLnNpemUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChm
dW5jdGlvbnNbaV0uZ2V0KCkuaXNDYXN0KCkpIHsKKyAgICAgICAgICAgICAgICBib29sIHNhbWUg
PSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCku
dHlwZSgpLCBmdW5jdGlvbnNbal0uZ2V0KCkudHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
c2FtZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCku
c2l6ZSgpOyArK2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5j
dGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSwgZnVuY3Rpb25zW2pdLmdldCgp
LnBhcmFtZXRlcnMoKVtrXS50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2FtZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChzYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJvb2wgc2Ft
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBmdW5jdGlv
bnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKTsgKytrKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUo
KSwgZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50eXBlKCkpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzYW1lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoc2FtZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoZnVuY3Rpb25zW2ld
LmdldCgpLm5hbWUoKSA9PSAib3BlcmF0b3ImW10iICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJh
bWV0ZXJzKCkuc2l6ZSgpID09IDIKKyAgICAgICAgICAgICYmIGlzPEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlPihmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpIHsKKyAg
ICAgICAgICAgIGF1dG8mIHR5cGUgPSBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFd
LnR5cGUoKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHJlc29sdmVkVHlwZSA9IGRvd25jYXN0PEFTVDo6
VHlwZVJlZmVyZW5jZT4odHlwZSkucmVzb2x2ZWRUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqcmVzb2x2ZWRUeXBlKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93
bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCpyZXNvbHZlZFR5cGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVp
bnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgi
ICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEKKyAgICAgICAg
ICAgICYmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpCisgICAgICAgICAgICB8fCBpczxBU1Q6OkFycmF5VHlwZT4o
ZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUo
KSA9PSAib3BlcmF0b3I9PSIKKyAgICAgICAgICAgICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJh
bWV0ZXJzKCkuc2l6ZSgpID09IDIKKyAgICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlw
ZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpCisgICAgICAgICAg
ICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJz
KClbMV0udHlwZSgpKQorICAgICAgICAgICAgJiYgbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCku
cGFyYW1ldGVycygpWzBdLnR5cGUoKSwgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsx
XS50eXBlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0
aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ZWNlZTc4MmM1
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaApAQCAtMCwwICsxLDQzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hM
U0xQcm9ncmFtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsK
KworYm9vbCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJik7CisKK30KKwor
fQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMQ2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmM1MThjNDc4NDIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV0hMU0xDaGVja2VyLmgiCisKKyNpbmNsdWRlICJXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVt
cy5oIgorI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMVmlzaXRvci5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3Mg
Q2hlY2tlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBDaGVja2VyKFByb2dyYW0m
IHByb2dyYW0pCisgICAgICAgIDogbV9wcm9ncmFtKHByb2dyYW0pCisgICAgeworICAgIH0KKwor
ICAgIH5DaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChQcm9ncmFtJiBwcm9n
cmFtKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6
IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoKnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0
aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKQorICAgICAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KCpzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBl
bnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkK
KyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZW51bWVyYXRpb25EZWZpbml0aW9uKTsK
KyAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqbmF0
aXZlVHlwZURlY2xhcmF0aW9uKTsKKworICAgICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5p
dGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KCpmdW5jdGlvbkRlZmluaXRpb24pOworICAgICAgICBmb3IgKGF1dG8mIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b25zKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGNoZWNrU2hhZGVyVHlwZShB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoICgqZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbjo6RW50cnlQb2ludFR5cGU6OlZlcnRleDoK
KyAgICAgICAgICAgIHJldHVybiAhbV92ZXJ0ZXhFbnRyeVBvaW50cy5hZGQoZnVuY3Rpb25EZWZp
bml0aW9uLm5hbWUoKSkuaXNOZXdFbnRyeTsKKyAgICAgICAgY2FzZSBBU1Q6OkZ1bmN0aW9uRGVm
aW5pdGlvbjo6RW50cnlQb2ludFR5cGU6OkZyYWdtZW50OgorICAgICAgICAgICAgcmV0dXJuICFt
X2ZyYWdtZW50RW50cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpLmlzTmV3
RW50cnk7CisgICAgICAgIGNhc2UgQVNUOjpGdW5jdGlvbkRlZmluaXRpb246OkVudHJ5UG9pbnRU
eXBlOjpDb21wdXRlOgorICAgICAgICAgICAgcmV0dXJuICFtX2NvbXB1dGVFbnRyeVBvaW50cy5h
ZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkuaXNOZXdFbnRyeTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGJvb2wgY2hlY2tTZW1hbnRpY3MoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKQor
ICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJikKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICAgICAgICAg
IGlmICghY2hlY2tTaGFkZXJUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKKyAgICAgICAgICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY3MoZnVuY3Rpb25EZWZpbml0aW9uKSkgewor
ICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghY2hlY2tPcGVyYXRvck92ZXJsb2Fk
KGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVu
Y3Rpb25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRp
b25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlBv
aW50ZXJUeXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZvbGxvd2luZyBwb2ludGVy
IHR5cGVzIGNhbiBjYXVzZSBpbmZpbml0ZSBsb29wcyBiZWNhdXNlIG9mIGRhdGEgc3RydWN0dXJl
cworICAgICAgICAvLyBsaWtlIGxpbmtlZCBsaXN0cy4KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZv
bGxvd2luZyBhcnJheSByZWZlcmVuY2UgdHlwZXMgY2FuIGNhdXNlIGluZmluaXRlIGxvb3BzIGJl
Y2F1c2Ugb2YgZGF0YQorICAgICAgICAvLyBzdHJ1Y3R1cmVzIGxpa2UgbGlua2VkIGxpc3RzLgor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNl
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRU
eXBlKCkpOworCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlUmVmZXJlbmNlKTsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogRGVsZXRlIHRoaXMgYXMgc29vbiBhcyBtX3Byb2dyYW0gaXMg
dXNlZC4KKyAgICBQcm9ncmFtJiBwcm9ncmFtKCkgeyByZXR1cm4gbV9wcm9ncmFtOyB9CisKK3By
aXZhdGU6CisgICAgSGFzaFNldDxTdHJpbmc+IG1fdmVydGV4RW50cnlQb2ludHM7CisgICAgSGFz
aFNldDxTdHJpbmc+IG1fZnJhZ21lbnRFbnRyeVBvaW50czsKKyAgICBIYXNoU2V0PFN0cmluZz4g
bV9jb21wdXRlRW50cnlQb2ludHM7CisgICAgUHJvZ3JhbSYgbV9wcm9ncmFtOworfTsKKworYm9v
bCBjaGVjayhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIENoZWNrZXIgY2hlY2tlcihwcm9ncmFt
KTsKKyAgICBjaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtKTsKKyAgICByZXR1cm4g
IWNoZWNrZXIuZXJyb3IoKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWQyNjhkNzM0MWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuaApAQCAt
MCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNz
IFByb2dyYW07CisKK2Jvb2wgY2hlY2soUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhl
ckVudHJ5UG9pbnRJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjI5NzUyMDNlNDMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3Bw
CkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgi
CisKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBHYXRo
ZXJlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBHYXRoZXJlcihQcm9ncmFtJiBw
cm9ncmFtLCBBU1Q6OlNlbWFudGljKiBzZW1hbnRpYyA9IG51bGxwdHIpCisgICAgICAgIDogbV9w
cm9ncmFtKHByb2dyYW0pCisgICAgICAgICwgbV9jdXJyZW50U2VtYW50aWMoc2VtYW50aWMpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkdhdGhlcmVyKCkgPSBkZWZhdWx0OworCisgICAg
Ly8gRklYTUU6IERlbGV0ZSB0aGlzIHdoZW4gbV9wcm9ncmFtIGlzIHVzZWQuCisgICAgUHJvZ3Jh
bSYgcHJvZ3JhbSgpIHsgcmV0dXJuIG1fcHJvZ3JhbTsgfQorCisgICAgdm9pZCByZXNldCgpCisg
ICAgeworICAgICAgICBtX2N1cnJlbnRTZW1hbnRpYyA9IG51bGxwdHI7CisgICAgfQorCisgICAg
VmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYmIHRha2VFbnRyeVBvaW50SXRlbXMoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdURk1vdmUobV9lbnRyeVBvaW50SXRlbXMpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBQcm9ncmFtJiBtX3Byb2dyYW07CisgICAgQVNUOjpTZW1hbnRpYyogbV9jdXJyZW50
U2VtYW50aWMgeyBudWxscHRyIH07CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBtX2VudHJ5
UG9pbnRJdGVtczsKK307CisKK0VudHJ5UG9pbnRJdGVtcyBnYXRoZXJFbnRyeVBvaW50SXRlbXMo
UHJvZ3JhbSYgcHJvZ3JhbSwgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5p
dGlvbikKK3sKKyAgICBBU1NFUlQoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkp
OworICAgIEdhdGhlcmVyIGlucHV0R2F0aGVyZXIocHJvZ3JhbSk7CisgICAgZm9yIChhdXRvJiBw
YXJhbWV0ZXIgOiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpKSB7CisgICAgICAgIGlu
cHV0R2F0aGVyZXIucmVzZXQoKTsKKyAgICAgICAgaW5wdXRHYXRoZXJlci5jaGVja0Vycm9yQW5k
VmlzaXQocGFyYW1ldGVyKTsKKyAgICB9CisgICAgR2F0aGVyZXIgb3V0cHV0R2F0aGVyZXIocHJv
Z3JhbSwgZnVuY3Rpb25EZWZpbml0aW9uLnNlbWFudGljKCkgPyAmKmZ1bmN0aW9uRGVmaW5pdGlv
bi5zZW1hbnRpYygpIDogbnVsbHB0cik7CisgICAgb3V0cHV0R2F0aGVyZXIuY2hlY2tFcnJvckFu
ZFZpc2l0VW5uYW1lZFR5cGUoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7CisKKyAgICByZXR1
cm4geyBpbnB1dEdhdGhlcmVyLnRha2VFbnRyeVBvaW50SXRlbXMoKSwgb3V0cHV0R2F0aGVyZXIu
dGFrZUVudHJ5UG9pbnRJdGVtcygpIH07Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFub255bW91
c1ZhcmlhYmxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKc2ltaWxhcml0eSBpbmRleCA3NCUKcmVu
YW1lIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQW5v
bnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oCmluZGV4IGVmNjFl
ZDEyNjE5Li45ZTQwYjM3MzQ1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2lu
dEl0ZW1zLmgKQEAgLTI3LDggKzI3LDggQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNs
dWRlICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgorI2luY2x1ZGUgIldI
TFNMU2VtYW50aWMuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzYsMjUgKzM2LDMwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFj
ZSBBU1QgewogCi1jbGFzcyBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uIDogcHVibGljIFZh
bHVlIHsKLXB1YmxpYzoKLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpU
b2tlbiYmIG9yaWdpbikKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAg
ewotICAgIH0KK2NsYXNzIEZ1bmN0aW9uRGVmaW5pdGlvbjsKKworfQogCi0gICAgdmlydHVhbCB+
QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbigpID0gZGVmYXVsdDsKK2NsYXNzIFByb2dyYW07
CitjbGFzcyBVbm5hbWVkVHlwZTsKIAotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24o
Y29uc3QgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYpID0gZGVsZXRlOwotICAgIEFub255
bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYmKSA9
IGRlZmF1bHQ7CitzdHJ1Y3QgRW50cnlQb2ludEl0ZW0geworICAgIEVudHJ5UG9pbnRJdGVtKEFT
VDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBBU1Q6OlNlbWFudGljJiBzZW1hbnRpYykKKyAg
ICAgICAgOiB1bm5hbWVkVHlwZSh1bm5hbWVkVHlwZSkKKyAgICAgICAgLCBzZW1hbnRpYyhzZW1h
bnRpYykKKyAgICB7CisgICAgfQogCi0gICAgTGV4ZXI6OlRva2VuIG9yaWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fb3JpZ2luOyB9CisgICAgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGU7Cisg
ICAgQVNUOjpTZW1hbnRpYyYgc2VtYW50aWM7Cit9OwogCi1wcml2YXRlOgotICAgIExleGVyOjpU
b2tlbiBtX29yaWdpbjsKK3N0cnVjdCBFbnRyeVBvaW50SXRlbXMgeworICAgIFZlY3RvcjxFbnRy
eVBvaW50SXRlbT4gaW5wdXRzOworICAgIFZlY3RvcjxFbnRyeVBvaW50SXRlbT4gb3V0cHV0czsK
IH07CiAKLX0KK0VudHJ5UG9pbnRJdGVtcyBnYXRoZXJFbnRyeVBvaW50SXRlbXMoUHJvZ3JhbSYs
IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjNhNzc3OTU2NjI2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVz
LmNwcApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisKKyNp
bmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIHVu
bmFtZWRUeXBlLCBjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiBvdGhlcikKK3sKKyAgICBhdXRvJiB1
bmlmeVRoaXMgPSB1bm5hbWVkVHlwZS51bmlmeU5vZGUoKTsKKyAgICBhdXRvJiB1bmlmeU90aGVy
ID0gb3RoZXIudW5pZnlOb2RlKCk7CisKKyAgICBpZiAoJnVuaWZ5VGhpcyA9PSAmdW5pZnlPdGhl
cikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVu
aWZ5VGhpcykgJiYgaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5T3RoZXIpKSB7CisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorICAgICAgICBhdXRvJiBuYW1lZFRoaXMgPSBkb3duY2FzdDxBU1Q6Ok5hbWVk
VHlwZT4odW5pZnlUaGlzKTsKKyAgICAgICAgYXV0byYgbmFtZWRPdGhlciA9IGRvd25jYXN0PEFT
VDo6TmFtZWRUeXBlPih1bmlmeU90aGVyKTsKKyAgICAgICAgQVNTRVJUKCFpczxBU1Q6OlR5cGVE
ZWZpbml0aW9uPihuYW1lZFRoaXMpICYmICFpczxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZE90
aGVyKSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAoaXM8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlUaGlzKSAmJiBpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlm
eU90aGVyKSkgeworICAgICAgICBhdXRvJiB1bm5hbWVkVGhpcyA9IGRvd25jYXN0PEFTVDo6VW5u
YW1lZFR5cGU+KHVuaWZ5VGhpcyk7CisgICAgICAgIGF1dG8mIHVubmFtZWRPdGhlciA9IGRvd25j
YXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5T3RoZXIpOworICAgICAgICBBU1NFUlQoIWlzPEFT
VDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFRoaXMpICYmICFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+
KHVubmFtZWRPdGhlcikpOworICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1l
ZFRoaXMpICYmIGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRPdGhlcikpIHsKKyAgICAgICAg
ICAgIGF1dG8mIHBvaW50ZXJUaGlzID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1l
ZFRoaXMpOworICAgICAgICAgICAgYXV0byYgcG9pbnRlck90aGVyID0gZG93bmNhc3Q8QVNUOjpQ
b2ludGVyVHlwZT4odW5uYW1lZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChwb2ludGVyVGhpcy5h
ZGRyZXNzU3BhY2UoKSAhPSBwb2ludGVyT3RoZXIuYWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMocG9pbnRlclRo
aXMuZWxlbWVudFR5cGUoKSwgcG9pbnRlck90aGVyLmVsZW1lbnRUeXBlKCkpOworICAgICAgICB9
CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFRoaXMpICYm
IGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkT3RoZXIpKXsKKyAgICAgICAgICAg
IGF1dG8mIGFycmF5UmVmZXJlbmNlVGhpcyA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZU90aGVy
ID0gZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhlcik7CisgICAg
ICAgICAgICBpZiAoYXJyYXlSZWZlcmVuY2VUaGlzLmFkZHJlc3NTcGFjZSgpICE9IGFycmF5UmVm
ZXJlbmNlT3RoZXIuYWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlSZWZlcmVuY2VUaGlzLmVsZW1lbnRU
eXBlKCksIGFycmF5UmVmZXJlbmNlT3RoZXIuZWxlbWVudFR5cGUoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJh
eVR5cGU+KHVubmFtZWRPdGhlcikpIHsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5VGhpcyA9IGRv
d25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRvJiBh
cnJheU90aGVyID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRPdGhlcik7CisgICAg
ICAgICAgICBpZiAoYXJyYXlUaGlzLm51bUVsZW1lbnRzKCkgIT0gYXJyYXlPdGhlci5udW1FbGVt
ZW50cygpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVy
biBtYXRjaGVzKGFycmF5VGhpcy50eXBlKCksIGFycmF5T3RoZXIudHlwZSgpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBpbmZlclR5cGVzRm9yVHlwZUFyZ3VtZW50cyhBU1Q6Ok5hbWVkVHlwZSYgcG9zc2libGVU
eXBlLCBBU1Q6OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMpCit7CisgICAgaWYgKGlzPEFT
VDo6VHlwZURlZmluaXRpb24+KHBvc3NpYmxlVHlwZSkKKyAgICAgICAgfHwgaXM8QVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpCisgICAgICAgIHx8IGlzPEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpKSB7CisgICAgICAgIHJldHVybiB0eXBlQXJn
dW1lbnRzLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICBBU1NFUlQoaXM8QVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24+KHBvc3NpYmxlVHlwZSkpOworICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihwb3NzaWJsZVR5cGUp
OworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSAh
PSB0eXBlQXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5z
aXplKCk7ICsraSkgeworICAgICAgICBBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiogdHlwZUFyZ3Vt
ZW50RXhwcmVzc2lvbiA9IG51bGxwdHI7CisgICAgICAgIEFTVDo6VHlwZVJlZmVyZW5jZSogdHlw
ZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSA9IG51bGxwdHI7CisgICAgICAgIEFTVDo6Q29uc3RhbnRF
eHByZXNzaW9uKiBuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uID0gbnVsbHB0cjsKKyAgICAg
ICAgQVNUOjpUeXBlUmVmZXJlbmNlKiBuYXRpdmVUeXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlID0g
bnVsbHB0cjsKKworICAgICAgICBhdXRvIGFzc2lnbiA9IFsmXShBU1Q6OlR5cGVBcmd1bWVudCYg
dHlwZUFyZ3VtZW50LCBBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiomIGV4cHJlc3Npb24sIEFTVDo6
VHlwZVJlZmVyZW5jZSomIHR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgIFdURjo6dmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhw
cmVzc2lvbikgeworICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSAmY29uc3RhbnRFeHByZXNz
aW9uOworICAgICAgICAgICAgfSwgWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVu
Y2U+JiB0aGVUeXBlUmVmZXJlbmNlKSB7CisgICAgICAgICAgICAgICAgdHlwZVJlZmVyZW5jZSA9
IHRoZVR5cGVSZWZlcmVuY2UuZ2V0KCk7CisgICAgICAgICAgICB9KSwgdHlwZUFyZ3VtZW50KTsK
KyAgICAgICAgfTsKKworICAgICAgICBhc3NpZ24odHlwZUFyZ3VtZW50c1tpXSwgdHlwZUFyZ3Vt
ZW50RXhwcmVzc2lvbiwgdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSk7CisgICAgICAgIGFzc2ln
bihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpW2ldLCBuYXRpdmVUeXBlQXJn
dW1lbnRFeHByZXNzaW9uLCBuYXRpdmVUeXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlKTsKKworICAg
ICAgICBpZiAodHlwZUFyZ3VtZW50RXhwcmVzc2lvbiAmJiBuYXRpdmVUeXBlQXJndW1lbnRFeHBy
ZXNzaW9uKSB7CisgICAgICAgICAgICBpZiAoIXR5cGVBcmd1bWVudEV4cHJlc3Npb24tPm1hdGNo
ZXMoKm5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24pKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlICYm
IG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgIGlmICghbWF0
Y2hlcygqdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSwgKm5hdGl2ZVR5cGVBcmd1bWVudFR5cGVS
ZWZlcmVuY2UpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wZjdkNDQxZmRlZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5m
ZXJUeXBlcy5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1Qg
eworCitjbGFzcyBVbm5hbWVkVHlwZTsKK2NsYXNzIE5hbWVkVHlwZTsKKworfQorCitib29sIG1h
dGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmKTsK
K2Jvb2wgaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMoQVNUOjpOYW1lZFR5cGUmIHBvc3NpYmxl
VHlwZSwgQVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKTsKKworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xJbnRyaW5zaWNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMSW50cmluc2ljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjBjNDQyMmQ1MTEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNwcApAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisKKyNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lv
bi5oIgorI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xUeXBl
UmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsK
KworSW50cmluc2ljczo6SW50cmluc2ljcygpCisgICAgOiBtX3RleHR1cmVUeXBlTmFtZXMgeyBT
dHJpbmcoIlRleHR1cmUxRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAg
ICAgICAgU3RyaW5nKCJSV1RleHR1cmUxRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LAorICAgICAgICAgICAgU3RyaW5nKCJUZXh0dXJlMURBcnJheSIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUxREFycmF5IiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUy
RCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJS
V1RleHR1cmUyRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAg
U3RyaW5nKCJUZXh0dXJlMkRBcnJheSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAor
ICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUyREFycmF5IiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUzRCIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUzRCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJUZXh0dXJl
Q3ViZSIsICBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSB9CisgICAgLCBtX3RleHR1cmVJ
bm5lclR5cGVOYW1lcyB7IFN0cmluZygidWNoYXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSwKKyAgICAgICAgICAgIFN0cmluZygidXNob3J0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoInVpbnQiLCBTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiY2hhciIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJzaG9ydCIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJpbnQiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiaGFsZiIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJmbG9hdCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0KKyAgICAsIG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcyB7
IFN0cmluZygiaGFsZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAg
ICAgU3RyaW5nKCJmbG9hdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0KK3sKKyAg
ICBBU1NFUlQobV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKSA9PSAxMSk7IC8vIGZ1bGxUZXh0dXJl
cyBoYXJkY29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorICAgIEFTU0VSVChtX3RleHR1
cmVJbm5lclR5cGVOYW1lcy5zaXplKCkgPT0gOCk7IC8vIGZ1bGxUZXh0dXJlcyBoYXJkY29kZXMg
dGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorICAgIEFTU0VSVChtX2RlcHRoVGV4dHVyZUlubmVy
VHlwZXMuc2l6ZSgpID09IDIpOyAvLyB0ZXh0dXJlRGVwdGgyRCAmIGZyaWVuZHMgaGFyZGNvZGVz
IHRoZSBsZW5ndGggb2YgdGhpcyBhcnJheS4KK30KKwordm9pZCBJbnRyaW5zaWNzOjphZGQoQVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJikKK3sKKyAgICAvLyBGSVhNRTogUG9wdWxhdGUg
dGhpcy4KK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRQcmltaXRpdmUoQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgIT0gMCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInZvaWQi
KQorICAgICAgICBtX3ZvaWRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNl
IGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJib29sIikKKyAgICAgICAgbV9i
b29sVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidWNoYXIiKQorICAgICAgICBtX3VjaGFyVHlwZSA9ICZu
YXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAidXNob3J0IikKKyAgICAgICAgbV91c2hvcnRUeXBlID0gJm5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09
ICJ1aW50IikKKyAgICAgICAgbV91aW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247Cisg
ICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiY2hhciIpCisgICAg
ICAgIG1fY2hhclR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInNob3J0IikKKyAgICAgICAgbV9zaG9ydFR5
cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5uYW1lKCkgPT0gImludCIpCisgICAgICAgIG1faW50VHlwZSA9ICZuYXRpdmVUeXBl
RGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiaGFsZiIpCisgICAgICAgIG1faGFsZlR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOwor
ICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImZsb2F0IikKKyAg
ICAgICAgbV9mbG9hdFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYg
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21pY19pbnQiKQorICAgICAgICBt
X2F0b21pY0ludFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21pY191aW50IikKKyAgICAgICAgbV9h
dG9taWNVaW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAic2FtcGxlciIpCisgICAgICAgIG1fc2FtcGxl
clR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50cmluc2ljczo6
YWRkVmVjdG9yKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRp
b24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgIT0gInZlY3RvciIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRp
b24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAyKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIEFTU0VSVChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRp
b24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlUG9pbnRlciA9IFdU
Rjo6Z2V0PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVj
bGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBhdXRvJiBsZW5ndGhFeHByZXNzaW9u
ID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKClbMV0pOworICAgIEFTU0VSVChpbm5lclR5cGVQb2ludGVyKTsKKyAg
ICBhdXRvJiBpbm5lclR5cGUgPSAqaW5uZXJUeXBlUG9pbnRlcjsKKyAgICBBU1NFUlQoaW5uZXJU
eXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMCk7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24qKiBhcnJheTsKKyAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiYm9vbCIpCisg
ICAgICAgIGFycmF5ID0gbV92ZWN0b3JCb29sOworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1l
KCkgPT0gInVjaGFyIikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvclVjaGFyOworICAgIGVsc2Ug
aWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gInVzaG9ydCIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0
b3JVc2hvcnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAidWludCIpCisgICAg
ICAgIGFycmF5ID0gbV92ZWN0b3JVaW50OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkg
PT0gImNoYXIiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yQ2hhcjsKKyAgICBlbHNlIGlmIChp
bm5lclR5cGUubmFtZSgpID09ICJzaG9ydCIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JTaG9y
dDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJpbnQiKQorICAgICAgICBhcnJh
eSA9IG1fdmVjdG9ySW50OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImhhbGYi
KQorICAgICAgICBhcnJheSA9IG1fdmVjdG9ySGFsZjsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUu
bmFtZSgpID09ICJmbG9hdCIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JGbG9hdDsKKyAgICBl
bHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGludCBsZW5ndGggPSBsZW5n
dGhFeHByZXNzaW9uLmludGVnZXJMaXRlcmFsKCkudmFsdWUoKTsKKyAgICBBU1NFUlQobGVuZ3Ro
ID49IDIgJiYgbGVuZ3RoIDw9IDQpOworICAgIGFycmF5W2xlbmd0aCAtIDJdID0gJm5hdGl2ZVR5
cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5zaWNzOjph
ZGRNYXRyaXgoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bikKK3sKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSAhPSAibWF0cml4IikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDMpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBl
RGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKClbMV0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1
bWVudHMoKVsyXSkpOworICAgIGF1dG8mIGlubmVyVHlwZVBvaW50ZXIgPSBXVEY6OmdldDxzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5
cGVBcmd1bWVudHMoKVswXSk7CisgICAgYXV0byYgcm93RXhwcmVzc2lvbiA9IFdURjo6Z2V0PEFT
VDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50
cygpWzFdKTsKKyAgICBhdXRvJiBjb2x1bW5FeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNUOjpDb25z
dGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMl0p
OworICAgIEFTU0VSVChpbm5lclR5cGVQb2ludGVyKTsKKyAgICBhdXRvJiBpbm5lclR5cGUgPSAq
aW5uZXJUeXBlUG9pbnRlcjsKKyAgICBBU1NFUlQoaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5z
aXplKCkgPT0gMCk7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qICgqYXJyYXkpWzNd
OworICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJoYWxmIikKKyAgICAgICAgYXJyYXkgPSBt
X21hdHJpeEhhbGY7CisgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImZsb2F0IikKKyAgICAg
ICAgYXJyYXkgPSBtX21hdHJpeEZsb2F0OworICAgIGludCByb3cgPSByb3dFeHByZXNzaW9uLmlu
dGVnZXJMaXRlcmFsKCkudmFsdWUoKTsKKyAgICBBU1NFUlQocm93ID49IDIgJiYgcm93IDw9IDQp
OworICAgIGludCBjb2x1bW4gPSBjb2x1bW5FeHByZXNzaW9uLmludGVnZXJMaXRlcmFsKCkudmFs
dWUoKTsKKyAgICBBU1NFUlQoY29sdW1uID49IDIgJiYgY29sdW1uIDw9IDQpOworICAgIGFycmF5
W3JvdyAtIDJdW2NvbHVtbiAtIDJdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRGdWxsVGV4dHVyZShBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uLCBBU1Q6OlR5cGVSZWZlcmVu
Y2UmIGlubmVyVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB0ZXh0dXJlVHlwZUluZGV4ID0gbV90ZXh0
dXJlVHlwZU5hbWVzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90ZXh0
dXJlVHlwZU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFy
YXRpb24ubmFtZSgpID09IG1fdGV4dHVyZVR5cGVOYW1lc1tpXSkKKyAgICAgICAgICAgIHRleHR1
cmVUeXBlSW5kZXggPSBpOworICAgIH0KKyAgICBpZiAodGV4dHVyZVR5cGVJbmRleCA9PSBtX3Rl
eHR1cmVUeXBlTmFtZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNp
Z25lZCBpbm5lclR5cGVJbmRleCA9IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKTsKKyAg
ICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
dGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChpbm5lclR5
cGUubmFtZSgpLnN0YXJ0c1dpdGgobV90ZXh0dXJlSW5uZXJUeXBlTmFtZXNbaV0pKSB7CisgICAg
ICAgICAgICB0ZXh0dXJlVHlwZUluZGV4ID0gaTsKKyAgICAgICAgICAgIGlmIChpbm5lclR5cGUu
bmFtZSgpID09IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzW2ldKQorICAgICAgICAgICAgICAgIHZl
Y3Rvckxlbmd0aCA9IDE7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSA9PSBtX3RleHR1cmVJbm5lclR5cGVOYW1lc1tp
XS5sZW5ndGgoKSArIDEpOworICAgICAgICAgICAgICAgIEFTU0VSVChpbm5lclR5cGUubmFtZSgp
W2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSA9PSAnMicKKyAgICAgICAgICAgICAgICAg
ICAgfHwgaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0gPT0g
JzMnCisgICAgICAgICAgICAgICAgICAgIHx8IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5h
bWUoKS5sZW5ndGgoKSAtIDFdID09ICc0Jyk7CisgICAgICAgICAgICAgICAgdmVjdG9yTGVuZ3Ro
ID0gaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0gLSAnMCc7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGlubmVyVHlwZUlu
ZGV4ICE9IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKSk7CisgICAgbV9mdWxsVGV4dHVy
ZXNbdGV4dHVyZVR5cGVJbmRleF1baW5uZXJUeXBlSW5kZXhdW3ZlY3Rvckxlbmd0aCAtIDFdID0g
Jm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJbnRy
aW5zaWNzOjphZGREZXB0aFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiwgQVNUOjpUeXBlUmVmZXJlbmNlJiBpbm5lclR5cGUpCit7CisgICAg
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qKiB0ZXh0dXJlOworICAgIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlRGVwdGgyRCIpCisgICAgICAgIHRleHR1cmUg
PSBtX3RleHR1cmVEZXB0aDJEOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5u
YW1lKCkgPT0gIlJXVGV4dHVyZURlcHRoMkQiKQorICAgICAgICB0ZXh0dXJlID0gbV9yd1RleHR1
cmVEZXB0aDJEOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0g
IlRleHR1cmVEZXB0aDJEQXJyYXkiKQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlRGVwdGgy
REFycmF5OworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlJX
VGV4dHVyZURlcHRoMkRBcnJheSIpCisgICAgICAgIHRleHR1cmUgPSBtX3J3VGV4dHVyZURlcHRo
MkRBcnJheTsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJU
ZXh0dXJlRGVwdGhDdWJlIikKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZURlcHRoQ3ViZTsK
KyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHVuc2lnbmVkIGlu
bmVyVHlwZUluZGV4ID0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09IG1fZGVwdGhUZXh0dXJlSW5uZXJU
eXBlc1tpXSkKKyAgICAgICAgICAgIGlubmVyVHlwZUluZGV4ID0gaTsKKyAgICB9CisgICAgQVNT
RVJUKGlubmVyVHlwZUluZGV4ICE9IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcy5zaXplKCkpOwor
ICAgIHRleHR1cmVbaW5uZXJUeXBlSW5kZXhdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKK30K
Kwordm9pZCBJbnRyaW5zaWNzOjphZGRUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
JiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDEpOworICAgIEFTU0VSVChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVU
eXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYgaW5uZXJUeXBl
UG9pbnRlciA9IFdURjo6Z2V0PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+Pihu
YXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBBU1NFUlQoaW5u
ZXJUeXBlUG9pbnRlcik7CisgICAgYXV0byYgaW5uZXJUeXBlID0gKmlubmVyVHlwZVBvaW50ZXI7
CisgICAgQVNTRVJUKGlubmVyVHlwZS50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDApOworICAg
IGlmIChhZGRGdWxsVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlubmVyVHlwZSkpCisg
ICAgICAgIHJldHVybjsKKyAgICBhZGREZXB0aFRleHR1cmUobmF0aXZlVHlwZURlY2xhcmF0aW9u
LCBpbm5lclR5cGUpOworfQorCit2b2lkIEludHJpbnNpY3M6OmFkZChBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlmIChhZGRQcmltaXRp
dmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChhZGRW
ZWN0b3IobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChh
ZGRNYXRyaXgobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuOworICAgIGFk
ZFRleHR1cmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKK30KKworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRy
aW5zaWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJp
bnNpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDdiNGUzODcy
MWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEludHJpbnNpY3MuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMTmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEludHJp
bnNpY3MgeworcHVibGljOgorICAgIEludHJpbnNpY3MoKTsKKworICAgIHZvaWQgYWRkKEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZvaWQgYWRkKEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJik7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgYm9vbFR5
cGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYm9vbFR5cGUpOworICAgICAgICByZXR1cm4g
Km1fYm9vbFR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIHVp
bnRUeXBlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3VpbnRUeXBlKTsKKyAgICAgICAgcmV0
dXJuICptX3VpbnRUeXBlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGFkZFByaW1pdGl2
ZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkVmVjdG9yKEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGRNYXRyaXgoQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24mKTsKKyAgICBib29sIGFkZEZ1bGxUZXh0dXJlKEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJiwgQVNUOjpUeXBlUmVmZXJlbmNlJik7CisgICAgdm9pZCBhZGREZXB0aFRl
eHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mLCBBU1Q6OlR5cGVSZWZlcmVuY2UmKTsK
KyAgICB2b2lkIGFkZFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKworICAg
IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZvaWRUeXBlOworICAgIEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uKiBtX2Jvb2xUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uKiBtX3VjaGFyVHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV91c2hv
cnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3VpbnRUeXBlOworICAg
IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2NoYXJUeXBlOworICAgIEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uKiBtX3Nob3J0VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiogbV9pbnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2hhbGZU
eXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2Zsb2F0VHlwZTsKKyAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9hdG9taWNJbnRUeXBlOworICAgIEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uKiBtX2F0b21pY1VpbnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uKiBtX3NhbXBsZXJUeXBlOworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24qIG1fdmVjdG9yQm9vbFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiog
bV92ZWN0b3JVY2hhclszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0
b3JVc2hvcnRbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yVWlu
dFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JDaGFyWzNdOwor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvclNob3J0WzNdOworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckludFszXTsKKyAgICBBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JIYWxmWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uKiBtX3ZlY3RvckZsb2F0WzNdOworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24qIG1fbWF0cml4SGFsZlszXVszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biogbV9tYXRyaXhGbG9hdFszXVszXTsKKworICAgIFZlY3RvcjxTdHJpbmc+IG1fdGV4dHVyZVR5
cGVOYW1lczsKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3RleHR1cmVJbm5lclR5cGVOYW1lczsKKwor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2Z1bGxUZXh0dXJlc1sxMV1bOF1bNF07
CisKKyAgICBWZWN0b3I8U3RyaW5nPiBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXM7CisgICAgQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdGV4dHVyZURlcHRoMkRbMl07CisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fcndUZXh0dXJlRGVwdGgyRFsyXTsKKyAgICBBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiogbV90ZXh0dXJlRGVwdGgyREFycmF5WzJdOworICAgIEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3J3VGV4dHVyZURlcHRoMkRBcnJheVsyXTsKKyAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV90ZXh0dXJlRGVwdGhDdWJlWzJdOworfTsKKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNGU4NmJiOTgwNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcApAQCAtMCwwICsx
LDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorCisjaW5jbHVkZSAiV0hMU0xF
bnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlv
bi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1
cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlvbi5oIgorI2luY2x1
ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK05hbWVDb250ZXh0OjpOYW1lQ29udGV4dChOYW1lQ29udGV4
dCogcGFyZW50KQorICAgIDogbV9wYXJlbnQocGFyZW50KQoreworfQorCitib29sIE5hbWVDb250
ZXh0OjphZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pCit7CisgICAgaWYg
KGV4aXN0cyh0eXBlRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZCh0eXBlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKHR5cGVEZWZpbml0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3Ry
dWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoZXhpc3RzKHN0cnVjdHVyZURlZmluaXRpb24u
bmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV90eXBl
cy5hZGQoc3RydWN0dXJlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRy
eSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5h
bWVDb250ZXh0OjphZGQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVm
aW5pdGlvbikKK3sKKyAgICBpZiAoZXhpc3RzKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5uYW1lKCkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChl
bnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChl
bnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVD
b250ZXh0OjphZGQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikK
K3sKKyAgICBpZiAobV90eXBlcy5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1f
dHlwZXMuZW5kKCkKKyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChmdW5jdGlvbkRlZmluaXRp
b24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGF1dG8gcmVzdWx0ID0gbV9mdW5jdGlvbnMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1l
KCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bj4sIDE+KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGZ1bmN0aW9uRGVm
aW5pdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24p
Cit7CisgICAgaWYgKG1fdHlwZXMuZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUo
KSkgIT0gbV90eXBlcy5lbmQoKQorICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV9mdW5jdGlvbnMuYWRkKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLmFwcGVuZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBu
YXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG1fZnVuY3Rpb25zLmZpbmQobmF0aXZl
VHlwZURlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkKKyAgICAgICAgfHwg
bV92YXJpYWJsZXMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3Zhcmlh
Ymxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV90
eXBlcy5hZGQobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLmFwcGVuZChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJp
YWJsZURlY2xhcmF0aW9uKQoreworICAgIGlmIChleGlzdHModmFyaWFibGVEZWNsYXJhdGlvbi5u
YW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3Zhcmlh
Ymxlcy5hZGQoU3RyaW5nKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSwgJnZhcmlhYmxlRGVj
bGFyYXRpb24pOworICAgIHJldHVybiByZXN1bHQuaXNOZXdFbnRyeTsKK30KKworVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiogTmFtZUNvbnRleHQ6Omdl
dFR5cGVzKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV90eXBl
cy5maW5kKG5hbWUpOworICAgIGlmIChpdGVyYXRvciA9PSBtX3R5cGVzLmVuZCgpKSB7CisgICAg
ICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0VHlwZXMo
bmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gJml0ZXJh
dG9yLT52YWx1ZTsKK30KKworVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uPiwgMT4qIE5hbWVDb250ZXh0OjpnZXRGdW5jdGlvbnMoY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9ucy5maW5kKG5hbWUp
OworICAgIGlmIChpdGVyYXRvciA9PSBtX2Z1bmN0aW9ucy5lbmQoKSkgeworICAgICAgICBpZiAo
bV9wYXJlbnQpCisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldEZ1bmN0aW9ucyhuYW1l
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiAmaXRlcmF0b3It
PnZhbHVlOworfQorCitBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIE5hbWVDb250ZXh0OjpnZXRW
YXJpYWJsZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fdmFy
aWFibGVzLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fdmFyaWFibGVzLmVuZCgp
KSB7CisgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+
Z2V0VmFyaWFibGUobmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBy
ZXR1cm4gaXRlcmF0b3ItPnZhbHVlOworfQorCitib29sIE5hbWVDb250ZXh0OjpleGlzdHMoU3Ry
aW5nJiBuYW1lKQoreworICAgIHJldHVybiBtX3R5cGVzLmZpbmQobmFtZSkgIT0gbV90eXBlcy5l
bmQoKQorICAgICAgICB8fCBtX2Z1bmN0aW9ucy5maW5kKG5hbWUpICE9IG1fZnVuY3Rpb25zLmVu
ZCgpCisgICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmFtZSkgIT0gbV92YXJpYWJsZXMuZW5k
KCk7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uZDNkZjgwMDE0YWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmgKQEAgLTAs
MCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFT
VCB7CisKK2NsYXNzIE5hbWVkVHlwZTsKK2NsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFz
cyBUeXBlRGVmaW5pdGlvbjsKK2NsYXNzIFN0cnVjdHVyZURlZmluaXRpb247CitjbGFzcyBFbnVt
ZXJhdGlvbkRlZmluaXRpb247CitjbGFzcyBGdW5jdGlvbkRlZmluaXRpb247CitjbGFzcyBOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uOworY2xh
c3MgVmFyaWFibGVEZWNsYXJhdGlvbjsKKworfQorCitjbGFzcyBOYW1lQ29udGV4dCB7CitwdWJs
aWM6CisgICAgTmFtZUNvbnRleHQoTmFtZUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIpOworCisg
ICAgYm9vbCBhZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKKyAgICBib29s
IGFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiYpOworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1l
ZFR5cGU+LCAxPiogZ2V0VHlwZXMoY29uc3QgU3RyaW5nJik7CisgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4qIGdldEZ1bmN0aW9u
cyhjb25zdCBTdHJpbmcmKTsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIGdldFZhcmlh
YmxlKGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgorICAgIGJvb2wgZXhpc3RzKFN0cmluZyYp
OworCisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6TmFtZWRUeXBlPiwgMT4+IG1fdHlwZXM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+PiBtX2Z1
bmN0aW9uczsKKyAgICBIYXNoTWFwPFN0cmluZywgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKj4g
bV92YXJpYWJsZXM7CisgICAgTmFtZUNvbnRleHQqIG1fcGFyZW50OworfTsKKworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCmluZGV4IDc4MGQ1YzU0MjVhLi5kNTJjMmExY2RhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1l
UmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTmFtZVJlc29sdmVyLmNwcApAQCAtMjgsMTkgKzI4LDI0NSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCiAKLSNpbmNsdWRlICJXSExTTFZp
c2l0b3IuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oIgorI2lu
Y2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmVPdmVybG9h
ZEltcGwuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExT
TEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKKyNp
bmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRG9XaGlsZUxvb3AuaCIK
KyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFy
YXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAi
V0hMU0xSZXR1cm4uaCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRW51bWVy
YXRpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgorI2lu
Y2x1ZGUgIldITFNMUHJvZ3JhbS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFj
ZSBXSExTTCB7CiAKLWNsYXNzIE5hbWVSZXNvbHZlciA6IHB1YmxpYyBWaXNpdG9yIHsKLSAgICB+
TmFtZVJlc29sdmVyKCkgPSBkZWZhdWx0OwotfTsKK05hbWVSZXNvbHZlcjo6TmFtZVJlc29sdmVy
KE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKKyAgICA6IG1fbmFtZUNvbnRleHQobmFtZUNvbnRl
eHQpCit7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2Um
IHR5cGVSZWZlcmVuY2UpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVSZWZlcmVuY2Up
OworICAgIGlmICh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvKiBjYW5kaWRhdGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyh0eXBlUmVm
ZXJlbmNlLm5hbWUoKSk7CisgICAgaWYgKGNhbmRpZGF0ZXMgPT0gbnVsbHB0cikgeworICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChhdXRvIHJlc3Vs
dCA9IHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKCpjYW5kaWRhdGVzLCB0eXBlUmVmZXJlbmNlLnR5
cGVBcmd1bWVudHMoKSkpCisgICAgICAgIHR5cGVSZWZlcmVuY2Uuc2V0UmVzb2x2ZWRUeXBlKCpy
ZXN1bHQpOworICAgIGVsc2UgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47
CisgICAgfQorfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBOYW1lQ29udGV4dCBuZXdOYW1lQ29u
dGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcihu
ZXdOYW1lQ29udGV4dCk7CisgICAgdmlzaXRVbm5hbWVkVHlwZShmdW5jdGlvbkRlZmluaXRpb24u
dHlwZSgpKTsKKyAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVmaW5pdGlvbi5w
YXJhbWV0ZXJzKCkpIHsKKyAgICAgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNp
dChwYXJhbWV0ZXIpOworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBuZXdOYW1lQ29udGV4dC5hZGQo
cGFyYW1ldGVyKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzZXRFcnJv
cigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIG5ld05hbWVS
ZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOwor
fQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpCbG9jayYgYmxvY2spCit7CisgICAg
TmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZl
cihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KGJsb2NrKTsKK30KKwordm9pZCBOYW1l
UmVzb2x2ZXI6OnZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50KQoreworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKKyAgICBOYW1lQ29u
dGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVD
b250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKKyAgICBpZiAo
aWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkgeworICAgICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4
dCgmbV9uYW1lQ29udGV4dCk7CisgICAgICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hl
Y2tFcnJvckFuZFZpc2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsKKyAgICB9Cit9CisKK3Zv
aWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQoreworICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgTmFtZUNv
bnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1l
Q29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOworfQorCit2b2lk
IE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgd2hpbGVMb29wKQoreworICAg
IE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2
ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworfQorCit2b2lk
IE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKQoreworICAgIE5hbWVD
b250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFt
ZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wKTsKK30KKwordm9pZCBOYW1lUmVz
b2x2ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlv
bikKK3sKKyAgICBtX25hbWVDb250ZXh0LmFkZCh2YXJpYWJsZURlY2xhcmF0aW9uKTsKKyAgICBj
aGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7Cit9CiAKLXZvaWQgcmVzb2x2
ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJikKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlZh
cmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKIHsKKyAgICBpZiAodmFyaWFibGVS
ZWZlcmVuY2UudmFyaWFibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIHZh
cmlhYmxlID0gbV9uYW1lQ29udGV4dC5nZXRWYXJpYWJsZSh2YXJpYWJsZVJlZmVyZW5jZS5uYW1l
KCkpKQorICAgICAgICB2YXJpYWJsZVJlZmVyZW5jZS5zZXRWYXJpYWJsZSgqdmFyaWFibGUpOwor
ICAgIGVsc2UgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQor
fQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVybk5vZGUpCit7
CisgICAgQVNTRVJUKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICByZXR1cm5Ob2RlLnNldEZ1bmN0
aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmV0dXJuTm9k
ZSk7Cit9CiAKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQoreworICAgIGlmIChhdXRvKiBnZXRG
dW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uZ2V0RnVuY3Rpb25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uc2V0UG9zc2libGVHZXRPdmVybG9hZHMoKmdldEZ1bmN0aW9ucyk7CisgICAgaWYgKGF1dG8q
IHNldEZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5zZXRGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgIHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5zZXRQb3NzaWJsZVNldE92ZXJsb2Fkcygqc2V0RnVuY3Rpb25zKTsKKyAgICBpZiAo
YXV0byogYW5kRnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLmFuZEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLnNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKCphbmRGdW5jdGlvbnMpOworICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOworfQorCit2b2lk
IE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQor
eworICAgIGlmIChpczxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNzaW9uLmJhc2Uo
KSkpIHsKKyAgICAgICAgaWYgKGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNvbnRleHQu
Z2V0VHlwZXMoZG93bmNhc3Q8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5i
YXNlKCkpLm5hbWUoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvblR5cGVzLT5z
aXplKCkgPT0gMSk7CisgICAgICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9ICgqZW51bWVy
YXRpb25UeXBlcylbMF07CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmlu
aXRpb24+KHR5cGUpKSB7CisgICAgICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uPih0eXBlKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogbWVtYmVyID0gZW51bWVy
YXRpb25EZWZpbml0aW9uLm1lbWJlckJ5TmFtZShkb3RFeHByZXNzaW9uLmZpZWxkTmFtZSgpKSkg
eworICAgICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbCkgPD0gc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhw
cmVzc2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWxzIHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgICAgICAgICAg
ICAgTGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBQZXJoYXBzIGRvIHRoaXMgd2l0aCB2YXJpYW50cyBvciBh
IFJld3JpdGVyIGluc3RlYWQuCisgICAgICAgICAgICAgICAgICAgIGRvdEV4cHJlc3Npb24ufkRv
dEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3ICgmZG90RXhwcmVzc2lvbikg
QVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoV1RGTW92ZShvcmlnaW4pLCAqbWVtYmVyKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG90RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgTmFtZVJl
c29sdmVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKK3sKKyAg
ICBpZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKSB7CisgICAgICAgIGlmIChhdXRv
KiBmdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhjYWxsRXhwcmVzc2lvbi5u
YW1lKCkpKQorICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRzKCpmdW5jdGlv
bnMpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldENhc3RE
YXRhKCk7CisgICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5n
ZXRGdW5jdGlvbnMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkKKyAgICAgICAgICAgICAgICBjYWxs
RXhwcmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoY2Fs
bEV4cHJlc3Npb24pOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpCit7CisgICAgaWYgKGF1dG8gZW51bWVyYXRpb25U
eXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UubGVmdCgpKSkgeworICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25U
eXBlcy0+c2l6ZSgpID09IDEpOworICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9ICgqZW51
bWVyYXRpb25UeXBlcylbMF07CisgICAgICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbj4odHlwZSkpIHsKKyAgICAgICAgICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBl
bnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlv
bj4odHlwZSk7CisgICAgICAgICAgICBpZiAoYXV0byogbWVtYmVyID0gZW51bWVyYXRpb25EZWZp
bml0aW9uLm1lbWJlckJ5TmFtZShjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJl
ZmVyZW5jZS5yaWdodCgpKSkgeworICAgICAgICAgICAgICAgIGNvbnN0YW50RXhwcmVzc2lvbkVu
dW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLnNldEVudW1lcmF0aW9uTWVtYmVyKCptZW1iZXIpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBzZXRFcnJvcigpOworfQorCisvLyBGSVhNRTogTWFrZSBzdXJlIGFsbCB0aGUg
bmFtZXMgaGF2ZSBiZWVuIHJlc29sdmVkLgorCitib29sIHJlc29sdmVOYW1lc0luVHlwZXMoUHJv
Z3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCit7CisgICAgZm9yIChh
dXRvJiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpIHsKKyAgICAg
ICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCgqdHlwZURlZmluaXRpb24pOworICAg
ICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3Ry
dWN0dXJlRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFu
ZFZpc2l0KCpzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5l
cnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8m
IGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygp
KSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoKmVudW1lcmF0aW9u
RGVmaW5pdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24gOiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkgeworICAgICAgICBuYW1l
UmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAg
ICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIHJlc29sdmVOYW1lc0luRnVuY3Rp
b25zKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQoreworICAg
IGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRp
b25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRp
b24oZnVuY3Rpb25EZWZpbml0aW9uLmdldCgpKTsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNr
RXJyb3JBbmRWaXNpdCgqZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNv
bHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBuYW1l
UmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihudWxscHRyKTsKKyAgICBmb3Ig
KGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNp
dCgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIu
ZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMTmFtZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTE5hbWVSZXNvbHZlci5oCmluZGV4IDQ3ZDRkNmE1NzkzLi5lNDA4ZThjMThjYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1l
UmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TE5hbWVSZXNvbHZlci5oCkBAIC0yNywxMyArMjcsNDkgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUp
CiAKLSNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0
LmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
bmFtZXNwYWNlIFdITFNMIHsKIAotdm9pZCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHBy
b2dyYW0pOworY2xhc3MgUHJvZ3JhbTsKKworY2xhc3MgTmFtZVJlc29sdmVyIDogcHVibGljIFZp
c2l0b3IgeworcHVibGljOgorICAgIE5hbWVSZXNvbHZlcihOYW1lQ29udGV4dCYpOworCisgICAg
dmlydHVhbCB+TmFtZVJlc29sdmVyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKSBvdmVycmlkZTsKKworICAg
IHZvaWQgc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biogZnVuY3Rpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50RnVuY3Rpb24g
PSBmdW5jdGlvbkRlZmluaXRpb247CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgdmlzaXQo
QVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKSBvdmVycmlkZTsKKyAgICB2b2lkIHZp
c2l0KEFTVDo6QmxvY2smIGJsb2NrKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6SWZT
dGF0ZW1lbnQmIGlmU3RhdGVtZW50KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6V2hp
bGVMb29wJiB3aGlsZUxvb3ApIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxl
TG9vcCYgd2hpbGVMb29wKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYg
Zm9yTG9vcCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24mIHZhcmlhYmxlRGVjbGFyYXRpb24pIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpW
YXJpYWJsZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVybk5vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Np
b24pIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4
cHJlc3Npb24pIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UpIG92ZXJyaWRlOworCisgICAgTmFtZUNvbnRleHQgbV9uYW1lQ29u
dGV4dDsKKyAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9jdXJyZW50RnVuY3Rpb24geyBu
dWxscHRyIH07Cit9OworCitib29sIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYsIE5hbWVS
ZXNvbHZlciYpOworYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiwgTmFtZVJl
c29sdmVyJik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQYXJzZXIuY3BwCmluZGV4IGJjNmU3M2U2YTFmLi5jYzcyODEyYWNjNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2Vy
LmNwcApAQCAtMzgsNyArMzgsOCBAQCBQYXJzZXI6OlBhcnNlcigpCiB7CiB9CiAKLWF1dG8gUGFy
c2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBt
b2RlKSAtPiBPcHRpb25hbDxFcnJvcj4KKy8vIEZJWE1FOiBSZXR1cm4gYSBiZXR0ZXIgZXJyb3Ig
Y29kZSBmcm9tIHRoaXMsIGFuZCByZXBvcnQgaXQgdG8gSmF2YVNjcmlwdC4KK2F1dG8gUGFyc2Vy
OjpwYXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9k
ZSkgLT4gT3B0aW9uYWw8RXJyb3I+CiB7CiAgICAgbV9sZXhlciA9IExleGVyKHN0cmluZ1ZpZXcp
OwogICAgIG1fbW9kZSA9IG1vZGU7CkBAIC01NCw3ICs1NSwxMSBAQCBhdXRvIFBhcnNlcjo6cGFy
c2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4g
T3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVEZWZpbml0aW9uKCk7CiAg
ICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmICh0eXBlRGVmaW5pdGlvbikgewotICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqdHlwZURlZmluaXRpb24pKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVm
aW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAg
ICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgdHlwZURlZmluaXRpb24tPm5h
bWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTY0LDcgKzY5LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBP
cHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RydWN0dXJlRGVmaW5pdGlvbigp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlRGVmaW5pdGlvbikg
ewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqc3RydWN0dXJlRGVmaW5p
dGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdU
Rk1vdmUoKnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nl
c3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIs
IHN0cnVjdHVyZURlZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc0LDcgKzgz
LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3Ry
aW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBh
cnNlRW51bWVyYXRpb25EZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAg
IGlmIChlbnVtZXJhdGlvbkRlZmluaXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGF1
dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlv
bikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAg
ICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgZW51bWVyYXRpb25EZWZpbml0aW9uLT5u
YW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC04NSw3ICs5OCwxMSBAQCBhdXRvIFBhcnNlcjo6cGFy
c2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4g
T3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlvbkRlZmluaXRp
b24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZN
b3ZlKCpmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3Mp
IHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIGZ1
bmN0aW9uRGVmaW5pdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVycm9yID0gZnVuY3Rp
b25EZWZpbml0aW9uLmVycm9yKCk7CkBAIC05Niw3ICsxMTMsMTEgQEAgYXV0byBQYXJzZXI6OnBh
cnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+
IE9wdGlvbmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBzdWNjZXNz
ID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOwor
ICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZM
b2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi0+bmFt
ZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMTA2LDcgKzEyNywxMSBAQCBhdXRvIFBhcnNlcjo6cGFy
c2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4g
T3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlv
bigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBl
RGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFw
cGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVy
cm9yISAlcyIsIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpA
QCAtNDU0LDE2ICs0NzksNTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJl
dmlhdGVkKCkgLT4gRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGUKICAgICAgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodFNxdWFyZUJyYWNrZXQuZXJyb3IoKSk7CiAg
ICAgICAgIHJldHVybiB7eyAqdG9rZW4sIFdURjo6bnVsbG9wdCwgKm51bUVsZW1lbnRzIH19Owog
ICAgIH0KLSAgICBhdXRvIGFkZHJlc3NTcGFjZSA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tl
bjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9r
ZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOwotICAg
IGlmICghYWRkcmVzc1NwYWNlKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYWRk
cmVzc1NwYWNlLmVycm9yKCkpOwotICAgIHJldHVybiB7eyAqdG9rZW4sIHsgKmFkZHJlc3NTcGFj
ZSB9LCBXVEY6Om51bGxvcHQgfX07CisgICAgYXV0byBhZGRyZXNzU3BhY2VUb2tlbiA9IGNvbnN1
bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlw
ZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46
OlR5cGU6OlRocmVhZH0pOworICAgIGlmICghYWRkcmVzc1NwYWNlVG9rZW4pCisgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VUb2tlbi5lcnJvcigpKTsKKyAgICBB
U1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7CisgICAgc3dpdGNo
IChhZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBl
OjpDb25zdGFudDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpB
ZGRyZXNzU3BhY2U6OkNvbnN0YW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpU
b2tlbjo6VHlwZTo6RGV2aWNlOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5j
ZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExl
eGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFT
VDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZDoKKyAgICAgICAgYWRkcmVz
c1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJpbmcoIlNvbWV0aGluZyBy
ZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKTsKKyAg
ICB9CisgICAgcmV0dXJuIHt7ICp0b2tlbiwgeyBhZGRyZXNzU3BhY2UgfSwgV1RGOjpudWxsb3B0
IH19OwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiB7Ci0gICAgYXV0byBhZGRyZXNz
U3BhY2UgPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0YW50LCBMZXhl
cjo6VG9rZW46OlR5cGU6OkRldmljZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cCwg
TGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWR9KTsKLSAgICBpZiAoIWFkZHJlc3NTcGFjZSkKLSAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZS5lcnJvcigpKTsKK2F1
dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiB7CisgICAgYXV0byBhZGRyZXNzU3BhY2VU
b2tlbiA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVy
OjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBM
ZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOworICAgIGlmICghYWRkcmVzc1NwYWNlVG9rZW4p
CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VUb2tlbi5lcnJv
cigpKTsKKyAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7
CisgICAgc3dpdGNoIChhZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6
OlRva2VuOjpUeXBlOjpDb25zdGFudDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZl
cmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworICAgICAgICBicmVhazsKKyAgICBj
YXNlIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBB
U1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIGFkZHJl
c3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZDoKKyAg
ICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRo
cmVhZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJpbmco
IlNvbWV0aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCkpKTsKKyAgICB9CiAgICAgYXV0byBuYW1lID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2Vu
OjpUeXBlOjpJZGVudGlmaWVyKTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOwpAQCAtNDcxLDEyICs1MzIsMTIgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlR5cGU+LCBFcnIKICAgICBpZiAoIXR5cGVBcmd1bWVudHMpCiAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPih0eXBlQXJndW1lbnRzLmVycm9yKCkpOwogCi0gICAgYXV0byBj
b25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhB
YmJyZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpU
eXBlPiYmIHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiB7CisgICAgYXV0
byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZm
aXhBYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91cykgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1l
ZFR5cGU+IHsKICAgICAgICAgc3dpdGNoICh0eXBlU3VmZml4QWJicmV2aWF0ZWQudG9rZW4udHlw
ZSkgewogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3RhcjoKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0
eXBlU3VmZml4QWJicmV2aWF0ZWQudG9rZW4pLCBhZGRyZXNzU3BhY2UtPnN0cmluZ1ZpZXcudG9T
dHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZp
YXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBj
YXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRv
a2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZS0+c3RyaW5nVmll
dy50b1N0cmluZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVT
dWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykp
OwogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6CiAg
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6
OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAq
dHlwZVN1ZmZpeEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVsdDoKQEAg
LTQ4OCw3ICs1NDksNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBlKCkgLT4g
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycgogICAgIGF1dG8gZmlyc3RU
eXBlU3VmZml4QWJicmV2aWF0ZWQgPSBwYXJzZVR5cGVTdWZmaXhBYmJyZXZpYXRlZCgpOwogICAg
IGlmICghZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQpCiAgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZC5lcnJvcigpKTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlw
ZVJlZmVyZW5jZT4oTGV4ZXI6OlRva2VuKCphZGRyZXNzU3BhY2UpLCBuYW1lLT5zdHJpbmdWaWV3
LnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpVbm5hbWVkVHlwZT4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlR5cGVS
ZWZlcmVuY2U+KFdURk1vdmUoKmFkZHJlc3NTcGFjZVRva2VuKSwgbmFtZS0+c3RyaW5nVmlldy50
b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CiAgICAgcmVzdWx0ID0gY29uc3Ry
dWN0VHlwZUZyb21TdWZmaXhBYmJyZXZpYXRlZCgqZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQs
IFdURk1vdmUocmVzdWx0KSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byB0eXBl
U3VmZml4QWJicmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxUeXBlU3VmZml4
QWJicmV2aWF0ZWQsIEVycm9yPj4oWyZdKCkgewpAQCAtNTAzLDcgKzU2NCw3IEBAIGF1dG8gUGFy
c2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPiwgRXJyCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQ
YXJzZXI6OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlTm9uQWRkcmVzc1Nw
YWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwg
RXJyb3I+IHsKICAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKICAgICBpZiAoIW9yaWdpbikKICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKQEAgLTUxNCwx
MiArNTc1LDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKSAtPiBF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwKICAgICBpZiAoIXR5cGVBcmd1bWVu
dHMpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlQXJndW1lbnRzLmVycm9y
KCkpOwogCi0gICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5vbkFiYnJldmlhdGVkID0g
WyZdKGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeE5vbkFiYnJldmlh
dGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpUeXBlPiB7CisgICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5vbkFi
YnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1ZmZp
eE5vbkFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2
aW91cykgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgc3dp
dGNoICh0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4udHlwZSkgewogICAgICAgICBjYXNl
IExleGVyOjpUb2tlbjo6VHlwZTo6U3RhcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2
aWF0ZWQudG9rZW4pLCB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNlLT5zdHJp
bmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3Vm
Zml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJl
c3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6
VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25B
YmJyZXZpYXRlZC50b2tlbiksIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2Ut
PnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpU
b2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5vbkFiYnJl
dmlhdGVkLmFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExl
eGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6CiAgICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhO
b25BYmJyZXZpYXRlZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeE5vbkFi
YnJldmlhdGVkLm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTUyOCw3ICs1ODks
NyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlR5
cGVSZWZlcmVuY2U+KFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmco
KSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVu
bmFtZWRUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZVJlZmVyZW5jZT4o
V1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCp0
eXBlQXJndW1lbnRzKSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byB0eXBlU3Vm
Zml4Tm9uQWJicmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxUeXBlU3VmZml4
Tm9uQWJicmV2aWF0ZWQsIEVycm9yPj4oWyZdKCkgewogICAgICAgICAgICAgcmV0dXJuIHBhcnNl
VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkKCk7CkBAIC01NDIsMTQgKzYwMywxNCBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEFTVDo6VHlwZT4sCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQ
YXJzZXI6OnBhcnNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+
LCBFcnJvcj4gewotICAgIGF1dG8gdHlwZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKK2F1dG8gUGFyc2VyOjpw
YXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4s
IEVycm9yPiB7CisgICAgYXV0byB0eXBlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKICAgICAgICAg
cmV0dXJuIHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOwogICAgIH0pOwogICAgIGlmICh0eXBlKQog
ICAgICAgICByZXR1cm4gdHlwZTsKIAotICAgIHR5cGUgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+PihbJl0oKSB7CisgICAgdHlw
ZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFt
ZWRUeXBlPiwgRXJyb3I+PihbJl0oKSB7CiAgICAgICAgIHJldHVybiBwYXJzZU5vbkFkZHJlc3NT
cGFjZVR5cGUoKTsKICAgICB9KTsKICAgICBpZiAodHlwZSkKQEAgLTg0Nyw3ICs5MDgsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbgogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpUeXBlPiB0eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB0eXBl
OwogICAgIGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29sb24pKSB7CiAgICAgICAg
IGF1dG8gcGFyc2VkVHlwZSA9IHBhcnNlVHlwZSgpOwogICAgICAgICBpZiAoIXBhcnNlZFR5cGUp
CkBAIC04NjMsMjEgKzkyNCwyNSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmlu
aXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbgogICAgIGlmICgh
Zmlyc3RFbnVtZXJhdGlvbk1lbWJlcikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KGZpcnN0RW51bWVyYXRpb25NZW1iZXIuZXJyb3IoKSk7CiAKLSAgICBBU1Q6OkVudW1lcmF0aW9u
TWVtYmVycyBtZW1iZXJzOwotICAgIG1lbWJlcnMuYXBwZW5kKFdURk1vdmUoKmZpcnN0RW51bWVy
YXRpb25NZW1iZXIpKTsKKyAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiByZXN1bHQoV1RG
TW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHR5cGUp
KTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSByZXN1bHQuYWRkKFdURk1vdmUoKmZpcnN0RW51bWVyYXRp
b25NZW1iZXIpKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWlsKFN0cmlu
ZygiQ2Fubm90IGFkZCBlbnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1h
KSkgewogICAgICAgICBhdXRvIG1lbWJlciA9IHBhcnNlRW51bWVyYXRpb25NZW1iZXIoKTsKICAg
ICAgICAgaWYgKCFtZW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
bWVtYmVyLmVycm9yKCkpOwotICAgICAgICBtZW1iZXJzLmFwcGVuZChXVEZNb3ZlKCptZW1iZXIp
KTsKKyAgICAgICAgc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgqbWVtYmVyKSk7CisgICAg
ICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgIHJldHVybiBmYWlsKFN0cmluZygiQ2Fubm90
IGFkZCBlbnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7
CiAgICAgfQogCiAgICAgYXV0byByaWdodEN1cmx5QnJhY2tldCA9IGNvbnN1bWVUeXBlKExleGVy
OjpUb2tlbjo6VHlwZTo6UmlnaHRDdXJseUJyYWNrZXQpOwogICAgIGlmICghcmlnaHRDdXJseUJy
YWNrZXQpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodEN1cmx5QnJhY2tl
dC5lcnJvcigpKTsKIAotICAgIHJldHVybiBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbihXVEZN
b3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUodHlwZSks
IFdURk1vdmUobWVtYmVycykpOworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKIGF1
dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uTWVtYmVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpFbnVt
ZXJhdGlvbk1lbWJlciwgRXJyb3I+IHsKQEAgLTk4MSw3ICsxMDQ2LDcgQEAgYXV0byBQYXJzZXI6
OnBhcnNlQXR0cmlidXRlQmxvY2soKSAtPiBFeHBlY3RlZDxBU1Q6OkF0dHJpYnV0ZUJsb2NrLCBF
cnJvcj4gewogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLWF1dG8gUGFyc2VyOjpw
YXJzZVBhcmFtZXRlcigpIC0+IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4geworYXV0
byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uLCBFcnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygpOwogICAgIGlmICghb3Jp
Z2luKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwpA
QCAtOTkyLDcgKzEwNTcsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBl
Y3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHsKICAgICBpZiAoIXR5cGUpCiAgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOwogCi0gICAgT3B0aW9uYWw8U3Ry
aW5nPiBuYW1lOworICAgIFN0cmluZyBuYW1lOwogICAgIGlmIChhdXRvIHRva2VuID0gdHJ5VHlw
ZShMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIpKQogICAgICAgICBuYW1lID0gdG9rZW4t
PnN0cmluZ1ZpZXcudG9TdHJpbmcoKTsKIApAQCAtMTAwMCwxOCArMTA2NSwxOCBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+
IHsKICAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAgICAgaWYg
KCFzZW1hbnRpYykKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRp
Yy5lcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIEFTVDo6UGFyYW1ldGVyKFdURk1vdmUoKm9yaWdp
biksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBX
VEZNb3ZlKCpzZW1hbnRpYykpOworICAgICAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUp
LCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIG51bGxwdHIpOwogICAgIH0KIAot
ICAgIHJldHVybiBBU1Q6OlBhcmFtZXRlcihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxp
ZmllcnMpLCBXVEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShuYW1lKSwgV1RGOjpudWxsb3B0KTsKKyAg
ICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1v
dmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEY6Om51bGxv
cHQsIG51bGxwdHIpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXJzKCkgLT4gRXhw
ZWN0ZWQ8QVNUOjpQYXJhbWV0ZXJzLCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlUGFyYW1l
dGVycygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMsIEVycm9yPiB7CiAg
ICAgYXV0byBsZWZ0UGFyZW50aGVzaXMgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6
OkxlZnRQYXJlbnRoZXNpcyk7CiAgICAgaWYgKCFsZWZ0UGFyZW50aGVzaXMpCiAgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPihsZWZ0UGFyZW50aGVzaXMuZXJyb3IoKSk7CiAKLSAgICBB
U1Q6OlBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
IHBhcmFtZXRlcnM7CiAgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodFBh
cmVudGhlc2lzKSkKICAgICAgICAgcmV0dXJuIFdURk1vdmUocGFyYW1ldGVycyk7CiAKQEAgLTEx
NDksMTAgKzEyMTQsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlT3BlcmF0b3JGdW5jdGlvbkRlY2xh
cmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmEKICAgICAgICAgYXV0byBz
ZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAgICAgaWYgKCFzZW1hbnRpYykKICAgICAg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5lcnJvcigpKTsKLSAgICAg
ICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0s
IFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIFN0cmluZygiT3BlcmF0b3IgQ2FzdCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92
ZSgqc2VtYW50aWMpKTsKKyAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihX
VEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIFN0cmlu
Zygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3Zl
KCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsKICAgICB9CiAKLSAgICByZXR1cm4g
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpudWxs
b3B0LCBXVEZNb3ZlKCp0eXBlKSwgU3RyaW5nKCJPcGVyYXRvciBDYXN0IiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQpOwor
ICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9
LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURjo6
bnVsbG9wdCk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSAt
PiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiB7CkBAIC0xMjYxLDcg
KzEzMjYsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlSWZTdGF0ZW1lbnQoKSAtPiBFeHBlY3RlZDxB
U1Q6OklmU3RhdGVtZW50LCBFcnJvcj4gewogICAgICAgICBlbHNlQm9keSA9IFdURk1vdmUoKnBh
cnNlZEVsc2VCb2R5KTsKICAgICB9CiAKLSAgICByZXR1cm4gQVNUOjpJZlN0YXRlbWVudChXVEZN
b3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKCpjb25kaXRpb25hbCksIFdURk1vdmUoKmJvZHkpLCBXVEZN
b3ZlKGVsc2VCb2R5KSk7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Np
b24+PiBjYXN0QXJndW1lbnRzOworICAgIGNhc3RBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKmNv
bmRpdGlvbmFsKSk7CisgICAgYXV0byBib29sQ2FzdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpD
YWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpvcmlnaW4pLCBTdHJpbmcoImJvb2wiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYXN0QXJndW1lbnRzKSk7CisgICAg
cmV0dXJuIEFTVDo6SWZTdGF0ZW1lbnQoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShib29sQ2Fz
dCksIFdURk1vdmUoKmJvZHkpLCBXVEZNb3ZlKGVsc2VCb2R5KSk7CiB9CiAKIGF1dG8gUGFyc2Vy
OjpwYXJzZVN3aXRjaFN0YXRlbWVudCgpIC0+IEV4cGVjdGVkPEFTVDo6U3dpdGNoU3RhdGVtZW50
LCBFcnJvcj4gewpAQCAtMTQ0Myw3ICsxNTExLDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRG9XaGls
ZUxvb3AoKSAtPiBFeHBlY3RlZDxBU1Q6OkRvV2hpbGVMb29wLCBFcnJvcj4gewogICAgIHJldHVy
biBBU1Q6OkRvV2hpbGVMb29wKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoKmJvZHkpLCBXVEZN
b3ZlKCpjb25kaXRpb25hbCkpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xh
cmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSkgLT4gRXhwZWN0ZWQ8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlVmFyaWFi
bGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiB0eXBlKSAt
PiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiB7CiAgICAgYXV0byBv
cmlnaW4gPSBwZWVrKCk7CiAgICAgaWYgKCFvcmlnaW4pCiAgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CkBAIC0xNDg4LDcgKzE1NTYsNyBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbnNTdAogICAgIGlmICghdHlwZSkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7CiAKLSAgICBhdXRvIGZpcnN0VmFyaWFibGVEZWNsYXJh
dGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBl
PigoKnR5cGUpLT5jbG9uZSgpKSk7CisgICAgYXV0byBmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24g
PSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKCp0eXBlKS0+Y2xvbmUoKSk7CiAgICAgaWYgKCFm
aXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
PihmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAKQEAgLTE0OTYsNyArMTU2NCw3
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkgLT4gRXhwZWN0ZWQ8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0CiAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpm
aXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pKTsKIAogICAgIHdoaWxlICh0cnlUeXBlKExleGVyOjpU
b2tlbjo6VHlwZTo6Q29tbWEpKSB7Ci0gICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9
IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPigoKnR5
cGUpLT5jbG9uZSgpKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IHBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKICAgICAgICAgaWYgKCF2YXJp
YWJsZURlY2xhcmF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZh
cmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92
ZSgqdmFyaWFibGVEZWNsYXJhdGlvbikpOwpAQCAtMTk1OSw4ICsyMDI3LDEwIEBAIGF1dG8gUGFy
c2VyOjpwYXJzZVRlcm5hcnlDb25kaXRpb25hbCgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OkV4cHJlc3NpCiAgICAgaWYgKCFlbHNlRXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KGVsc2VFeHByZXNzaW9uLmVycm9yKCkpOwogCi0gICAgLy8gRklY
TUU6IENhc3QgdGhlIHByZWRpY2F0ZSB0byBhIGJvb2wuCi0gICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OkV4cHJlc3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUZXJuYXJ5RXhwcmVz
c2lvbj4oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZSgqcHJlZGljYXRlKSwgV1RGTW92ZSgqYm9k
eUV4cHJlc3Npb24pLCBXVEZNb3ZlKCplbHNlRXhwcmVzc2lvbikpKTsKKyAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4+IGNhc3RBcmd1bWVudHM7CisgICAgY2FzdEFy
Z3VtZW50cy5hcHBlbmQoV1RGTW92ZSgqcHJlZGljYXRlKSk7CisgICAgYXV0byBib29sQ2FzdCA9
IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpvcmln
aW4pLCBTdHJpbmcoImJvb2wiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92
ZShjYXN0QXJndW1lbnRzKSk7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJl
c3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oV1RGTW92ZSgq
b3JpZ2luKSwgV1RGTW92ZShib29sQ2FzdCksIFdURk1vdmUoKmJvZHlFeHByZXNzaW9uKSwgV1RG
TW92ZSgqZWxzZUV4cHJlc3Npb24pKSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUFzc2lnbm1l
bnQoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+
IHsKQEAgLTIxNzgsNyArMjI0OCw2IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlUmVsYXRp
b25hbEJpbmFyeU9wZXJhdGlvbigpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0CiAgICAgICAg
ICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgICAg
ICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpuZXh0KSk7CiAgICAgICAgICAgICBwcmV2
aW91cyA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2Vu
KCpyZWxhdGlvbmFsQmluYXJ5T3BlcmF0aW9uKSwgU3RyaW5nKCJvcGVyYXRvcj09IiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpOwotICAgICAg
ICAgICAgLy8gRklYTUU6IENhc3QgdGhlIGFyZ3VtZW50IHRvIGEgYm9vbAogICAgICAgICAgICAg
cHJldmlvdXMgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KFdU
Rk1vdmUoKnJlbGF0aW9uYWxCaW5hcnlPcGVyYXRpb24pLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjM2NCw4ICsyNDMzLDEyIEBAIGF1dG8g
UGFyc2VyOjpwYXJzZVBvc3NpYmxlUHJlZml4KCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6RXhwcmVzc2lvbj4sCiAgICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZN
b3ZlKCpuZXh0KSk7CiAgICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhw
cmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9r
ZW4oKnByZWZpeCksIFN0cmluZygib3BlcmF0b3J+IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpKTsKICAgICAgICAgfQotICAgICAgICBjYXNl
IExleGVyOjpUb2tlbjo6VHlwZTo6RXhjbGFtYXRpb25Qb2ludDoKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6
TG9naWNhbE5vdEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwgV1RGTW92ZSgqbmV4
dCkpKTsKKyAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkV4Y2xhbWF0aW9uUG9pbnQ6
IHsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPj4g
Y2FzdEFyZ3VtZW50czsKKyAgICAgICAgICAgIGNhc3RBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUo
Km5leHQpKTsKKyAgICAgICAgICAgIGF1dG8gYm9vbENhc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPEFT
VDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwgU3RyaW5nKCJib29sIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FzdEFyZ3VtZW50cykpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+KHN0ZDo6
bWFrZV91bmlxdWU8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpwcmVm
aXgpLCBXVEZNb3ZlKGJvb2xDYXN0KSkpOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTGV4ZXI6
OlRva2VuOjpUeXBlOjpBbmQ6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFT
VDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lv
bj4oTGV4ZXI6OlRva2VuKCpwcmVmaXgpLCBXVEZNb3ZlKCpuZXh0KSkpOwogICAgICAgICBjYXNl
IExleGVyOjpUb2tlbjo6VHlwZTo6QXQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAppbmRleCBkYTNlMDZiMDFlNC4uODAxMzkxNDk4MDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFy
c2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJz
ZXIuaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUg
IldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMQXJy
YXlSZWZlcmVuY2VUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKICNpbmNsdWRl
ICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCkBAIC02OCw3ICs2Nyw2IEBACiAjaW5jbHVk
ZSAiV0hMU0xOb2RlLmgiCiAjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbC5oIgogI2luY2x1ZGUg
IldITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiV0hMU0xQYXJh
bWV0ZXIuaCIKICNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xQ
cm9ncmFtLmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKQEAg
LTE1NCwxMyArMTUyLDEzIEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8VHlwZVN1ZmZpeEFiYnJl
dmlhdGVkLCBFcnJvcj4gcGFyc2VUeXBlU3VmZml4QWJicmV2aWF0ZWQoKTsKICAgICBzdHJ1Y3Qg
VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkIHsKICAgICAgICAgTGV4ZXI6OlRva2VuIHRva2VuOwot
ICAgICAgICBPcHRpb25hbDxMZXhlcjo6VG9rZW4+IGFkZHJlc3NTcGFjZTsKKyAgICAgICAgT3B0
aW9uYWw8QVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKICAg
ICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG51bUVsZW1lbnRzOwogICAgIH07CiAgICAgRXhwZWN0
ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBFcnJvcj4gcGFyc2VUeXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQoKTsKLSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJy
b3I+IHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOwotICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlR5cGU+LCBFcnJvcj4gcGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCk7Ci0gICAgRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiBwYXJzZVR5cGUoKTsKKyAg
ICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJz
ZUFkZHJlc3NTcGFjZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpV
bm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKTsKKyAgICBFeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZVR5cGUo
KTsKICAgICBFeHBlY3RlZDxBU1Q6OlR5cGVEZWZpbml0aW9uLCBFcnJvcj4gcGFyc2VUeXBlRGVm
aW5pdGlvbigpOwogICAgIEV4cGVjdGVkPEFTVDo6QnVpbHRJblNlbWFudGljLCBFcnJvcj4gcGFy
c2VCdWlsdEluU2VtYW50aWMoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlJlc291cmNlU2VtYW50aWMs
IEVycm9yPiBwYXJzZVJlc291cmNlU2VtYW50aWMoKTsKQEAgLTE3NSw4ICsxNzMsOCBAQCBwcml2
YXRlOgogICAgIEV4cGVjdGVkPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFy
c2VOYXRpdmVUeXBlRGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6Ok51bVRocmVhZHNG
dW5jdGlvbkF0dHJpYnV0ZSwgRXJyb3I+IHBhcnNlTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRl
KCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpBdHRyaWJ1dGVCbG9jaywgRXJyb3I+IHBhcnNlQXR0cmli
dXRlQmxvY2soKTsKLSAgICBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHBhcnNlUGFy
YW1ldGVyKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXJzLCBFcnJvcj4gcGFyc2VQYXJh
bWV0ZXJzKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4g
cGFyc2VQYXJhbWV0ZXIoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
LCBFcnJvcj4gcGFyc2VQYXJhbWV0ZXJzKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VFbnRyeVBvaW50RnVuY3Rpb25EZWNsYXJhdGlvbigpOwog
ICAgIEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlUmVndWxh
ckZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24sIEVycm9yPiBwYXJzZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXJhdGlvbigpOwpAQCAtMTky
LDcgKzE5MCw3IEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNUOjpGb3JMb29wLCBFcnJvcj4g
cGFyc2VGb3JMb29wKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpXaGlsZUxvb3AsIEVycm9yPiBwYXJz
ZVdoaWxlTG9vcCgpOwogICAgIEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxvb3AsIEVycm9yPiBwYXJz
ZURvV2hpbGVMb29wKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBF
cnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+
JiYpOworICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNl
VmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJik7
CiAgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCwgRXJyb3I+
IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKTsKICAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcj4gcGFyc2VTdGF0ZW1lbnQoKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKaW5k
ZXggMGViNjRkZWNkNGQuLjQ2MGU5NDZmZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAgLTI4LDEwICsyOCwxNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldITFNMUHJlcGFyZS5oIgogCisjaW5j
bHVkZSAiV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIldITFNMQ2hl
Y2tlci5oIgogI2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiV0hMU0xQ
YXJzZXIuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFJlY3Vy
c2l2ZVR5cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGFuZGFyZExpYnJhcnkuaCIKKyNp
bmNsdWRlICJXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgiCisjaW5jbHVkZSAi
V0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXpl
RW51bWVyYXRpb25GdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVTdHJ1Y3R1
cmVBY2Nlc3NvcnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MCw4ICs1NywyMyBA
QCBPcHRpb25hbDxQcmVwYXJhdGlvblJlc3VsdD4gcHJlcGFyZShTdHJpbmdWaWV3IHNvdXJjZSkK
ICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBy
ZXNvbHZlTmFtZXNJblR5cGVzKHByb2dyYW0pOworICAgIE5hbWVSZXNvbHZlciBuYW1lUmVzb2x2
ZXIocHJvZ3JhbS5uYW1lQ29udGV4dCgpKTsKKyAgICBpZiAoIXJlc29sdmVOYW1lc0luVHlwZXMo
cHJvZ3JhbSwgbmFtZVJlc29sdmVyKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICBpZiAoIWNoZWNrUmVjdXJzaXZlVHlwZXMocHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhwcm9ncmFtKTsKKyAg
ICBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMocHJvZ3JhbSk7CisgICAgc3ludGhlc2l6
ZUFycmF5T3BlcmF0b3JMZW5ndGgocHJvZ3JhbSk7CisgICAgc3ludGhlc2l6ZUNvbnN0cnVjdG9y
cyhwcm9ncmFtKTsKKyAgICBpZiAoIWNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKHByb2dyYW0pKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghcmVzb2x2ZU5hbWVzSW5GdW5j
dGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKwogCisgICAgaWYgKGNoZWNrKHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIHJldHVybiBQcmVwYXJhdGlvblJlc3VsdCgpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oCmluZGV4IDU2MzBm
ZTY5ZWU0Li42MGVlNDc5MDE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKQEAgLTI5LDYgKzI5LDggQEAKIAogI2luY2x1ZGUg
IldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRl
ZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKyNpbmNsdWRlICJXSExT
TE5hbWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LmgiCiAjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJX
SExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKQEAgLTQ0LDQ1ICs0Niw2NCBAQCBwdWJsaWM6CiAg
ICAgUHJvZ3JhbSgpID0gZGVmYXVsdDsKICAgICBQcm9ncmFtKFByb2dyYW0mJikgPSBkZWZhdWx0
OwogCi0gICAgdm9pZCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5pdGlvbiYmIHR5cGVEZWZpbml0aW9u
KQorICAgIGJvb2wgYXBwZW5kKEFTVDo6VHlwZURlZmluaXRpb24mJiB0eXBlRGVmaW5pdGlvbikK
ICAgICB7Ci0gICAgICAgIG1fdHlwZURlZmluaXRpb25zLmFwcGVuZChXVEZNb3ZlKHR5cGVEZWZp
bml0aW9uKSk7CisgICAgICAgIG1fdHlwZURlZmluaXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5p
cXVlPEFTVDo6VHlwZURlZmluaXRpb24+KFdURk1vdmUodHlwZURlZmluaXRpb24pKSk7CisgICAg
ICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV90eXBlRGVmaW5pdGlvbnMubGFzdCgpKTsK
ICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiYgc3RydWN0
dXJlRGVmaW5pdGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlv
biYmIHN0cnVjdHVyZURlZmluaXRpb24pCiAgICAgewotICAgICAgICBtX3N0cnVjdHVyZURlZmlu
aXRpb25zLmFwcGVuZChXVEZNb3ZlKHN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgbV9z
dHJ1Y3R1cmVEZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24+KFdURk1vdmUoc3RydWN0dXJlRGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0
dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX3N0cnVjdHVyZURlZmluaXRpb25zLmxhc3QoKSk7CiAg
ICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiYgZW51bWVy
YXRpb25EZWZpbml0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNUOjpFbnVtZXJhdGlvbkRlZmlu
aXRpb24mJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCiAgICAgewotICAgICAgICBtX2VudW1lcmF0
aW9uRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoZW51bWVyYXRpb25EZWZpbml0aW9uKSk7Cisg
ICAgICAgIG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShlbnVtZXJhdGlvbkRlZmluaXRpb24p
KSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9lbnVtZXJhdGlvbkRlZmlu
aXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6RnVuY3Rpb25EZWZp
bml0aW9uJiYgZnVuY3Rpb25EZWZpbml0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mJiBmdW5jdGlvbkRlZmluaXRpb24pCiAgICAgewotICAgICAgICBtX2Z1
bmN0aW9uRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoZnVuY3Rpb25EZWZpbml0aW9uKSk7Cisg
ICAgICAgIG1fZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShmdW5jdGlvbkRlZmluaXRpb24pKSk7CisgICAg
ICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9mdW5jdGlvbkRlZmluaXRpb25zLmxhc3Qo
KSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biYmIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCisKKyAgICBib29sIGFwcGVuZChBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQogICAg
IHsKLSAgICAgICAgbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgIG1fbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uPihXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSk7CisgICAgICAgIG1f
aW50cmluc2ljcy5hZGQoKm1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMubGFzdCgpKTsKKyAg
ICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uJiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCiAgICAgewotICAg
ICAgICBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUobmF0aXZlVHlwZURl
Y2xhcmF0aW9uKSk7CisgICAgICAgIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5hcHBlbmQoc3Rk
OjptYWtlX3VuaXF1ZTxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oV1RGTW92ZShuYXRpdmVU
eXBlRGVjbGFyYXRpb24pKSk7CisgICAgICAgIG1faW50cmluc2ljcy5hZGQoKm1fbmF0aXZlVHlw
ZURlY2xhcmF0aW9ucy5sYXN0KCkpOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQo
Km1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5sYXN0KCkpOwogICAgIH0KIAotICAgIFZlY3RvcjxB
U1Q6OlR5cGVEZWZpbml0aW9uPiYgdHlwZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV90eXBlRGVm
aW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPiYgc3RydWN0
dXJlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3N0cnVjdHVyZURlZmluaXRpb25zOyB9Ci0gICAg
VmVjdG9yPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPiYgZW51bWVyYXRpb25EZWZpbml0aW9u
cygpIHsgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX2Z1
bmN0aW9uRGVmaW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uPiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX25hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uPiYgbmF0aXZlVHlwZURlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlVHlwZURlY2xh
cmF0aW9uczsgfQorICAgIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCgpIHsgcmV0dXJuIG1fbmFt
ZUNvbnRleHQ7IH0KKyAgICBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKCkgeyByZXR1cm4gbV9pbnRy
aW5zaWNzOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVEZWZpbml0aW9u
Pj4mIHR5cGVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fdHlwZURlZmluaXRpb25zOyB9CisgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+PiYgc3RydWN0
dXJlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3N0cnVjdHVyZURlZmluaXRpb25zOyB9CisgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4+JiBlbnVt
ZXJhdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zOyB9
CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
bj4+JiBmdW5jdGlvbkRlZmluaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbkRlZmlu
aXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbj4+JiBmdW5jdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlZmluaXRp
b25zOyB9CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24+PiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiYgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOyB9Cisg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4+JiBu
YXRpdmVUeXBlRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25z
OyB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPEFTVDo6VHlwZURlZmluaXRpb24+IG1fdHlwZURl
ZmluaXRpb25zOwotICAgIFZlY3RvcjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+IG1fc3RydWN0
dXJlRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPiBt
X2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uPiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbj4gbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uczsKLSAgICBWZWN0b3I8
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+IG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsKKyAg
ICBOYW1lQ29udGV4dCBtX25hbWVDb250ZXh0OworICAgIEludHJpbnNpY3MgbV9pbnRyaW5zaWNz
OworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlRGVmaW5pdGlvbj4+IG1fdHlw
ZURlZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdHJ1Y3R1cmVE
ZWZpbml0aW9uPj4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPj4gbV9lbnVtZXJhdGlvbkRlZmluaXRp
b25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+
PiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25z
OworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+
PiBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlw
ZUNoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNzVl
Y2FiYjIyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCkBAIC0wLDAgKzEsMTA1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCisKKyNpbmNsdWRlICJXSExTTFZp
c2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFJlY3Vyc2l2ZVR5cGVDaGVja2VyIDogcHVi
bGljIFZpc2l0b3IgeworcHVibGljOgorICAgIH5SZWN1cnNpdmVUeXBlQ2hlY2tlcigpID0gZGVm
YXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRp
b24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZXMuYWRk
KCZ0eXBlRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewor
ICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlRGVmaW5pdGlvbik7CisKKyAgICAgICAg
YXV0byBzdWNjZXNzID0gbV90eXBlcy5yZW1vdmUoJnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlcy5hZGQoJnN0cnVjdHVyZURl
ZmluaXRpb24pOworICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisKKyAgICAgICAgYXV0
byBzdWNjZXNzID0gbV90eXBlcy5yZW1vdmUoJnN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVzLmFkZCgmdHlwZVJlZmVyZW5jZSk7CisgICAg
ICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoYXV0byYgdHlw
ZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpCisgICAgICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQodHlwZUFyZ3VtZW50KTsKKyAgICAgICAgdmlzaXROYW1lZFR5cGUo
KnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworCisgICAgICAgIGF1dG8gc3VjY2VzcyA9
IG1fdHlwZXMucmVtb3ZlKCZ0eXBlUmVmZXJlbmNlKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChz
dWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmVmZXJlbmNl
VHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBIYXNoU2V0PEFT
VDo6VHlwZSo+IG1fdHlwZXM7Cit9OworCitib29sIGNoZWNrUmVjdXJzaXZlVHlwZXMoUHJvZ3Jh
bSYgcHJvZ3JhbSkKK3sKKyAgICBSZWN1cnNpdmVUeXBlQ2hlY2tlciByZWN1cnNpdmVUeXBlQ2hl
Y2tlcjsKKyAgICByZWN1cnNpdmVUeXBlQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3Jh
bSk7CisgICAgcmV0dXJuIHJlY3Vyc2l2ZVR5cGVDaGVja2VyLmVycm9yKCk7Cit9CisKK30KKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWEzYTE5ZGNlMjAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVj
a2VyLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkdQVSkKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExT
TCB7CisKK2NsYXNzIFByb2dyYW07CisKK2Jvb2wgY2hlY2tSZWN1cnNpdmVUeXBlcyhQcm9ncmFt
Jik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMjI4MzVmMWU2NAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVz
b2x2ZU92ZXJsb2FkSW1wbC5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNv
bHZlT3ZlcmxvYWRJbXBsLmgiCisKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitBU1Q6Ok5hbWVkVHlwZSog
cmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpOYW1lZFR5cGU+LCAxPiYgcG9zc2libGVUeXBlcywgQVNUOjpUeXBlQXJndW1lbnRzJiB0eXBl
QXJndW1lbnRzKQoreworICAgIEFTVDo6TmFtZWRUeXBlKiByZXN1bHQgPSBudWxscHRyOworICAg
IGZvciAoYXV0byYgcG9zc2libGVUeXBlIDogcG9zc2libGVUeXBlcykgeworICAgICAgICBpZiAo
aW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMocG9zc2libGVUeXBlLCB0eXBlQXJndW1lbnRzKSkg
eworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlwZSY+KHBv
c3NpYmxlVHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jM2Y2MGVhOWQ2NQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJs
b2FkSW1wbC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFz
cyBOYW1lZFR5cGU7CisKK30KKworQVNUOjpOYW1lZFR5cGUqIHJlc29sdmVUeXBlT3ZlcmxvYWRJ
bXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4mLCBB
U1Q6OlR5cGVBcmd1bWVudHMmKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVy
YXRvckxlbmd0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uNzg5MjA1NmUyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9y
TGVuZ3RoLmNwcApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJH
UFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVBcnJh
eU9wZXJhdG9yTGVuZ3RoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdI
TFNMIHsKKworY2xhc3MgRmluZEFycmF5VHlwZXMgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6
CisgICAgfkZpbmRBcnJheVR5cGVzKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6
OkFycmF5VHlwZSYgYXJyYXlUeXBlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9hcnJheVR5
cGVzLmFwcGVuZChhcnJheVR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlU
eXBlKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkFy
cmF5VHlwZT4+JiYgdGFrZUFycmF5VHlwZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURk1v
dmUobV9hcnJheVR5cGVzKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpBcnJheVR5cGU+PiBtX2FycmF5VHlwZXM7Cit9OworCit2b2lk
IHN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAg
RmluZEFycmF5VHlwZXMgZmluZEFycmF5VHlwZXM7CisgICAgZmluZEFycmF5VHlwZXMuY2hlY2tF
cnJvckFuZFZpc2l0KHByb2dyYW0pOworICAgIGF1dG8gYXJyYXlUeXBlcyA9IGZpbmRBcnJheVR5
cGVzLnRha2VBcnJheVR5cGVzKCk7CisKKyAgICBmb3IgKGF1dG8mIGFycmF5VHlwZSA6IGFycmF5
VHlwZXMpIHsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCBhcnJheVR5cGUuZ2V0KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwg
bnVsbHB0cik7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsK
KyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0
dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBwcm9ncmFtLmludHJpbnNpY3Mo
KS51aW50VHlwZSgpKSwgU3RyaW5nKCJvcGVyYXRvci5sZW5ndGgiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7
CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bikpOworICAgIH0KK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxl
bmd0aC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVz
aXplQXJyYXlPcGVyYXRvckxlbmd0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5lOWE5YTExNGYyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaApA
QCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2Ns
YXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3Jh
bSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3Jz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWM0MDBlZTdiMGIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBGaW5kQWxsVHlwZXMgOiBwdWJsaWMgVmlzaXRv
ciB7CitwdWJsaWM6CisgICAgfkZpbmRBbGxUeXBlcygpID0gZGVmYXVsdDsKKworICAgIHZvaWQg
dmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRlclR5cGUpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQocG9pbnRlclR5cGUpOworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQocG9pbnRlclR5cGUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpB
cnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlwZSkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChhcnJheVJlZmVyZW5jZVR5cGUpOworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlSZWZlcmVuY2VUeXBlKTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQoYXJyYXlUeXBlKTsKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGFycmF5VHlwZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgbV9uYW1lZFR5cGVzLmFwcGVuZChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICB9CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5p
dGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fbmFtZWRUeXBlcy5hcHBlbmQoc3RydWN0
dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVEZWZp
bml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX25h
bWVkVHlwZXMuYXBwZW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAgIH0KKworICAgIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+PiYmIHRha2VVbm5hbWVkVHlw
ZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV91bm5hbWVkVHlwZXMpOworICAg
IH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4m
JiB0YWtlTmFtZWRUeXBlcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX25hbWVk
VHlwZXMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4gbV91bm5hbWVkVHlwZXM7CisgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiBtX25hbWVkVHlwZXM7Cit9OworCit2
b2lkIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBGaW5k
QWxsVHlwZXMgZmluZEFsbFR5cGVzOworICAgIGZpbmRBbGxUeXBlcy5jaGVja0Vycm9yQW5kVmlz
aXQocHJvZ3JhbSk7CisgICAgYXV0byBtX3VubmFtZWRUeXBlcyA9IGZpbmRBbGxUeXBlcy50YWtl
VW5uYW1lZFR5cGVzKCk7CisgICAgYXV0byBtX25hbWVkVHlwZXMgPSBmaW5kQWxsVHlwZXMudGFr
ZU5hbWVkVHlwZXMoKTsKKworICAgIGZvciAoYXV0byYgdW5uYW1lZFR5cGUgOiBtX3VubmFtZWRU
eXBlcykgeworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxp
ZmllcnMoKSwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgbnVsbHB0cik7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVy
czsKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9u
KSk7CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0
b3IoTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1
dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksIFN0cmlu
Zygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBl
bmQoV1RGTW92ZShjb3B5Q29uc3RydWN0b3IpKTsKKworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24gZGVmYXVsdENvbnN0cnVjdG9yKExleGVyOjpUb2tlbih1bm5hbWVkVHlw
ZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1
bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucygpLCBXVEY6
Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShkZWZhdWx0
Q29uc3RydWN0b3IpKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIG5hbWVkVHlwZSA6IG1fbmFt
ZWRUeXBlcykgeworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNs
YXJhdGlvbihMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBl
LmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgbnVsbHB0cik7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVy
czsKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9u
KSk7CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0
b3IoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRl
QmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRv
a2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5nZXQoKSksIFN0cmluZygi
b3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQo
V1RGTW92ZShjb3B5Q29uc3RydWN0b3IpKTsKKworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24gZGVmYXVsdENvbnN0cnVjdG9yKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0
KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkp
LCBuYW1lZFR5cGUuZ2V0KCkpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucygpLCBXVEY6Om51bGxv
cHQsIGZhbHNlKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShkZWZhdWx0Q29uc3Ry
dWN0b3IpKTsKKyAgICB9Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9y
cy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXpl
Q29uc3RydWN0b3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgw
MDIwZGQ3YzcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCit2
b2lkIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5
bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFkN2JkMjNhMDgwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50
aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmgiCisKKyNpbmNsdWRlICJXSExT
TFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCit2b2lkIHN5bnRoZXNpemVFbnVtZXJh
dGlvbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIGZvciAoYXV0byYgZW51bWVy
YXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpIHsKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVj
bGFyYXRpb24xKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24p
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2lu
KCkpLCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVs
bHB0cik7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7
CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRp
b24xKSk7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb24yKSk7CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0
aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6
OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
b3JpZ2luKCkpLCBwcm9ncmFtLmludHJpbnNpY3MoKS5ib29sVHlwZSgpKSwgU3RyaW5nKCJvcGVy
YXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVy
cyksIFdURjo6bnVsbG9wdCwgZmFsc2UpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RG
TW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgIH0KKworICAgICAgICB7
CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlv
bihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0
aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5n
KCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZN
b3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6
Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksIFN0cmluZygi
b3BlcmF0b3IudmFsdWUiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAgICAgICBwcm9ncmFtLmFw
cGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24p
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2Nr
KCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwg
U3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdU
Rk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgZmFsc2UpOworICAgICAgICAgICAgcHJv
Z3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAg
IH0KKworICAgICAgICB7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFy
aWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmln
aW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5j
bG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgQVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0
ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgKmVudW1lcmF0aW9uRGVmaW5p
dGlvbiksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAg
ICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOwor
ICAgICAgICB9CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlv
bkZ1bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uYWMxMDc4NzJlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0
aW9ucy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNM
IHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlv
bnMoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3Nv
cnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVz
aXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uM2EyMzAyNzg3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3Bw
CkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vz
c29ycy5oIgorCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNM
UHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldI
TFNMVHlwZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK3ZvaWQgc3lu
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIGZvciAo
YXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMo
KSkgeworICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZp
bml0aW9uLT5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgLy8gVGhlIGdldHRlcjogb3BlcmF0b3IuZmllbGQKKyAgICAgICAgICAgICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3Ry
dWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZl
cmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCAqc3Ry
dWN0dXJlRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAg
ICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24p
KTsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4o
KSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBzdHJ1Y3R1cmVFbGVtZW50
LnR5cGUoKS5jbG9uZSgpLCBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3IuJXMiLCBzdHJ1Y3R1cmVF
bGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpu
dWxsb3B0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgc2V0dGVyOiBvcGVyYXRvci5maWVsZD0KKyAgICAg
ICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjEo
TGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMo
KSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50
Lm9yaWdpbigpKSwgKnN0cnVjdHVyZURlZmluaXRpb24pLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0
LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFy
aWFibGVEZWNsYXJhdGlvbjIoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkp
LCBBU1Q6OlF1YWxpZmllcnMoKSwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKKyAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CisgICAgICAg
ICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OkF0
dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgKnN0cnVjdHVyZURlZmluaXRp
b24pLCBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3IuJXM9Iiwgc3RydWN0dXJlRWxlbWVudC5uYW1l
KCkudXRmOCgpLmRhdGEoKSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgZmFs
c2UpOworICAgICAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbikpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUaGUgYW5k
ZXI6IG9wZXJhdG9yJi5maWVsZAorICAgICAgICAgICAgYXV0byBjcmVhdGVBbmRlciA9IFsmXShB
U1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpIC0+IEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiB7CisgICAgICAgICAgICAgICAgYXV0byBhcmd1bWVudFR5
cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihzdHJ1
Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgYWRkcmVzc1NwYWNlLCBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCAqc3RydWN0dXJl
RGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2
YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIFdURk1vdmUoYXJndW1lbnRUeXBlKSwgU3RyaW5nKCksIFdU
Rjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdU
Rk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gcmV0dXJu
VHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHN0
cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBhZGRyZXNzU3BhY2UsIHN0cnVjdHVyZUVsZW1lbnQu
dHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVF
bGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdU
Rk1vdmUocmV0dXJuVHlwZSksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvciYuJXMiLCBzdHJ1Y3R1
cmVFbGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RG
OjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb247CisgICAgICAgICAgICB9OworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQo
Y3JlYXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50KSk7
CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5
cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlKSk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChj
cmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkZ3JvdXAp
KTsKKyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNl
VHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWQpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfQor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGU5YjlmZjcwYzAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaApAQCAtMCwwICsxLDQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
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
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlz
aXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0
b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lZTExNGY2YTg0
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMVmlzaXRvci5jcHAKQEAgLTAsMCArMSw5NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMVmlzaXRv
ci5oIgorCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVJl
ZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldI
TFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEJhc2VGdW5jdGlvbkF0
dHJpYnV0ZS5oIgorI2luY2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hM
U0xCbG9jay5oIgorI2luY2x1ZGUgIldITFNMQm9vbGVhbkxpdGVyYWwuaCIKKyNpbmNsdWRlICJX
SExTTEJyZWFrLmgiCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKKyNpbmNsdWRl
ICJXSExTTENhbGxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDb21tYUV4cHJlc3Npb24u
aCIKKyNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNM
Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuaCIKKyNpbmNsdWRl
ICJXSExTTENvbnRpbnVlLmgiCisjaW5jbHVkZSAiV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24u
aCIKKyNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xEb3RFeHBy
ZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50Lmgi
CisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExT
TEVudW1lcmF0aW9uTWVtYmVyLmgiCisjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xGYWxsdGhyb3VnaC5oIgorI2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsLmgi
CisjaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkF0dHJp
YnV0ZS5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUg
IldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVudC5o
IgorI2luY2x1ZGUgIldITFNMSW5kZXhFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRl
Z2VyTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbEV4cHJlc3Npb24uaCIKKyNpbmNs
dWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRlckV4cHJl
c3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNp
bmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTm9k
ZS5oIgorI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTE51bVRo
cmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIK
KyNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMUXVhbGlmaWVyLmgiCisjaW5jbHVkZSAiV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNv
dXJjZVNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xSZXR1cm4uaCIKKyNpbmNsdWRlICJXSExT
TFNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50
aWMuaCIKKyNpbmNsdWRlICJXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldI
TFNMU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hD
YXNlLmgiCisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExT
TFRlcm5hcnlFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUcmFwLmgiCisjaW5jbHVkZSAi
V0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJX
SExTTFR5cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisj
aW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xW
YWx1ZS5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUg
IldITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFZh
cmlhYmxlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCit2b2lkIFZpc2l0b3I6OnZpc2l0
KFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6IHBy
b2dyYW0udHlwZURlZmluaXRpb25zKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdHlw
ZURlZmluaXRpb24pOworICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dy
YW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpz
dHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlv
biA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKmVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgZm9yIChhdXRvJiBmdW5jdGlv
bkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KCpmdW5jdGlvbkRlZmluaXRpb24pOworICAgIGZvciAoYXV0byYgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bnMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKTsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0
aXZlVHlwZURlY2xhcmF0aW9ucygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXRVbm5hbWVkVHlwZShB
U1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkKK3sKKyAgICBpZiAoaXM8QVNUOjpUeXBlUmVm
ZXJlbmNlPih1bm5hbWVkVHlwZSkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2Fz
dDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSk7CisgICAgZWxzZSBpZiAoaXM8QVNU
OjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICBlbHNlIGlmIChp
czxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBl
KSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1l
ZFR5cGUpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXJyYXlU
eXBlPih1bm5hbWVkVHlwZSkpOworICAgIH0KK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdE5hbWVk
VHlwZShBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKQoreworICAgIGlmIChpczxBU1Q6OlR5cGVE
ZWZpbml0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNh
c3Q8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSk7CisgICAgZWxzZSBpZiAoaXM8QVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKTsKKyAg
ICBlbHNlIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uPihuYW1lZFR5cGUpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURl
ZmluaXRpb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUodHlwZURlZmlu
aXRpb24udHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN0cnVjdHVyZURl
ZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCit7CisgICAgZm9yIChhdXRvJiBzdHJ1Y3R1
cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRWxlbWVudCk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShlbnVtZXJhdGlvbkRl
ZmluaXRpb24udHlwZSgpKTsKKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51
bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZW51bWVyYXRpb25NZW1iZXIpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KGZ1
bmN0aW9uRGVmaW5pdGlvbikpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmlu
aXRpb24uYmxvY2soKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mPihuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBmb3Ig
KGF1dG8mIHR5cGVBcmd1bWVudCA6IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRz
KCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlQXJndW1lbnQpOworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKK3sKKyAg
ICBmb3IgKGF1dG8mIHR5cGVBcmd1bWVudCA6IHR5cGVSZWZlcmVuY2UudHlwZUFyZ3VtZW50cygp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZUFyZ3VtZW50KTsKKyAgICBpZiAodHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSAmJiBpczxBU1Q6OlR5cGVEZWZpbml0aW9uPigqdHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdFVu
bmFtZWRUeXBlKGRvd25jYXN0PEFTVDo6VHlwZURlZmluaXRpb24+KCp0eXBlUmVmZXJlbmNlLnJl
c29sdmVkVHlwZSgpKS50eXBlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UG9p
bnRlclR5cGUmIHBvaW50ZXJUeXBlKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNf
Y2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGUmPihwb2ludGVyVHlwZSkpOworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpCit7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZSY+
KGFycmF5UmVmZXJlbmNlVHlwZSkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QXJy
YXlUeXBlJiBhcnJheVR5cGUpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUo
YXJyYXlUeXBlLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1
cmVFbGVtZW50JiBzdHJ1Y3R1cmVFbGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdFVu
bmFtZWRUeXBlKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKTsKKyAgICBpZiAoc3RydWN0dXJlRWxl
bWVudC5zZW1hbnRpYygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnN0cnVjdHVyZUVs
ZW1lbnQuc2VtYW50aWMoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpFbnVtZXJh
dGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCit7CisgICAgaWYgKGVudW1lcmF0aW9uTWVt
YmVyLnZhbHVlKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZW51bWVyYXRpb25NZW1i
ZXIudmFsdWUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChm
dW5jdGlvbkRlY2xhcmF0aW9uLmF0dHJpYnV0ZUJsb2NrKCkpOworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdFVubmFtZWRUeXBlKGZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICBmb3IgKGF1
dG8mIHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQocGFyYW1ldGVyKTsKKyAgICBpZiAoZnVuY3Rpb25EZWNsYXJh
dGlvbi5zZW1hbnRpYygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZ1bmN0aW9uRGVj
bGFyYXRpb24uc2VtYW50aWMoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpUeXBl
QXJndW1lbnQmIHR5cGVBcmd1bWVudCkKK3sKKyAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pIHsKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGNvbnN0YW50RXhwcmVzc2lvbik7CisgICAgfSwgWyZd
KHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+JiB0eXBlUmVmZXJlbmNlKSB7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdHlwZVJlZmVyZW5jZSk7CisgICAgfSksIHR5cGVB
cmd1bWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJiBy
ZWZlcmVuY2VUeXBlKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBlKHJlZmVy
ZW5jZVR5cGUuZWxlbWVudFR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpT
ZW1hbnRpYyYgc2VtYW50aWMpCit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYgYnVpbHRJblNlbWFudGljKSB7CisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChidWlsdEluU2VtYW50aWMpOworICAgIH0sIFsmXShBU1Q6OlJlc291cmNl
U2VtYW50aWMmIHJlc291cmNlU2VtYW50aWMpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHJlc291cmNlU2VtYW50aWMpOworICAgIH0sIFsmXShBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3Rh
bnRTZW1hbnRpYyYgc3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljKSB7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChzcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMpOworICAgIH0s
IFsmXShBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYgc3RhZ2VJbk91dFNlbWFudGljKSB7CisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGFnZUluT3V0U2VtYW50aWMpOworICAgIH0pLCBzZW1h
bnRpYyk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24m
IGNvbnN0YW50RXhwcmVzc2lvbikKK3sKKyAgICBjb25zdGFudEV4cHJlc3Npb24udmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGludGVnZXJMaXRlcmFsKTsKKyAgICB9LCBbJl0o
QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsKTsKKyAgICB9
LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgeworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZmxvYXRMaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYg
bnVsbExpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG51bGxMaXRlcmFsKTsK
KyAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIHsKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGJvb2xlYW5MaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpD
b25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpIHsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKTsKKyAg
ICB9KSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYgYXR0
cmlidXRlQmxvY2spCit7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkF0dHJpYnV0ZSA6IGF0dHJp
YnV0ZUJsb2NrKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25BdHRyaWJ1dGUp
OworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QnVpbHRJblNlbWFudGljJikKK3sKK30K
Kwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmKQoreworfQorCit2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJikK
K3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYpCit7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpCit7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJikKK3sKK30K
Kwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYpCit7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
dmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpCit7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkF0dHJpYnV0ZSYgZnVuY3Rpb25B
dHRyaWJ1dGUpCit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6Ok51
bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYgbnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKSB7
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChudW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUp
OworICAgIH0pLCBmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmKQoreworfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQoreworICAgIGZvciAoYXV0byYgc3RhdGVtZW50IDog
YmxvY2suc3RhdGVtZW50cygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnN0YXRlbWVu
dCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkK
K3sKKyAgICBpZiAoaXM8QVNUOjpCbG9jaz4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QmxvY2s+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYg
KGlzPEFTVDo6QnJlYWs+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChk
b3duY2FzdDxBU1Q6OkJyZWFrPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkNv
bnRpbnVlPihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8
QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpEb1doaWxl
TG9vcD4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFT
VDo6RG9XaGlsZUxvb3A+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RWZmZWN0
ZnVsRXhwcmVzc2lvblN0YXRlbWVudD4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGRvd25jYXN0PEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudD4oc3RhdGVt
ZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpGYWxsdGhyb3VnaD4oc3RhdGVtZW50KSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RmFsbHRocm91Z2g+KHN0YXRl
bWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6Rm9yTG9vcD4oc3RhdGVtZW50KSkKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Rm9yTG9vcD4oc3RhdGVtZW50KSk7
CisgICAgZWxzZSBpZiAoaXM8QVNUOjpJZlN0YXRlbWVudD4oc3RhdGVtZW50KSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6SWZTdGF0ZW1lbnQ+KHN0YXRlbWVudCkp
OworICAgIGVsc2UgaWYgKGlzPEFTVDo6UmV0dXJuPihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpSZXR1cm4+KHN0YXRlbWVudCkpOworICAgIGVs
c2UgaWYgKGlzPEFTVDo6U3dpdGNoQ2FzZT4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6U3dpdGNoQ2FzZT4oc3RhdGVtZW50KSk7CisgICAgZWxz
ZSBpZiAoaXM8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlN3aXRjaFN0YXRlbWVudD4oc3RhdGVtZW50KSk7
CisgICAgZWxzZSBpZiAoaXM8QVNUOjpUcmFwPihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpUcmFwPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlm
IChpczxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihzdGF0ZW1lbnQpKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxB
U1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChk
b3duY2FzdDxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7CisgICAgfQorfQorCit2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6QnJlYWsmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6Q29udGludWUmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RG9XaGlsZUxv
b3AmIGRvV2hpbGVMb29wKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5i
b2R5KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5jb25kaXRpb25hbCgp
KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24p
Cit7CisgICAgaWYgKGlzPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBc3NpZ25tZW50RXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6Qm9vbGVhbkxpdGVyYWw+
KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpC
b29sZWFuTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6Q2FsbEV4
cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNh
c3Q8QVNUOjpDYWxsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFT
VDo6Q29tbWFFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRvd25jYXN0PEFTVDo6Q29tbWFFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxz
ZSBpZiAoaXM8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+
KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkZsb2F0TGl0ZXJhbD4oZXhwcmVz
c2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkZsb2F0TGl0
ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6SW50ZWdlckxpdGVyYWw+
KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpJ
bnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TG9naWNh
bEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93
bmNhc3Q8QVNUOjpMb2dpY2FsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYg
KGlzPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oZXhwcmVz
c2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6
Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlm
IChpczxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oZXhw
cmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24p
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpOdWxsTGl0ZXJhbD4o
ZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RG90RXhwcmVzc2lvbj4oZXhwcmVz
c2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkRvdEV4cHJl
c3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkluZGV4RXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6
OkluZGV4RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6UmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChkb3duY2FzdDxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24+KGV4cHJlc3Np
b24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlRlcm5hcnlFeHByZXNzaW9uPihleHByZXNzaW9u
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VGVybmFyeUV4cHJl
c3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlVuc2lnbmVkSW50ZWdl
ckxpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNh
c3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSk7CisgICAgZWxzZSB7
CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSk7
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlPihleHByZXNzaW9uKSk7CisgICAgfQorfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6
RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQo
c3RhdGljX2Nhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihkb3RFeHByZXNzaW9u
KSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4
RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaW5kZXhFeHByZXNzaW9uLmlu
ZGV4RXhwcmVzc2lvbigpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNU
OjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihpbmRleEV4cHJlc3Npb24pKTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgZXhwcmVzc2lv
bikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZXhwcmVzc2lvbi5iYXNlKCkpOworfQorCit2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYgZWZm
ZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZWZm
ZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNzaW9uKCkpOworfQorCit2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKQoreworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKK3sKKyAgICBXVEY6OnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlh
YmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgfSwgWyZdKHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdCgqZXhwcmVzc2lvbik7CisgICAgfSksIGZvckxvb3AuaW5pdGlhbGl6YXRpb24oKSk7Cisg
ICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgq
Zm9yTG9vcC5jb25kaXRpb24oKSk7CisgICAgaWYgKGZvckxvb3AuaW5jcmVtZW50KCkpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7CisgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGZvckxvb3AuYm9keSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQo
aWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3Rh
dGVtZW50LmJvZHkoKSk7CisgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpCisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKK3sKKyAgICBpZiAo
cmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcmV0
dXJuU3RhdGVtZW50LnZhbHVlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3dp
dGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBpZiAoc3dpdGNoQ2FzZS52YWx1ZSgpKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnN3aXRjaENhc2UudmFsdWUoKSk7CisgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkKK3sKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkpOworICAgIGZvciAoYXV0byYgc3dp
dGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoc3dpdGNoQ2FzZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpU
cmFwJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkKK3sKKyAgICBmb3Ig
KGF1dG8mIHZhcmlhYmxlRGVjbGFyYXRpb24gOiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dC52YXJpYWJsZURlY2xhcmF0aW9ucygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFy
aWFibGVEZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpXaGlsZUxv
b3AmIHdoaWxlTG9vcCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmNvbmRp
dGlvbmFsKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKK30K
Kwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxl
RGVjbGFyYXRpb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUodmFyaWFi
bGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFu
dGljKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5z
ZW1hbnRpYygpKTsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6
ZXIoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lv
biYgYXNzaWdubWVudEV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2ln
bm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1l
bnRFeHByZXNzaW9uLnJpZ2h0KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6Q2Fs
bEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQoreworICAgIGZvciAoYXV0byYgYXJndW1lbnQg
OiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KCphcmd1bWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpDb21tYUV4cHJlc3Np
b24mIGNvbW1hRXhwcmVzc2lvbikKK3sKKyAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBjb21t
YUV4cHJlc3Npb24ubGlzdCgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmV4cHJlc3Np
b24pOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9u
JiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChsb2dpY2FsRXhwcmVzc2lvbi5yaWdodCgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lvbikKK3sKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKK30K
Kwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24m
IG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Np
b24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFs
dWUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vbGRWYWx1ZSgpKTsKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpKTsKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4
cHJlc3Npb24oKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24ucmVzdWx0RXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24ucHJlZGljYXRlKCkpOworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24uZWxzZUV4cHJlc3Npb24oKSk7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYpCit7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdChwcm9ncmFtKTsKK30KKwordm9pZCBWaXNpdG9yOjpj
aGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlw
ZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0VW5uYW1lZFR5cGUodW5uYW1l
ZFR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdE5hbWVkVHlwZShB
U1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAg
dmlzaXROYW1lZFR5cGUobmFtZWRUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdCh0eXBlRGVmaW5pdGlvbik7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0
dXJlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHN0cnVj
dHVyZURlZmluaXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQoreworICAg
IGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKK30K
Kwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZp
c2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAg
IGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKK30K
Kwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0
eXBlUmVmZXJlbmNlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodHlwZVJl
ZmVyZW5jZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UG9p
bnRlclR5cGUmIHBvaW50ZXJUeXBlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQocG9pbnRlclR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBlKQoreworICAgIGlmICgh
ZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYXJyYXlSZWZlcmVuY2VUeXBlKTsKK30KKwordm9pZCBW
aXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGFycmF5VHlwZSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RydWN0dXJlRWxlbWVudCYgc3RydWN0
dXJlRWxlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHN0cnVjdHVy
ZUVsZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkVu
dW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKK3sKKyAgICBpZiAoIWVycm9yKCkp
CisgICAgICAgIHZpc2l0KGVudW1lcmF0aW9uTWVtYmVyKTsKK30KKwordm9pZCBWaXNpdG9yOjpj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xh
cmF0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZnVuY3Rpb25EZWNs
YXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VHlw
ZUFyZ3VtZW50JiB0eXBlQXJndW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2
aXNpdCh0eXBlQXJndW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OlJlZmVyZW5jZVR5cGUmIHJlZmVyZW5jZVR5cGUpCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdChyZWZlcmVuY2VUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVj
a0Vycm9yQW5kVmlzaXQoQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMpCit7CisgICAgaWYgKCFlcnJv
cigpKQorICAgICAgICB2aXNpdChzZW1hbnRpYyk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24p
Cit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChjb25zdGFudEV4cHJlc3Npb24p
OworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkF0dHJpYnV0ZUJs
b2NrJiBhdHRyaWJ1dGVCbG9jaykKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0
KGF0dHJpYnV0ZUJsb2NrKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpCdWlsdEluU2VtYW50aWMmIGJ1aWx0SW5TZW1hbnRpYykKK3sKKyAgICBpZiAoIWVycm9y
KCkpCisgICAgICAgIHZpc2l0KGJ1aWx0SW5TZW1hbnRpYyk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYgcmVzb3VyY2VTZW1hbnRp
YykKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHJlc291cmNlU2VtYW50aWMp
OworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlNwZWNpYWxpemF0
aW9uQ29uc3RhbnRTZW1hbnRpYyYgc3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljKQorewor
ICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoc3BlY2lhbGl6YXRpb25Db25zdGFudFNl
bWFudGljKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTdGFn
ZUluT3V0U2VtYW50aWMmIHN0YWdlSW5PdXRTZW1hbnRpYykKK3sKKyAgICBpZiAoIWVycm9yKCkp
CisgICAgICAgIHZpc2l0KHN0YWdlSW5PdXRTZW1hbnRpYyk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKQor
eworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoaW50ZWdlckxpdGVyYWwpOworfQor
Cit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxp
dGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAg
ICAgICB2aXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsKTsKK30KKwordm9pZCBWaXNpdG9yOjpj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkKK3sKKyAg
ICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZsb2F0TGl0ZXJhbCk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRlcmFs
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobnVsbExpdGVyYWwpOworfQor
Cit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFsJiBi
b29sZWFuTGl0ZXJhbCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGJvb2xl
YW5MaXRlcmFsKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpD
b25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpCit7CisgICAgaWYgKCFlcnJvcigpKQor
ICAgICAgICB2aXNpdChjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5j
ZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RnVuY3Rpb25B
dHRyaWJ1dGUmIGZ1bmN0aW9uQXR0cmlidXRlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAg
ICAgdmlzaXQoZnVuY3Rpb25BdHRyaWJ1dGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYgbnVtVGhyZWFkc0Z1
bmN0aW9uQXR0cmlidXRlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobnVt
VGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpCbG9jayYgYmxvY2spCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAg
ICB2aXNpdChibG9jayk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6U3RhdGVtZW50JiBzdGF0ZW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2
aXNpdChzdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OkJyZWFrJiBicmVha1N0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAg
IHZpc2l0KGJyZWFrU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpDb250aW51ZSYgY29udGludWVTdGF0ZW1lbnQpCit7CisgICAgaWYgKCFlcnJv
cigpKQorICAgICAgICB2aXNpdChjb250aW51ZVN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKQorewor
ICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZG9XaGlsZUxvb3ApOworfQorCit2b2lk
IFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24p
Cit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChleHByZXNzaW9uKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RF
eHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZG90RXhwcmVz
c2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SW5kZXhF
eHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAg
ICB2aXNpdChpbmRleEV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQocHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVt
ZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZWZmZWN0ZnVsRXhwcmVz
c2lvblN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6RmFsbHRocm91Z2gmIGZhbGx0aHJvdWdoU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3Io
KSkKKyAgICAgICAgdmlzaXQoZmFsbHRocm91Z2hTdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0
b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdChmb3JMb29wKTsKK30KKwordm9pZCBWaXNpdG9yOjpj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCit7CisgICAg
aWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChpZlN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChyZXR1cm5TdGF0ZW1lbnQpOworfQor
Cit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN3aXRjaENhc2UmIHN3aXRj
aENhc2UpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzd2l0Y2hDYXNlKTsK
K30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1l
bnQmIHN3aXRjaFN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0
KHN3aXRjaFN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6VHJhcCYgdHJhcCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHRy
YXApOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb25zU3Rh
dGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpXaGls
ZUxvb3AmIHdoaWxlTG9vcCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHdo
aWxlTG9vcCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoIWVycm9y
KCkpCisgICAgICAgIHZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb24pOworfQorCit2b2lkIFZpc2l0
b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25t
ZW50RXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGFzc2ln
bm1lbnRFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdChjYWxsRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChjb21tYUV4cHJlc3Npb24pOworfQor
Cit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVz
c2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAg
ICAgdmlzaXQoZGVyZWZlcmVuY2VFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVj
a0Vycm9yQW5kVmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYgbG9naWNhbEV4cHJlc3Npb24p
Cit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChsb2dpY2FsRXhwcmVzc2lvbik7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TG9naWNhbE5vdEV4
cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAg
ICAgICAgdmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2
aXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVy
RXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KG1ha2VQb2lu
dGVyRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikK
K3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlRlcm5h
cnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisg
ICAgICAgIHZpc2l0KHRlcm5hcnlFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVj
a0Vycm9yQW5kVmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2Up
Cit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh2YXJpYWJsZVJlZmVyZW5jZSk7
Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKaW5kZXggNTE2ODU2ZTQxZDAuLjllNDU2MmE5ZTJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZp
c2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZp
c2l0b3IuaApAQCAtMjcsNTQzICsyNywyMjUgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNp
bmNsdWRlICJXSExTTFByb2dyYW0uaCIKLSNpbmNsdWRlICJXSExTTEFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgotI2lu
Y2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xBc3NpZ25tZW50RXhwcmVz
c2lvbi5oIgotI2luY2x1ZGUgIldITFNMQmFzZUZ1bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVk
ZSAiV0hMU0xCYXNlU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTEJsb2NrLmgiCi0jaW5jbHVk
ZSAiV0hMU0xCb29sZWFuTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMQnJlYWsuaCIKLSNpbmNs
dWRlICJXSExTTEJ1aWx0SW5TZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Np
b24uaCIKLSNpbmNsdWRlICJXSExTTENvbW1hRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNM
Q29uc3RhbnRFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIldITFNMQ29udGludWUuaCIK
LSNpbmNsdWRlICJXSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNM
RG9XaGlsZUxvb3AuaCIKLSNpbmNsdWRlICJXSExTTERvdEV4cHJlc3Npb24uaCIKLSNpbmNsdWRl
ICJXSExTTEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTEVu
dW1lcmF0aW9uRGVmaW5pdGlvbi5oIgotI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIu
aCIKLSNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTEZhbGx0aHJv
dWdoLmgiCi0jaW5jbHVkZSAiV0hMU0xGbG9hdExpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTEZv
ckxvb3AuaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAi
V0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmlu
aXRpb24uaCIKLSNpbmNsdWRlICJXSExTTElmU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xJ
bmRleEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFsLmgiCi0jaW5j
bHVkZSAiV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTG9naWNhbE5v
dEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24uaCIKLSNpbmNsdWRlICJXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUg
IldITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNMTmF0aXZl
VHlwZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xOb2RlLmgiCi0jaW5jbHVkZSAiV0hM
U0xOdWxsTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmli
dXRlLmgiCi0jaW5jbHVkZSAiV0hMU0xQYXJhbWV0ZXIuaCIKLSNpbmNsdWRlICJXSExTTFBvaW50
ZXJUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKLSNp
bmNsdWRlICJXSExTTFF1YWxpZmllci5oIgotI2luY2x1ZGUgIldITFNMUmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgotI2luY2x1ZGUg
IldITFNMUmVzb3VyY2VTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMUmV0dXJuLmgiCiAjaW5j
bHVkZSAiV0hMU0xTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMU3BlY2lhbGl6YXRpb25Db25z
dGFudFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaCIKLSNp
bmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5p
dGlvbi5oIgotI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRWxlbWVudC5oIgotI2luY2x1ZGUgIldI
TFNMU3dpdGNoQ2FzZS5oIgotI2luY2x1ZGUgIldITFNMU3dpdGNoU3RhdGVtZW50LmgiCi0jaW5j
bHVkZSAiV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMVHJhcC5oIgot
I2luY2x1ZGUgIldITFNMVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCi0j
aW5jbHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlvbi5oIgotI2luY2x1ZGUgIldITFNMVHlwZVJlZmVy
ZW5jZS5oIgotI2luY2x1ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oIgotI2luY2x1
ZGUgIldITFNMVmFsdWUuaCIKLSNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIK
LSNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgiCi0jaW5jbHVk
ZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgi
Ci0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi1jbGFzcyBW
aXNpdG9yIHsKLSAgICB+VmlzaXRvcigpID0gZGVmYXVsdDsKLQotICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChQcm9ncmFtJiBwcm9ncmFtKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiB0eXBlRGVm
aW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdCh0
eXBlRGVmaW5pdGlvbik7Ci0gICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6
IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KHN0cnVj
dHVyZURlZmluaXRpb24pOwotICAgICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlv
biA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQo
ZW51bWVyYXRpb25EZWZpbml0aW9uKTsKLSAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmlu
aXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0
KGZ1bmN0aW9uRGVmaW5pdGlvbik7Ci0gICAgICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKLSAgICAg
ICAgICAgIHZpc2l0KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOwotICAgICAgICBmb3IgKGF1
dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9u
cygpKQotICAgICAgICAgICAgdmlzaXQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKLSAgICB9Ci0K
LSAgICB2b2lkIHZpc2l0VHlwZShBU1Q6OlR5cGUmIHR5cGUpCi0gICAgewotICAgICAgICBpZiAo
aXM8QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0
PEFTVDo6VHlwZVJlZmVyZW5jZT4odHlwZSkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlBv
aW50ZXJUeXBlPih0eXBlKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6UG9pbnRl
clR5cGU+KHR5cGUpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5
cGU+KHR5cGUpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHR5cGUpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8QVNU
OjpBcnJheVR5cGU+KHR5cGUpKTsKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6QXJy
YXlUeXBlPih0eXBlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pCi0gICAgewotICAgICAgICB2
aXNpdFR5cGUodHlwZURlZmluaXRpb24udHlwZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQot
ICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVm
aW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKQotICAgICAgICAgICAgdmlzaXQoc3RydWN0dXJl
RWxlbWVudCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRp
b25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCi0gICAgewotICAgICAgICB2aXNp
dFR5cGUoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYg
ZW51bWVyYXRpb25NZW1iZXIgOiBlbnVtZXJhdGlvbkRlZmluaXRpb24uZW51bWVyYXRpb25NZW1i
ZXJzKCkpCi0gICAgICAgICAgICB2aXNpdChlbnVtZXJhdGlvbk1lbWJlcik7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRl
ZmluaXRpb24pCi0gICAgewotICAgICAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24mPihmdW5jdGlvbkRlZmluaXRpb24pKTsKLSAgICAgICAgdmlzaXQoZnVuY3Rp
b25EZWZpbml0aW9uLmJsb2NrKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24p
Ci0gICAgewotICAgICAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24mPihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRp
b24pCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHR5cGVBcmd1bWVudCA6IG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkpCi0gICAgICAgICAgICB2aXNpdCh0eXBlQXJndW1l
bnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2Um
IHR5cGVSZWZlcmVuY2UpCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHR5cGVBcmd1bWVudCA6
IHR5cGVSZWZlcmVuY2UudHlwZUFyZ3VtZW50cygpKQotICAgICAgICAgICAgdmlzaXQodHlwZUFy
Z3VtZW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlw
ZSYgcG9pbnRlclR5cGUpCi0gICAgewotICAgICAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlJl
ZmVyZW5jZVR5cGUmPihwb2ludGVyVHlwZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBlKQotICAgIHsK
LSAgICAgICAgdmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlJj4oYXJyYXlSZWZl
cmVuY2VUeXBlKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXJyYXlU
eXBlJiBhcnJheVR5cGUpCi0gICAgewotICAgICAgICB2aXNpdFR5cGUoYXJyYXlUeXBlLnR5cGUo
KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRWxlbWVu
dCYgc3RydWN0dXJlRWxlbWVudCkKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShzdHJ1Y3R1cmVF
bGVtZW50LnR5cGUoKSk7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkp
Ci0gICAgICAgICAgICB2aXNpdCgqc3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygpKTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVy
YXRpb25NZW1iZXIpCi0gICAgewotICAgICAgICBpZiAoZW51bWVyYXRpb25NZW1iZXIudmFsdWUo
KSkKLSAgICAgICAgICAgIHZpc2l0KCplbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKTsKLSAgICB9
Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYg
ZnVuY3Rpb25EZWNsYXJhdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVjbGFy
YXRpb24uYXR0cmlidXRlQmxvY2soKSk7Ci0gICAgICAgIHZpc2l0VHlwZShmdW5jdGlvbkRlY2xh
cmF0aW9uLnR5cGUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkpCi0gICAgICAgICAgICB2aXNpdChwYXJhbWV0ZXIpOwot
ICAgICAgICBpZiAoZnVuY3Rpb25EZWNsYXJhdGlvbi5zZW1hbnRpYygpKQotICAgICAgICAgICAg
dmlzaXQoKmZ1bmN0aW9uRGVjbGFyYXRpb24uc2VtYW50aWMoKSk7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBlQXJndW1lbnQpCi0gICAgewot
ICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6Q29uc3RhbnRFeHBy
ZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgIHZpc2l0KGNvbnN0YW50
RXhwcmVzc2lvbik7Ci0gICAgICAgIH0sIFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVm
ZXJlbmNlPiYgdHlwZVJlZmVyZW5jZSkgewotICAgICAgICAgICAgdmlzaXQoKnR5cGVSZWZlcmVu
Y2UpOwotICAgICAgICB9KSwgdHlwZUFyZ3VtZW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJiByZWZlcmVuY2VUeXBlKQotICAgIHsKLSAgICAg
ICAgdmlzaXRUeXBlKHJlZmVyZW5jZVR5cGUuZWxlbWVudFR5cGUoKSk7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U2VtYW50aWMmIHNlbWFudGljKQotICAgIHsKLSAgICAg
ICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYg
YnVpbHRJblNlbWFudGljKSB7Ci0gICAgICAgICAgICB2aXNpdChidWlsdEluU2VtYW50aWMpOwot
ICAgICAgICB9LCBbJl0oQVNUOjpSZXNvdXJjZVNlbWFudGljJiByZXNvdXJjZVNlbWFudGljKSB7
Ci0gICAgICAgICAgICB2aXNpdChyZXNvdXJjZVNlbWFudGljKTsKLSAgICAgICAgfSwgWyZdKEFT
VDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJiBzcGVjaWFsaXphdGlvbkNvbnN0YW50
U2VtYW50aWMpIHsKLSAgICAgICAgICAgIHZpc2l0KHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1h
bnRpYyk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYgc3RhZ2VJbk91
dFNlbWFudGljKSB7Ci0gICAgICAgICAgICB2aXNpdChzdGFnZUluT3V0U2VtYW50aWMpOwotICAg
ICAgICB9KSwgc2VtYW50aWMpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAg
Y29uc3RhbnRFeHByZXNzaW9uLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdl
ckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7Ci0gICAgICAgICAgICB2aXNpdChpbnRlZ2VyTGl0
ZXJhbCk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KHVuc2lnbmVkSW50ZWdlckxp
dGVyYWwpOwotICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkg
ewotICAgICAgICAgICAgdmlzaXQoZmxvYXRMaXRlcmFsKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6
TnVsbExpdGVyYWwmIG51bGxMaXRlcmFsKSB7Ci0gICAgICAgICAgICB2aXNpdChudWxsTGl0ZXJh
bCk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkg
ewotICAgICAgICAgICAgdmlzaXQoYm9vbGVhbkxpdGVyYWwpOwotICAgICAgICB9LCBbJl0oQVNU
OjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRF
eHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpIHsKLSAgICAgICAgICAgIHZpc2l0
KGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKTsKLSAgICAgICAg
fSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkF0dHJpYnV0ZUJsb2Nr
JiBhdHRyaWJ1dGVCbG9jaykKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgZnVuY3Rpb25BdHRy
aWJ1dGUgOiBhdHRyaWJ1dGVCbG9jaykKLSAgICAgICAgICAgIHZpc2l0KGZ1bmN0aW9uQXR0cmli
dXRlKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQYXJhbWV0ZXImIHBh
cmFtZXRlcikKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShwYXJhbWV0ZXIudHlwZSgpKTsKLSAg
ICAgICAgaWYgKHBhcmFtZXRlci5zZW1hbnRpYygpKQotICAgICAgICAgICAgdmlzaXQoKnBhcmFt
ZXRlci5zZW1hbnRpYygpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpC
dWlsdEluU2VtYW50aWMmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpSZXNvdXJjZVNlbWFudGljJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJikKLSAgICB7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJikKLSAg
ICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwm
KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6RmxvYXRMaXRlcmFsJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6TnVsbExpdGVyYWwmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
JikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25B
dHRyaWJ1dGUmIGZ1bmN0aW9uQXR0cmlidXRlKQotICAgIHsKLSAgICAgICAgV1RGOjp2aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYgbnVt
VGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKSB7Ci0gICAgICAgICAgICB2aXNpdChudW1UaHJlYWRz
RnVuY3Rpb25BdHRyaWJ1dGUpOwotICAgICAgICB9KSwgZnVuY3Rpb25BdHRyaWJ1dGUpOwotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJp
YnV0ZSYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJsb2Nr
JiBibG9jaykKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgc3RhdGVtZW50IDogYmxvY2suc3Rh
dGVtZW50cygpKQotICAgICAgICAgICAgdmlzaXQoKnN0YXRlbWVudCk7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RhdGVtZW50JiBzdGF0ZW1lbnQpCi0gICAgewotICAg
ICAgICBpZiAoaXM8QVNUOjpCbG9jaz4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRv
d25jYXN0PEFTVDo6QmxvY2s+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6
OkJyZWFrPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpCcmVh
az4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6Q29udGludWU+KHN0YXRl
bWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkNvbnRpbnVlPihzdGF0ZW1l
bnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpEb1doaWxlTG9vcD4oc3RhdGVtZW50KSkK
LSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6RG9XaGlsZUxvb3A+KHN0YXRlbWVudCkp
OwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+
KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkVmZmVjdGZ1bEV4
cHJlc3Npb25TdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6
OkZhbGx0aHJvdWdoPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNU
OjpGYWxsdGhyb3VnaD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6Rm9y
TG9vcD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6Rm9yTG9v
cD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6SWZTdGF0ZW1lbnQ+KHN0
YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OklmU3RhdGVtZW50Pihz
dGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpSZXR1cm4+KHN0YXRlbWVudCkp
Ci0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlJldHVybj4oc3RhdGVtZW50KSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6U3dpdGNoQ2FzZT4oc3RhdGVtZW50KSkKLSAgICAgICAg
ICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6U3dpdGNoQ2FzZT4oc3RhdGVtZW50KSk7Ci0gICAgICAg
IGVsc2UgaWYgKGlzPEFTVDo6U3dpdGNoU3RhdGVtZW50PihzdGF0ZW1lbnQpKQotICAgICAgICAg
ICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOwotICAg
ICAgICBlbHNlIGlmIChpczxBU1Q6OlRyYXA+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNp
dChkb3duY2FzdDxBU1Q6OlRyYXA+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihzdGF0ZW1lbnQpKQotICAgICAgICAg
ICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oc3Rh
dGVtZW50KSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6V2hp
bGVMb29wPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6V2hp
bGVMb29wPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkJyZWFrJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6Q29udGludWUmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApCi0gICAgewotICAgICAgICB2aXNpdChk
b1doaWxlTG9vcC5ib2R5KCkpOwotICAgICAgICB2aXNpdChkb1doaWxlTG9vcC5jb25kaXRpb25h
bCgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFeHByZXNzaW9uJiBl
eHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgaWYgKGlzPEFTVDo6QXNzaWdubWVudEV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpBc3NpZ25t
ZW50RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkJv
b2xlYW5MaXRlcmFsPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFT
VDo6Qm9vbGVhbkxpdGVyYWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNU
OjpDYWxsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2Fz
dDxBU1Q6OkNhbGxFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlz
PEFTVDo6Q29tbWFFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRv
d25jYXN0PEFTVDo6Q29tbWFFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAg
ICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9u
KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6RmxvYXRMaXRlcmFsPihleHByZXNzaW9uKSkK
LSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsPihleHByZXNzaW9u
KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6SW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24p
KQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVz
c2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uPihleHBy
ZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6TG9naWNhbEV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpMb2dpY2FsTm90RXhw
cmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6Okxv
Z2ljYWxOb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFT
VDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAg
ICB2aXNpdChkb3duY2FzdDxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJl
c3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+
KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpOdWxs
TGl0ZXJhbD4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6Ok51
bGxMaXRlcmFsPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6UHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25j
YXN0PEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAg
IGVsc2UgaWYgKGlzPEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
Ci0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpUZXJuYXJ5RXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlRlcm5h
cnlFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6VW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3du
Y2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZXhw
cmVzc2lvbikpOwotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZT4oZXhwcmVzc2lvbikpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYgZWZmZWN0ZnVsRXhwcmVz
c2lvblN0YXRlbWVudCkKLSAgICB7Ci0gICAgICAgIHZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25T
dGF0ZW1lbnQuZWZmZWN0ZnVsRXhwcmVzc2lvbigpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApCi0gICAgewotICAgICAgICBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7Ci0gICAgICAgICAgICB2aXNpdCh2
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7Ci0gICAgICAgIH0sIFsmXShzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbikgewotICAgICAgICAgICAgdmlzaXQo
KmV4cHJlc3Npb24pOwotICAgICAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsKLSAg
ICAgICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkpCi0gICAgICAgICAgICB2aXNpdCgqZm9yTG9v
cC5jb25kaXRpb24oKSk7Ci0gICAgICAgIGlmIChmb3JMb29wLmluY3JlbWVudCgpKQotICAgICAg
ICAgICAgdmlzaXQoKmZvckxvb3AuaW5jcmVtZW50KCkpOwotICAgICAgICB2aXNpdChmb3JMb29w
LmJvZHkoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1l
bnQmIGlmU3RhdGVtZW50KQotICAgIHsKLSAgICAgICAgdmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0
aW9uYWwoKSk7Ci0gICAgICAgIHZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7Ci0gICAgICAgIGlm
IChpZlN0YXRlbWVudC5lbHNlQm9keSgpKQotICAgICAgICAgICAgdmlzaXQoKmlmU3RhdGVtZW50
LmVsc2VCb2R5KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJldHVy
biYgcmV0dXJuU3RhdGVtZW50KQotICAgIHsKLSAgICAgICAgaWYgKHJldHVyblN0YXRlbWVudC52
YWx1ZSgpKQotICAgICAgICAgICAgdmlzaXQoKnJldHVyblN0YXRlbWVudC52YWx1ZSgpKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNl
KQotICAgIHsKLSAgICAgICAgaWYgKHN3aXRjaENhc2UudmFsdWUoKSkKLSAgICAgICAgICAgIHZp
c2l0KCpzd2l0Y2hDYXNlLnZhbHVlKCkpOwotICAgICAgICB2aXNpdChzd2l0Y2hDYXNlLmJsb2Nr
KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVu
dCYgc3dpdGNoU3RhdGVtZW50KQotICAgIHsKLSAgICAgICAgdmlzaXQoc3dpdGNoU3RhdGVtZW50
LnZhbHVlKCkpOwotICAgICAgICBmb3IgKGF1dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1l
bnQuc3dpdGNoQ2FzZXMoKSkKLSAgICAgICAgICAgIHZpc2l0KHN3aXRjaENhc2UpOwotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlRyYXAmKQotICAgIHsKLSAgICB9CitjbGFz
cyBQcm9ncmFtOworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgVHlwZURlZmluaXRpb247Citj
bGFzcyBTdHJ1Y3R1cmVEZWZpbml0aW9uOworY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uOwor
Y2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworY2xhc3MgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bjsKK2NsYXNzIE5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKK2NsYXNzIFR5cGVSZWZlcmVuY2U7Citj
bGFzcyBQb2ludGVyVHlwZTsKK2NsYXNzIEFycmF5UmVmZXJlbmNlVHlwZTsKK2NsYXNzIEFycmF5
VHlwZTsKK2NsYXNzIFN0cnVjdHVyZUVsZW1lbnQ7CitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlcjsK
K2NsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBSZWZlcmVuY2VUeXBlOworY2xhc3Mg
Q29uc3RhbnRFeHByZXNzaW9uOworY2xhc3MgQnVpbHRJblNlbWFudGljOworY2xhc3MgUmVzb3Vy
Y2VTZW1hbnRpYzsKK2NsYXNzIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYzsKK2NsYXNz
IFN0YWdlSW5PdXRTZW1hbnRpYzsKK2NsYXNzIEludGVnZXJMaXRlcmFsOworY2xhc3MgVW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbDsKK2NsYXNzIEZsb2F0TGl0ZXJhbDsKK2NsYXNzIE51bGxMaXRlcmFs
OworY2xhc3MgQm9vbGVhbkxpdGVyYWw7CitjbGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZTsKK2NsYXNzIE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZTsK
K2NsYXNzIEJsb2NrOworY2xhc3MgU3RhdGVtZW50OworY2xhc3MgQnJlYWs7CitjbGFzcyBDb250
aW51ZTsKK2NsYXNzIERvV2hpbGVMb29wOworY2xhc3MgRXhwcmVzc2lvbjsKK2NsYXNzIERvdEV4
cHJlc3Npb247CitjbGFzcyBJbmRleEV4cHJlc3Npb247CitjbGFzcyBQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb247CitjbGFzcyBFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50OworY2xhc3MgRmFs
bHRocm91Z2g7CitjbGFzcyBGb3JMb29wOworY2xhc3MgSWZTdGF0ZW1lbnQ7CitjbGFzcyBSZXR1
cm47CitjbGFzcyBTd2l0Y2hDYXNlOworY2xhc3MgU3dpdGNoU3RhdGVtZW50OworY2xhc3MgVHJh
cDsKK2NsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50OworY2xhc3MgV2hpbGVMb29w
OworY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbjsKK2NsYXNzIEFzc2lnbm1lbnRFeHByZXNzaW9u
OworY2xhc3MgQ2FsbEV4cHJlc3Npb247CitjbGFzcyBDb21tYUV4cHJlc3Npb247CitjbGFzcyBE
ZXJlZmVyZW5jZUV4cHJlc3Npb247CitjbGFzcyBMb2dpY2FsRXhwcmVzc2lvbjsKK2NsYXNzIExv
Z2ljYWxOb3RFeHByZXNzaW9uOworY2xhc3MgTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjsK
K2NsYXNzIE1ha2VQb2ludGVyRXhwcmVzc2lvbjsKK2NsYXNzIFJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb247CitjbGFzcyBUZXJuYXJ5RXhwcmVzc2lvbjsKK2NsYXNzIFZhcmlhYmxlUmVmZXJlbmNl
OworY2xhc3MgVW5uYW1lZFR5cGU7CitjbGFzcyBOYW1lZFR5cGU7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQpCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHZhcmlhYmxlRGVj
bGFyYXRpb24gOiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC52YXJpYWJsZURlY2xhcmF0
aW9ucygpKQotICAgICAgICAgICAgdmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCi0gICAg
ewotICAgICAgICB2aXNpdCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7Ci0gICAgICAgIHZpc2l0
KHdoaWxlTG9vcC5ib2R5KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCi0gICAgewotICAgICAg
ICB2aXNpdFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBpZiAodmFy
aWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKQotICAgICAgICAgICAgdmlzaXQoKnZhcmlhYmxl
RGVjbGFyYXRpb24uc2VtYW50aWMoKSk7Ci0gICAgICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9u
LmluaXRpYWxpemVyKCkpCi0gICAgICAgICAgICB2aXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5p
bml0aWFsaXplcigpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2
aXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOwotICAgICAgICB2aXNpdChhc3NpZ25t
ZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCi0gICAgewotICAgICAgICBmb3Ig
KGF1dG8mIGFyZ3VtZW50IDogY2FsbEV4cHJlc3Npb24uYXJndW1lbnRzKCkpCi0gICAgICAgICAg
ICB2aXNpdCgqYXJndW1lbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgZm9yIChh
dXRvJiBleHByZXNzaW9uIDogY29tbWFFeHByZXNzaW9uLmxpc3QoKSkKLSAgICAgICAgICAgIHZp
c2l0KCpleHByZXNzaW9uKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpE
ZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikKLSAgICB7Ci0gICAg
ICAgIHZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVz
c2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLmxlZnQoKSk7Ci0g
ICAgICAgIHZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLnJpZ2h0KCkpOwotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhw
cmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJh
bmQoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKLSAgICB7Ci0g
ICAgICAgIHZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOwotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYg
bWFrZVBvaW50ZXJFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQobWFrZVBvaW50ZXJF
eHByZXNzaW9uLmxWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKLSAg
ICB7Ci0gICAgICAgIHZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKLSAgICAgICAgdmlzaXQocmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5vbGRWYWx1ZSgpKTsKLSAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpKTsKLSAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSk7Ci0gICAgICAgIHZpc2l0KHJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24ucmVzdWx0RXhwcmVzc2lvbigpKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24p
Ci0gICAgewotICAgICAgICB2aXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7Ci0g
ICAgICAgIHZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmJvZHlFeHByZXNzaW9uKCkpOwotICAgICAg
ICB2aXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYpCi0gICAgewotICAg
IH0KK30KIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFub255bW91c1ZhcmlhYmxlRGVj
bGFyYXRpb24mKQotICAgIHsKLSAgICB9CitjbGFzcyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB2
aXJ0dWFsIH5WaXNpdG9yKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdFVubmFtZWRUeXBl
KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKTsKKyAgICB2b2lkIHZpc2l0TmFtZWRUeXBl
KEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0
VW5uYW1lZFR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpOworICAgIHZvaWQgY2hl
Y2tFcnJvckFuZFZpc2l0TmFtZWRUeXBlKEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpOworCisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KFByb2dyYW0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpUeXBlRGVmaW5pdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0cnVj
dHVyZURlZmluaXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYpOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJik7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6QXJyYXlUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJl
RWxlbWVudCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVy
Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYpOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlR5cGVBcmd1bWVudCYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpTZW1hbnRpYyYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhw
cmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkF0dHJpYnV0ZUJsb2NrJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QnVpbHRJblNlbWFudGljJik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpOworICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkZsb2F0TGl0ZXJhbCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFs
Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uQXR0cmli
dXRlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0
cmlidXRlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QmxvY2smKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpTdGF0ZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpCcmVhayYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbnRpbnVlJik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
RG90RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkluZGV4RXhwcmVz
c2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25T
dGF0ZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJl
dHVybiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaENhc2UmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpUcmFwJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpX
aGlsZUxvb3AmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6TG9naWNhbE5vdEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpN
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlRlcm5hcnlFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2UmKTsKKworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KFByb2dyYW0mKTsK
KyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJik7CisgICAg
dm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJik7CisgICAg
dm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKTsKKyAg
ICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYp
OworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJik7Cisg
ICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJik7CisgICAgdm9pZCBj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBcnJheVR5cGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpUeXBlQXJndW1lbnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OlJlZmVyZW5jZVR5cGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlNlbWFu
dGljJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Np
b24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkF0dHJpYnV0ZUJsb2NrJik7
CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCdWlsdEluU2VtYW50aWMmKTsKKyAg
ICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmKTsKKyAgICB2
b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRp
YyYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFudGlj
Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpOwor
ICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYp
OworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJik7CisgICAg
dm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYpOworICAgIHZvaWQgY2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmKTsKKyAgICB2b2lkIGNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGdW5jdGlvbkF0dHJpYnV0
ZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9u
QXR0cmlidXRlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCbG9jayYpOwor
ICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RhdGVtZW50Jik7CisgICAgdm9pZCBj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCcmVhayYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6Q29udGludWUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkRv
V2hpbGVMb29wJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFeHByZXNzaW9u
Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJik7Cisg
ICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKTsKKyAgICB2
b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYpOwor
ICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRl
bWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKTsK
KyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZvckxvb3AmKTsKKyAgICB2b2lkIGNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OklmU3RhdGVtZW50Jik7CisgICAgdm9pZCBjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpSZXR1cm4mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OlN3aXRjaENhc2UmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN3aXRjaFN0
YXRlbWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VHJhcCYpOworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OldoaWxlTG9vcCYpOworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpOworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mKTsKKyAg
ICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJik7CisgICAgdm9pZCBj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJik7Cisg
ICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mKTsK
KyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9u
Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYp
OworCisgICAgdm9pZCBzZXRFcnJvcigpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fZXJyb3Ip
OworICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGVycm9yKCkgY29u
c3QgeyByZXR1cm4gbV9lcnJvcjsgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9lcnJvciB7IGZh
bHNlIH07IC8vIEZJWE1FOiBNaWdyYXRlIHRoaXMgdG8gYmUgc29tZSBzb3J0IG9mIGRlc2NyaXB0
aXZlIHN0cmluZy4KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggM2MwZTM2NDcwNTQuLjljYjVk
NWNmM2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMzA2LDggKzMwNiwyMSBAQCBNb2R1bGVzL3dlYmdw
dS9ET01XaW5kb3dXZWJHUFUuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNw
cAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByZXBhcmUuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNp
Y3MuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCitNb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TE5hbWVSZXNvbHZlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQu
Y3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcAor
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKK01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAK
K01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25z
LmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxl
bmd0aC5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9y
cy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
R2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVLmNwcAogTW9k
dWxlcy93ZWJncHUvV2ViR1BVQWRhcHRlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRH
cm91cExheW91dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCAwN2MxNmVmMTc3NS4uNzY5NTQzNWViMzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0MDMs
OSArNjQwMywyMCBAQAogCQkxQzI0RUVBNzFDNzJBN0I0MDA4MEY4RkMgLyogSlNGb250RmFjZVNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0ZvbnRGYWNlU2V0Lmg7IHBh
dGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9udEZhY2VTZXQuaDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUMyNjQ5NzkwRDdFMjQ4QTAwQkQxMEYyIC8qIERv
Y3VtZW50TG9hZGVyTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERvY3VtZW50TG9hZGVyTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMz
MjQ5MTAxQzZENkEzQjAwN0VEQjMyIC8qIEZvbnRWYXJpYW50QnVpbGRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250VmFyaWFudEJ1aWxkZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc2QzIxQ0VEQTQyMDAwREM5RjIgLyogV0hM
U0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xFbnVtZXJh
dGlvbk1lbWJlckxpdGVyYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3
NkUyMUNFRkY3NDAwMERDOUYyIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUMzMzI3NkYyMUNGMDEzMTAwMERDOUYyIC8qIFdITFNMSW5mZXJUeXBlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXSExTTEluZmVyVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUMzMzI3NzEyMUNGMEJFMTAwMERDOUYyIC8qIFdITFNMTmFtZWRUeXBlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMTmFtZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDMzMyNzcyMjFDRjBEMkUwMDBEQzlGMiAvKiBXSExTTFVubmFtZWRUeXBlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMVW5uYW1lZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUMzMzI3NzQyMUQ1QTcwNjAwMERDOUYyIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQzMzMjc3NTIxRDVCMEY4MDAwREM5RjIgLyogV0hMU0xDaGVja0R1
cGxpY2F0ZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTENoZWNrRHVwbGljYXRlRnVu
Y3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc2MjFENUMwN0Uw
MDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFDMzMyNzc3MjFENUNBODMwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVF
bnVtZXJhdGlvbkZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMz
Mjc3ODIxRDVDRUQ0MDAwREM5RjIgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0
aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMzk2OUNGMUI3NDIxMUUwMDJCQ0ZBNyAv
KiBGb250Q2FjaGVDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGb250Q2FjaGVDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDNjYyNjBFMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RmFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFDNjYyNjBGMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzdDQzIxRDIxQ0RFMTk4MDBDMUZBMkMgLyogV0hMU0xOYW1lQ29udGV4dC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTE5hbWVDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFDODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTcwRTk3MzMwODAwMjY2RTA3
IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFDODFCOTU4MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NDE1LDYgKzY0MjYsOCBAQAogCQkxQ0FGMzQ3RTBBNkM0
MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQ0FGMzQ3RjBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0Lm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0Lm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ4MDBBNkM0MDUyMDBBQkUwNkUgLyogV2Vi
U2NyaXB0T2JqZWN0UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
ZWJTY3JpcHRPYmplY3RQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
QjY5QjJDMjFERDk2RUYwMDZFODQ2QSAvKiBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjJEMjFERDk2RUYwMDZFODQ2QSAvKiBXSExT
TEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEdhdGhlckVudHJ5
UG9pbnRJdGVtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0I2QjRGODIxN0I4
MzkzMDA5M0I5Q0QgLyogVGV4dERlY29yYXRpb25UaGlja25lc3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VGV4dERlY29yYXRpb25UaGlja25lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUNCNkI0RkIyMTdCODM5NDAwOTNCOUNEIC8qIFRleHRVbmRlcmxpbmVPZmZzZXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVGV4dFVuZGVybGluZU9mZnNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQ0NERjVCQjE5OTAzMzI0MDBCQ0VCQUQgLyogU1ZHVG9PVEZGb250Q29udmVyc2lvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUb09URkZvbnRDb252
ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjE0LDYgKzEzMjI3
LDkgQEAKIAkJQzExQTlFQ0QyMTQwM0E1QzAwQ0ZCMjBBIC8qIFN3aXRjaGluZ0dQVUNsaWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTd2l0Y2hpbmdHUFVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzExQTlFRDIyMTQwNTc4QjAwQ0ZCMjBBIC8qIFN3aXRjaGluZ0dQVUNsaWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTd2l0Y2hpbmdHUFVDbGllbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMUUxRDIzNTIwM0RGMTU0MDA1ODQ2NjUgLyogU2NyZWVu
UHJvcGVydGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JlZW5Qcm9wZXJ0aWVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMDEzMzQ0MjFEQUMwOTUwMEI2MEMyNyAvKiBXSExTTElu
dHJpbnNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMDEzMzQ2MjFEQUVFNkUwMEI2MEMyNyAvKiBXSExTTEludHJp
bnNpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwMTMzNDcyMURCNDM2MzAwQjYwQzI3IC8qIFdITFNM
U3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVD
b25zdHJ1Y3RvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIwMTVDMDkxQkU2
RkUyQzAwODIyMzg5IC8qIEZvbnRWYXJpYW50QnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250
VmFyaWFudEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMEU5MTEy
MUI0QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hM
U0xMZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMTBFOTEyMjFCNEJE
MTAwMEI3RjgzRCAvKiBXSExTTExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTGV4ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjQ1LDcgKzEzMjYxLDYgQEAKIAkJQzIx
QkY3MEMyMUNEODlDQzAwMjI3OTc5IC8qIFdITFNMRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3
MEQyMUNEODlDRDAwMjI3OTc5IC8qIFdITFNMUmVmZXJlbmNlVHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTFJlZmVyZW5jZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIx
QkY3MEUyMUNEODlDRTAwMjI3OTc5IC8qIFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUMyMUJGNzBGMjFDRDg5Q0YwMDIyNzk3OSAvKiBXSExTTEFub255bW91c1Zhcmlh
YmxlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURl
Y2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzEwMjFDRDg5
RDAwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyMUJGNzExMjFDRDg5RDEwMDIyNzk3OSAvKiBXSExTTFR5cGVBcmd1bWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTFR5cGVBcmd1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDMjFCRjcxMjIxQ0Q4OUQxMDAyMjc5NzkgLyogV0hMU0xTdGF0ZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xTdGF0ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEz
MjUzLDcgKzEzMjY4LDYgQEAKIAkJQzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFy
aWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFCRjcxNTIxQ0Q4OUQ0MDAyMjc5NzkgLyogV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyMUJGNzE2MjFDRDg5RDUwMDIyNzk3OSAvKiBXSExTTENhbGxFeHBy
ZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ2FsbEV4cHJlc3Npb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzIxQkY3MTcyMUNEODlENjAwMjI3OTc5IC8qIFdITFNMUGFy
YW1ldGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUGFyYW1ldGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyMUJGNzE4MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTERvdEV4cHJl
c3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xEb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzE5MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTFN3aXRj
aENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyMUJGNzFBMjFDRDg5RDgwMDIyNzk3OSAvKiBXSExTTEJyZWFrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdITFNMQnJlYWsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEzMjk5LDE1ICsxMzMxMywyNyBAQAogCQlDMjgwODMzRDFDNkRDMjJDMDAxNDUxQjYgLyog
SlNGb250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU0Zv
bnRGYWNlLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZS5jcHA7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUMyODA4MzNFMUM2REMyMkMw
MDE0NTFCNiAvKiBKU0ZvbnRGYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEpTRm9udEZhY2UuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZS5o
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlDMjgwQjNGRDFFRjQ2MDg5
MDBEMzUxMzUgLyogRm9udEZhbWlseVNwZWNpZmljYXRpb25OdWxsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyODZFRDlFMjFEQjVBQkEwMDcxM0M0MCAv
KiBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xS
ZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4
OEM3MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MjkyMUM4
Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExT
TFByZXBhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyQTIxQzhD
QTUwMDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUHJlcGFy
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjg4QzcyQjIxQzhDQ0MyMDAyREY1
Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1l
UmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyQzIxQzhD
Q0MyMDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xO
YW1lUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MkQyMUM5
OTFEQTAwMkRGNUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdITFNMVHlwZUFyZ3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJB
QjBBRjQxRTZCM0M2QzAwMTM0OEM1IC8qIEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udFNlbGVjdGlvbkFsZ29yaXRobS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQUIwQUY1MUU2QjNDNkMwMDEzNDhD
NSAvKiBGb250U2VsZWN0aW9uQWxnb3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzJBQjBCMDMxRTZERTkyQzAwMTM0OEM1IC8qIEZvbnRTZWxlY3Rpb25WYWx1ZUlubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udFNlbGVjdGlvblZhbHVlSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3MDIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xD
aGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMQ2hlY2tlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTcxMjFEQjRCNDgwMDRCRTI2RSAvKiBXSExTTENo
ZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyQjU1MTczMjFEQjRCQkQwMDRCRTI2RSAvKiBXSExTTE5hbWVSZXNvbHZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTE5hbWVSZXNvbHZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc0MjFEQjUxMEYwMDRCRTI2RSAvKiBXSExTTE5h
bWVDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTmFtZUNvbnRleHQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3NTIxREI1MjY2MDA0QkUyNkUgLyog
V0hMU0xJbmZlclR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW5mZXJUeXBlcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc2MjFEQjUzOTQwMDRCRTI2
RSAvKiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMkI1NTE3NzIxREI1NDBGMDA0QkUyNkUgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzgyMURCNTU3NTAwNEJFMjZF
IC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMkI1NTE3OTIxREI1NThGMDA0QkUyNkUgLyogV0hMU0xTeW50aGVz
aXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50
aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMkI1NTE3QTIxREI1NTlFMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVy
YXRvckxlbmd0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVBcnJheU9w
ZXJhdG9yTGVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxN0Iy
MURCNTVBRjAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3QzIxREI1N0VEMDA0QkUyNkUgLyogV0hMU0xWaXNp
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVmlzaXRvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyQzJDRjU1MUVGMzc2MUEwMDQyODFBOCAvKiBGb250RmFtaWx5
U3BlY2lmaWNhdGlvbk51bGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9u
dEZhbWlseVNwZWNpZmljYXRpb25OdWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyRTM4RUZCMUU4Mzk2RkQwMENBM0FERiAvKiBDU1NGb250U3R5bGVWYWx1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250U3R5bGVWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRTM4RUZDMUU4Mzk2RkQwMENBM0FERiAvKiBD
U1NGb250U3R5bGVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NG
b250U3R5bGVWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzMzIsMTEg
KzI1MzU4LDM2IEBACiAJCQkJQzIxQkY3MzcyMUNEOEEwMjAwMjI3OTc5IC8qIFdITFNMUGFyc2Vy
LmNwcCAqLywKIAkJCQlDMjFCRjczODIxQ0Q4QTAzMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuaCAq
LywKIAkJCQlDMjFCRjczQTIxQ0Q4RDcwMDAyMjc5NzkgLyogV0hMU0xQcm9ncmFtLmggKi8sCi0g
CQkJCUMyODhDNzI3MjFDOEM2RUYwMDJERjVDQSAvKiBXSExTTFZpc2l0b3IuaCAqLywKLSAJCQkJ
QzI4OEM3MjkyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8sCi0gCQkJCUMy
ODhDNzJBMjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuaCAqLywKLSAJCQkJQzI4OEM3
MkIyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLywKLSAJCQkJQzI4
OEM3MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmggKi8sCisJCQkJQzI4
OEM3MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5oICovLAorCQkJCUMyQjU1MTdD
MjFEQjU3RUQwMDRCRTI2RSAvKiBXSExTTFZpc2l0b3IuY3BwICovLAorCQkJCUMyODhDNzI5MjFD
OENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuY3BwICovLAorCQkJCUMyODhDNzJBMjFDOENB
NTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuaCAqLywKKwkJCQlDMjg4QzcyQzIxQzhDQ0MyMDAy
REY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLywKKwkJCQlDMkI1NTE3MzIxREI0QkJEMDA0
QkUyNkUgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovLAorCQkJCTFDN0NDMjFEMjFDREUxOTgw
MEMxRkEyQyAvKiBXSExTTE5hbWVDb250ZXh0LmggKi8sCisJCQkJQzJCNTUxNzQyMURCNTEwRjAw
NEJFMjZFIC8qIFdITFNMTmFtZUNvbnRleHQuY3BwICovLAorCQkJCTFDMzMyNzZFMjFDRUZGNzQw
MDBEQzlGMiAvKiBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCAqLywKKwkJCQlDMjg2RUQ5RTIx
REI1QUJBMDA3MTNDNDAgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCAqLywKKwkJCQkx
QzMzMjc2RjIxQ0YwMTMxMDAwREM5RjIgLyogV0hMU0xJbmZlclR5cGVzLmggKi8sCisJCQkJQzJC
NTUxNzUyMURCNTI2NjAwNEJFMjZFIC8qIFdITFNMSW5mZXJUeXBlcy5jcHAgKi8sCisJCQkJMUMz
MzI3NzQyMUQ1QTcwNjAwMERDOUYyIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCAqLywK
KwkJCQlDMkI1NTE3NjIxREI1Mzk0MDA0QkUyNkUgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tl
ci5jcHAgKi8sCisJCQkJMUMzMzI3NzUyMUQ1QjBGODAwMERDOUYyIC8qIFdITFNMQ2hlY2tEdXBs
aWNhdGVGdW5jdGlvbnMuaCAqLywKKwkJCQlDMkI1NTE3NzIxREI1NDBGMDA0QkUyNkUgLyogV0hM
U0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJMUMzMzI3NzYyMUQ1QzA3RTAw
MERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICovLAorCQkJCUMy
QjU1MTc4MjFEQjU1NzUwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3Nv
cnMuY3BwICovLAorCQkJCTFDMzMyNzc3MjFENUNBODMwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oICovLAorCQkJCUMyQjU1MTc5MjFEQjU1OEYwMDRCRTI2
RSAvKiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJMUMz
MzI3NzgyMUQ1Q0VENDAwMERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5n
dGguaCAqLywKKwkJCQlDMkI1NTE3QTIxREI1NTlFMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXpl
QXJyYXlPcGVyYXRvckxlbmd0aC5jcHAgKi8sCisJCQkJQzIwMTMzNDcyMURCNDM2MzAwQjYwQzI3
IC8qIFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oICovLAorCQkJCUMyQjU1MTdCMjFEQjU1
QUYwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwICovLAorCQkJCUMy
MDEzMzQ0MjFEQUMwOTUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNpY3MuaCAqLywKKwkJCQlDMjAx
MzM0NjIxREFFRTZFMDBCNjBDMjcgLyogV0hMU0xJbnRyaW5zaWNzLmNwcCAqLywKKwkJCQlDMkI1
NTE3MDIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVja2VyLmNwcCAqLywKKwkJCQlDMkI1NTE3
MTIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVja2VyLmggKi8sCisJCQkJMUNCNjlCMkMyMURE
OTZFRjAwNkU4NDZBIC8qIFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcCAqLywKKwkJCQkx
Q0I2OUIyRDIxREQ5NkVGMDA2RTg0NkEgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCAq
LywKIAkJCSk7CiAJCQlwYXRoID0gV0hMU0w7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtMjUzNDQsNyArMjUzOTUsNiBAQAogCQlDMjFCRjZGMTIxQ0Q4OThEMDAyMjc5NzkgLyogQVNU
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlDMjFCRjcw
RjIxQ0Q4OUNGMDAyMjc5NzkgLyogV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgg
Ki8sCiAJCQkJQzIxQkY3MjUyMUNEODlFMjAwMjI3OTc5IC8qIFdITFNMQXJyYXlSZWZlcmVuY2VU
eXBlLmggKi8sCiAJCQkJQzIxQkY3MDkyMUNEODlDQTAwMjI3OTc5IC8qIFdITFNMQXJyYXlUeXBl
LmggKi8sCiAJCQkJQzIxQkY3MzAyMUNEODlFRDAwMjI3OTc5IC8qIFdITFNMQXNzaWdubWVudEV4
cHJlc3Npb24uaCAqLywKQEAgLTI1Mzg0LDcgKzI1NDM0LDYgQEAKIAkJCQlDMjFCRjcyNDIxQ0Q4
OUUxMDAyMjc5NzkgLyogV0hMU0xOb2RlLmggKi8sCiAJCQkJQzIxQkY3MDcyMUNEODlDODAwMjI3
OTc5IC8qIFdITFNMTnVsbExpdGVyYWwuaCAqLywKIAkJCQlDMjFCRjcyMTIxQ0Q4OURFMDAyMjc5
NzkgLyogV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCAqLywKLQkJCQlDMjFCRjcx
NzIxQ0Q4OUQ2MDAyMjc5NzkgLyogV0hMU0xQYXJhbWV0ZXIuaCAqLywKIAkJCQlDMjFCRjcyRjIx
Q0Q4OUVDMDAyMjc5NzkgLyogV0hMU0xQb2ludGVyVHlwZS5oICovLAogCQkJCUMyMUJGNzJFMjFD
RDg5RUEwMDIyNzk3OSAvKiBXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oICovLAogCQkJ
CUMyMUJGNzBCMjFDRDg5Q0MwMDIyNzk3OSAvKiBXSExTTFF1YWxpZmllci5oICovLApAQCAtMjU0
MTIsNyArMjU0NjEsMTAgQEAKIAkJCQlDMjFCRjcxNDIxQ0Q4OUQzMDAyMjc5NzkgLyogV0hMU0xW
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oICovLAogCQkJCUMyMUJGNzEzMjFDRDg5RDIw
MDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmggKi8sCiAJCQkJQzIxQkY3MDQyMUNE
ODlDNjAwMjI3OTc5IC8qIFdITFNMV2hpbGVMb29wLmggKi8sCi0gCQkJCUMyODhDNzJEMjFDOTkx
REEwMDJERjVDQSAvKiBXSExTTFR5cGVBcmd1bWVudC5jcHAgKi8sCisJCQkJQzI4OEM3MkQyMUM5
OTFEQTAwMkRGNUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLywKKwkJCQkxQzMzMjc2QzIx
Q0VEQTQyMDAwREM5RjIgLyogV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCAqLywKKwkJ
CQkxQzMzMjc3MTIxQ0YwQkUxMDAwREM5RjIgLyogV0hMU0xOYW1lZFR5cGUuaCAqLywKKwkJCQkx
QzMzMjc3MjIxQ0YwRDJFMDAwREM5RjIgLyogV0hMU0xVbm5hbWVkVHlwZS5oICovLAogCQkJKTsK
IAkJCXBhdGggPSBBU1Q7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358247</attachid>
            <date>2019-01-03 02:33:33 -0800</date>
            <delta_ts>2019-01-03 20:04:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>file.txt</filename>
            <type>text/plain</type>
            <size>306636</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXggMmQ1NjdmMDBlNzAuLmViMzkw
ZTQyZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaApAQCAtMzksOCArMzks
OCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVibGlj
IFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFR5
cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgQXJy
YXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAg
ICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJs
aWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYpID0g
ZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhh
ZGRyZXNzU3BhY2UoKSksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfVFlQRShBcnJheVJlZmVyZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBl
KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShBcnJheVJlZmVy
ZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAppbmRleCA0MGI1ZjhkZjZmZS4uYzQxNzcwNWYzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBBcnJh
eVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIEFycmF5VHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlLCB1
bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgQXJyYXlUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRz
KQogICAgIHsKQEAgLTUyLDIwICs1MiwxOCBAQCBwdWJsaWM6CiAgICAgQXJyYXlUeXBlKGNvbnN0
IEFycmF5VHlwZSYpID0gZGVsZXRlOwogICAgIEFycmF5VHlwZShBcnJheVR5cGUmJikgPSBkZWZh
dWx0OwogCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVs
ZW1lbnRzOyB9Ci0KLSAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsg
fQorICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1FbGVtZW50
czsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZT4oTGV4ZXI6
OlRva2VuKG1fb3JpZ2luKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7
CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZT4oTGV4ZXI6OlRva2Vu
KG9yaWdpbigpKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZT4gbV9lbGVtZW50VHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5
cGU+IG1fZWxlbWVudFR5cGU7CiAgICAgdW5zaWduZWQgbV9udW1FbGVtZW50czsKIH07CiAKQEAg
LTc1LDYgKzczLDYgQEAgcHJpdmF0ZToKIAogfQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dI
TFNMX1RZUEUoQXJyYXlUeXBlLCBpc0FycmF5VHlwZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19XSExTTF9VTk5BTUVEX1RZUEUoQXJyYXlUeXBlLCBpc0FycmF5VHlwZSgpKQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEJhc2VTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQmFzZVNlbWFudGljLmgKaW5kZXggNjU3MzM3MmYxMzcuLmM2YTJkMzlhMGMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNl
U2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCYXNlU2VtYW50aWMuaApAQCAtMzQsOCArMzQsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBuYW1lc3BhY2UgV0hMU0wgewogCitjbGFzcyBJbnRyaW5zaWNzOworCiBuYW1lc3BhY2Ug
QVNUIHsKIAorY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworY2xhc3MgVW5uYW1lZFR5cGU7CisK
IGNsYXNzIEJhc2VTZW1hbnRpYyA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKICAgICBCYXNlU2Vt
YW50aWMoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQpAQCAtNDgsNiArNTMsMTQgQEAgcHVibGljOgog
ICAgIEJhc2VTZW1hbnRpYyhjb25zdCBCYXNlU2VtYW50aWMmKSA9IGRlbGV0ZTsKICAgICBCYXNl
U2VtYW50aWMoQmFzZVNlbWFudGljJiYpID0gZGVmYXVsdDsKIAorICAgIHZpcnR1YWwgYm9vbCBp
c0FjY2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNz
JikgY29uc3QgPSAwOworCisgICAgZW51bSBjbGFzcyBTaGFkZXJJdGVtRGlyZWN0aW9uIHsKKyAg
ICAgICAgSW5wdXQsCisgICAgICAgIE91dHB1dAorICAgIH07CisgICAgdmlydHVhbCBib29sIGlz
QWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29u
c3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3QgPSAwOworCiBwcml2YXRlOgogICAgIExleGVy
OjpUb2tlbiBtX29yaWdpbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDUyMWVmODE2OTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xC
dWlsdEluU2VtYW50aWMuY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKKworI2luY2x1ZGUgIldITFNMSW5mZXJUeXBl
cy5oIgorI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitib29sIEJ1aWx0SW5T
ZW1hbnRpYzo6aXNBY2NlcHRhYmxlVHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVk
VHlwZSwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG1fdmFyaWFibGUpIHsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkluc3RhbmNlSUQ6CisgICAgICAg
IHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAg
IGNhc2UgVmFyaWFibGU6OlNWVmVydGV4SUQ6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFt
ZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlBTaXpl
OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdFR5
cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZQb3NpdGlvbjoKKyAgICAgICAgcmV0dXJuIG1h
dGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQ0VHlwZSgpKTsKKyAgICBjYXNlIFZh
cmlhYmxlOjpTVklzRnJvbnRGYWNlOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlw
ZSwgaW50cmluc2ljcy5ib29sVHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVlNhbXBsZUlu
ZGV4OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy51aW50
VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVklubmVyQ292ZXJhZ2U6CisgICAgICAgIHJl
dHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAgIGNh
c2UgVmFyaWFibGU6OlNWVGFyZ2V0OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlw
ZSwgaW50cmluc2ljcy5mbG9hdDRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWRGVwdGg6
CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0VHlw
ZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkNvdmVyYWdlOgorICAgICAgICByZXR1cm4gbWF0
Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlh
YmxlOjpTVkRpc3BhdGNoVGhyZWFkSUQ6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRU
eXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91
cElEOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9h
dDNUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWR3JvdXBJbmRleDoKKyAgICAgICAgcmV0
dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWludFR5cGUoKSk7CisgICAgY2Fz
ZSBWYXJpYWJsZTo6U1ZHcm91cFRocmVhZElEOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5h
bWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdDNUeXBlKCkpOworICAgIH0KK30KKworYm9vbCBCdWls
dEluU2VtYW50aWM6OmlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRl
bURpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25E
ZWZpbml0aW9uKSBjb25zdAoreworICAgIHN3aXRjaCAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRy
eVBvaW50VHlwZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50
VHlwZTo6VmVydGV4OgorICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgICAgICBjYXNl
IFNoYWRlckl0ZW1EaXJlY3Rpb246OklucHV0OgorICAgICAgICAgICAgc3dpdGNoIChtX3Zhcmlh
YmxlKSB7CisgICAgICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkluc3RhbmNlSUQ6CisgICAgICAg
ICAgICBjYXNlIFZhcmlhYmxlOjpTVlZlcnRleElEOgorICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgU2hhZGVySXRlbURpcmVjdGlvbjo6T3V0cHV0
OgorICAgICAgICAgICAgc3dpdGNoIChtX3ZhcmlhYmxlKSB7CisgICAgICAgICAgICBjYXNlIFZh
cmlhYmxlOjpQU2l6ZToKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWUG9zaXRpb246Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGNh
c2UgRnVuY3Rpb25EZWNsYXJhdGlvbjo6RW50cnlQb2ludFR5cGU6OkZyYWdtZW50OgorICAgICAg
ICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgICAgICBjYXNlIFNoYWRlckl0ZW1EaXJlY3Rpb246
OklucHV0OgorICAgICAgICAgICAgc3dpdGNoIChtX3ZhcmlhYmxlKSB7CisgICAgICAgICAgICBj
YXNlIFZhcmlhYmxlOjpTVklzRnJvbnRGYWNlOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6
U1ZQb3NpdGlvbjoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWU2FtcGxlSW5kZXg6Cisg
ICAgICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVklubmVyQ292ZXJhZ2U6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBTaGFkZXJJdGVtRGlyZWN0
aW9uOjpPdXRwdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgVmFyaWFibGU6OlNWVGFyZ2V0OgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6
U1ZEZXB0aDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWQ292ZXJhZ2U6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGNhc2UgRnVu
Y3Rpb25EZWNsYXJhdGlvbjo6RW50cnlQb2ludFR5cGU6OkNvbXB1dGU6CisgICAgICAgIHN3aXRj
aCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNhc2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ6
CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFy
aWFibGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNW
R3JvdXBJRDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWR3JvdXBJbmRleDoKKyAgICAg
ICAgICAgIGNhc2UgVmFyaWFibGU6OlNWR3JvdXBUaHJlYWRJRDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFNoYWRlckl0ZW1EaXJlY3Rpb246
Ok91dHB1dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30K
KworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCmluZGV4
IDcwNDZkZjMyY2ZhLi44ZTcwNDMwMDE1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmgK
QEAgLTcwLDYgKzcwLDE5IEBAIHB1YmxpYzoKIAogICAgIFZhcmlhYmxlIHZhcmlhYmxlKCkgY29u
c3QgeyByZXR1cm4gbV92YXJpYWJsZTsgfQogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJ1
aWx0SW5TZW1hbnRpYyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YXJp
YWJsZSA9PSBvdGhlci5tX3ZhcmlhYmxlICYmIG1fdGFyZ2V0SW5kZXggPT0gb3RoZXIubV90YXJn
ZXRJbmRleDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQnVpbHRJblNlbWFu
dGljJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICB9CisKKyAgICBib29sIGlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVk
VHlwZSYsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQWNj
ZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29uc3Qg
RnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisKIHByaXZhdGU6CiAgICAgVmFy
aWFibGUgbV92YXJpYWJsZTsKICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV90YXJnZXRJbmRleDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENhbGxFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oCmluZGV4IDY0YWY3MTMyOTljLi44YjJiZGFmNGJmNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
Q2FsbEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxF
KFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNM
RnVuY3Rpb25EZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNTQsOSArNTUsMzEgQEAgcHVibGljOgogCiAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4mIGFyZ3VtZW50cygpIHsgcmV0dXJuIG1fYXJndW1l
bnRzOyB9CiAKKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KKworICAgIHZv
aWQgc2V0Q2FzdERhdGEoKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
CisgICAgfQorCisgICAgYm9vbCBoYXNPdmVybG9hZHMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxib29sPihtX292ZXJsb2Fkcyk7IH0KKyAgICB2b2lkIHNldE92ZXJsb2Fkcyhjb25zdCBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92
ZXJsb2FkcykKKyAgICB7CisgICAgICAgIGFzc2VydCghaGFzT3ZlcmxvYWRzKCkpOworICAgICAg
ICBtX292ZXJsb2FkcyA9IG92ZXJsb2FkczsKKyAgICB9CisKKyAgICB2b2lkIHNldEZ1bmN0aW9u
KEZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pCisgICAgeworICAgICAg
ICBhc3NlcnQoIW1fZnVuY3Rpb24pOworICAgICAgICBtX2Z1bmN0aW9uID0gJmZ1bmN0aW9uRGVj
bGFyYXRpb247CisgICAgfQorCiBwcml2YXRlOgogICAgIFN0cmluZyBtX25hbWU7CiAgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4gbV9hcmd1bWVudHM7CisgICAgT3B0aW9u
YWw8VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+
PiBtX292ZXJsb2FkczsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBtX2Z1bmN0aW9uIHsgbnVs
bHB0ciB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaAppbmRleCBh
MzhiMGQ1YjNhMS4uZjA0MjA1MzI0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lv
bi5oCkBAIC03NiwxMSArNzYsNjkgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICBJbnRl
Z2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8SW50ZWdlckxpdGVyYWw+KG1fdmFyaWFudCkpOworICAgICAgICBy
ZXR1cm4gV1RGOjpnZXQ8SW50ZWdlckxpdGVyYWw+KG1fdmFyaWFudCk7CisgICAgfQorCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCB2aXNpdChUJiYgdCkKICAgICB7CiAgICAgICAgIFdU
Rjo6dmlzaXQoV1RGTW92ZSh0KSwgbV92YXJpYW50KTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB2b2lkIHZpc2l0KFQmJiB0KSBjb25zdAorICAgIHsKKyAgICAgICAgV1RGOjp2
aXNpdChXVEZNb3ZlKHQpLCBtX3ZhcmlhbnQpOworICAgIH0KKworICAgIGJvb2wgbWF0Y2hlcyhj
b25zdCBDb25zdGFudEV4cHJlc3Npb24mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgT3B0
aW9uYWw8Ym9vbD4gcmVzdWx0OworICAgICAgICBkb3VibGUgdmFsdWU7CisgICAgICAgIHZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJh
bCkgeworICAgICAgICAgICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAg
ICB9LCBbJl0oY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCkgeworICAgICAgICAgICAgdmFsdWUgPSB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVl
KCk7CisgICAgICAgIH0sIFsmXShjb25zdCBGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgewor
ICAgICAgICAgICAgdmFsdWUgPSBmbG9hdExpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZd
KGNvbnN0IE51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgcmVzdWx0ID0gV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxOdWxsTGl0ZXJhbD4ob3RoZXIubV92YXJpYW50KTsKKyAgICAgICAgfSwgWyZd
KGNvbnN0IEJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkgeworICAgICAgICAgICAgaWYg
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Qm9vbGVhbkxpdGVyYWw+KG90aGVyLm1fdmFyaWFudCkp
IHsKKyAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBvdGhlckJvb2xlYW5MaXRlcmFsID0gV1RG
OjpnZXQ8Qm9vbGVhbkxpdGVyYWw+KG90aGVyLm1fdmFyaWFudCk7CisgICAgICAgICAgICAgICAg
cmVzdWx0ID0gYm9vbGVhbkxpdGVyYWwudmFsdWUoKSA9PSBvdGhlckJvb2xlYW5MaXRlcmFsLnZh
bHVlKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxz
ZTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVt
YmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5j
ZSkgeworICAgICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2U+KG90aGVyLm1fdmFyaWFudCkpIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBhdXRvJiBvdGhlck1lbWJlclJlZmVyZW5jZSA9IFdURjo6Z2V0
PENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlPihvdGhlci5tX3Zh
cmlhbnQpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9ICZjb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbk1lbWJlcigpID09ICZvdGhlck1lbWJl
clJlZmVyZW5jZS5lbnVtZXJhdGlvbk1lbWJlcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIH0pKTsKKworICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuICpyZXN1bHQ7CisKKyAgICAgICAgb3RoZXIudmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgSW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRl
cmFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZSA9PSBpbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUgPT0gdW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgRmxvYXRMaXRl
cmFsJiBmbG9hdExpdGVyYWwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlID09IGZsb2F0
TGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgTnVsbExpdGVyYWwmKSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEJvb2xlYW5M
aXRlcmFsJikgeworICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIH0sIFsmXShj
b25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpIHsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9KSk7CisKKyAgICAgICAgQVNTRVJU
KHJlc3VsdCk7CisgICAgICAgIHJldHVybiAqcmVzdWx0OworICAgIH0KKwogcHJpdmF0ZToKICAg
ICBWYXJpYW50PAogICAgICAgICBJbnRlZ2VyTGl0ZXJhbCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbkVu
dW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZS5oCmluZGV4IDJjMjRhOThiMmNhLi45OGQ1NWVmOGM5MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZS5oCkBAIC0zNiwxMCArMzYsMTIgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFt
ZXNwYWNlIEFTVCB7CiAKLWNsYXNzIENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVy
UmVmZXJlbmNlIDogcHVibGljIE5vZGUgeworY2xhc3MgRW51bWVyYXRpb25NZW1iZXI7CisKK2Ns
YXNzIENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlIDogcHVibGlj
IEV4cHJlc3Npb24gewogcHVibGljOgogICAgIENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9u
TWVtYmVyUmVmZXJlbmNlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbGVmdCwgU3Ry
aW5nJiYgcmlnaHQpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQorICAgICAg
ICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fbGVmdChXVEZNb3Zl
KGxlZnQpKQogICAgICAgICAsIG1fcmlnaHQoV1RGTW92ZShyaWdodCkpCiAgICAgewpAQCAtNTAs
MTAgKzUyLDMwIEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZSYpID0gZGVmYXVsdDsKICAgICBDb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZShDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSYmKSA9IGRlZmF1bHQ7CiAKKyAgICBjb25zdCBTdHJpbmcmIGxlZnQoKSBjb25z
dCB7IHJldHVybiBtX2xlZnQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIHJpZ2h0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yaWdodDsgfQorCisgICAgQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRp
b25NZW1iZXIoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZW51bWVyYXRpb25NZW1iZXIpOwor
ICAgICAgICByZXR1cm4gKm1fZW51bWVyYXRpb25NZW1iZXI7CisgICAgfQorCisgICAgQVNUOjpF
bnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG1fZW51bWVyYXRpb25NZW1iZXIpOworICAgICAgICByZXR1cm4gKm1fZW51bWVy
YXRpb25NZW1iZXI7CisgICAgfQorCisgICAgdm9pZCBzZXRFbnVtZXJhdGlvbk1lbWJlcihBU1Q6
OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKKyAgICB7CisgICAgICAgIG1f
ZW51bWVyYXRpb25NZW1iZXIgPSAmZW51bWVyYXRpb25NZW1iZXI7CisgICAgfQorCiBwcml2YXRl
OgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9sZWZ0OwogICAgIFN0
cmluZyBtX3JpZ2h0OworICAgIEFTVDo6RW51bWVyYXRpb25NZW1iZXIqIG1fZW51bWVyYXRpb25N
ZW1iZXIgeyBudWxscHRyIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb3RFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb3RFeHByZXNzaW9uLmgKaW5kZXgg
YzQzYzY5ZWU1NDEuLmViZjcyMzI2Y2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb3RFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCkBAIC00
OSw2ICs0OSwyNSBAQCBwdWJsaWM6CiAgICAgRG90RXhwcmVzc2lvbihjb25zdCBEb3RFeHByZXNz
aW9uJikgPSBkZWxldGU7CiAgICAgRG90RXhwcmVzc2lvbihEb3RFeHByZXNzaW9uJiYpID0gZGVm
YXVsdDsKIAorICAgIGJvb2wgaXNEb3RFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgU3RyaW5nIGdldEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRl
CisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIm9wZXJhdG9yLiVzIiwgbV9m
aWVsZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgU3RyaW5nIHNldEZ1bmN0aW9u
TmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3Jt
YXQoIm9wZXJhdG9yLiVzPSIsIG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKwor
ICAgIFN0cmluZyBhbmRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvciYuJXMiLCBtX2ZpZWxkTmFtZS51dGY4
KCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBTdHJpbmcmIGZpZWxkTmFtZSgpIHsgcmV0dXJuIG1f
ZmllbGROYW1lOyB9CisKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZmllbGROYW1lOwogfTsKQEAg
LTU5LDQgKzc4LDYgQEAgcHJpdmF0ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dI
TFNMX0VYUFJFU1NJT04oRG90RXhwcmVzc2lvbiwgaXNEb3RFeHByZXNzaW9uKCkpCisKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAppbmRleCA3OTcwYjU5ZTU0
YS4uMjRhOGQ1OWRiM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5o
CkBAIC0yOSw4ICsyOSwxMSBAQAogCiAjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5o
IgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNs
dWRlICJXSExTTE5hbWVkVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDEzICs0MiwxMSBAQCBuYW1lc3BhY2UgV0hM
U0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uIDog
cHVibGljIE5vZGUgeworY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uIDogcHVibGljIE5hbWVk
VHlwZSB7CiBwdWJsaWM6Ci0gICAgRW51bWVyYXRpb25EZWZpbml0aW9uKExleGVyOjpUb2tlbiYm
IG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFR5cGU+JiYgdHlwZSwgRW51
bWVyYXRpb25NZW1iZXJzJiYgbWVtYmVycykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9y
aWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgRW51bWVyYXRpb25E
ZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgc3RkOjp1bmlx
dWVfcHRyPFVubmFtZWRUeXBlPiYmIHR5cGUpCisgICAgICAgIDogTmFtZWRUeXBlKFdURk1vdmUo
b3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkK
LSAgICAgICAgLCBtX21lbWJlcnMoV1RGTW92ZShtZW1iZXJzKSkKICAgICB7CiAgICAgfQogCkBA
IC01NCwxNCArNTUsMzUgQEAgcHVibGljOgogICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihjb25z
dCBFbnVtZXJhdGlvbkRlZmluaXRpb24mKSA9IGRlbGV0ZTsKICAgICBFbnVtZXJhdGlvbkRlZmlu
aXRpb24oRW51bWVyYXRpb25EZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKIAotICAgIFR5cGUmIHR5
cGUoKSB7IHJldHVybiAqbV90eXBlOyB9Ci0gICAgRW51bWVyYXRpb25NZW1iZXJzJiBlbnVtZXJh
dGlvbk1lbWJlcnMoKSB7IHJldHVybiBtX21lbWJlcnM7IH0KKyAgICBib29sIGlzRW51bWVyYXRp
b25EZWZpbml0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgVW5u
YW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CisKKyAgICBib29sIGFkZChFbnVt
ZXJhdGlvbk1lbWJlciYmIG1lbWJlcikKKyAgICB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9t
ZW1iZXJzLmFkZChtZW1iZXIubmFtZSgpLCBzdGQ6Om1ha2VfdW5pcXVlPEVudW1lcmF0aW9uTWVt
YmVyPihXVEZNb3ZlKG1lbWJlcikpKTsKKyAgICAgICAgcmV0dXJuICFyZXN1bHQuaXNOZXdFbnRy
eTsKKyAgICB9CisKKyAgICBFbnVtZXJhdGlvbk1lbWJlciogbWVtYmVyQnlOYW1lKGNvbnN0IFN0
cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX21lbWJlcnMuZmlu
ZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fbWVtYmVycy5lbmQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLmdl
dCgpOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEVudW1lcmF0
aW9uTWVtYmVyPj4gZW51bWVyYXRpb25NZW1iZXJzKCkKKyAgICB7CisgICAgICAgIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEVudW1lcmF0aW9uTWVtYmVyPj4gcmVzdWx0OworICAgICAg
ICBmb3IgKGF1dG8mIHBhaXIgOiBtX21lbWJlcnMpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCpwYWlyLnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKIHByaXZhdGU6
Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFR5cGU+IG1fdHlwZTsKLSAgICBFbnVtZXJhdGlvbk1lbWJlcnMgbV9tZW1i
ZXJzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4gbV90eXBlOworICAgIEhhc2hN
YXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8RW51bWVyYXRpb25NZW1iZXI+PiBtX21lbWJlcnM7
CiB9OwogCiB9CkBAIC03MCw0ICs5Miw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19XSExTTF9OQU1FRF9UWVBFKEVudW1lcmF0aW9uRGVmaW5pdGlvbiwgaXNFbnVt
ZXJhdGlvbkRlZmluaXRpb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1i
ZXIuaAppbmRleCA5ZDlkODU0ODgzZS4uNGYzODUxOTU1MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVy
YXRpb25NZW1iZXIuaApAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6CiAgICAgRW51bWVyYXRpb25N
ZW1iZXIoY29uc3QgRW51bWVyYXRpb25NZW1iZXImKSA9IGRlbGV0ZTsKICAgICBFbnVtZXJhdGlv
bk1lbWJlcihFbnVtZXJhdGlvbk1lbWJlciYmKSA9IGRlZmF1bHQ7CiAKKyAgICBTdHJpbmcmIG5h
bWUoKSB7IHJldHVybiBtX25hbWU7IH0KICAgICBPcHRpb25hbDxDb25zdGFudEV4cHJlc3Npb24+
JiB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVt
YmVyTGl0ZXJhbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmM5ZTk2MjkzOTgwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKKyNpbmNs
dWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisK
K2NsYXNzIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKK3B1
YmxpYzoKKyAgICBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
LCBFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCisgICAgICAgIDogRXhwcmVz
c2lvbihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9lbnVtZXJhdGlvbk1lbWJlcihlbnVt
ZXJhdGlvbk1lbWJlcikKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsKCkgPSBkZWZhdWx0OworCisgICAgZXhwbGljaXQgRW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFsKGNvbnN0IEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYpID0gZGVmYXVsdDsKKyAg
ICBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiYpID0g
ZGVmYXVsdDsKKworICAgIGJvb2wgaXNFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVy
YXRpb25NZW1iZXIoKSB7IHJldHVybiBtX2VudW1lcmF0aW9uTWVtYmVyOyB9CisKK3ByaXZhdGU6
CisgICAgRW51bWVyYXRpb25NZW1iZXImIG1fZW51bWVyYXRpb25NZW1iZXI7Cit9OworCit9CisK
K30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJT04oRW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLCBpc0VudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCgpKQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBlMzY4MzgzNjQ2ZC4uYTc4ODZmYmE2YjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJl
c3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xFeHByZXNzaW9uLmgKQEAgLTU1LDcgKzU1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBpc0NhbGxFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNDb21tYUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc0RlcmVmZXJlbmNlRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIGlzRG90RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRmxvYXRMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmRleEV4cHJlc3Npb24oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ludGVnZXJMaXRlcmFsKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNMb2dpY2FsRXhwcmVzc2lvbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9naWNhbE5vdEV4
cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtNjcsNiArNjksNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGlzVGVybmFyeUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkSW50ZWdlckxpdGVyYWwoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxlUmVmZXJl
bmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJh
dGlvbk1lbWJlckxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiBwcml2YXRlOgog
ICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRp
b24uaAppbmRleCA3YTdlMGEwNjU2Yy4uZjhiNzlmZTdhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5j
dGlvbkRlY2xhcmF0aW9uLmgKQEAgLTMwLDkgKzMwLDkgQEAKICNpbmNsdWRlICJXSExTTEZ1bmN0
aW9uQXR0cmlidXRlLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNM
Tm9kZS5oIgotI2luY2x1ZGUgIldITFNMUGFyYW1ldGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1h
bnRpYy5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5
cGUuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYsMTAgKzQ2
LDExIEBAIHB1YmxpYzoKICAgICBlbnVtIGNsYXNzIEVudHJ5UG9pbnRUeXBlIHsKICAgICAgICAg
VmVydGV4LAogICAgICAgICBGcmFnbWVudCwKLSAgICAgICAgQ29tcHV0ZQorICAgICAgICBDb21w
dXRlLAorICAgICAgICAvLyBGSVhNRTogQWRkIGFuIGVudHJ5IHBvaW50IHR5cGUgZm9yIHRlc3Rp
bmcKICAgICB9OwogCi0gICAgRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmln
aW4sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRU
eXBlPiBlbnRyeVBvaW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBT
dHJpbmcmJiBuYW1lLCBQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1h
bnRpYz4mJiBzZW1hbnRpYykKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYm
IG9yaWdpbiwgQXR0cmlidXRlQmxvY2smJiBhdHRyaWJ1dGVCbG9jaywgT3B0aW9uYWw8RW50cnlQ
b2ludFR5cGU+IGVudHJ5UG9pbnRUeXBlLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlw
ZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBWYXJpYWJsZURlY2xhcmF0aW9ucyYmIHBhcmFtZXRl
cnMsIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+JiYgc2VtYW50aWMpCiAgICAgICAgIDogbV9vcmln
aW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fYXR0cmlidXRlQmxvY2soV1RGTW92ZShh
dHRyaWJ1dGVCbG9jaykpCiAgICAgICAgICwgbV9lbnRyeVBvaW50VHlwZShlbnRyeVBvaW50VHlw
ZSkKQEAgLTY1LDI2ICs2NiwzMyBAQCBwdWJsaWM6CiAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbihj
b25zdCBGdW5jdGlvbkRlY2xhcmF0aW9uJikgPSBkZWxldGU7CiAgICAgRnVuY3Rpb25EZWNsYXJh
dGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uJiYpID0gZGVmYXVsdDsKIAorICAgIHZpcnR1YWwgYm9v
bCBpc0Z1bmN0aW9uRGVmaW5pdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisKICAgICBBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRlQmxvY2soKSB7IHJldHVybiBt
X2F0dHJpYnV0ZUJsb2NrOyB9Ci0gICAgQVNUOjpUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlw
ZTsgfQotICAgIFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnM7
IH0KKyAgICBjb25zdCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4mIGVudHJ5UG9pbnRUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9lbnRyeVBvaW50VHlwZTsgfQorICAgIEFTVDo6VW5uYW1lZFR5cGUm
IHR5cGUoKSBjb25zdCB7IHJldHVybiAqbV90eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgYm9vbCBpc0Nhc3QoKSBjb25zdCB7IHJl
dHVybiBtX25hbWUgPT0gIm9wZXJhdG9yIGNhc3QiOyB9CisgICAgY29uc3QgVmFyaWFibGVEZWNs
YXJhdGlvbnMmIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAg
ICBWYXJpYWJsZURlY2xhcmF0aW9ucyYgcGFyYW1ldGVycygpIHsgcmV0dXJuIG1fcGFyYW1ldGVy
czsgfQogICAgIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1f
c2VtYW50aWM7IH0KIAogICAgIExleGVyOjpUb2tlbiYmIHRha2VPcmlnaW4oKSB7IHJldHVybiBX
VEZNb3ZlKG1fb3JpZ2luKTsgfQogICAgIEF0dHJpYnV0ZUJsb2NrJiYgdGFrZUF0dHJpYnV0ZUJs
b2NrKCkgeyByZXR1cm4gV1RGTW92ZShtX2F0dHJpYnV0ZUJsb2NrKTsgfQogICAgIE9wdGlvbmFs
PEVudHJ5UG9pbnRUeXBlPiYmIHRha2VFbnRyeVBvaW50VHlwZSgpIHsgcmV0dXJuIFdURk1vdmUo
bV9lbnRyeVBvaW50VHlwZSk7IH0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHRh
a2VUeXBlKCkgeyByZXR1cm4gV1RGTW92ZShtX3R5cGUpOyB9CisgICAgc3RkOjp1bmlxdWVfcHRy
PEFTVDo6VW5uYW1lZFR5cGU+JiYgdGFrZVR5cGUoKSB7IHJldHVybiBXVEZNb3ZlKG1fdHlwZSk7
IH0KICAgICBTdHJpbmcmJiB0YWtlTmFtZSgpIHsgcmV0dXJuIFdURk1vdmUobV9uYW1lKTsgfQot
ICAgIFBhcmFtZXRlcnMmJiB0YWtlUGFyYW1ldGVycygpIHsgcmV0dXJuIFdURk1vdmUobV9wYXJh
bWV0ZXJzKTsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb25zJiYgdGFrZVBhcmFtZXRlcnMoKSB7
IHJldHVybiBXVEZNb3ZlKG1fcGFyYW1ldGVycyk7IH0KICAgICBPcHRpb25hbDxBU1Q6OlNlbWFu
dGljPiYmIHRha2VTZW1hbnRpYygpIHsgcmV0dXJuIFdURk1vdmUobV9zZW1hbnRpYyk7IH0KIAog
cHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgQXR0cmlidXRlQmxvY2sg
bV9hdHRyaWJ1dGVCbG9jazsKICAgICBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gbV9lbnRyeVBv
aW50VHlwZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiBtX3R5cGU7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBtX3R5cGU7CiAgICAgU3RyaW5nIG1fbmFtZTsKLSAg
ICBQYXJhbWV0ZXJzIG1fcGFyYW1ldGVyczsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyBtX3Bh
cmFtZXRlcnM7CiAgICAgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4gbV9zZW1hbnRpYzsKIH07CiAK
QEAgLTk0LDQgKzEwMiw5IEBAIHByaXZhdGU6CiAKIH0KIAorI2RlZmluZSBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dITFNMX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OKFRvVmFsdWVUeXBlTmFtZSwgcHJl
ZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OldITFNMOjpB
U1Q6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJD
b3JlOjpXSExTTDo6QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiB0eXBlKSB7IHJldHVybiB0eXBl
LnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RnVuY3Rpb25EZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaAppbmRleCBhNDkwN2IwZDI5OC4uYjZiN2Jh
MDc3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oCkBAIC01MCw2ICs1MCw4
IEBAIHB1YmxpYzoKICAgICBGdW5jdGlvbkRlZmluaXRpb24oY29uc3QgRnVuY3Rpb25EZWZpbml0
aW9uJikgPSBkZWxldGU7CiAgICAgRnVuY3Rpb25EZWZpbml0aW9uKEZ1bmN0aW9uRGVmaW5pdGlv
biYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRnVuY3Rpb25EZWZpbml0aW9uKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgQmxvY2smIGJsb2NrKCkgeyByZXR1cm4g
bV9ibG9jazsgfQogICAgIGJvb2wgcmVzdHJpY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJp
Y3RlZDsgfQogCkBAIC02NCw0ICs2Niw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19XSExTTF9GVU5DVElPTl9ERUNMQVJBVElPTihGdW5jdGlvbkRlZmluaXRpb24s
IGlzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Np
b24uaAppbmRleCA2YmI2YTBmMGRhYi4uNDNlNjBhMTA0OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhw
cmVzc2lvbi5oCkBAIC00OSw2ICs0OSwyNSBAQCBwdWJsaWM6CiAgICAgSW5kZXhFeHByZXNzaW9u
KGNvbnN0IEluZGV4RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAgIEluZGV4RXhwcmVzc2lvbihJ
bmRleEV4cHJlc3Npb24mJikgPSBkZWZhdWx0OwogCisgICAgYm9vbCBpc0luZGV4RXhwcmVzc2lv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5j
dGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZygi
b3BlcmF0b3JbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIH0KKworICAg
IFN0cmluZyBzZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFN0cmluZygib3BlcmF0b3ImW10iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKKyAgICB9CisKKyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcoIm9wZXJhdG9yW109IiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgfQorCisgICAgRXhwcmVzc2lvbiYgaW5kZXhFeHByZXNz
aW9uKCkgeyByZXR1cm4gKm1faW5kZXg7IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8RXhwcmVzc2lvbj4gbV9pbmRleDsKIH07CkBAIC01OSw0ICs3OCw2IEBAIHByaXZhdGU6CiAK
IH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9FWFBSRVNTSU9OKEluZGV4RXhwcmVz
c2lvbiwgaXNJbmRleEV4cHJlc3Npb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44YmZjOGU2Yzc2YQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5h
bWVkVHlwZS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAi
V0hMU0xOb2RlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsK
KworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIE5hbWVkVHlwZSA6IHB1YmxpYyBUeXBlIHsKK3B1
YmxpYzoKKyAgICBOYW1lZFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1l
KQorICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgLCBtX25hbWUo
V1RGTW92ZShuYW1lKSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+TmFtZWRUeXBlKCkg
PSBkZWZhdWx0OworCisgICAgTmFtZWRUeXBlKGNvbnN0IE5hbWVkVHlwZSYpID0gZGVsZXRlOwor
ICAgIE5hbWVkVHlwZShOYW1lZFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgY29uc3QgTGV4ZXI6
OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIFN0cmluZyYg
bmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgYm9vbCBpc05hbWVkVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBlRGVmaW5p
dGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU3RydWN0
dXJlRGVmaW5pdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IGlzRW51bWVyYXRpb25EZWZpbml0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNOYXRpdmVUeXBlRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorCisgICAgdmlydHVhbCBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCB7IHJldHVy
biAqdGhpczsgfQorCitwcml2YXRlOgorICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKKyAgICBT
dHJpbmcgbV9uYW1lOworfTsKKworfQorCit9CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1
ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNM
OjpBU1Q6Ok5hbWVkVHlwZSYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNM
X1RZUEUoTmFtZWRUeXBlLCBpc05hbWVkVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaAppbmRleCAwMTBlNmViYTcwMC4uMjQ0ZTg0
MTAxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgK
QEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIE5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24gOiBwdWJsaWMgRnVuY3Rpb25EZWNsYXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAg
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0
ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBv
aW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1l
LCBQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1h
bnRpYywgYm9vbCByZXN0cmljdGVkKQorICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9jayYmIGF0dHJpYnV0ZUJsb2NrLCBPcHRp
b25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5cGUsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlVubmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIFZhcmlhYmxlRGVjbGFyYXRpb25z
JiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1hbnRpYywgYm9vbCBy
ZXN0cmljdGVkKQogICAgICAgICA6IEZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZShvcmlnaW4p
LCBXVEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSwgV1RGTW92ZShlbnRyeVBvaW50VHlwZSksIFdURk1v
dmUodHlwZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoc2Vt
YW50aWMpKQogICAgICAgICAsIG1fcmVzdHJpY3RlZChyZXN0cmljdGVkKQogICAgIHsKQEAgLTQ4
LDYgKzQ4LDggQEAgcHVibGljOgogICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oY29uc3Qg
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24oTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAg
ICBib29sIGlzTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KKwogICAgIGJvb2wgcmVzdHJpY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
dHJpY3RlZDsgfQogCiBwcml2YXRlOgpAQCAtNjAsNCArNjIsNiBAQCBwcml2YXRlOgogCiB9CiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRlVOQ1RJT05fREVDTEFSQVRJT04oTmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiwgaXNOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkpCisKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaAppbmRleCAzMjBhYmMz
YzQ3NS4uNmVkOThlYzc0MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVk
VHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM4LDExICszOCwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewog
CiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHVibGlj
IFR5cGUgeworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHVibGljIE5hbWVkVHlwZSB7
CiBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdp
biwgU3RyaW5nJiYgbmFtZSwgVHlwZUFyZ3VtZW50cyYmIHR5cGVBcmd1bWVudHMpCi0gICAgICAg
IDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5h
bWUpKQorICAgICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkp
CiAgICAgICAgICwgbV90eXBlQXJndW1lbnRzKFdURk1vdmUodHlwZUFyZ3VtZW50cykpCiAgICAg
ewogICAgIH0KQEAgLTUyLDE2ICs1MSwxMyBAQCBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURlY2xh
cmF0aW9uKGNvbnN0IE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbihOYXRpdmVUeXBlRGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OwogCi0g
ICAgVHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cygpIHsgcmV0dXJuIG1fdHlwZUFyZ3VtZW50
czsgfQorICAgIGJvb2wgaXNOYXRpdmVUeXBlRGVjbGFyYXRpb24oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7
IHJldHVybiBtX25hbWU7IH0KKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0K
KyAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gbV90eXBlQXJndW1l
bnRzOyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIFN0cmlu
ZyBtX25hbWU7CiAgICAgVHlwZUFyZ3VtZW50cyBtX3R5cGVBcmd1bWVudHM7CiB9OwpAQCAtNzIs
NCArNjgsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xf
TkFNRURfVFlQRShOYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlzTmF0aXZlVHlwZURlY2xhcmF0aW9u
KCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKaW5kZXggMTUyOTQyNmEyZWQuLjYzYzIw
OTNjNTBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xQb2ludGVyVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKQEAgLTM5LDggKzM5LDggQEAgbmFtZXNwYWNl
IEFTVCB7CiAKIGNsYXNzIFBvaW50ZXJUeXBlIDogcHVibGljIFJlZmVyZW5jZVR5cGUgewogcHVi
bGljOgotICAgIFBvaW50ZXJUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgYWRk
cmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gZWxlbWVudFR5cGUpCi0gICAgICAgIDog
UmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RG
TW92ZShlbGVtZW50VHlwZSkpCisgICAgUG9pbnRlclR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
LCBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+
IGVsZW1lbnRUeXBlKQorICAgICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBh
ZGRyZXNzU3BhY2UsIFdURk1vdmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5
LDExICs0OSwxMSBAQCBwdWJsaWM6CiAgICAgUG9pbnRlclR5cGUoY29uc3QgUG9pbnRlclR5cGUm
KSA9IGRlbGV0ZTsKICAgICBQb2ludGVyVHlwZShQb2ludGVyVHlwZSYmKSA9IGRlZmF1bHQ7CiAK
LSAgICBib29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCisg
ICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAg
ICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQb2ludGVyVHlwZT4oTGV4ZXI6
OlRva2VuKG9yaWdpbigpKSwgU3RyaW5nKGFkZHJlc3NTcGFjZSgpKSwgZWxlbWVudFR5cGUoKS5j
bG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UG9pbnRlclR5cGU+KExl
eGVyOjpUb2tlbihvcmlnaW4oKSksIGFkZHJlc3NTcGFjZSgpLCBlbGVtZW50VHlwZSgpLmNsb25l
KCkpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTY1LDYgKzY1LDYgQEAgcHJpdmF0ZToKIAogfQog
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZUEUoUG9pbnRlclR5cGUsIGlzUG9pbnRl
clR5cGUoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5OQU1FRF9UWVBFKFBvaW50
ZXJUeXBlLCBpc1BvaW50ZXJUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaAppbmRleCBiYTM4YTVjMDFlYS4uZDA1YTcyYzFmYzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCkBAIC01MSwxMCAr
NTEsMzAgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIHZpcnR1YWwgU3RyaW5nIGdl
dEZ1bmN0aW9uTmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBzZXRGdW5jdGlv
bk5hbWUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkg
Y29uc3QgPSAwOworCisgICAgdm9pZCBzZXRQb3NzaWJsZUdldE92ZXJsb2Fkcyhjb25zdCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJs
b2FkcykKKyAgICB7CisgICAgICAgIG1fcG9zc2libGVHZXRPdmVybG9hZHMgPSBvdmVybG9hZHM7
CisgICAgfQorICAgIHZvaWQgc2V0UG9zc2libGVTZXRPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMp
CisgICAgeworICAgICAgICBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAg
IH0KKyAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRzKQorICAg
IHsKKyAgICAgICAgbV9wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKKyAgICB9CisK
ICAgICBFeHByZXNzaW9uJiBiYXNlKCkgeyByZXR1cm4gKm1fYmFzZTsgfQogCiBwcml2YXRlOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2Jhc2U7CisgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVHZXRP
dmVybG9hZHM7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNs
YXJhdGlvbj4sIDE+IG1fcG9zc2libGVTZXRPdmVybG9hZHM7CisgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVBbmRPdmVy
bG9hZHM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmgKaW5kZXggYTRjMTRjZTFjZjMuLmNkNTU2MzIwZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBF
TkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAi
V0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldI
TFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKQEAgLTUyLDggKzUyLDggQEAgcHVibGljOgogICAgIFJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBzdGQ6OnVuaXF1
ZV9wdHI8RXhwcmVzc2lvbj4gbFZhbHVlKQogICAgICAgICA6IEV4cHJlc3Npb24oTGV4ZXI6OlRv
a2VuKG9yaWdpbikpCiAgICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQotICAgICAg
ICAsIG1fb2xkVmFsdWUoTGV4ZXI6OlRva2VuKG9yaWdpbikpCi0gICAgICAgICwgbV9uZXdWYWx1
ZShXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9vbGRWYWx1ZShMZXhlcjo6VG9rZW4ob3Jp
Z2luKSwgUXVhbGlmaWVycygpLCBudWxscHRyLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxs
cHRyKQorICAgICAgICAsIG1fbmV3VmFsdWUoV1RGTW92ZShvcmlnaW4pLCBRdWFsaWZpZXJzKCks
IG51bGxwdHIsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpCiAgICAgewogICAgIH0K
IApAQCAtODcsMTUgKzg3LDE1IEBAIHB1YmxpYzoKICAgICBib29sIGlzUmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIEV4cHJl
c3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuICptX2xWYWx1ZTsgfQotICAgIEFub255bW91c1Zhcmlh
YmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQotICAgIEFu
b255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9uZXdWYWx1
ZTsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRW
YWx1ZTsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9u
ZXdWYWx1ZTsgfQogICAgIEV4cHJlc3Npb24mIG5ld1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0dXJu
ICptX25ld1ZhbHVlRXhwcmVzc2lvbjsgfQogICAgIEV4cHJlc3Npb24mIHJlc3VsdEV4cHJlc3Np
b24oKSB7IHJldHVybiAqbV9yZXN1bHRFeHByZXNzaW9uOyB9CiAKIHByaXZhdGU6CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fbFZhbHVlOwotICAgIEFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24gbV9vbGRWYWx1ZTsKLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9u
IG1fbmV3VmFsdWU7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBtX29sZFZhbHVlOworICAgIFZh
cmlhYmxlRGVjbGFyYXRpb24gbV9uZXdWYWx1ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVz
c2lvbj4gbV9uZXdWYWx1ZUV4cHJlc3Npb247CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Np
b24+IG1fcmVzdWx0RXhwcmVzc2lvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgKaW5kZXgg
MjI1N2Y5YmUyNDAuLjVkMjlmZmQ1YjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTM3LDExICszNywxOCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsK
IAotY2xhc3MgUmVmZXJlbmNlVHlwZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFJlZmVyZW5jZVR5
cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIFJlZmVyZW5jZVR5cGUoTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBhZGRyZXNzU3BhY2UsIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlPiYmIGVsZW1lbnRUeXBlKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2lu
KSkKLSAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShXVEZNb3ZlKGFkZHJlc3NTcGFjZSkpCisgICAg
ZW51bSBjbGFzcyBBZGRyZXNzU3BhY2UgeworICAgICAgICBDb25zdGFudCwKKyAgICAgICAgRGV2
aWNlLAorICAgICAgICBUaHJlYWRncm91cCwKKyAgICAgICAgVGhyZWFkCisgICAgfTsKKworICAg
IFJlZmVyZW5jZVR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBZGRyZXNzU3BhY2UgYWRkcmVz
c1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+JiYgZWxlbWVudFR5cGUpCisgICAg
ICAgIDogVW5uYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fYWRkcmVzc1Nw
YWNlKGFkZHJlc3NTcGFjZSkKICAgICAgICAgLCBtX2VsZW1lbnRUeXBlKFdURk1vdmUoZWxlbWVu
dFR5cGUpKQogICAgIHsKICAgICB9CkBAIC01MCwxOCArNTcsMTUgQEAgcHVibGljOgogCiAgICAg
UmVmZXJlbmNlVHlwZShjb25zdCBSZWZlcmVuY2VUeXBlJikgPSBkZWxldGU7CiAgICAgUmVmZXJl
bmNlVHlwZShSZWZlcmVuY2VUeXBlJiYpID0gZGVmYXVsdDsKLSAgICAKLSAgICBUeXBlJiBlbGVt
ZW50VHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9CiAKLXByb3RlY3RlZDoKLSAgICBj
b25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9Ci0g
ICAgY29uc3QgU3RyaW5nJiBhZGRyZXNzU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2FkZHJlc3NT
cGFjZTsgfQotICAgIGNvbnN0IFR5cGUmIGVsZW1lbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gKm1f
ZWxlbWVudFR5cGU7IH0KKyAgICBib29sIGlzUmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKCkgY29u
c3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KKyAgICBVbm5hbWVkVHlwZSYgZWxlbWVudFR5
cGUoKSBjb25zdCB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQogCiBwcml2YXRlOgotICAgIExl
eGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBTdHJpbmcgbV9hZGRyZXNzU3BhY2U7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFR5cGU+IG1fZWxlbWVudFR5cGU7CisgICAgQWRkcmVzc1NwYWNlIG1fYWRk
cmVzc1NwYWNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4gbV9lbGVtZW50VHlw
ZTsKIH07CiAKIH0KQEAgLTcwLDQgKzc0LDYgQEAgcHJpdmF0ZToKIAogfQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShSZWZlcmVuY2VUeXBlLCBpc1JlZmVyZW5j
ZVR5cGUoKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zMGExNWE5ZDI3ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJl
c291cmNlU2VtYW50aWMuY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKKworI2luY2x1ZGUgIldITFNMSW5mZXJUeXBl
cy5oIgorI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitib29sIFJlc291cmNl
U2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1l
ZFR5cGUsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpIGNvbnN0Cit7CisgICAgc3dpdGNo
IChtX21vZGUpIHsKKyAgICBjYXNlIE1vZGU6OlVub3JkZXJlZEFjY2Vzc1ZpZXc6CisgICAgICAg
IGlmIChpczxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8m
IHJlZmVyZW5jZVR5cGUgPSBkb3duY2FzdDxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlVHlwZS5hZGRyZXNzU3BhY2UoKSA9PSBSZWZlcmVu
Y2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50IHx8IHJlZmVyZW5jZVR5cGUuYWRkcmVzc1Nw
YWNlKCkgPT0gUmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGlzPEFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmIChpczxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpIHsK
KyAgICAgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxUeXBlUmVmZXJlbmNl
Pih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZl
ZFR5cGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGludHJp
bnNpY3MuaXNUZXh0dXJlKGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZl
cmVuY2UucmVzb2x2ZWRUeXBlKCkpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgY2FzZSBNb2RlOjpUZXh0dXJlOgorICAgICAgICBpZiAoaXM8UmVmZXJlbmNlVHlwZT4o
dW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlZmVyZW5jZVR5cGU+
KHVubmFtZWRUeXBlKS5hZGRyZXNzU3BhY2UoKSA9PSBSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3Bh
Y2U6OkNvbnN0YW50OworICAgICAgICBpZiAoaXM8QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGlzPFR5cGVSZWZlcmVuY2U+KHVu
bmFtZWRUeXBlKSkgeworICAgICAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0
PFR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlUmVm
ZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAgIGlmIChpczxOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gaW50cmluc2ljcy5pc1RleHR1cmUoZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0
aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBjYXNlIE1vZGU6OkJ1ZmZlcjoKKyAgICAgICAgaWYgKGlzPFJl
ZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxS
ZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gUmVmZXJlbmNlVHlw
ZTo6QWRkcmVzc1NwYWNlOjpDb25zdGFudDsKKyAgICAgICAgcmV0dXJuIGlzPEFycmF5VHlwZT4o
dW5uYW1lZFR5cGUpOworICAgIGNhc2UgTW9kZTo6U2FtcGxlcjoKKyAgICAgICAgcmV0dXJuIG1h
dGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3Muc2FtcGxlclR5cGUoKSk7CisgICAgfQorfQor
Citib29sIFJlc291cmNlU2VtYW50aWM6OmlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rp
b24oU2hhZGVySXRlbURpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlv
biYpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBTaGFkZXJJdGVtRGlyZWN0aW9u
OjpJbnB1dDsKK30KKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNl
bWFudGljLmgKaW5kZXggYWIzYjQzMGY0NDIuLjZhZTMxN2EzNTlhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGlj
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVz
b3VyY2VTZW1hbnRpYy5oCkBAIC02Miw2ICs2MiwxOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQg
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgdW5zaWduZWQgc3BhY2UoKSBj
b25zdCB7IHJldHVybiBtX3NwYWNlOyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVz
b3VyY2VTZW1hbnRpYyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tb2Rl
ID09IG90aGVyLm1fbW9kZSAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXggJiYgbV9zcGFjZSA9
PSBvdGhlci5tX3NwYWNlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZXNv
dXJjZVNlbWFudGljJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICB9CisKKyAgICBib29sIGlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNU
OjpVbm5hbWVkVHlwZSYsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICBi
b29sIGlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlv
biwgY29uc3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisKIHByaXZhdGU6
CiAgICAgTW9kZSBtX21vZGU7CiAgICAgdW5zaWduZWQgbV9pbmRleDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJldHVybi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKaW5kZXgg
YzViZmM5ZTQyODYuLmFjOTMyM2QyNDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaApAQCAtNTQsOCArNTQsMTEgQEAg
cHVibGljOgogCiAgICAgRXhwcmVzc2lvbiogdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlLmdldCgp
OyB9CiAKKyAgICB2b2lkIHNldEZ1bmN0aW9uKEZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25E
ZWZpbml0aW9uKSB7IG1fZnVuY3Rpb24gPSBmdW5jdGlvbkRlZmluaXRpb247IH0KKwogcHJpdmF0
ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV92YWx1ZTsgLy8gbnVsbGFibGUK
KyAgICBGdW5jdGlvbkRlZmluaXRpb24qIG1fZnVuY3Rpb247CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzRjMzBiNTE1OTMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVj
aWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oIgor
CisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNz
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNw
YWNlIEFTVCB7CisKK2Jvb2wgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljOjppc0FjY2Vw
dGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBJbnRy
aW5zaWNzJiBpbnRyaW5zaWNzKSBjb25zdAoreworICAgIGlmICghaXM8VHlwZVJlZmVyZW5jZT4o
dW5uYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgdHlwZVJlZmVy
ZW5jZSA9IGRvd25jYXN0PFR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKTsKKyAgICBBU1NFUlQo
dHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBpbnRyaW5zaWNzLmlzTnVtYmVyKGRvd25jYXN0PE5hdGl2ZVR5
cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpKTsKK30KKworYm9v
bCBTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWM6OmlzQWNjZXB0YWJsZUZvclNoYWRlckl0
ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9u
RGVmaW5pdGlvbiYpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBTaGFkZXJJdGVt
RGlyZWN0aW9uOjpJbnB1dDsKK30KKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oCmluZGV4IDlhN2M1
M2ZkNGI2Li45YTg0YWI5Y2ZiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6
YXRpb25Db25zdGFudFNlbWFudGljLmgKQEAgLTQ4LDYgKzQ4LDE5IEBAIHB1YmxpYzoKICAgICBT
cGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMoY29uc3QgU3BlY2lhbGl6YXRpb25Db25zdGFu
dFNlbWFudGljJikgPSBkZWxldGU7CiAgICAgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGlj
KFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgaXNBY2NlcHRhYmxlVHlwZShj
b25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgSW50cmluc2ljcyYpIGNvbnN0IG92ZXJyaWRl
OworICAgIGJvb2wgaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFkZXJJdGVt
RGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSBjb25zdCBvdmVycmlkZTsKKwog
cHJpdmF0ZToKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMTU2NWJkYWM5MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0
YWdlSW5PdXRTZW1hbnRpYy5jcHAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldITFNMU3RhZ2VJbk91dFNlbWFudGljLmgiCisKKyNpbmNsdWRlICJXSExTTEluZmVy
VHlwZXMuaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworYm9vbCBTdGFn
ZUluT3V0U2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYg
dW5uYW1lZFR5cGUsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpIGNvbnN0Cit7CisgICAg
aWYgKGlzPEFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAoIWlzPFR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxUeXBlUmVmZXJlbmNlPih1
bm5hbWVkVHlwZSk7CisgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwor
ICAgIGF1dG8mIHJlc29sdmVkVHlwZSA9ICp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpOwor
ICAgIGlmIChpczxFbnVtZXJhdGlvbkRlZmluaXRpb24+KHJlc29sdmVkVHlwZSkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGlmICghaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihyZXNvbHZl
ZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xh
cmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5y
ZXNvbHZlZFR5cGUoKSk7CisgICAgcmV0dXJuIGludHJpbnNpY3MuaXNOdW1iZXIobmF0aXZlVHlw
ZURlY2xhcmF0aW9uKQorICAgICAgICB8fCBpbnRyaW5zaWNzLmlzVmVjdG9yKG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbikKKyAgICAgICAgfHwgaW50cmluc2ljcy5pc01hdHJpeChuYXRpdmVUeXBlRGVj
bGFyYXRpb24pOworfQorCitib29sIFN0YWdlSW5PdXRTZW1hbnRpYzo6aXNBY2NlcHRhYmxlRm9y
U2hhZGVySXRlbURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3Qg
RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIGNvbnN0Cit7CisgICAgc3dp
dGNoICgqZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICBjYXNlIEZ1
bmN0aW9uRGVjbGFyYXRpb246OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGNhc2UgRnVuY3Rpb25EZWNsYXJhdGlvbjo6RW50cnlQb2ludFR5cGU6OkZy
YWdtZW50OgorICAgICAgICByZXR1cm4gZGlyZWN0aW9uID09IFNoYWRlckl0ZW1EaXJlY3Rpb246
OklucHV0OworICAgIGNhc2UgRnVuY3Rpb25EZWNsYXJhdGlvbjo6RW50cnlQb2ludFR5cGU6OkNv
bXB1dGU6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30KKworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaAppbmRleCBhMzk5Mjc4MWUz
YS4uMjk5YjkxYmQ5OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oCkBAIC01
MSw2ICs1MSwxOSBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXg7IH0KIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdGFnZUluT3V0U2Vt
YW50aWMmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3Ro
ZXIubV9pbmRleDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3RhZ2VJbk91
dFNlbWFudGljJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKKyAgICB9CisKKyAgICBib29sIGlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpV
bm5hbWVkVHlwZSYsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IGlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwg
Y29uc3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisKIHByaXZhdGU6CiAg
ICAgdW5zaWduZWQgbV9pbmRleDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9u
LmgKaW5kZXggODdjYzYyZjIzNTYuLmE4Yzk4ZTk5YjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0
dXJlRGVmaW5pdGlvbi5oCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTExleGVy
LmgiCiAjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xU
eXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM5LDExICszOSwxMCBA
QCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgU3RydWN0dXJl
RGVmaW5pdGlvbiA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFN0cnVjdHVyZURlZmluaXRpb24gOiBw
dWJsaWMgTmFtZWRUeXBlIHsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVEZWZpbml0aW9uKExleGVy
OjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgU3RydWN0dXJlRWxlbWVudHMmJiBzdHJ1
Y3R1cmVFbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAg
ICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgICAgIDogTmFtZWRUeXBlKFdURk1vdmUo
b3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3N0cnVjdHVyZUVsZW1lbnRzKFdU
Rk1vdmUoc3RydWN0dXJlRWxlbWVudHMpKQogICAgIHsKICAgICB9CkBAIC01MywxNyArNTIsMTEg
QEAgcHVibGljOgogICAgIFN0cnVjdHVyZURlZmluaXRpb24oY29uc3QgU3RydWN0dXJlRGVmaW5p
dGlvbiYpID0gZGVsZXRlOwogICAgIFN0cnVjdHVyZURlZmluaXRpb24oU3RydWN0dXJlRGVmaW5p
dGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBTdHJ1Y3R1cmVFbGVtZW50cyYgc3RydWN0dXJlRWxl
bWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9CisgICAgYm9vbCBpc1N0cnVj
dHVyZURlZmluaXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
KyAgICBTdHJ1Y3R1cmVFbGVtZW50cyYgc3RydWN0dXJlRWxlbWVudHMoKSB7IHJldHVybiBtX3N0
cnVjdHVyZUVsZW1lbnRzOyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2lu
OwotICAgIFN0cmluZyBtX25hbWU7CiAgICAgU3RydWN0dXJlRWxlbWVudHMgbV9zdHJ1Y3R1cmVF
bGVtZW50czsKIH07CiAKQEAgLTczLDQgKzY2LDYgQEAgcHJpdmF0ZToKIAogfQogCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoU3RydWN0dXJlRGVmaW5pdGlvbiwgaXNT
dHJ1Y3R1cmVEZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVu
dC5oCmluZGV4IDE0YmU0MWM3Mjk4Li5kOTE5MWFhNGY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVy
ZUVsZW1lbnQuaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgU3Ry
dWN0dXJlRWxlbWVudCA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKLSAgICBTdHJ1Y3R1cmVFbGVt
ZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6
dW5pcXVlX3B0cjxUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIE9wdGlvbmFsPFNlbWFudGlj
PiBzZW1hbnRpYykKKyAgICBTdHJ1Y3R1cmVFbGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwg
UXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiB0
eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4gc2VtYW50aWMpCiAgICAgICAg
IDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZN
b3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAtNTUs
MTMgKzU1LDE1IEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVFbGVtZW50KGNvbnN0IFN0cnVjdHVy
ZUVsZW1lbnQmKSA9IGRlbGV0ZTsKICAgICBTdHJ1Y3R1cmVFbGVtZW50KFN0cnVjdHVyZUVsZW1l
bnQmJikgPSBkZWZhdWx0OwogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0K
KyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2lu
OyB9CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CisgICAgY29u
c3QgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgT3B0aW9uYWw8U2VtYW50
aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KIAogcHJpdmF0ZToKICAgICBM
ZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgUXVhbGlmaWVycyBtX3F1YWxpZmllcnM7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1l
ZFR5cGU+IG1fdHlwZTsKICAgICBTdHJpbmcgbV9uYW1lOwogICAgIE9wdGlvbmFsPFNlbWFudGlj
PiBtX3NlbWFudGljOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFR5cGUuaAppbmRleCBjZjRjYmM4ODc5MC4uNTczYThiYjY4YzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5
cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xU
eXBlLmgKQEAgLTQ1LDEyICs0NSw4IEBAIHB1YmxpYzoKICAgICBUeXBlKGNvbnN0IFR5cGUmKSA9
IGRlbGV0ZTsKICAgICBUeXBlKFR5cGUmJikgPSBkZWZhdWx0OwogCi0gICAgdmlydHVhbCBib29s
IGlzVHlwZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBi
b29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwg
Ym9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIGlzQXJyYXlUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAg
IHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBpc05hbWVkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzVW5uYW1lZFR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiBwcml2
YXRlOgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCmluZGV4IDdlNTgwMWUzYjU2Li4xYjhh
ZjQxYzI5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCkBAIC0yOCw5ICsyOCwxMSBAQAog
I2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXSExT
TExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAppbmRleCBmNzM2
MjllMjliMS4uNDJjMmY0MGZjNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaApAQCAtMjks
NyArMjksOCBAQAogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMTm9k
ZS5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMSArMzksMTAgQEAgbmFtZXNw
YWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFR5cGVEZWZpbml0aW9uIDog
cHVibGljIFR5cGUgeworY2xhc3MgVHlwZURlZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsK
IHB1YmxpYzoKLSAgICBUeXBlRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmlu
ZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSkKLSAgICAgICAgOiBt
X29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkp
CisgICAgVHlwZURlZmluaXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1l
LCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiB0eXBlKQorICAgICAgICA6IE5h
bWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBl
KFdURk1vdmUodHlwZSkpCiAgICAgewogICAgIH0KQEAgLTUyLDE4ICs1MiwxOCBAQCBwdWJsaWM6
CiAgICAgVHlwZURlZmluaXRpb24oY29uc3QgVHlwZURlZmluaXRpb24mKSA9IGRlbGV0ZTsKICAg
ICBUeXBlRGVmaW5pdGlvbihUeXBlRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBBU1Q6
OlR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CisgICAgYm9vbCBpc1R5cGVEZWZpbml0
aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiB0
eXBlKCkgeyByZXR1cm4gbV90eXBlLmdldCgpOyB9CisKKyAgICBjb25zdCBUeXBlJiB1bmlmeU5v
ZGUoKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBBU1NFUlQobV90eXBlKTsKKyAgICAg
ICAgcmV0dXJuIG1fdHlwZS0+dW5pZnlOb2RlKCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIExl
eGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVk
VHlwZT4gbV90eXBlOwogfTsKIAogfQpAQCAtNzIsNCArNzIsNiBAQCBwcml2YXRlOgogCiB9CiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShUeXBlRGVmaW5pdGlvbiwg
aXNUeXBlRGVmaW5pdGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAppbmRl
eCA0OTQ0MWQ4YjVjNy4uNDA0ZGU0NGI2MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKQEAg
LTI4LDggKzI4LDkgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xMZXhl
ci5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURl
Y2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJX
SExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDEwICszOSwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewog
CiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgVHlwZVJlZmVyZW5jZSA6IHB1YmxpYyBUeXBlIHsK
K2NsYXNzIFR5cGVSZWZlcmVuY2UgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgogICAg
IFR5cGVSZWZlcmVuY2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1lLCBUeXBl
QXJndW1lbnRzJiYgdHlwZUFyZ3VtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9y
aWdpbikpCisgICAgICAgIDogVW5uYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAs
IG1fbmFtZShXVEZNb3ZlKG5hbWUpKQogICAgICAgICAsIG1fdHlwZUFyZ3VtZW50cyhXVEZNb3Zl
KHR5cGVBcmd1bWVudHMpKQogICAgIHsKQEAgLTUyLDI0ICs1Myw0NyBAQCBwdWJsaWM6CiAgICAg
VHlwZVJlZmVyZW5jZShjb25zdCBUeXBlUmVmZXJlbmNlJikgPSBkZWxldGU7CiAgICAgVHlwZVJl
ZmVyZW5jZShUeXBlUmVmZXJlbmNlJiYpID0gZGVmYXVsdDsKIAorICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gd3JhcChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIE5hbWVk
VHlwZSYgcmVzb2x2ZWRUeXBlKQorICAgIHsKKyAgICAgICAgVHlwZUFyZ3VtZW50cyB0eXBlQXJn
dW1lbnRzOworICAgICAgICBpZiAoaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihyZXNvbHZlZFR5
cGUpKQorICAgICAgICAgICAgdHlwZUFyZ3VtZW50cyA9IEFTVDo6Y2xvbmUoZG93bmNhc3Q8TmF0
aXZlVHlwZURlY2xhcmF0aW9uPihyZXNvbHZlZFR5cGUpLnR5cGVBcmd1bWVudHMoKSk7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihXVEZNb3Zl
KG9yaWdpbiksIFN0cmluZyhyZXNvbHZlZFR5cGUubmFtZSgpKSwgV1RGTW92ZSh0eXBlQXJndW1l
bnRzKSk7CisgICAgICAgIHJlc3VsdC0+c2V0UmVzb2x2ZWRUeXBlKHJlc29sdmVkVHlwZSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgYm9vbCBpc1R5cGVSZWZlcmVuY2Uo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBTdHJpbmcmIG5hbWUoKSB7
IHJldHVybiBtX25hbWU7IH0KICAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyBy
ZXR1cm4gbV90eXBlQXJndW1lbnRzOyB9CisgICAgTmFtZWRUeXBlKiByZXNvbHZlZFR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3Jlc29sdmVkVHlwZTsgfQorCisgICAgY29uc3QgVHlwZSYgdW5pZnlO
b2RlKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Jlc29sdmVkVHlw
ZSk7CisgICAgICAgIHJldHVybiBtX3Jlc29sdmVkVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2V0UmVzb2x2ZWRUeXBlKE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBlKQor
ICAgIHsKKyAgICAgICAgbV9yZXNvbHZlZFR5cGUgPSAmcmVzb2x2ZWRUeXBlOworICAgIH0KIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUmVmZXJlbmNlPiBjbG9uZVR5cGVSZWZlcmVuY2UoKSBj
b25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VHlwZVJlZmVyZW5j
ZT4oTGV4ZXI6OlRva2VuKG1fb3JpZ2luKSwgU3RyaW5nKG1fbmFtZSksIEFTVDo6Y2xvbmUobV90
eXBlQXJndW1lbnRzKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVSZWZl
cmVuY2U+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhtX25hbWUpLCBBU1Q6OmNsb25l
KG1fdHlwZUFyZ3VtZW50cykpOwogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICByZXR1cm4gY2xvbmVUeXBlUmVm
ZXJlbmNlKCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsK
ICAgICBTdHJpbmcgbV9uYW1lOwogICAgIFR5cGVBcmd1bWVudHMgbV90eXBlQXJndW1lbnRzOwor
ICAgIE5hbWVkVHlwZSogbV9yZXNvbHZlZFR5cGUgeyBudWxscHRyIH07CiB9OwogCiB9CkBAIC03
OCw2ICsxMDIsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hM
U0xfVFlQRShUeXBlUmVmZXJlbmNlLCBpc1R5cGVSZWZlcmVuY2UoKSkKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfV0hMU0xfVU5OQU1FRF9UWVBFKFR5cGVSZWZlcmVuY2UsIGlzVHlwZVJlZmVyZW5j
ZSgpKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi43M2E4ZjBhMGM0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKQEAgLTAs
MCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNp
bmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNU
IHsKKworY2xhc3MgVW5uYW1lZFR5cGUgOiBwdWJsaWMgVHlwZSB7CitwdWJsaWM6CisgICAgVW5u
YW1lZFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQorICAgICAgICA6IG1fb3JpZ2luKFdURk1v
dmUob3JpZ2luKSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+VW5uYW1lZFR5cGUoKSA9
IGRlZmF1bHQ7CisKKyAgICBVbm5hbWVkVHlwZShjb25zdCBVbm5hbWVkVHlwZSYpID0gZGVsZXRl
OworICAgIFVubmFtZWRUeXBlKFVubmFtZWRUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wg
aXNVbm5hbWVkVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNUeXBlUmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1JlZmVyZW5jZVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorCisgICAgdmlydHVhbCBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCB7IHJldHVy
biAqdGhpczsgfQorCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNs
b25lKCkgY29uc3QgPSAwOworCisgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25z
dCB7IHJldHVybiBtX29yaWdpbjsgfQorCitwcml2YXRlOgorICAgIExleGVyOjpUb2tlbiBtX29y
aWdpbjsKK307CisKK30KKworfQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19XSExTTF9VTk5BTUVEX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVO
YW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6
OlVubmFtZWRUeXBlJiB0eXBlKSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQ
RShVbm5hbWVkVHlwZSwgaXNVbm5hbWVkVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFy
YXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZh
cmlhYmxlRGVjbGFyYXRpb24uaAppbmRleCBmZjAzNjgxOTNiZC4uNDVhNjNlZjcxYWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlh
YmxlRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNw
YWNlIEFTVCB7CiAKIGNsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb24gOiBwdWJsaWMgVmFsdWUgewog
cHVibGljOgotICAgIFZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBR
dWFsaWZpZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBl
LCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlx
dWVfcHRyPEV4cHJlc3Npb24+JiYgaW5pdGlhbGl6ZXIpCisgICAgVmFyaWFibGVEZWNsYXJhdGlv
bihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25h
bDxTZW1hbnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5p
dGlhbGl6ZXIpCiAgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAs
IG1fcXVhbGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZN
b3ZlKHR5cGUpKQpAQCAtNjAsMjAgKzYwLDIzIEBAIHB1YmxpYzoKICAgICBWYXJpYWJsZURlY2xh
cmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OwogCiAgICAgTGV4ZXI6OlRv
a2VuIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1l
KCkgeyByZXR1cm4gbV9uYW1lOyB9CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlw
ZTsgfQorICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gKm1fdHlwZTsgfQog
ICAgIE9wdGlvbmFsPFNlbWFudGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9
CiAgICAgRXhwcmVzc2lvbiogaW5pdGlhbGl6ZXIoKSB7IHJldHVybiBtX2luaXRpYWxpemVyLmdl
dCgpOyB9CiAKIHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIFF1YWxp
ZmllcnMgbV9xdWFsaWZpZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlw
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbV90eXBlOwogICAgIFN0
cmluZyBtX25hbWU7CiAgICAgT3B0aW9uYWw8U2VtYW50aWM+IG1fc2VtYW50aWM7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1faW5pdGlhbGl6ZXI7CiB9OwogCit0eXBlZGVmIFZl
Y3RvcjxWYXJpYWJsZURlY2xhcmF0aW9uPiBWYXJpYWJsZURlY2xhcmF0aW9uczsKKwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xWYXJpYWJsZVJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVuY2UuaAppbmRleCAyYWU4MjhkNTI5NS4uZTM5ZWNm
NWM1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVuY2UuaApAQCAtMjcsNyArMjcsNyBA
QAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMQW5vbnltb3VzVmFyaWFi
bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgog
I2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNp
bmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKQEAgLTU1LDE5ICs1NSwyMSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFZhcmlhYmxlUmVmZXJlbmNlIHdyYXAoVmFyaWFibGVEZWNsYXJh
dGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKICAgICB7CiAgICAgICAgIFZhcmlhYmxlUmVmZXJl
bmNlIHJlc3VsdChMZXhlcjo6VG9rZW4odmFyaWFibGVEZWNsYXJhdGlvbi5vcmlnaW4oKSkpOwot
ICAgICAgICByZXN1bHQubV92YXJpYWJsZSA9IHsgJnZhcmlhYmxlRGVjbGFyYXRpb24gfTsKKyAg
ICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBzdGF0aWMgVmFyaWFibGVSZWZlcmVuY2Ugd3Jh
cChBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJiBhbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0
aW9uKQorICAgIGJvb2wgaXNWYXJpYWJsZVJlZmVyZW5jZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KKworICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorCisg
ICAgVmFyaWFibGVEZWNsYXJhdGlvbiogdmFyaWFibGUoKSB7IHJldHVybiBtX3ZhcmlhYmxlOyB9
CisKKyAgICB2b2lkIHNldFZhcmlhYmxlKFZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVj
bGFyYXRpb24pCiAgICAgewotICAgICAgICBWYXJpYWJsZVJlZmVyZW5jZSByZXN1bHQoTGV4ZXI6
OlRva2VuKGFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24ub3JpZ2luKCkpKTsKLSAgICAgICAg
cmVzdWx0Lm1fdmFyaWFibGUgPSB7ICZhbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uIH07Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIG1fdmFyaWFibGUgPSAmdmFyaWFibGVEZWNs
YXJhdGlvbjsKICAgICB9CiAKLSAgICBib29sIGlzVmFyaWFibGVSZWZlcmVuY2UoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KIHByaXZhdGU6CiAgICAgVmFyaWFibGVSZWZlcmVu
Y2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQogICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShv
cmlnaW4pKQpAQCAtNzUsNyArNzcsNyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIFN0cmluZyBt
X25hbWU7Ci0gICAgT3B0aW9uYWw8VmFyaWFudDxWYXJpYWJsZURlY2xhcmF0aW9uKiwgQW5vbnlt
b3VzVmFyaWFibGVEZWNsYXJhdGlvbio+PiBtX3ZhcmlhYmxlOworICAgIFZhcmlhYmxlRGVjbGFy
YXRpb24qIG1fdmFyaWFibGU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5j
dGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42ZDVlZjM3
NTY3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCkBAIC0wLDAgKzEsMTIyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgiCisKKyNpbmNsdWRlICJXSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5j
bHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworYm9vbCBjaGVj
a0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4+IGZ1bmN0
aW9uczsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rp
b25EZWZpbml0aW9ucygpKQorICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKCpmdW5jdGlvbkRlZmlu
aXRpb24pOworICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dy
YW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgZnVuY3Rpb25zLmFwcGVu
ZCgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisKKyAgICBzdGQ6OnNvcnQoZnVuY3Rpb25z
LmJlZ2luKCksIGZ1bmN0aW9ucy5lbmQoKSwgW10oY29uc3QgQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uJiBhLCBjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGIpIC0+IGJvb2wgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RkOjptaW4oYS5uYW1lKCkubGVuZ3RoKCks
IGIubmFtZSgpLmxlbmd0aCgpKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoYS5uYW1lKClbaV0g
PCBiLm5hbWUoKVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IGlmIChhLm5hbWUoKVtpXSA+IGIubmFtZSgpW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYS5uYW1lKCkubGVuZ3RoKCkgPCBiLm5h
bWUoKS5sZW5ndGgoKTsKKyAgICB9KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0
aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBm
dW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0
KCkubmFtZSgpICE9IGZ1bmN0aW9uc1tqXS5nZXQoKS5uYW1lKCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
PihmdW5jdGlvbnNbaV0uZ2V0KCkpICYmIGlzPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bj4oZnVuY3Rpb25zW2pdLmdldCgpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSAhPSBmdW5j
dGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkuaXNDYXN0KCkpIHsKKyAg
ICAgICAgICAgICAgICBib29sIHNhbWUgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghbWF0
Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCkudHlwZSgpLCBmdW5jdGlvbnNbal0uZ2V0KCkudHlwZSgp
KSkKKyAgICAgICAgICAgICAgICAgICAgc2FtZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGZ1bmN0aW9u
c1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2spIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5
cGUoKSwgZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50eXBlKCkpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzYW1lKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGJvb2wgc2FtZSA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgayA9IDA7IGsgPCBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKTsg
KytrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSwgZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMo
KVtrXS50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzYW1lID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2FtZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3BlcmF0b3ImW10iICYm
IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIKKyAgICAgICAgICAg
ICYmIGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1l
dGVycygpWzBdLnR5cGUoKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5cGUgPSBmdW5jdGlvbnNb
aV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLnR5cGUoKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6
OlR5cGVSZWZlcmVuY2U+KHR5cGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHJlc29s
dmVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odHlwZSkucmVzb2x2ZWRUeXBl
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uPigqcmVzb2x2ZWRUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgbmF0
aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+
KCpyZXNvbHZlZFR5cGUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVpbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFt
ZSgpID09ICJvcGVyYXRvci5sZW5ndGgiICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJz
KCkuc2l6ZSgpID09IDEKKyAgICAgICAgICAgICYmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpCisgICAgICAgICAg
ICB8fCBpczxBU1Q6OkFycmF5VHlwZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsw
XS50eXBlKCkpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWxzZSBpZiAo
ZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3BlcmF0b3I9PSIKKyAgICAgICAgICAgICYm
IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIKKyAgICAgICAgICAg
ICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMo
KVswXS50eXBlKCkpCisgICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KGZ1bmN0
aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKQorICAgICAgICAgICAgJiYgbWF0
Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgZnVuY3Rpb25z
W2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1
cGxpY2F0ZUZ1bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi43ZWNlZTc4MmM1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaApA
QCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworYm9vbCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhj
b25zdCBQcm9ncmFtJik7CisKK30KKworfQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc5NGI4NTk3NWI5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApA
QCAtMCwwICsxLDQyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xDaGVja2VyLmgiCisKKyNpbmNsdWRlICJX
SExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisj
aW5jbHVkZSAiV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCIKKyNpbmNsdWRlICJXSExTTElu
ZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hM
U0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQT0RDaGVja2VyIDogcHVibGlj
IFZpc2l0b3IgeworcHVibGljOgorICAgIFBPRENoZWNrZXIoY29uc3QgSW50cmluc2ljcyYgaW50
cmluc2ljcykKKyAgICAgICAgOiBtX2ludHJpbnNpY3MoaW50cmluc2ljcykKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB+UE9EQ2hlY2tlcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlz
aXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlv
bik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYg
bmF0aXZlVHlwZURlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFtX2lu
dHJpbnNpY3MuaXNOdW1iZXIobmF0aXZlVHlwZURlY2xhcmF0aW9uKQorICAgICAgICAgICAgJiYg
IW1faW50cmluc2ljcy5pc1ZlY3RvcihuYXRpdmVUeXBlRGVjbGFyYXRpb24pCisgICAgICAgICAg
ICAmJiAhbV9pbnRyaW5zaWNzLmlzTWF0cml4KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1
cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgVmlzaXRvcjo6dmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgfQorCisgICAgdm9p
ZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHR5cGVEZWZpbml0aW9uKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBWaXNpdG9yOjp2aXNpdChhcnJheVR5cGUpOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpQb2ludGVyVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBzZXRFcnJvcigp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0TmFtZWRUeXBlKCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOworfTsK
KworY2xhc3MgQ2hlY2tlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBDaGVja2Vy
KGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCisgICAgICAgIDogbV9pbnRyaW5zaWNzKGlu
dHJpbnNpY3MpCisgICAgeworICAgIH0KKworICAgIH5DaGVja2VyKCkgPSBkZWZhdWx0OworCisg
ICAgdm9pZCB2aXNpdChQcm9ncmFtJiBwcm9ncmFtKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
Zm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpCisg
ICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAg
Zm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0
aW9ucygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpzdHJ1Y3R1cmVEZWZpbml0
aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFt
LmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCgqZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBl
RGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkKKyAgICAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKworICAgICAg
ICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0
aW9ucygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmdW5jdGlvbkRlZmluaXRp
b24pOworICAgICAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9n
cmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCisgICAgICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBib29sIGNoZWNrU2hhZGVyVHlwZShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYg
ZnVuY3Rpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoICgqZnVuY3Rpb25EZWZp
bml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBU1Q6OkZ1bmN0aW9uRGVm
aW5pdGlvbjo6RW50cnlQb2ludFR5cGU6OlZlcnRleDoKKyAgICAgICAgICAgIHJldHVybiAhbV92
ZXJ0ZXhFbnRyeVBvaW50cy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkuaXNOZXdFbnRy
eTsKKyAgICAgICAgY2FzZSBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbjo6RW50cnlQb2ludFR5cGU6
OkZyYWdtZW50OgorICAgICAgICAgICAgcmV0dXJuICFtX2ZyYWdtZW50RW50cnlQb2ludHMuYWRk
KGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpLmlzTmV3RW50cnk7CisgICAgICAgIGNhc2UgQVNU
OjpGdW5jdGlvbkRlZmluaXRpb246OkVudHJ5UG9pbnRUeXBlOjpDb21wdXRlOgorICAgICAgICAg
ICAgcmV0dXJuICFtX2NvbXB1dGVFbnRyeVBvaW50cy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5h
bWUoKSkuaXNOZXdFbnRyeTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgY2hlY2tTZW1h
bnRpY3MoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7
CisgICAgICAgIGF1dG8gZW50cnlQb2ludEl0ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKG1f
aW50cmluc2ljcywgZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKCFlbnRyeVBvaW50
SXRlbXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gaW5wdXRJdGVt
cyA9IFdURk1vdmUoZW50cnlQb2ludEl0ZW1zLT5pbnB1dHMpOworICAgICAgICBhdXRvIG91dHB1
dEl0ZW1zID0gV1RGTW92ZShlbnRyeVBvaW50SXRlbXMtPm91dHB1dHMpOworCisgICAgICAgIHsK
KyAgICAgICAgICAgIGF1dG8gY2hlY2tEdXBsaWNhdGVTZW1hbnRpY3MgPSBbJl0oY29uc3QgVmVj
dG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBNYWtlIHRoaXMgZmFzdGVyIHRoYW4gTyhuXjIpLgorICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgaXRlbXMuc2l6ZSgpOyArK2opIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtc1tpXS5zZW1hbnRpYyA9PSBpdGVtc1tqXS5z
ZW1hbnRpYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKCFjaGVja0R1cGxpY2F0
ZVNlbWFudGljcyhpbnB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBpZiAoIWNoZWNrRHVwbGljYXRlU2VtYW50aWNzKG91dHB1dEl0ZW1zKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAg
ICAgICAgICBhdXRvIGNoZWNrU2VtYW50aWNUeXBlcyA9IFsmXShjb25zdCBWZWN0b3I8RW50cnlQ
b2ludEl0ZW0+JiBpdGVtcykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBp
dGVtIDogaXRlbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhY2NlcHRhYmxlID0gV1RG
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBBU1Q6OkJhc2VTZW1hbnRpYyYgc2Vt
YW50aWMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGlj
LmlzQWNjZXB0YWJsZVR5cGUoaXRlbS51bm5hbWVkVHlwZSwgbV9pbnRyaW5zaWNzKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSksIGl0ZW0uc2VtYW50aWMpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWFjY2VwdGFibGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY1R5cGVzKGlucHV0SXRlbXMpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghY2hlY2tTZW1h
bnRpY1R5cGVzKG91dHB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGNoZWNrU2VtYW50aWNGb3JT
aGFkZXJUeXBlID0gWyZdKGNvbnN0IFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGl0ZW1zLCBBU1Q6
OkJhc2VTZW1hbnRpYzo6U2hhZGVySXRlbURpcmVjdGlvbiBkaXJlY3Rpb24pIC0+IGJvb2wgewor
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gYWNjZXB0YWJsZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
Y29uc3QgQVNUOjpCYXNlU2VtYW50aWMmIHNlbWFudGljKSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzZW1hbnRpYy5pc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGly
ZWN0aW9uKGRpcmVjdGlvbiwgZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSksIGl0ZW0uc2VtYW50aWMpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2VwdGFi
bGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIGlmICghY2hlY2tTZW1hbnRpY0ZvclNoYWRlclR5cGUoaW5wdXRJdGVtcywgQVNUOjpC
YXNlU2VtYW50aWM6OlNoYWRlckl0ZW1EaXJlY3Rpb246OklucHV0KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNGb3JTaGFkZXJU
eXBlKG91dHB1dEl0ZW1zLCBBU1Q6OkJhc2VTZW1hbnRpYzo6U2hhZGVySXRlbURpcmVjdGlvbjo6
T3V0cHV0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICB7CisgICAgICAgICAgICBhdXRvIGNoZWNrUE9ERGF0YSA9IFsmXShjb25zdCBWZWN0b3I8
RW50cnlQb2ludEl0ZW0+JiBpdGVtcykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgZm9yIChh
dXRvJiBpdGVtIDogaXRlbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgUE9EQ2hlY2tlciBwb2RD
aGVja2VyKG1faW50cmluc2ljcyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBv
aW50ZXJUeXBlPihpdGVtLnVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBv
ZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUoZG93bmNhc3Q8QVNUOjpQb2lu
dGVyVHlwZT4oaXRlbS51bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihpdGVtLnVubmFtZWRU
eXBlKSkgcG9kQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShkb3duY2FzdDxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oaXRlbS51bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPihpdGVtLnVu
bmFtZWRUeXBlKSkgcG9kQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShkb3du
Y2FzdDxBU1Q6OkFycmF5VHlwZT4oaXRlbS51bm5hbWVkVHlwZSkudHlwZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChwb2RDaGVja2VyLmVycm9yKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICghY2hlY2tQT0RE
YXRhKGlucHV0SXRlbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGlmICghY2hlY2tQT0REYXRhKG91dHB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biYgZnVuY3Rpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgZW51bSBjbGFzcyBDaGVja0tp
bmQgeworICAgICAgICAgICAgSW5kZXgsCisgICAgICAgICAgICBEb3QKKyAgICAgICAgfTsKKwor
ICAgICAgICBhdXRvIGNoZWNrR2V0dGVyID0gWyZdKENoZWNrS2luZCBraW5kKSAtPiBib29sIHsK
KyAgICAgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNr
S2luZDo6SW5kZXggPyAyIDogMTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24u
cGFyYW1ldGVycygpLnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gZnVuY3Rp
b25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkudW5pZnlOb2RlKCk7CisgICAgICAg
ICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkgeworICAgICAgICAgICAg
ICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlO
b2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5
cGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGNoZWNr
U2V0dGVyID0gWyZdKENoZWNrS2luZCBraW5kKSAtPiBib29sIHsKKyAgICAgICAgICAgIHNpemVf
dCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6SW5kZXggPyAzIDog
MjsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUo
KSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSA9IGZ1bmN0aW9uRGVm
aW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAg
aWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0QXJndW1lbnRVbmlmeU5vZGUpKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBl
PihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpQ
b2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25EZWZp
bml0aW9uLnR5cGUoKSwgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBB
ZGQgZnVuY3Rpb24gcmVzb2x1dGlvbiBjb2RlLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH07CisKKyAgICAgICAgYXV0byBjaGVja0FuZGVyID0gWyZdKENoZWNrS2luZCBraW5k
KSAtPiBib29sIHsKKyAgICAgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBr
aW5kID09IENoZWNrS2luZDo6SW5kZXggPyAyIDogMTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlv
bkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlO
b2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5v
ZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
YXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUp
OworICAgICAgICAgICAgICAgIGlmICghaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gZnVuY3Rpb25EZWZp
bml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkudW5pZnlOb2RlKCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBk
b3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgICAgIGlm
ICghaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpICYmICFpczxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9OworCisgICAgICAgIC8vIEZJWE1FOiBBZGQgdGhlIHByb3BlciBndWFyZHMK
KyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5pc0Nhc3QoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3IrKyIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9w
ZXJhdG9yLS0iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBl
KCksIGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChm
dW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcisiCisgICAgICAgICAgICB8fCBm
dW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvci0iKSB7CisgICAgICAgICAgICBp
ZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMQorICAgICAgICAg
ICAgICAgICYmIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IDIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yKiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yLyIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yJSIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yJiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yfCIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yXiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yPDwiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcHJl
YXRvcj4+IikgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpICE9IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlv
bi5uYW1lKCkgPT0gIm9wZXJhdG9yfiIpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmlu
aXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChm
dW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcj09IgorICAgICAgICAgICAgfHwg
ZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I8IgorICAgICAgICAgICAgfHwg
ZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I8PSIKKyAgICAgICAgICAgIHx8
IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPiIKKyAgICAgICAgICAgIHx8
IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPj0iKSB7CisgICAgICAgICAg
ICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rp
b25EZWZpbml0aW9uLnR5cGUoKSwgbV9pbnRyaW5zaWNzLmJvb2xUeXBlKCkpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdIikg
eworICAgICAgICAgICAgaWYgKCFjaGVja0dldHRlcihDaGVja0tpbmQ6OkluZGV4KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3Jb
XT0iKSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrU2V0dGVyKENoZWNrS2luZDo6SW5kZXgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVy
YXRvciZbXSIpIHsKKyAgICAgICAgICAgIGlmICghY2hlY2tBbmRlcihDaGVja0tpbmQ6OkluZGV4
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5zdGFy
dHNXaXRoKCJvcGVyYXRvci4iKSkgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlv
bi5uYW1lKCkuZW5kc1dpdGgoIj0iKSkgeworICAgICAgICAgICAgICAgIGlmICghY2hlY2tTZXR0
ZXIoQ2hlY2tLaW5kOjpEb3QpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghY2hlY2tHZXR0ZXIoQ2hl
Y2tLaW5kOjpEb3QpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
ZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvciYuIikpIHsKKyAg
ICAgICAgICAgIGlmICghY2hlY2tBbmRlcihDaGVja0tpbmQ6OkRvdCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGlmIChmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSkgeworICAgICAgICAgICAg
aWYgKCFjaGVja1NoYWRlclR5cGUoZnVuY3Rpb25EZWZpbml0aW9uKSkgeworICAgICAgICAgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKCFjaGVja1NlbWFudGljcyhmdW5jdGlvbkRlZmluaXRpb24pKSB7Cisg
ICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjaGVja09wZXJhdG9yT3ZlcmxvYWQo
ZnVuY3Rpb25EZWZpbml0aW9uKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5j
dGlvbkRlZmluaXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UG9p
bnRlclR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gRm9sbG93aW5nIHBvaW50ZXIg
dHlwZXMgY2FuIGNhdXNlIGluZmluaXRlIGxvb3BzIGJlY2F1c2Ugb2YgZGF0YSBzdHJ1Y3R1cmVz
CisgICAgICAgIC8vIGxpa2UgbGlua2VkIGxpc3RzLgorICAgIH0KKworICAgIHZvaWQgdmlzaXQo
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gRm9s
bG93aW5nIGFycmF5IHJlZmVyZW5jZSB0eXBlcyBjYW4gY2F1c2UgaW5maW5pdGUgbG9vcHMgYmVj
YXVzZSBvZiBkYXRhCisgICAgICAgIC8vIHN0cnVjdHVyZXMgbGlrZSBsaW5rZWQgbGlzdHMuCisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2Up
IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5
cGUoKSk7CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVSZWZlcmVuY2UpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBIYXNoU2V0PFN0cmluZz4gbV92ZXJ0ZXhFbnRyeVBvaW50czsK
KyAgICBIYXNoU2V0PFN0cmluZz4gbV9mcmFnbWVudEVudHJ5UG9pbnRzOworICAgIEhhc2hTZXQ8
U3RyaW5nPiBtX2NvbXB1dGVFbnRyeVBvaW50czsKKyAgICBjb25zdCBJbnRyaW5zaWNzJiBtX2lu
dHJpbnNpY3M7Cit9OworCitib29sIGNoZWNrKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgQ2hl
Y2tlciBjaGVja2VyKHByb2dyYW0uaW50cmluc2ljcygpKTsKKyAgICBjaGVja2VyLmNoZWNrRXJy
b3JBbmRWaXNpdChwcm9ncmFtKTsKKyAgICByZXR1cm4gIWNoZWNrZXIuZXJyb3IoKTsKK30KKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTENoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uZWQyNjhkNzM0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK2Jvb2wgY2hlY2so
UHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJ
dGVtcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEwOGM2NWZm
MmY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwCkBAIC0wLDAgKzEsMTc1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oIgorCisjaW5jbHVkZSAiV0hMU0xQb2lu
dGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2Ns
YXNzIEdhdGhlcmVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIEdhdGhlcmVyKGNv
bnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MsIEFTVDo6U2VtYW50aWMqIHNlbWFudGljID0gbnVs
bHB0cikKKyAgICAgICAgOiBtX2ludHJpbnNpY3MoaW50cmluc2ljcykKKyAgICAgICAgLCBtX2N1
cnJlbnRTZW1hbnRpYyhzZW1hbnRpYykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+R2F0
aGVyZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIG1f
Y3VycmVudFNlbWFudGljID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBWZWN0b3I8RW50cnlQb2lu
dEl0ZW0+JiYgdGFrZUVudHJ5UG9pbnRJdGVtcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RG
TW92ZShtX2VudHJ5UG9pbnRJdGVtcyk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkVu
dW1lcmF0aW9uRGVmaW5pdGlvbiYpCisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFu
dGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbSht
X3R5cGVSZWZlcmVuY2VzLmxhc3QoKS5nZXQoKSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRTZW1hbnRpYykgewor
ICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBpZiAobWF0Y2hlcyhuYXRpdmVUeXBlRGVjbGFyYXRpb24sIG1faW50cmluc2ljcy52
b2lkVHlwZSgpKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBv
aW50SXRlbShtX3R5cGVSZWZlcmVuY2VzLmxhc3QoKS5nZXQoKSwgKm1fY3VycmVudFNlbWFudGlj
KSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0
cnVjdHVyZURlZmluaXRpb24pCisgICAgeworICAgICAgICBpZiAobV9jdXJyZW50U2VtYW50aWMp
IHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZp
bml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVF
bGVtZW50LnNlbWFudGljKCkpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSAm
KnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKTsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pCisgICAgeworICAgICAgICBB
U1NFUlQodHlwZURlZmluaXRpb24udHlwZSgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
VW5uYW1lZFR5cGUoKnR5cGVEZWZpbml0aW9uLnR5cGUoKSk7CisgICAgfQorCisgICAgdm9pZCB2
aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCisgICAgeworICAgICAgICBB
U1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIG1fdHlwZVJlZmVy
ZW5jZXMuYXBwZW5kKHR5cGVSZWZlcmVuY2UpOworICAgICAgICBhdXRvIGRlcHRoID0gbV90eXBl
UmVmZXJlbmNlcy5zaXplKCk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdE5hbWVkVHlwZSgq
dHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZGVw
dGgsIG1fdHlwZVJlZmVyZW5jZXMuc2l6ZSgpID09IGRlcHRoKTsKKyAgICB9CisKKyAgICB2b2lk
IHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKQorICAgIHsKKyAgICAgICAgaWYg
KCFtX2N1cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQo
RW50cnlQb2ludEl0ZW0ocG9pbnRlclR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNl
VHlwZSkKKyAgICB7CisgICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
bV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5UmVmZXJlbmNlVHlw
ZSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFy
cmF5VHlwZSYgYXJyYXlUeXBlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRTZW1hbnRp
YykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0oYXJy
YXlUeXBlLCAqbV9jdXJyZW50U2VtYW50aWMpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghbV9jdXJyZW50U2VtYW50aWMpOworICAgICAgICBpZiAodmFyaWFibGVEZWNs
YXJhdGlvbi5zZW1hbnRpYygpKQorICAgICAgICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSAmKnZh
cmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
VW5uYW1lZFR5cGUodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBjb25zdCBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CisgICAgQVNUOjpTZW1hbnRp
YyogbV9jdXJyZW50U2VtYW50aWMgeyBudWxscHRyIH07CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpUeXBlUmVmZXJlbmNlPj4gbV90eXBlUmVmZXJlbmNlczsKKyAgICBW
ZWN0b3I8RW50cnlQb2ludEl0ZW0+IG1fZW50cnlQb2ludEl0ZW1zOworfTsKKworT3B0aW9uYWw8
RW50cnlQb2ludEl0ZW1zPiBnYXRoZXJFbnRyeVBvaW50SXRlbXMoY29uc3QgSW50cmluc2ljcyYg
aW50cmluc2ljcywgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikK
K3sKKyAgICBBU1NFUlQoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpOworICAg
IEdhdGhlcmVyIGlucHV0R2F0aGVyZXIoaW50cmluc2ljcyk7CisgICAgZm9yIChhdXRvJiBwYXJh
bWV0ZXIgOiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpKSB7CisgICAgICAgIGlucHV0
R2F0aGVyZXIucmVzZXQoKTsKKyAgICAgICAgaW5wdXRHYXRoZXJlci5jaGVja0Vycm9yQW5kVmlz
aXQocGFyYW1ldGVyKTsKKyAgICAgICAgaWYgKGlucHV0R2F0aGVyZXIuZXJyb3IoKSkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorICAgIEdhdGhlcmVyIG91dHB1dEdh
dGhlcmVyKGludHJpbnNpY3MsIGZ1bmN0aW9uRGVmaW5pdGlvbi5zZW1hbnRpYygpID8gJipmdW5j
dGlvbkRlZmluaXRpb24uc2VtYW50aWMoKSA6IG51bGxwdHIpOworICAgIG91dHB1dEdhdGhlcmVy
LmNoZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkp
OworICAgIGlmIChvdXRwdXRHYXRoZXJlci5lcnJvcigpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgcmV0dXJuIHt7IGlucHV0R2F0aGVyZXIudGFrZUVudHJ5UG9pbnRJdGVt
cygpLCBvdXRwdXRHYXRoZXJlci50YWtlRW50cnlQb2ludEl0ZW1zKCkgfX07Cit9CisKK30KKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFBhcmFtZXRlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpy
ZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQ
YXJhbWV0ZXIuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaAppbmRleCA5MjU4NmY4NjkxZi4uZTFlYjgyOTIx
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFBhcmFtZXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKQEAgLTI3LDEzICsyNyw5IEBACiAKICNpZiBF
TkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNM
UXVhbGlmaWVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNM
VHlwZS5oIgotI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsMzYgKzM3LDMwIEBAIG5hbWVzcGFj
ZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBQYXJhbWV0ZXIgOiBwdWJsaWMg
VmFsdWUgewotcHVibGljOgotICAgIFBhcmFtZXRlcihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFF1
YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5cGUs
IE9wdGlvbmFsPFN0cmluZz4mJiBuYW1lLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFu
dGljKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX3F1
YWxpZmllcnMoV1RGTW92ZShxdWFsaWZpZXJzKSkKLSAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0
eXBlKSkKLSAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBtX3NlbWFu
dGljKFdURk1vdmUoc2VtYW50aWMpKQotICAgIHsKLSAgICB9CitjbGFzcyBGdW5jdGlvbkRlZmlu
aXRpb247CiAKLSAgICB2aXJ0dWFsIH5QYXJhbWV0ZXIoKSA9IGRlZmF1bHQ7Cit9CiAKLSAgICBQ
YXJhbWV0ZXIoY29uc3QgUGFyYW1ldGVyJikgPSBkZWxldGU7Ci0gICAgUGFyYW1ldGVyKFBhcmFt
ZXRlciYmKSA9IGRlZmF1bHQ7CitjbGFzcyBJbnRyaW5zaWNzOworY2xhc3MgVW5uYW1lZFR5cGU7
CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQotICAgIE9wdGlvbmFsPEFT
VDo6U2VtYW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KK3N0cnVjdCBF
bnRyeVBvaW50SXRlbSB7CisgICAgRW50cnlQb2ludEl0ZW0oQVNUOjpVbm5hbWVkVHlwZSYgdW5u
YW1lZFR5cGUsIEFTVDo6U2VtYW50aWMmIHNlbWFudGljKQorICAgICAgICA6IHVubmFtZWRUeXBl
KHVubmFtZWRUeXBlKQorICAgICAgICAsIHNlbWFudGljKHNlbWFudGljKQorICAgIHsKKyAgICB9
CiAKLXByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFF1YWxpZmllcnMg
bV9xdWFsaWZpZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKLSAg
ICBPcHRpb25hbDxTdHJpbmc+IG1fbmFtZTsKLSAgICBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiBt
X3NlbWFudGljOworICAgIEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlOworICAgIEFTVDo6
U2VtYW50aWMmIHNlbWFudGljOwogfTsKIAotdHlwZWRlZiBWZWN0b3I8UGFyYW1ldGVyPiBQYXJh
bWV0ZXJzOworc3RydWN0IEVudHJ5UG9pbnRJdGVtcyB7CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJ
dGVtPiBpbnB1dHM7CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBvdXRwdXRzOworfTsKIAot
fQorT3B0aW9uYWw8RW50cnlQb2ludEl0ZW1zPiBnYXRoZXJFbnRyeVBvaW50SXRlbXMoY29uc3Qg
SW50cmluc2ljcyYsIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CiAKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmM0NWUwYTBmZTI5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xJbmZlclR5cGVzLmNwcApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5
cGVzLmgiCisKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworc3RhdGljIGJvb2wgbWF0Y2hlcyhjb25zdCBB
U1Q6OlR5cGUmIHVuaWZ5VGhpcywgY29uc3QgQVNUOjpUeXBlJiB1bmlmeU90aGVyKQoreworICAg
IGlmICgmdW5pZnlUaGlzID09ICZ1bmlmeU90aGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlUaGlzKSAmJiBpczxBU1Q6Ok5hbWVkVHlw
ZT4odW5pZnlPdGhlcikpIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGF1dG8mIG5h
bWVkVGhpcyA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeVRoaXMpOworICAgICAgICBh
dXRvJiBuYW1lZE90aGVyID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5T3RoZXIpOwor
ICAgICAgICBBU1NFUlQoIWlzPEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVGhpcykgJiYgIWlz
PEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkT3RoZXIpKTsKKyNlbmRpZgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeVRoaXMp
ICYmIGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5T3RoZXIpKSB7CisgICAgICAgIGF1dG8mIHVu
bmFtZWRUaGlzID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlUaGlzKTsKKyAgICAg
ICAgYXV0byYgdW5uYW1lZE90aGVyID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlP
dGhlcik7CisgICAgICAgIEFTU0VSVCghaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVGhp
cykgJiYgIWlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZE90aGVyKSk7CisgICAgICAgIGlm
IChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpQb2ludGVyVHlw
ZT4odW5uYW1lZE90aGVyKSkgeworICAgICAgICAgICAgYXV0byYgcG9pbnRlclRoaXMgPSBkb3du
Y2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRvJiBw
b2ludGVyT3RoZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkT3RoZXIpOwor
ICAgICAgICAgICAgaWYgKHBvaW50ZXJUaGlzLmFkZHJlc3NTcGFjZSgpICE9IHBvaW50ZXJPdGhl
ci5hZGRyZXNzU3BhY2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gbWF0Y2hlcyhwb2ludGVyVGhpcy5lbGVtZW50VHlwZSgpLCBwb2ludGVyT3Ro
ZXIuZWxlbWVudFR5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+
KHVubmFtZWRPdGhlcikpeworICAgICAgICAgICAgYXV0byYgYXJyYXlSZWZlcmVuY2VUaGlzID0g
ZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUaGlzKTsKKyAgICAgICAg
ICAgIGF1dG8mIGFycmF5UmVmZXJlbmNlT3RoZXIgPSBkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJl
bmNlVHlwZT4odW5uYW1lZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChhcnJheVJlZmVyZW5jZVRo
aXMuYWRkcmVzc1NwYWNlKCkgIT0gYXJyYXlSZWZlcmVuY2VPdGhlci5hZGRyZXNzU3BhY2UoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hl
cyhhcnJheVJlZmVyZW5jZVRoaXMuZWxlbWVudFR5cGUoKSwgYXJyYXlSZWZlcmVuY2VPdGhlci5l
bGVtZW50VHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+
KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZE90aGVyKSkgeworICAg
ICAgICAgICAgYXV0byYgYXJyYXlUaGlzID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFt
ZWRUaGlzKTsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5T3RoZXIgPSBkb3duY2FzdDxBU1Q6OkFy
cmF5VHlwZT4odW5uYW1lZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChhcnJheVRoaXMubnVtRWxl
bWVudHMoKSAhPSBhcnJheU90aGVyLm51bUVsZW1lbnRzKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlUaGlzLnR5cGUoKSwg
YXJyYXlPdGhlci50eXBlKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5h
bWVkVHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIG90aGVyKQorewor
ICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpLCBvdGhlci51bmlmeU5v
ZGUoKSk7Cit9CisKK2Jvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBl
LCBjb25zdCBBU1Q6Ok5hbWVkVHlwZSYgb3RoZXIpCit7CisgICAgcmV0dXJuIG1hdGNoZXMobmFt
ZWRUeXBlLnVuaWZ5Tm9kZSgpLCBvdGhlci51bmlmeU5vZGUoKSk7Cit9CisKK2Jvb2wgbWF0Y2hl
cyhjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgQVNUOjpOYW1lZFR5
cGUmIG90aGVyKQoreworICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgp
LCBvdGhlci51bmlmeU5vZGUoKSk7Cit9CisKK2Jvb2wgaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVu
dHMoQVNUOjpOYW1lZFR5cGUmIHBvc3NpYmxlVHlwZSwgQVNUOjpUeXBlQXJndW1lbnRzJiB0eXBl
QXJndW1lbnRzKQoreworICAgIGlmIChpczxBU1Q6OlR5cGVEZWZpbml0aW9uPihwb3NzaWJsZVR5
cGUpCisgICAgICAgIHx8IGlzPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4ocG9zc2libGVUeXBl
KQorICAgICAgICB8fCBpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4ocG9zc2libGVUeXBl
KSkgeworICAgICAgICByZXR1cm4gdHlwZUFyZ3VtZW50cy5pc0VtcHR5KCk7CisgICAgfQorCisg
ICAgQVNTRVJUKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihwb3NzaWJsZVR5cGUpKTsK
KyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbj4ocG9zc2libGVUeXBlKTsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0
aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgIT0gdHlwZUFyZ3VtZW50cy5zaXplKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQVNUOjpD
b25zdGFudEV4cHJlc3Npb24qIHR5cGVBcmd1bWVudEV4cHJlc3Npb24gPSBudWxscHRyOworICAg
ICAgICBBU1Q6OlR5cGVSZWZlcmVuY2UqIHR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UgPSBudWxs
cHRyOworICAgICAgICBBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiogbmF0aXZlVHlwZUFyZ3VtZW50
RXhwcmVzc2lvbiA9IG51bGxwdHI7CisgICAgICAgIEFTVDo6VHlwZVJlZmVyZW5jZSogbmF0aXZl
VHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSA9IG51bGxwdHI7CisKKyAgICAgICAgYXV0byBhc3Np
Z24gPSBbJl0oQVNUOjpUeXBlQXJndW1lbnQmIHR5cGVBcmd1bWVudCwgQVNUOjpDb25zdGFudEV4
cHJlc3Npb24qJiBleHByZXNzaW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2UqJiB0eXBlUmVmZXJlbmNl
KSB7CisgICAgICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6Q29u
c3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgICAgICBl
eHByZXNzaW9uID0gJmNvbnN0YW50RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIH0sIFsmXShzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVmZXJlbmNlPiYgdGhlVHlwZVJlZmVyZW5jZSkgeworICAg
ICAgICAgICAgICAgIHR5cGVSZWZlcmVuY2UgPSB0aGVUeXBlUmVmZXJlbmNlLmdldCgpOworICAg
ICAgICAgICAgfSksIHR5cGVBcmd1bWVudCk7CisgICAgICAgIH07CisKKyAgICAgICAgYXNzaWdu
KHR5cGVBcmd1bWVudHNbaV0sIHR5cGVBcmd1bWVudEV4cHJlc3Npb24sIHR5cGVBcmd1bWVudFR5
cGVSZWZlcmVuY2UpOworICAgICAgICBhc3NpZ24obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVB
cmd1bWVudHMoKVtpXSwgbmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVzc2lvbiwgbmF0aXZlVHlwZUFy
Z3VtZW50VHlwZVJlZmVyZW5jZSk7CisKKyAgICAgICAgaWYgKHR5cGVBcmd1bWVudEV4cHJlc3Np
b24gJiYgbmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVzc2lvbikgeworICAgICAgICAgICAgaWYgKCF0
eXBlQXJndW1lbnRFeHByZXNzaW9uLT5tYXRjaGVzKCpuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNz
aW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAo
dHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSAmJiBuYXRpdmVUeXBlQXJndW1lbnRUeXBlUmVmZXJl
bmNlKSB7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMoKnR5cGVBcmd1bWVudFR5cGVSZWZlcmVu
Y2UsICpuYXRpdmVUeXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTEluZmVyVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uNWJjM2NhM2Y5ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaApAQCAtMCwwICsxLDUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVk
ZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgVW5uYW1lZFR5cGU7CitjbGFz
cyBOYW1lZFR5cGU7CisKK30KKworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUm
LCBjb25zdCBBU1Q6OlVubmFtZWRUeXBlJik7Citib29sIG1hdGNoZXMoY29uc3QgQVNUOjpOYW1l
ZFR5cGUmLCBjb25zdCBBU1Q6Ok5hbWVkVHlwZSYpOworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6
VW5uYW1lZFR5cGUmLCBjb25zdCBBU1Q6Ok5hbWVkVHlwZSYpOworYm9vbCBpbmZlclR5cGVzRm9y
VHlwZUFyZ3VtZW50cyhBU1Q6Ok5hbWVkVHlwZSYgcG9zc2libGVUeXBlLCBBU1Q6OlR5cGVBcmd1
bWVudHMmIHR5cGVBcmd1bWVudHMpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDBjNzFmOWUyYjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTElu
dHJpbnNpY3MuY3BwCkBAIC0wLDAgKzEsMzE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3Mu
aCIKKworI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNs
dWRlIDxhbGdvcml0aG0+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNM
IHsKKworSW50cmluc2ljczo6SW50cmluc2ljcygpCisgICAgOiBtX3RleHR1cmVUeXBlTmFtZXMg
eyBTdHJpbmcoIlRleHR1cmUxRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAg
ICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUxRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLAorICAgICAgICAgICAgU3RyaW5nKCJUZXh0dXJlMURBcnJheSIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUxREFycmF5Iiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1
cmUyRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5n
KCJSV1RleHR1cmUyRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAg
ICAgU3RyaW5nKCJUZXh0dXJlMkRBcnJheSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LAorICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUyREFycmF5IiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUzRCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUzRCIs
IFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJUZXh0
dXJlQ3ViZSIsICBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSB9CisgICAgLCBtX3RleHR1
cmVJbm5lclR5cGVOYW1lcyB7IFN0cmluZygidWNoYXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygidXNob3J0IiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoInVpbnQiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiY2hhciIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJzaG9ydCIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJpbnQiLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiaGFsZiIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJmbG9hdCIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0KKyAgICAsIG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBl
cyB7IFN0cmluZygiaGFsZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAg
ICAgICAgU3RyaW5nKCJmbG9hdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0KK3sK
KyAgICBBU1NFUlQobV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKSA9PSAxMSk7IC8vIGZ1bGxUZXh0
dXJlcyBoYXJkY29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorICAgIEFTU0VSVChtX3Rl
eHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCkgPT0gOCk7IC8vIGZ1bGxUZXh0dXJlcyBoYXJkY29k
ZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorICAgIEFTU0VSVChtX2RlcHRoVGV4dHVyZUlu
bmVyVHlwZXMuc2l6ZSgpID09IDIpOyAvLyB0ZXh0dXJlRGVwdGgyRCAmIGZyaWVuZHMgaGFyZGNv
ZGVzIHRoZSBsZW5ndGggb2YgdGhpcyBhcnJheS4KK30KKwordm9pZCBJbnRyaW5zaWNzOjphZGQo
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJikKK3sKKyAgICAvLyBGSVhNRTogUG9wdWxh
dGUgdGhpcy4KK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRQcmltaXRpdmUoQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobmF0aXZl
VHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgIT0gMCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInZv
aWQiKQorICAgICAgICBtX3ZvaWRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBl
bHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJib29sIikKKyAgICAgICAg
bV9ib29sVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZl
VHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidWNoYXIiKQorICAgICAgICBtX3VjaGFyVHlwZSA9
ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0
aW9uLm5hbWUoKSA9PSAidXNob3J0IikKKyAgICAgICAgbV91c2hvcnRUeXBlID0gJm5hdGl2ZVR5
cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJ1aW50IikKKyAgICAgICAgbV91aW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247
CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiY2hhciIpCisg
ICAgICAgIG1fY2hhclR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYg
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInNob3J0IikKKyAgICAgICAgbV9zaG9y
dFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5uYW1lKCkgPT0gImludCIpCisgICAgICAgIG1faW50VHlwZSA9ICZuYXRpdmVU
eXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUo
KSA9PSAiaGFsZiIpCisgICAgICAgIG1faGFsZlR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9u
OworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImZsb2F0IikK
KyAgICAgICAgbV9mbG9hdFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2Ug
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21pY19pbnQiKQorICAgICAg
ICBtX2F0b21pY0ludFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYg
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21pY191aW50IikKKyAgICAgICAg
bV9hdG9taWNVaW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAic2FtcGxlciIpCisgICAgICAgIG1fc2Ft
cGxlclR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50cmluc2lj
czo6YWRkVmVjdG9yKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgIT0gInZlY3Rv
ciIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFy
YXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAyKTsKKyAgICBBU1NFUlQoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZl
VHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIEFTU0VSVChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFy
YXRpb24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlUG9pbnRlciA9
IFdURjo6Z2V0PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBl
RGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBhdXRvJiBsZW5ndGhFeHByZXNz
aW9uID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi50eXBlQXJndW1lbnRzKClbMV0pOworICAgIEFTU0VSVChpbm5lclR5cGVQb2ludGVyKTsK
KyAgICBhdXRvJiBpbm5lclR5cGUgPSAqaW5uZXJUeXBlUG9pbnRlcjsKKyAgICBBU1NFUlQoaW5u
ZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMCk7CisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qKiBhcnJheTsKKyAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiYm9vbCIp
CisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JCb29sOworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5u
YW1lKCkgPT0gInVjaGFyIikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvclVjaGFyOworICAgIGVs
c2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gInVzaG9ydCIpCisgICAgICAgIGFycmF5ID0gbV92
ZWN0b3JVc2hvcnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAidWludCIpCisg
ICAgICAgIGFycmF5ID0gbV92ZWN0b3JVaW50OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1l
KCkgPT0gImNoYXIiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yQ2hhcjsKKyAgICBlbHNlIGlm
IChpbm5lclR5cGUubmFtZSgpID09ICJzaG9ydCIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JT
aG9ydDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJpbnQiKQorICAgICAgICBh
cnJheSA9IG1fdmVjdG9ySW50OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImhh
bGYiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9ySGFsZjsKKyAgICBlbHNlIGlmIChpbm5lclR5
cGUubmFtZSgpID09ICJmbG9hdCIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JGbG9hdDsKKyAg
ICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGludCBsZW5ndGggPSBs
ZW5ndGhFeHByZXNzaW9uLmludGVnZXJMaXRlcmFsKCkudmFsdWUoKTsKKyAgICBBU1NFUlQobGVu
Z3RoID49IDIgJiYgbGVuZ3RoIDw9IDQpOworICAgIGFycmF5W2xlbmd0aCAtIDJdID0gJm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5zaWNz
OjphZGRNYXRyaXgoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbikKK3sKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSAhPSAibWF0cml4
IikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDMpOworICAgIEFTU0VSVChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVU
eXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgQVNTRVJUKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi50eXBlQXJndW1lbnRzKClbMV0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVB
cmd1bWVudHMoKVsyXSkpOworICAgIGF1dG8mIGlubmVyVHlwZVBvaW50ZXIgPSBXVEY6OmdldDxz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9u
LnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgYXV0byYgcm93RXhwcmVzc2lvbiA9IFdURjo6Z2V0
PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3Vt
ZW50cygpWzFdKTsKKyAgICBhdXRvJiBjb2x1bW5FeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNUOjpD
b25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClb
Ml0pOworICAgIEFTU0VSVChpbm5lclR5cGVQb2ludGVyKTsKKyAgICBhdXRvJiBpbm5lclR5cGUg
PSAqaW5uZXJUeXBlUG9pbnRlcjsKKyAgICBBU1NFUlQoaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMo
KS5zaXplKCkgPT0gMCk7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qICgqYXJyYXkp
WzNdOworICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJoYWxmIikKKyAgICAgICAgYXJyYXkg
PSBtX21hdHJpeEhhbGY7CisgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImZsb2F0IikKKyAg
ICAgICAgYXJyYXkgPSBtX21hdHJpeEZsb2F0OworICAgIGludCByb3cgPSByb3dFeHByZXNzaW9u
LmludGVnZXJMaXRlcmFsKCkudmFsdWUoKTsKKyAgICBBU1NFUlQocm93ID49IDIgJiYgcm93IDw9
IDQpOworICAgIGludCBjb2x1bW4gPSBjb2x1bW5FeHByZXNzaW9uLmludGVnZXJMaXRlcmFsKCku
dmFsdWUoKTsKKyAgICBBU1NFUlQoY29sdW1uID49IDIgJiYgY29sdW1uIDw9IDQpOworICAgIGFy
cmF5W3JvdyAtIDJdW2NvbHVtbiAtIDJdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRGdWxsVGV4dHVyZShBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uLCBBU1Q6OlR5cGVSZWZl
cmVuY2UmIGlubmVyVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB0ZXh0dXJlVHlwZUluZGV4ID0gbV90
ZXh0dXJlVHlwZU5hbWVzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90
ZXh0dXJlVHlwZU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVj
bGFyYXRpb24ubmFtZSgpID09IG1fdGV4dHVyZVR5cGVOYW1lc1tpXSkKKyAgICAgICAgICAgIHRl
eHR1cmVUeXBlSW5kZXggPSBpOworICAgIH0KKyAgICBpZiAodGV4dHVyZVR5cGVJbmRleCA9PSBt
X3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1
bnNpZ25lZCBpbm5lclR5cGVJbmRleCA9IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKTsK
KyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChpbm5l
clR5cGUubmFtZSgpLnN0YXJ0c1dpdGgobV90ZXh0dXJlSW5uZXJUeXBlTmFtZXNbaV0pKSB7Cisg
ICAgICAgICAgICB0ZXh0dXJlVHlwZUluZGV4ID0gaTsKKyAgICAgICAgICAgIGlmIChpbm5lclR5
cGUubmFtZSgpID09IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzW2ldKQorICAgICAgICAgICAgICAg
IHZlY3Rvckxlbmd0aCA9IDE7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSA9PSBtX3RleHR1cmVJbm5lclR5cGVOYW1l
c1tpXS5sZW5ndGgoKSArIDEpOworICAgICAgICAgICAgICAgIEFTU0VSVChpbm5lclR5cGUubmFt
ZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSA9PSAnMicKKyAgICAgICAgICAgICAg
ICAgICAgfHwgaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0g
PT0gJzMnCisgICAgICAgICAgICAgICAgICAgIHx8IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBl
Lm5hbWUoKS5sZW5ndGgoKSAtIDFdID09ICc0Jyk7CisgICAgICAgICAgICAgICAgdmVjdG9yTGVu
Z3RoID0gaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0gLSAn
MCc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGlubmVyVHlw
ZUluZGV4ICE9IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKSk7CisgICAgbV9mdWxsVGV4
dHVyZXNbdGV4dHVyZVR5cGVJbmRleF1baW5uZXJUeXBlSW5kZXhdW3ZlY3Rvckxlbmd0aCAtIDFd
ID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJ
bnRyaW5zaWNzOjphZGREZXB0aFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiwgQVNUOjpUeXBlUmVmZXJlbmNlJiBpbm5lclR5cGUpCit7Cisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qKiB0ZXh0dXJlOworICAgIGlmIChuYXRpdmVU
eXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0dXJlRGVwdGgyRCIpCisgICAgICAgIHRleHR1
cmUgPSBtX3RleHR1cmVEZXB0aDJEOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5uYW1lKCkgPT0gIlJXVGV4dHVyZURlcHRoMkQiKQorICAgICAgICB0ZXh0dXJlID0gbV9yd1Rl
eHR1cmVEZXB0aDJEOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gIlRleHR1cmVEZXB0aDJEQXJyYXkiKQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlRGVw
dGgyREFycmF5OworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0g
IlJXVGV4dHVyZURlcHRoMkRBcnJheSIpCisgICAgICAgIHRleHR1cmUgPSBtX3J3VGV4dHVyZURl
cHRoMkRBcnJheTsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09
ICJUZXh0dXJlRGVwdGhDdWJlIikKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZURlcHRoQ3Vi
ZTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHVuc2lnbmVk
IGlubmVyVHlwZUluZGV4ID0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09IG1fZGVwdGhUZXh0dXJlSW5u
ZXJUeXBlc1tpXSkKKyAgICAgICAgICAgIGlubmVyVHlwZUluZGV4ID0gaTsKKyAgICB9CisgICAg
QVNTRVJUKGlubmVyVHlwZUluZGV4ICE9IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcy5zaXplKCkp
OworICAgIHRleHR1cmVbaW5uZXJUeXBlSW5kZXhdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJbnRyaW5zaWNzOjphZGRUZXh0dXJlKEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgQVNT
RVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDEpOwor
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5
cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7
CisgICAgYXV0byYgaW5uZXJUeXBlUG9pbnRlciA9IFdURjo6Z2V0PHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygp
WzBdKTsKKyAgICBBU1NFUlQoaW5uZXJUeXBlUG9pbnRlcik7CisgICAgYXV0byYgaW5uZXJUeXBl
ID0gKmlubmVyVHlwZVBvaW50ZXI7CisgICAgQVNTRVJUKGlubmVyVHlwZS50eXBlQXJndW1lbnRz
KCkuc2l6ZSgpID09IDApOworICAgIGlmIChhZGRGdWxsVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFy
YXRpb24sIGlubmVyVHlwZSkpIHsKKyAgICAgICAgbV90ZXh0dXJlU2V0LmFkZCgmbmF0aXZlVHlw
ZURlY2xhcmF0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYWRkRGVwdGhU
ZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgaW5uZXJUeXBlKSkKKyAgICAgICAgbV90ZXh0
dXJlU2V0LmFkZCgmbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKK30KKwordm9pZCBJbnRyaW5zaWNz
OjphZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikK
K3sKKyAgICBpZiAoYWRkUHJpbWl0aXZlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoYWRkVmVjdG9yKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoYWRkTWF0cml4KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisg
ICAgICAgIHJldHVybjsKKyAgICBhZGRUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cit9
CisKK2Jvb2wgSW50cmluc2ljczo6aXNUZXh0dXJlKGNvbnN0IEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pIGNvbnN0Cit7CisgICAgLy8gMzYyIGNvbWJp
bmF0aW9ucy4gTGV0J3Mgbm90IHBlcmZvcm0gYSBsaW5lYXIgc2Nhbi4KKyAgICByZXR1cm4gbV90
ZXh0dXJlU2V0LmNvbnRhaW5zKCZuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworfQorCitib29sIElu
dHJpbnNpY3M6OmlzTnVtYmVyKGNvbnN0IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRp
dmVUeXBlRGVjbGFyYXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuICZuYXRpdmVUeXBlRGVjbGFy
YXRpb24gPT0gbV91Y2hhclR5cGUKKyAgICAgICAgfHwgJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9
PSBtX3VzaG9ydFR5cGUKKyAgICAgICAgfHwgJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9PSBtX3Vp
bnRUeXBlCisgICAgICAgIHx8ICZuYXRpdmVUeXBlRGVjbGFyYXRpb24gPT0gbV9jaGFyVHlwZQor
ICAgICAgICB8fCAmbmF0aXZlVHlwZURlY2xhcmF0aW9uID09IG1fc2hvcnRUeXBlCisgICAgICAg
IHx8ICZuYXRpdmVUeXBlRGVjbGFyYXRpb24gPT0gbV9pbnRUeXBlCisgICAgICAgIHx8ICZuYXRp
dmVUeXBlRGVjbGFyYXRpb24gPT0gbV9oYWxmVHlwZQorICAgICAgICB8fCAmbmF0aXZlVHlwZURl
Y2xhcmF0aW9uID09IG1fZmxvYXRUeXBlOworfQorCitib29sIEludHJpbnNpY3M6OmlzVmVjdG9y
KGNvbnN0IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24p
IGNvbnN0Cit7CisgICAgYXV0byBzZWFyY2ggPSBbJl0oQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24qIGNvbnN0ICogYXJyYXksIHNpemVfdCBsZW5ndGgpIC0+IGJvb2wgeworICAgICAgICBBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogY29uc3QgKiBiZWdpbiA9ICYoYXJyYXlbMF0pOworICAg
ICAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogY29uc3QgKiBlbmQgPSAoJihhcnJheVsw
XSkpICsgbGVuZ3RoOworICAgICAgICByZXR1cm4gc3RkOjpmaW5kKGJlZ2luLCBlbmQsICZuYXRp
dmVUeXBlRGVjbGFyYXRpb24pID09IGVuZDsKKyAgICB9OworICAgIHJldHVybiBzZWFyY2gobV92
ZWN0b3JCb29sLCBXVEZfQVJSQVlfTEVOR1RIKG1fdmVjdG9yQm9vbCkpCisgICAgICAgIHx8IHNl
YXJjaChtX3ZlY3RvclVjaGFyLCBXVEZfQVJSQVlfTEVOR1RIKG1fdmVjdG9yVWNoYXIpKQorICAg
ICAgICB8fCBzZWFyY2gobV92ZWN0b3JVc2hvcnQsIFdURl9BUlJBWV9MRU5HVEgobV92ZWN0b3JV
c2hvcnQpKQorICAgICAgICB8fCBzZWFyY2gobV92ZWN0b3JVaW50LCBXVEZfQVJSQVlfTEVOR1RI
KG1fdmVjdG9yVWludCkpCisgICAgICAgIHx8IHNlYXJjaChtX3ZlY3RvckNoYXIsIFdURl9BUlJB
WV9MRU5HVEgobV92ZWN0b3JDaGFyKSkKKyAgICAgICAgfHwgc2VhcmNoKG1fdmVjdG9yU2hvcnQs
IFdURl9BUlJBWV9MRU5HVEgobV92ZWN0b3JTaG9ydCkpCisgICAgICAgIHx8IHNlYXJjaChtX3Zl
Y3RvckludCwgV1RGX0FSUkFZX0xFTkdUSChtX3ZlY3RvckludCkpCisgICAgICAgIHx8IHNlYXJj
aChtX3ZlY3RvckhhbGYsIFdURl9BUlJBWV9MRU5HVEgobV92ZWN0b3JIYWxmKSkKKyAgICAgICAg
fHwgc2VhcmNoKG1fdmVjdG9yRmxvYXQsIFdURl9BUlJBWV9MRU5HVEgobV92ZWN0b3JGbG9hdCkp
OworfQorCitib29sIEludHJpbnNpY3M6OmlzTWF0cml4KGNvbnN0IEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pIGNvbnN0Cit7CisgICAgYXV0byBzZWFy
Y2ggPSBbJl0oQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIGNvbnN0ICgqYXJyYXkpWzNdLCBz
aXplX3QgbGVuZ3RoKSAtPiBib29sIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIGNv
bnN0ICogYmVnaW4gPSAmKGFycmF5W2ldWzBdKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uKiBjb25zdCAqIGVuZCA9ICgmKGFycmF5W2ldWzBdKSkgKyAzOworICAgICAg
ICAgICAgaWYgKHN0ZDo6ZmluZChiZWdpbiwgZW5kLCAmbmF0aXZlVHlwZURlY2xhcmF0aW9uKSA9
PSBlbmQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH07CisgICAgcmV0dXJuIHNlYXJjaChtX21hdHJpeEhhbGYsIFdU
Rl9BUlJBWV9MRU5HVEgobV9tYXRyaXhIYWxmKSkKKyAgICAgICAgfHwgc2VhcmNoKG1fbWF0cml4
RmxvYXQsIFdURl9BUlJBWV9MRU5HVEgobV9tYXRyaXhGbG9hdCkpOworfQorCit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTEludHJpbnNpY3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMSW50cmluc2ljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41
NThiMTk0ZDBlZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMSW50cmluc2ljcy5oCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVj
bGFyYXRpb24uaCIKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBJbnRyaW5zaWNzIHsKK3B1YmxpYzoKKyAgICBJ
bnRyaW5zaWNzKCk7CisKKyAgICB2b2lkIGFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24mKTsKKyAgICB2b2lkIGFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworCisgICAg
Ym9vbCBpc1RleHR1cmUoY29uc3QgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKSBjb25zdDsK
KyAgICBib29sIGlzTnVtYmVyKGNvbnN0IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJikgY29u
c3Q7CisgICAgYm9vbCBpc1ZlY3Rvcihjb25zdCBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYp
IGNvbnN0OworICAgIGJvb2wgaXNNYXRyaXgoY29uc3QgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mKSBjb25zdDsKKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiB2b2lkVHlwZSgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV92b2lkVHlwZSk7CisgICAgICAgIHJldHVy
biAqbV92b2lkVHlwZTsKKyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYg
Ym9vbFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYm9vbFR5cGUpOworICAg
ICAgICByZXR1cm4gKm1fYm9vbFR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24mIHVpbnRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3VpbnRU
eXBlKTsKKyAgICAgICAgcmV0dXJuICptX3VpbnRUeXBlOworICAgIH0KKworICAgIEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uJiBzYW1wbGVyVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQobV9zYW1wbGVyVHlwZSk7CisgICAgICAgIHJldHVybiAqbV9zYW1wbGVyVHlwZTsKKyAg
ICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgZmxvYXRUeXBlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2Zsb2F0VHlwZSk7CisgICAgICAgIHJldHVybiAqbV9m
bG9hdFR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIGZsb2F0
M1R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdmVjdG9yRmxvYXRbMV0pOwor
ICAgICAgICByZXR1cm4gKm1fdmVjdG9yRmxvYXRbMV07CisgICAgfQorCisgICAgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mIGZsb2F0NFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fdmVjdG9yRmxvYXRbMl0pOworICAgICAgICByZXR1cm4gKm1fdmVjdG9yRmxvYXRbMl07
CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgYWRkUHJpbWl0aXZlKEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGRWZWN0b3IoQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24mKTsKKyAgICBib29sIGFkZE1hdHJpeChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYp
OworICAgIGJvb2wgYWRkRnVsbFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mLCBB
U1Q6OlR5cGVSZWZlcmVuY2UmKTsKKyAgICBib29sIGFkZERlcHRoVGV4dHVyZShBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYsIEFTVDo6VHlwZVJlZmVyZW5jZSYpOworICAgIHZvaWQgYWRkVGV4
dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworCisgICAgSGFzaFNldDxjb25zdCBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbio+IG1fdGV4dHVyZVNldDsKKworICAgIEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZvaWRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiBtX2Jvb2xUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3Vj
aGFyVHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV91c2hvcnRUeXBlOwor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3VpbnRUeXBlOworICAgIEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uKiBtX2NoYXJUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiBtX3Nob3J0VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9p
bnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2hhbGZUeXBlOworICAg
IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2Zsb2F0VHlwZTsKKyAgICBBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiogbV9hdG9taWNJbnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uKiBtX2F0b21pY1VpbnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uKiBtX3NhbXBsZXJUeXBlOworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1f
dmVjdG9yQm9vbFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JV
Y2hhclszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JVc2hvcnRb
M107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yVWludFszXTsKKyAg
ICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JDaGFyWzNdOworICAgIEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvclNob3J0WzNdOworICAgIEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckludFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiogbV92ZWN0b3JIYWxmWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
KiBtX3ZlY3RvckZsb2F0WzNdOworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1f
bWF0cml4SGFsZlszXVszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9tYXRy
aXhGbG9hdFszXVszXTsKKworICAgIFZlY3RvcjxTdHJpbmc+IG1fdGV4dHVyZVR5cGVOYW1lczsK
KyAgICBWZWN0b3I8U3RyaW5nPiBtX3RleHR1cmVJbm5lclR5cGVOYW1lczsKKworICAgIEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2Z1bGxUZXh0dXJlc1sxMV1bOF1bNF07CisKKyAgICBW
ZWN0b3I8U3RyaW5nPiBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXM7CisgICAgQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24qIG1fdGV4dHVyZURlcHRoMkRbMl07CisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qIG1fcndUZXh0dXJlRGVwdGgyRFsyXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV90ZXh0dXJlRGVwdGgyREFycmF5WzJdOworICAgIEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uKiBtX3J3VGV4dHVyZURlcHRoMkRBcnJheVsyXTsKKyAgICBBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiogbV90ZXh0dXJlRGVwdGhDdWJlWzJdOworfTsKKworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xOYW1lQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTE5hbWVDb250ZXh0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNGU4NmJiOTgwNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcApAQCAtMCwwICsxLDE2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlv
bkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2lu
Y2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNM
TmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNM
VmFyaWFibGVEZWNsYXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK05hbWVDb250ZXh0OjpOYW1lQ29udGV4dChOYW1lQ29udGV4dCogcGFyZW50
KQorICAgIDogbV9wYXJlbnQocGFyZW50KQoreworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQo
QVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pCit7CisgICAgaWYgKGV4aXN0cyh0
eXBlRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byBy
ZXN1bHQgPSBtX3R5cGVzLmFkZCh0eXBlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgaWYgKCFyZXN1bHQu
aXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuYXBwZW5kKHR5cGVEZWZpbml0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVm
aW5pdGlvbikKK3sKKyAgICBpZiAoZXhpc3RzKHN0cnVjdHVyZURlZmluaXRpb24ubmFtZSgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQoc3Ry
dWN0dXJlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHN0cnVj
dHVyZURlZmluaXRpb24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0
OjphZGQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikK
K3sKKyAgICBpZiAoZXhpc3RzKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChlbnVtZXJhdGlv
bkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5h
bWVkVHlwZT4sIDE+KCkpOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChlbnVtZXJhdGlv
bkRlZmluaXRpb24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0Ojph
ZGQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBp
ZiAobV90eXBlcy5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1fdHlwZXMuZW5k
KCkKKyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgp
KSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8g
cmVzdWx0ID0gbV9mdW5jdGlvbnMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkp
OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbik7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAg
aWYgKG1fdHlwZXMuZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV90
eXBlcy5lbmQoKQorICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV9mdW5jdGlvbnMuYWRkKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBl
RGVjbGFyYXRpb24pCit7CisgICAgaWYgKG1fZnVuY3Rpb25zLmZpbmQobmF0aXZlVHlwZURlY2xh
cmF0aW9uLm5hbWUoKSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkKKyAgICAgICAgfHwgbV92YXJpYWJs
ZXMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFw
cGVuZChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29s
IE5hbWVDb250ZXh0OjphZGQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xh
cmF0aW9uKQoreworICAgIGlmIChleGlzdHModmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lKCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3ZhcmlhYmxlcy5hZGQo
U3RyaW5nKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSwgJnZhcmlhYmxlRGVjbGFyYXRpb24p
OworICAgIHJldHVybiByZXN1bHQuaXNOZXdFbnRyeTsKK30KKworVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiogTmFtZUNvbnRleHQ6OmdldFR5cGVzKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV90eXBlcy5maW5kKG5h
bWUpOworICAgIGlmIChpdGVyYXRvciA9PSBtX3R5cGVzLmVuZCgpKSB7CisgICAgICAgIGlmICht
X3BhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0VHlwZXMobmFtZSk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1
ZTsKK30KKworVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4qIE5hbWVDb250ZXh0OjpnZXRGdW5jdGlvbnMoY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1bmN0aW9ucy5maW5kKG5hbWUpOworICAgIGlm
IChpdGVyYXRvciA9PSBtX2Z1bmN0aW9ucy5lbmQoKSkgeworICAgICAgICBpZiAobV9wYXJlbnQp
CisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldEZ1bmN0aW9ucyhuYW1lKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOwor
fQorCitBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIE5hbWVDb250ZXh0OjpnZXRWYXJpYWJsZShj
b25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fdmFyaWFibGVzLmZp
bmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fdmFyaWFibGVzLmVuZCgpKSB7CisgICAg
ICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0VmFyaWFi
bGUobmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gaXRl
cmF0b3ItPnZhbHVlOworfQorCitib29sIE5hbWVDb250ZXh0OjpleGlzdHMoU3RyaW5nJiBuYW1l
KQoreworICAgIHJldHVybiBtX3R5cGVzLmZpbmQobmFtZSkgIT0gbV90eXBlcy5lbmQoKQorICAg
ICAgICB8fCBtX2Z1bmN0aW9ucy5maW5kKG5hbWUpICE9IG1fZnVuY3Rpb25zLmVuZCgpCisgICAg
ICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmFtZSkgIT0gbV92YXJpYWJsZXMuZW5kKCk7Cit9CisK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uZDNkZjgwMDE0YWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmgKQEAgLTAsMCArMSw4MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2Ns
YXNzIE5hbWVkVHlwZTsKK2NsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBUeXBlRGVm
aW5pdGlvbjsKK2NsYXNzIFN0cnVjdHVyZURlZmluaXRpb247CitjbGFzcyBFbnVtZXJhdGlvbkRl
ZmluaXRpb247CitjbGFzcyBGdW5jdGlvbkRlZmluaXRpb247CitjbGFzcyBOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uOworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uOworY2xhc3MgVmFyaWFi
bGVEZWNsYXJhdGlvbjsKKworfQorCitjbGFzcyBOYW1lQ29udGV4dCB7CitwdWJsaWM6CisgICAg
TmFtZUNvbnRleHQoTmFtZUNvbnRleHQqIHBhcmVudCA9IG51bGxwdHIpOworCisgICAgYm9vbCBh
ZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJik7Cisg
ICAgYm9vbCBhZGQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYp
OworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAx
PiogZ2V0VHlwZXMoY29uc3QgU3RyaW5nJik7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4qIGdldEZ1bmN0aW9ucyhjb25zdCBT
dHJpbmcmKTsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qIGdldFZhcmlhYmxlKGNvbnN0
IFN0cmluZyYpOworCitwcml2YXRlOgorICAgIGJvb2wgZXhpc3RzKFN0cmluZyYpOworCisgICAg
SGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRU
eXBlPiwgMT4+IG1fdHlwZXM7CisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+PiBtX2Z1bmN0aW9uczsK
KyAgICBIYXNoTWFwPFN0cmluZywgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKj4gbV92YXJpYWJs
ZXM7CisgICAgTmFtZUNvbnRleHQqIG1fcGFyZW50OworfTsKKworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1l
UmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xO
YW1lUmVzb2x2ZXIuY3BwCmluZGV4IDc4MGQ1YzU0MjVhLi5kNTJjMmExY2RhMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJl
c29sdmVyLmNwcApAQCAtMjgsMTkgKzI4LDI0NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCiAKLSNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIK
KyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldI
TFNMTmFtZUNvbnRleHQuaCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCIK
KyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9u
RGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJX
SExTTFdoaWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRG9XaGlsZUxvb3AuaCIKKyNpbmNsdWRl
ICJXSExTTEZvckxvb3AuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIK
KyNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXR1
cm4uaCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIgorI2luY2x1
ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZp
bml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMUHJvZ3JhbS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7
CiAKLWNsYXNzIE5hbWVSZXNvbHZlciA6IHB1YmxpYyBWaXNpdG9yIHsKLSAgICB+TmFtZVJlc29s
dmVyKCkgPSBkZWZhdWx0OwotfTsKK05hbWVSZXNvbHZlcjo6TmFtZVJlc29sdmVyKE5hbWVDb250
ZXh0JiBuYW1lQ29udGV4dCkKKyAgICA6IG1fbmFtZUNvbnRleHQobmFtZUNvbnRleHQpCit7Cit9
CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZl
cmVuY2UpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVSZWZlcmVuY2UpOworICAgIGlm
ICh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBh
dXRvKiBjYW5kaWRhdGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyh0eXBlUmVmZXJlbmNlLm5h
bWUoKSk7CisgICAgaWYgKGNhbmRpZGF0ZXMgPT0gbnVsbHB0cikgeworICAgICAgICBzZXRFcnJv
cigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc29s
dmVUeXBlT3ZlcmxvYWRJbXBsKCpjYW5kaWRhdGVzLCB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVu
dHMoKSkpCisgICAgICAgIHR5cGVSZWZlcmVuY2Uuc2V0UmVzb2x2ZWRUeXBlKCpyZXN1bHQpOwor
ICAgIGVsc2UgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQor
fQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1
bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBOYW1lQ29udGV4dCBuZXdOYW1lQ29udGV4dCgmbV9u
YW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyIG5ld05hbWVSZXNvbHZlcihuZXdOYW1lQ29u
dGV4dCk7CisgICAgdmlzaXRVbm5hbWVkVHlwZShmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsK
KyAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJz
KCkpIHsKKyAgICAgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChwYXJhbWV0
ZXIpOworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBuZXdOYW1lQ29udGV4dC5hZGQocGFyYW1ldGVy
KTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIG5ld05hbWVSZXNvbHZlci5j
aGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOworfQorCit2b2lk
IE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpCbG9jayYgYmxvY2spCit7CisgICAgTmFtZUNvbnRl
eHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29u
dGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KGJsb2NrKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6
OnZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50KQoreworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKKyAgICBOYW1lQ29udGV4dCBuYW1l
Q29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5j
aGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKKyAgICBpZiAoaWZTdGF0ZW1l
bnQuZWxzZUJvZHkoKSkgeworICAgICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1l
Q29udGV4dCk7CisgICAgICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFu
ZFZpc2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmFtZVJl
c29sdmVyOjp2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQoreworICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgTmFtZUNvbnRleHQgbmFt
ZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCku
Y2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOworfQorCit2b2lkIE5hbWVSZXNv
bHZlcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgd2hpbGVMb29wKQoreworICAgIE5hbWVDb250
ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNv
bnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworfQorCit2b2lkIE5hbWVSZXNv
bHZlcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKQoreworICAgIE5hbWVDb250ZXh0IG5h
bWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQp
LmNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZp
c2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKK3sKKyAg
ICBtX25hbWVDb250ZXh0LmFkZCh2YXJpYWJsZURlY2xhcmF0aW9uKTsKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7Cit9CiAKLXZvaWQgcmVzb2x2ZU5hbWVzSW5U
eXBlcyhQcm9ncmFtJikKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVm
ZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKIHsKKyAgICBpZiAodmFyaWFibGVSZWZlcmVuY2Uu
dmFyaWFibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIHZhcmlhYmxlID0g
bV9uYW1lQ29udGV4dC5nZXRWYXJpYWJsZSh2YXJpYWJsZVJlZmVyZW5jZS5uYW1lKCkpKQorICAg
ICAgICB2YXJpYWJsZVJlZmVyZW5jZS5zZXRWYXJpYWJsZSgqdmFyaWFibGUpOworICAgIGVsc2Ug
eworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lk
IE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVybk5vZGUpCit7CisgICAgQVNT
RVJUKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAgICByZXR1cm5Ob2RlLnNldEZ1bmN0aW9uKG1fY3Vy
cmVudEZ1bmN0aW9uKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmV0dXJuTm9kZSk7Cit9CiAK
K3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYg
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQoreworICAgIGlmIChhdXRvKiBnZXRGdW5jdGlvbnMg
PSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uZ2V0
RnVuY3Rpb25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9z
c2libGVHZXRPdmVybG9hZHMoKmdldEZ1bmN0aW9ucyk7CisgICAgaWYgKGF1dG8qIHNldEZ1bmN0
aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5zZXRGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5z
ZXRQb3NzaWJsZVNldE92ZXJsb2Fkcygqc2V0RnVuY3Rpb25zKTsKKyAgICBpZiAoYXV0byogYW5k
RnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLmFuZEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLnNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKCphbmRGdW5jdGlvbnMpOworICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOworfQorCit2b2lkIE5hbWVSZXNv
bHZlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAgIGlm
IChpczxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNzaW9uLmJhc2UoKSkpIHsKKyAg
ICAgICAgaWYgKGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMo
ZG93bmNhc3Q8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5iYXNlKCkpLm5h
bWUoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvblR5cGVzLT5zaXplKCkgPT0g
MSk7CisgICAgICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9ICgqZW51bWVyYXRpb25UeXBl
cylbMF07CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHR5
cGUpKSB7CisgICAgICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1l
cmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPih0
eXBlKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogbWVtYmVyID0gZW51bWVyYXRpb25EZWZp
bml0aW9uLm1lbWJlckJ5TmFtZShkb3RFeHByZXNzaW9uLmZpZWxkTmFtZSgpKSkgeworICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbCkgPD0gc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMg
bmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWxzIHdpdGhv
dXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgICAgICAgICAgICAgTGV4ZXI6
OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7CisgICAgICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBQZXJoYXBzIGRvIHRoaXMgd2l0aCB2YXJpYW50cyBvciBhIFJld3JpdGVy
IGluc3RlYWQuCisgICAgICAgICAgICAgICAgICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Np
b24oKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3ICgmZG90RXhwcmVzc2lvbikgQVNUOjpFbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwoV1RGTW92ZShvcmlnaW4pLCAqbWVtYmVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZG90RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2
aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWNh
bGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKSB7CisgICAgICAgIGlmIChhdXRvKiBmdW5jdGlv
bnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhjYWxsRXhwcmVzc2lvbi5uYW1lKCkpKQor
ICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRzKCpmdW5jdGlvbnMpOworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldENhc3REYXRhKCk7Cisg
ICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlv
bnMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkKKyAgICAgICAgICAgICAgICBjYWxsRXhwcmVzc2lv
bi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoY2FsbEV4cHJlc3Np
b24pOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UpCit7CisgICAgaWYgKGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1f
bmFtZUNvbnRleHQuZ2V0VHlwZXMoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJS
ZWZlcmVuY2UubGVmdCgpKSkgeworICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy0+c2l6
ZSgpID09IDEpOworICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9ICgqZW51bWVyYXRpb25U
eXBlcylbMF07CisgICAgICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlw
ZSkpIHsKKyAgICAgICAgICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlv
bkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSk7
CisgICAgICAgICAgICBpZiAoYXV0byogbWVtYmVyID0gZW51bWVyYXRpb25EZWZpbml0aW9uLm1l
bWJlckJ5TmFtZShjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5y
aWdodCgpKSkgeworICAgICAgICAgICAgICAgIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9u
TWVtYmVyUmVmZXJlbmNlLnNldEVudW1lcmF0aW9uTWVtYmVyKCptZW1iZXIpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBzZXRFcnJvcigpOworfQorCisvLyBGSVhNRTogTWFrZSBzdXJlIGFsbCB0aGUgbmFtZXMgaGF2
ZSBiZWVuIHJlc29sdmVkLgorCitib29sIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYgcHJv
Z3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCit7CisgICAgZm9yIChhdXRvJiB0eXBl
RGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJl
c29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCgqdHlwZURlZmluaXRpb24pOworICAgICAgICBpZiAo
bmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVm
aW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KCpz
dHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0
aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CisgICAg
ICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoKmVudW1lcmF0aW9uRGVmaW5pdGlv
bik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBw
cm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIu
Y2hlY2tFcnJvckFuZFZpc2l0KCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAgICAgICBpZiAo
bmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dy
YW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQoreworICAgIGZvciAoYXV0
byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsK
KyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24oZnVuY3Rp
b25EZWZpbml0aW9uLmdldCgpKTsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRW
aXNpdCgqZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJv
cigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBuYW1lUmVzb2x2ZXIu
c2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihudWxscHRyKTsKKyAgICBmb3IgKGF1dG8mIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCgqbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
TmFtZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TE5hbWVSZXNvbHZlci5oCmluZGV4IDQ3ZDRkNmE1NzkzLi5lNDA4ZThjMThjYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNv
bHZlci5oCkBAIC0yNywxMyArMjcsNDkgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNs
dWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisjaW5j
bHVkZSAiV0hMU0xWaXNpdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNl
IFdITFNMIHsKIAotdm9pZCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYW0pOwor
Y2xhc3MgUHJvZ3JhbTsKKworY2xhc3MgTmFtZVJlc29sdmVyIDogcHVibGljIFZpc2l0b3Igewor
cHVibGljOgorICAgIE5hbWVSZXNvbHZlcihOYW1lQ29udGV4dCYpOworCisgICAgdmlydHVhbCB+
TmFtZVJlc29sdmVyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0
Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rp
b25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50RnVuY3Rpb24gPSBmdW5jdGlv
bkRlZmluaXRpb247CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBl
UmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
QmxvY2smIGJsb2NrKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQm
IGlmU3RhdGVtZW50KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6V2hpbGVMb29wJiB3
aGlsZUxvb3ApIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgd2hp
bGVMb29wKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlh
YmxlRGVjbGFyYXRpb24pIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZVJl
ZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNU
OjpSZXR1cm4mIHJldHVybk5vZGUpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24p
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJS
ZWZlcmVuY2UpIG92ZXJyaWRlOworCisgICAgTmFtZUNvbnRleHQgbV9uYW1lQ29udGV4dDsKKyAg
ICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9jdXJyZW50RnVuY3Rpb24geyBudWxscHRyIH07
Cit9OworCitib29sIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYsIE5hbWVSZXNvbHZlciYp
OworYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiwgTmFtZVJlc29sdmVyJik7
CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQYXJzZXIuY3BwCmluZGV4IGJjNmU3M2U2YTFmLi5jYzcyODEyYWNjNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcApAQCAt
MzgsNyArMzgsOCBAQCBQYXJzZXI6OlBhcnNlcigpCiB7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJz
ZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBP
cHRpb25hbDxFcnJvcj4KKy8vIEZJWE1FOiBSZXR1cm4gYSBiZXR0ZXIgZXJyb3IgY29kZSBmcm9t
IHRoaXMsIGFuZCByZXBvcnQgaXQgdG8gSmF2YVNjcmlwdC4KK2F1dG8gUGFyc2VyOjpwYXJzZShQ
cm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0
aW9uYWw8RXJyb3I+CiB7CiAgICAgbV9sZXhlciA9IExleGVyKHN0cmluZ1ZpZXcpOwogICAgIG1f
bW9kZSA9IG1vZGU7CkBAIC01NCw3ICs1NSwxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3Jh
bSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYQog
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVEZWZpbml0aW9uKCk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIGlmICh0eXBlRGVmaW5pdGlvbikgewotICAgICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqdHlwZURlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVmaW5pdGlvbikp
OworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBX
VEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgdHlwZURlZmluaXRpb24tPm5hbWUoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KQEAgLTY0LDcgKzY5LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFt
JiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RydWN0dXJlRGVmaW5pdGlvbigpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlRGVmaW5pdGlvbikgewotICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqc3RydWN0dXJlRGVmaW5pdGlvbikpOwor
ICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKnN0
cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAg
ICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIHN0cnVjdHVy
ZURlZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc0LDcgKzgzLDExIEBAIGF1
dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywg
TW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRW51bWVy
YXRpb25EZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChlbnVt
ZXJhdGlvbkRlZmluaXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1v
dmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2Vz
cyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAg
ICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dB
bHdheXMoIk5hbWUgRXJyb3IhICVzIiwgZW51bWVyYXRpb25EZWZpbml0aW9uLT5uYW1lKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC04NSw3ICs5OCwxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3Jh
bSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYQog
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpmdW5j
dGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAg
ICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIGZ1bmN0aW9uRGVm
aW5pdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVycm9yID0gZnVuY3Rpb25EZWZpbml0
aW9uLmVycm9yKCk7CkBAIC05Niw3ICsxMTMsMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dy
YW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmEK
ICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gcHJvZ3Jh
bS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICAg
ICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMo
Ik5hbWUgRXJyb3IhICVzIiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi0+bmFtZSgpLnV0Zjgo
KS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMTA2LDcgKzEyNywxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3Jh
bSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYQog
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlvbigpOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBlRGVjbGFyYXRp
b24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZN
b3ZlKCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nl
c3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIs
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDU0LDE2
ICs0NzksNTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkKCkg
LT4gRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGUKICAgICAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihyaWdodFNxdWFyZUJyYWNrZXQuZXJyb3IoKSk7CiAgICAgICAgIHJl
dHVybiB7eyAqdG9rZW4sIFdURjo6bnVsbG9wdCwgKm51bUVsZW1lbnRzIH19OwogICAgIH0KLSAg
ICBhdXRvIGFkZHJlc3NTcGFjZSA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6
Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6
OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOwotICAgIGlmICghYWRk
cmVzc1NwYWNlKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYWRkcmVzc1NwYWNl
LmVycm9yKCkpOwotICAgIHJldHVybiB7eyAqdG9rZW4sIHsgKmFkZHJlc3NTcGFjZSB9LCBXVEY6
Om51bGxvcHQgfX07CisgICAgYXV0byBhZGRyZXNzU3BhY2VUb2tlbiA9IGNvbnN1bWVUeXBlcyh7
IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNl
LCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRo
cmVhZH0pOworICAgIGlmICghYWRkcmVzc1NwYWNlVG9rZW4pCisgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VUb2tlbi5lcnJvcigpKTsKKyAgICBBU1Q6OlJlZmVy
ZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7CisgICAgc3dpdGNoIChhZGRyZXNz
U3BhY2VUb2tlbi0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFu
dDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3Bh
Y2U6OkNvbnN0YW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlw
ZTo6RGV2aWNlOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFk
ZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tl
bjo6VHlwZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJl
bmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0g
QVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJpbmcoIlNvbWV0aGluZyByZWFsbHkgYmFk
IGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKTsKKyAgICB9CisgICAg
cmV0dXJuIHt7ICp0b2tlbiwgeyBhZGRyZXNzU3BhY2UgfSwgV1RGOjpudWxsb3B0IH19OwogfQog
Ci1hdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiB7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2UgPSBj
b25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0YW50LCBMZXhlcjo6VG9rZW46
OlR5cGU6OkRldmljZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cCwgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpUaHJlYWR9KTsKLSAgICBpZiAoIWFkZHJlc3NTcGFjZSkKLSAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZS5lcnJvcigpKTsKK2F1dG8gUGFyc2Vy
OjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpVbm5hbWVkVHlwZT4sIEVycm9yPiB7CisgICAgYXV0byBhZGRyZXNzU3BhY2VUb2tlbiA9IGNv
bnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6
VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9r
ZW46OlR5cGU6OlRocmVhZH0pOworICAgIGlmICghYWRkcmVzc1NwYWNlVG9rZW4pCisgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VUb2tlbi5lcnJvcigpKTsKKyAg
ICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7CisgICAgc3dp
dGNoIChhZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpU
eXBlOjpDb25zdGFudDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBl
OjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVy
OjpUb2tlbjo6VHlwZTo6RGV2aWNlOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVy
ZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9
IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZDoKKyAgICAgICAgYWRk
cmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJpbmcoIlNvbWV0aGlu
ZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKTsK
KyAgICB9CiAgICAgYXV0byBuYW1lID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpJ
ZGVudGlmaWVyKTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVy
cm9yPihuYW1lLmVycm9yKCkpOwpAQCAtNDcxLDEyICs1MzIsMTIgQEAgYXV0byBQYXJzZXI6OnBh
cnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5
cGU+LCBFcnIKICAgICBpZiAoIXR5cGVBcmd1bWVudHMpCiAgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPih0eXBlQXJndW1lbnRzLmVycm9yKCkpOwogCi0gICAgYXV0byBjb25zdHJ1Y3RU
eXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhBYmJyZXZpYXRl
ZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHBy
ZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiB7CisgICAgYXV0byBjb25zdHJ1
Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhBYmJyZXZp
YXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVk
VHlwZT4mJiBwcmV2aW91cykgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsK
ICAgICAgICAgc3dpdGNoICh0eXBlU3VmZml4QWJicmV2aWF0ZWQudG9rZW4udHlwZSkgewogICAg
ICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3RhcjoKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4
QWJicmV2aWF0ZWQudG9rZW4pLCBhZGRyZXNzU3BhY2UtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwg
V1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tl
biksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExleGVy
OjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVT
dWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZS0+c3RyaW5nVmlldy50b1N0cmlu
ZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJy
ZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAg
ICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6CiAgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRva2VuKHR5
cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAqdHlwZVN1ZmZp
eEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQ4OCw3ICs1
NDksNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycgogICAgIGF1dG8gZmlyc3RUeXBlU3VmZml4
QWJicmV2aWF0ZWQgPSBwYXJzZVR5cGVTdWZmaXhBYmJyZXZpYXRlZCgpOwogICAgIGlmICghZmly
c3RUeXBlU3VmZml4QWJicmV2aWF0ZWQpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
PihmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZC5lcnJvcigpKTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZVJlZmVyZW5j
ZT4oTGV4ZXI6OlRva2VuKCphZGRyZXNzU3BhY2UpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5n
KCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpV
bm5hbWVkVHlwZT4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlR5cGVSZWZlcmVuY2U+
KFdURk1vdmUoKmFkZHJlc3NTcGFjZVRva2VuKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygp
LCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CiAgICAgcmVzdWx0ID0gY29uc3RydWN0VHlwZUZy
b21TdWZmaXhBYmJyZXZpYXRlZCgqZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQsIFdURk1vdmUo
cmVzdWx0KSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byB0eXBlU3VmZml4QWJi
cmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxUeXBlU3VmZml4QWJicmV2aWF0
ZWQsIEVycm9yPj4oWyZdKCkgewpAQCAtNTAzLDcgKzU2NCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBl
PiwgRXJyCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQYXJzZXI6OnBh
cnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlR5cGU+LCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgp
IC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHsK
ICAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKICAgICBpZiAoIW9yaWdpbikKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKQEAgLTUxNCwxMiArNTc1LDEy
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwKICAgICBpZiAoIXR5cGVBcmd1bWVudHMpCiAgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlQXJndW1lbnRzLmVycm9yKCkpOwogCi0g
ICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5vbkFiYnJldmlhdGVkID0gWyZdKGNvbnN0
IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpUeXBlPiB7CisgICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5vbkFiYnJldmlhdGVk
ID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeE5vbkFiYnJl
dmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91cykgLT4g
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgc3dpdGNoICh0eXBl
U3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4udHlwZSkgewogICAgICAgICBjYXNlIExleGVyOjpU
b2tlbjo6VHlwZTo6U3RhcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFT
VDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9r
ZW4pLCB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNlLT5zdHJpbmdWaWV3LnRv
U3RyaW5nKCksIFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NTcGFjZSwg
V1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3F1
YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRl
ZC50b2tlbiksIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2UtPnN0cmluZ1Zp
ZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbih0eXBl
U3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFk
ZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExleGVyOjpUb2tl
bjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJyZXZp
YXRlZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVk
Lm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTUyOCw3ICs1ODksNyBAQCBhdXRv
IFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6VHlwZT4sCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEFTVDo6VHlwZT4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlR5cGVSZWZlcmVu
Y2U+KFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92
ZSgqdHlwZUFyZ3VtZW50cykpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBl
PiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZVJlZmVyZW5jZT4oV1RGTW92ZSgq
b3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1l
bnRzKSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byB0eXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxUeXBlU3VmZml4Tm9uQWJicmV2
aWF0ZWQsIEVycm9yPj4oWyZdKCkgewogICAgICAgICAgICAgcmV0dXJuIHBhcnNlVHlwZVN1ZmZp
eE5vbkFiYnJldmlhdGVkKCk7CkBAIC01NDIsMTQgKzYwMywxNCBAQCBhdXRvIFBhcnNlcjo6cGFy
c2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6
VHlwZT4sCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQYXJzZXI6OnBh
cnNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4g
ewotICAgIGF1dG8gdHlwZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKK2F1dG8gUGFyc2VyOjpwYXJzZVR5cGUo
KSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiB7
CisgICAgYXV0byB0eXBlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKICAgICAgICAgcmV0dXJuIHBh
cnNlQWRkcmVzc1NwYWNlVHlwZSgpOwogICAgIH0pOwogICAgIGlmICh0eXBlKQogICAgICAgICBy
ZXR1cm4gdHlwZTsKIAotICAgIHR5cGUgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+PihbJl0oKSB7CisgICAgdHlwZSA9IGJhY2t0
cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwg
RXJyb3I+PihbJl0oKSB7CiAgICAgICAgIHJldHVybiBwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUo
KTsKICAgICB9KTsKICAgICBpZiAodHlwZSkKQEAgLTg0Nyw3ICs5MDgsNyBAQCBhdXRvIFBhcnNl
cjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0
aW9uRGVmaW5pdGlvbgogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KG5hbWUuZXJyb3IoKSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiB0
eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB0eXBlOwogICAgIGlm
ICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29sb24pKSB7CiAgICAgICAgIGF1dG8gcGFy
c2VkVHlwZSA9IHBhcnNlVHlwZSgpOwogICAgICAgICBpZiAoIXBhcnNlZFR5cGUpCkBAIC04NjMs
MjEgKzkyNCwyNSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKSAt
PiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbgogICAgIGlmICghZmlyc3RFbnVt
ZXJhdGlvbk1lbWJlcikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0RW51
bWVyYXRpb25NZW1iZXIuZXJyb3IoKSk7CiAKLSAgICBBU1Q6OkVudW1lcmF0aW9uTWVtYmVycyBt
ZW1iZXJzOwotICAgIG1lbWJlcnMuYXBwZW5kKFdURk1vdmUoKmZpcnN0RW51bWVyYXRpb25NZW1i
ZXIpKTsKKyAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiByZXN1bHQoV1RGTW92ZSgqb3Jp
Z2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHR5cGUpKTsKKyAgICBh
dXRvIHN1Y2Nlc3MgPSByZXN1bHQuYWRkKFdURk1vdmUoKmZpcnN0RW51bWVyYXRpb25NZW1iZXIp
KTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWlsKFN0cmluZygiQ2Fubm90
IGFkZCBlbnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7
CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkgewogICAg
ICAgICBhdXRvIG1lbWJlciA9IHBhcnNlRW51bWVyYXRpb25NZW1iZXIoKTsKICAgICAgICAgaWYg
KCFtZW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obWVtYmVyLmVy
cm9yKCkpOwotICAgICAgICBtZW1iZXJzLmFwcGVuZChXVEZNb3ZlKCptZW1iZXIpKTsKKyAgICAg
ICAgc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgqbWVtYmVyKSk7CisgICAgICAgIGlmICgh
c3VjY2VzcykKKyAgICAgICAgICAgIHJldHVybiBmYWlsKFN0cmluZygiQ2Fubm90IGFkZCBlbnVt
ZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAgICAgfQog
CiAgICAgYXV0byByaWdodEN1cmx5QnJhY2tldCA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6
VHlwZTo6UmlnaHRDdXJseUJyYWNrZXQpOwogICAgIGlmICghcmlnaHRDdXJseUJyYWNrZXQpCiAg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodEN1cmx5QnJhY2tldC5lcnJvcigp
KTsKIAotICAgIHJldHVybiBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbihXVEZNb3ZlKCpvcmln
aW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUodHlwZSksIFdURk1vdmUo
bWVtYmVycykpOworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKIGF1dG8gUGFyc2Vy
OjpwYXJzZUVudW1lcmF0aW9uTWVtYmVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpFbnVtZXJhdGlvbk1l
bWJlciwgRXJyb3I+IHsKQEAgLTk4MSw3ICsxMDQ2LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlQXR0
cmlidXRlQmxvY2soKSAtPiBFeHBlY3RlZDxBU1Q6OkF0dHJpYnV0ZUJsb2NrLCBFcnJvcj4gewog
ICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVBhcmFt
ZXRlcigpIC0+IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4geworYXV0byBQYXJzZXI6
OnBhcnNlUGFyYW1ldGVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBF
cnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygpOwogICAgIGlmICghb3JpZ2luKQogICAg
ICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwpAQCAtOTkyLDcg
KzEwNTcsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6
OlBhcmFtZXRlciwgRXJyb3I+IHsKICAgICBpZiAoIXR5cGUpCiAgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOwogCi0gICAgT3B0aW9uYWw8U3RyaW5nPiBuYW1l
OworICAgIFN0cmluZyBuYW1lOwogICAgIGlmIChhdXRvIHRva2VuID0gdHJ5VHlwZShMZXhlcjo6
VG9rZW46OlR5cGU6OklkZW50aWZpZXIpKQogICAgICAgICBuYW1lID0gdG9rZW4tPnN0cmluZ1Zp
ZXcudG9TdHJpbmcoKTsKIApAQCAtMTAwMCwxOCArMTA2NSwxOCBAQCBhdXRvIFBhcnNlcjo6cGFy
c2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHsKICAgICAg
ICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAgICAgaWYgKCFzZW1hbnRp
YykKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5lcnJvcigp
KTsKLSAgICAgICAgcmV0dXJuIEFTVDo6UGFyYW1ldGVyKFdURk1vdmUoKm9yaWdpbiksIFdURk1v
dmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKCpz
ZW1hbnRpYykpOworICAgICAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdURk1v
dmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3Zl
KG5hbWUpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIG51bGxwdHIpOwogICAgIH0KIAotICAgIHJldHVy
biBBU1Q6OlBhcmFtZXRlcihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmllcnMpLCBX
VEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShuYW1lKSwgV1RGOjpudWxsb3B0KTsKKyAgICByZXR1cm4g
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlm
aWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEY6Om51bGxvcHQsIG51bGxw
dHIpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXJzKCkgLT4gRXhwZWN0ZWQ8QVNU
OjpQYXJhbWV0ZXJzLCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVycygpIC0+
IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMsIEVycm9yPiB7CiAgICAgYXV0byBs
ZWZ0UGFyZW50aGVzaXMgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRQYXJl
bnRoZXNpcyk7CiAgICAgaWYgKCFsZWZ0UGFyZW50aGVzaXMpCiAgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihsZWZ0UGFyZW50aGVzaXMuZXJyb3IoKSk7CiAKLSAgICBBU1Q6OlBhcmFt
ZXRlcnMgcGFyYW1ldGVyczsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRl
cnM7CiAgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodFBhcmVudGhlc2lz
KSkKICAgICAgICAgcmV0dXJuIFdURk1vdmUocGFyYW1ldGVycyk7CiAKQEAgLTExNDksMTAgKzEy
MTQsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlT3BlcmF0b3JGdW5jdGlvbkRlY2xhcmF0aW9uKCkg
LT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmEKICAgICAgICAgYXV0byBzZW1hbnRpYyA9
IHBhcnNlU2VtYW50aWMoKTsKICAgICAgICAgaWYgKCFzZW1hbnRpYykKICAgICAgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5lcnJvcigpKTsKLSAgICAgICAgcmV0dXJu
IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVs
bG9wdCwgV1RGTW92ZSgqdHlwZSksIFN0cmluZygiT3BlcmF0b3IgQ2FzdCIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50
aWMpKTsKKyAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpv
cmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIFN0cmluZygib3BlcmF0
b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKCpwYXJhbWV0
ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsKICAgICB9CiAKLSAgICByZXR1cm4gQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZN
b3ZlKCp0eXBlKSwgU3RyaW5nKCJPcGVyYXRvciBDYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQpOworICAgIHJldHVy
biBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51
bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCk7
CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3Rl
ZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiB7CkBAIC0xMjYxLDcgKzEzMjYsMTAg
QEAgYXV0byBQYXJzZXI6OnBhcnNlSWZTdGF0ZW1lbnQoKSAtPiBFeHBlY3RlZDxBU1Q6OklmU3Rh
dGVtZW50LCBFcnJvcj4gewogICAgICAgICBlbHNlQm9keSA9IFdURk1vdmUoKnBhcnNlZEVsc2VC
b2R5KTsKICAgICB9CiAKLSAgICByZXR1cm4gQVNUOjpJZlN0YXRlbWVudChXVEZNb3ZlKCpvcmln
aW4pLCBXVEZNb3ZlKCpjb25kaXRpb25hbCksIFdURk1vdmUoKmJvZHkpLCBXVEZNb3ZlKGVsc2VC
b2R5KSk7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+PiBjYXN0
QXJndW1lbnRzOworICAgIGNhc3RBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKmNvbmRpdGlvbmFs
KSk7CisgICAgYXV0byBib29sQ2FzdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVz
c2lvbj4oTGV4ZXI6OlRva2VuKCpvcmlnaW4pLCBTdHJpbmcoImJvb2wiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYXN0QXJndW1lbnRzKSk7CisgICAgcmV0dXJuIEFT
VDo6SWZTdGF0ZW1lbnQoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShib29sQ2FzdCksIFdURk1v
dmUoKmJvZHkpLCBXVEZNb3ZlKGVsc2VCb2R5KSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZVN3
aXRjaFN0YXRlbWVudCgpIC0+IEV4cGVjdGVkPEFTVDo6U3dpdGNoU3RhdGVtZW50LCBFcnJvcj4g
ewpAQCAtMTQ0Myw3ICsxNTExLDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRG9XaGlsZUxvb3AoKSAt
PiBFeHBlY3RlZDxBU1Q6OkRvV2hpbGVMb29wLCBFcnJvcj4gewogICAgIHJldHVybiBBU1Q6OkRv
V2hpbGVMb29wKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoKmJvZHkpLCBXVEZNb3ZlKCpjb25k
aXRpb25hbCkpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uLCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJh
dGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiB0eXBlKSAtPiBFeHBlY3Rl
ZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiB7CiAgICAgYXV0byBvcmlnaW4gPSBw
ZWVrKCk7CiAgICAgaWYgKCFvcmlnaW4pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
PihvcmlnaW4uZXJyb3IoKSk7CkBAIC0xNDg4LDcgKzE1NTYsNyBAQCBhdXRvIFBhcnNlcjo6cGFy
c2VWYXJpYWJsZURlY2xhcmF0aW9ucygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbnNTdAogICAgIGlmICghdHlwZSkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KHR5cGUuZXJyb3IoKSk7CiAKLSAgICBhdXRvIGZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbiA9IHBh
cnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPigoKnR5cGUp
LT5jbG9uZSgpKSk7CisgICAgYXV0byBmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24gPSBwYXJzZVZh
cmlhYmxlRGVjbGFyYXRpb24oKCp0eXBlKS0+Y2xvbmUoKSk7CiAgICAgaWYgKCFmaXJzdFZhcmlh
YmxlRGVjbGFyYXRpb24pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihmaXJzdFZh
cmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAKQEAgLTE0OTYsNyArMTU2NCw3IEBAIGF1dG8g
UGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uc1N0CiAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpmaXJzdFZhcmlh
YmxlRGVjbGFyYXRpb24pKTsKIAogICAgIHdoaWxlICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlw
ZTo6Q29tbWEpKSB7Ci0gICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFy
aWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPigoKnR5cGUpLT5jbG9u
ZSgpKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVE
ZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKICAgICAgICAgaWYgKCF2YXJpYWJsZURlY2xh
cmF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZhcmlhYmxlRGVj
bGFyYXRpb24uZXJyb3IoKSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqdmFyaWFi
bGVEZWNsYXJhdGlvbikpOwpAQCAtMTk1OSw4ICsyMDI3LDEwIEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZVRlcm5hcnlDb25kaXRpb25hbCgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4
cHJlc3NpCiAgICAgaWYgKCFlbHNlRXhwcmVzc2lvbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KGVsc2VFeHByZXNzaW9uLmVycm9yKCkpOwogCi0gICAgLy8gRklYTUU6IENhc3Qg
dGhlIHByZWRpY2F0ZSB0byBhIGJvb2wuCi0gICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OkV4cHJlc3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oV1RG
TW92ZSgqb3JpZ2luKSwgV1RGTW92ZSgqcHJlZGljYXRlKSwgV1RGTW92ZSgqYm9keUV4cHJlc3Np
b24pLCBXVEZNb3ZlKCplbHNlRXhwcmVzc2lvbikpKTsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEFTVDo6RXhwcmVzc2lvbj4+IGNhc3RBcmd1bWVudHM7CisgICAgY2FzdEFyZ3VtZW50cy5h
cHBlbmQoV1RGTW92ZSgqcHJlZGljYXRlKSk7CisgICAgYXV0byBib29sQ2FzdCA9IHN0ZDo6bWFr
ZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpvcmlnaW4pLCBTdHJp
bmcoImJvb2wiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYXN0QXJn
dW1lbnRzKSk7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+KHN0
ZDo6bWFrZV91bmlxdWU8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oV1RGTW92ZSgqb3JpZ2luKSwg
V1RGTW92ZShib29sQ2FzdCksIFdURk1vdmUoKmJvZHlFeHByZXNzaW9uKSwgV1RGTW92ZSgqZWxz
ZUV4cHJlc3Npb24pKSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUFzc2lnbm1lbnQoKSAtPiBF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHsKQEAgLTIx
NzgsNyArMjI0OCw2IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlUmVsYXRpb25hbEJpbmFy
eU9wZXJhdGlvbigpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0CiAgICAgICAgICAgICBjYWxs
QXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgICAgICBjYWxsQXJn
dW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpuZXh0KSk7CiAgICAgICAgICAgICBwcmV2aW91cyA9IHN0
ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpyZWxhdGlv
bmFsQmluYXJ5T3BlcmF0aW9uKSwgU3RyaW5nKCJvcGVyYXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpOwotICAgICAgICAgICAgLy8g
RklYTUU6IENhc3QgdGhlIGFyZ3VtZW50IHRvIGEgYm9vbAogICAgICAgICAgICAgcHJldmlvdXMg
PSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KFdURk1vdmUoKnJl
bGF0aW9uYWxCaW5hcnlPcGVyYXRpb24pLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtMjM2NCw4ICsyNDMzLDEyIEBAIGF1dG8gUGFyc2VyOjpw
YXJzZVBvc3NpYmxlUHJlZml4KCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhw
cmVzc2lvbj4sCiAgICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpuZXh0
KSk7CiAgICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4o
c3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKnByZWZp
eCksIFN0cmluZygib3BlcmF0b3J+IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdU
Rk1vdmUoY2FsbEFyZ3VtZW50cykpKTsKICAgICAgICAgfQotICAgICAgICBjYXNlIExleGVyOjpU
b2tlbjo6VHlwZTo6RXhjbGFtYXRpb25Qb2ludDoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6TG9naWNhbE5v
dEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwgV1RGTW92ZSgqbmV4dCkpKTsKKyAg
ICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkV4Y2xhbWF0aW9uUG9pbnQ6IHsKKyAgICAg
ICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPj4gY2FzdEFyZ3Vt
ZW50czsKKyAgICAgICAgICAgIGNhc3RBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKm5leHQpKTsK
KyAgICAgICAgICAgIGF1dG8gYm9vbENhc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6Q2FsbEV4
cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwgU3RyaW5nKCJib29sIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FzdEFyZ3VtZW50cykpOworICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+KHN0ZDo6bWFrZV91bmlx
dWU8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpwcmVmaXgpLCBXVEZN
b3ZlKGJvb2xDYXN0KSkpOworICAgICAgICB9CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpU
eXBlOjpBbmQ6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVz
c2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6
OlRva2VuKCpwcmVmaXgpLCBXVEZNb3ZlKCpuZXh0KSkpOwogICAgICAgICBjYXNlIExleGVyOjpU
b2tlbjo6VHlwZTo6QXQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQYXJzZXIuaAppbmRleCBkYTNlMDZiMDFlNC4uODAxMzkxNDk4MDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaApAQCAt
MjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMQW5v
bnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVu
Y2VUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKICNpbmNsdWRlICJXSExTTEFz
c2lnbm1lbnRFeHByZXNzaW9uLmgiCkBAIC02OCw3ICs2Nyw2IEBACiAjaW5jbHVkZSAiV0hMU0xO
b2RlLmgiCiAjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbC5oIgogI2luY2x1ZGUgIldITFNMTnVt
VGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiV0hMU0xQYXJhbWV0ZXIuaCIK
ICNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgi
CiAjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKQEAgLTE1NCwxMyAr
MTUyLDEzIEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8VHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBF
cnJvcj4gcGFyc2VUeXBlU3VmZml4QWJicmV2aWF0ZWQoKTsKICAgICBzdHJ1Y3QgVHlwZVN1ZmZp
eE5vbkFiYnJldmlhdGVkIHsKICAgICAgICAgTGV4ZXI6OlRva2VuIHRva2VuOwotICAgICAgICBP
cHRpb25hbDxMZXhlcjo6VG9rZW4+IGFkZHJlc3NTcGFjZTsKKyAgICAgICAgT3B0aW9uYWw8QVNU
OjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKICAgICAgICAgT3B0
aW9uYWw8dW5zaWduZWQ+IG51bUVsZW1lbnRzOwogICAgIH07CiAgICAgRXhwZWN0ZWQ8VHlwZVN1
ZmZpeE5vbkFiYnJldmlhdGVkLCBFcnJvcj4gcGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQo
KTsKLSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+IHBhcnNl
QWRkcmVzc1NwYWNlVHlwZSgpOwotICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5
cGU+LCBFcnJvcj4gcGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCk7Ci0gICAgRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiBwYXJzZVR5cGUoKTsKKyAgICBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZUFkZHJlc3NT
cGFjZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlw
ZT4sIEVycm9yPiBwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZVR5cGUoKTsKICAgICBF
eHBlY3RlZDxBU1Q6OlR5cGVEZWZpbml0aW9uLCBFcnJvcj4gcGFyc2VUeXBlRGVmaW5pdGlvbigp
OwogICAgIEV4cGVjdGVkPEFTVDo6QnVpbHRJblNlbWFudGljLCBFcnJvcj4gcGFyc2VCdWlsdElu
U2VtYW50aWMoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlJlc291cmNlU2VtYW50aWMsIEVycm9yPiBw
YXJzZVJlc291cmNlU2VtYW50aWMoKTsKQEAgLTE3NSw4ICsxNzMsOCBAQCBwcml2YXRlOgogICAg
IEV4cGVjdGVkPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VOYXRpdmVU
eXBlRGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0
dHJpYnV0ZSwgRXJyb3I+IHBhcnNlTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKCk7CiAgICAg
RXhwZWN0ZWQ8QVNUOjpBdHRyaWJ1dGVCbG9jaywgRXJyb3I+IHBhcnNlQXR0cmlidXRlQmxvY2so
KTsKLSAgICBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHBhcnNlUGFyYW1ldGVyKCk7
Ci0gICAgRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXJzLCBFcnJvcj4gcGFyc2VQYXJhbWV0ZXJzKCk7
CisgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VQYXJh
bWV0ZXIoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zLCBFcnJvcj4g
cGFyc2VQYXJhbWV0ZXJzKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
LCBFcnJvcj4gcGFyc2VFbnRyeVBvaW50RnVuY3Rpb25EZWNsYXJhdGlvbigpOwogICAgIEV4cGVj
dGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlUmVndWxhckZ1bmN0aW9u
RGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVy
cm9yPiBwYXJzZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXJhdGlvbigpOwpAQCAtMTkyLDcgKzE5MCw3
IEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNUOjpGb3JMb29wLCBFcnJvcj4gcGFyc2VGb3JM
b29wKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpXaGlsZUxvb3AsIEVycm9yPiBwYXJzZVdoaWxlTG9v
cCgpOwogICAgIEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxvb3AsIEVycm9yPiBwYXJzZURvV2hpbGVM
b29wKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFy
c2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYpOworICAg
IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlVmFyaWFibGVE
ZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJik7CiAgICAgRXhw
ZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCwgRXJyb3I+IHBhcnNlVmFy
aWFibGVEZWNsYXJhdGlvbnMoKTsKICAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpT
dGF0ZW1lbnQ+LCBFcnJvcj4gcGFyc2VTdGF0ZW1lbnQoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKaW5kZXggMGViNjRk
ZWNkNGQuLjQ2MGU5NDZmZGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAgLTI4LDEwICsyOCwxNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldITFNMUHJlcGFyZS5oIgogCisjaW5jbHVkZSAiV0hM
U0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIldITFNMQ2hlY2tlci5oIgog
I2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiV0hMU0xQYXJzZXIuaCIK
ICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFJlY3Vyc2l2ZVR5cGVD
aGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGFuZGFyZExpYnJhcnkuaCIKKyNpbmNsdWRlICJX
SExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50
aGVzaXplQ29uc3RydWN0b3JzLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplRW51bWVyYXRp
b25GdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3Nv
cnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01MCw4ICs1NywyMyBAQCBPcHRpb25h
bDxQcmVwYXJhdGlvblJlc3VsdD4gcHJlcGFyZShTdHJpbmdWaWV3IHNvdXJjZSkKICAgICBpZiAo
IXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXNvbHZlTmFt
ZXNJblR5cGVzKHByb2dyYW0pOworICAgIE5hbWVSZXNvbHZlciBuYW1lUmVzb2x2ZXIocHJvZ3Jh
bS5uYW1lQ29udGV4dCgpKTsKKyAgICBpZiAoIXJlc29sdmVOYW1lc0luVHlwZXMocHJvZ3JhbSwg
bmFtZVJlc29sdmVyKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoIWNo
ZWNrUmVjdXJzaXZlVHlwZXMocHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhwcm9ncmFtKTsKKyAgICBzeW50aGVz
aXplRW51bWVyYXRpb25GdW5jdGlvbnMocHJvZ3JhbSk7CisgICAgc3ludGhlc2l6ZUFycmF5T3Bl
cmF0b3JMZW5ndGgocHJvZ3JhbSk7CisgICAgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhwcm9ncmFt
KTsKKyAgICBpZiAoIWNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKHByb2dyYW0pKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghcmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMocHJv
Z3JhbSwgbmFtZVJlc29sdmVyKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwogCisg
ICAgaWYgKGNoZWNrKHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IHJldHVybiBQcmVwYXJhdGlvblJlc3VsdCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oCmluZGV4IDU2MzBmZTY5ZWU0Li42
MGVlNDc5MDE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQcm9ncmFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQcm9ncmFtLmgKQEAgLTI5LDYgKzI5LDggQEAKIAogI2luY2x1ZGUgIldITFNMRW51
bWVyYXRpb25EZWZpbml0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24u
aCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250
ZXh0LmgiCiAjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5j
bHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTFN0cnVj
dHVyZURlZmluaXRpb24uaCIKQEAgLTQ0LDQ1ICs0Niw2NCBAQCBwdWJsaWM6CiAgICAgUHJvZ3Jh
bSgpID0gZGVmYXVsdDsKICAgICBQcm9ncmFtKFByb2dyYW0mJikgPSBkZWZhdWx0OwogCi0gICAg
dm9pZCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5pdGlvbiYmIHR5cGVEZWZpbml0aW9uKQorICAgIGJv
b2wgYXBwZW5kKEFTVDo6VHlwZURlZmluaXRpb24mJiB0eXBlRGVmaW5pdGlvbikKICAgICB7Ci0g
ICAgICAgIG1fdHlwZURlZmluaXRpb25zLmFwcGVuZChXVEZNb3ZlKHR5cGVEZWZpbml0aW9uKSk7
CisgICAgICAgIG1fdHlwZURlZmluaXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6
VHlwZURlZmluaXRpb24+KFdURk1vdmUodHlwZURlZmluaXRpb24pKSk7CisgICAgICAgIHJldHVy
biBtX25hbWVDb250ZXh0LmFkZCgqbV90eXBlRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0g
ICAgdm9pZCBhcHBlbmQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiYgc3RydWN0dXJlRGVmaW5p
dGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYmIHN0cnVj
dHVyZURlZmluaXRpb24pCiAgICAgewotICAgICAgICBtX3N0cnVjdHVyZURlZmluaXRpb25zLmFw
cGVuZChXVEZNb3ZlKHN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmVE
ZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24+KFdURk1vdmUoc3RydWN0dXJlRGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFt
ZUNvbnRleHQuYWRkKCptX3N0cnVjdHVyZURlZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAg
IHZvaWQgYXBwZW5kKEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiYgZW51bWVyYXRpb25EZWZp
bml0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mJiBl
bnVtZXJhdGlvbkRlZmluaXRpb24pCiAgICAgewotICAgICAgICBtX2VudW1lcmF0aW9uRGVmaW5p
dGlvbnMuYXBwZW5kKFdURk1vdmUoZW51bWVyYXRpb25EZWZpbml0aW9uKSk7CisgICAgICAgIG1f
ZW51bWVyYXRpb25EZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShlbnVtZXJhdGlvbkRlZmluaXRpb24pKSk7CisgICAg
ICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zLmxh
c3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiYg
ZnVuY3Rpb25EZWZpbml0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mJiBmdW5jdGlvbkRlZmluaXRpb24pCiAgICAgewotICAgICAgICBtX2Z1bmN0aW9uRGVm
aW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoZnVuY3Rpb25EZWZpbml0aW9uKSk7CisgICAgICAgIG1f
ZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbj4oV1RGTW92ZShmdW5jdGlvbkRlZmluaXRpb24pKSk7CisgICAgICAgIHJldHVy
biBtX25hbWVDb250ZXh0LmFkZCgqbV9mdW5jdGlvbkRlZmluaXRpb25zLmxhc3QoKSk7CiAgICAg
fQotICAgIHZvaWQgYXBwZW5kKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmIG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCisKKyAgICBib29sIGFwcGVuZChBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24mJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQogICAgIHsKLSAgICAg
ICAgbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMu
YXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihX
VEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSk7CisgICAgICAgIG1faW50cmluc2lj
cy5hZGQoKm1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMubGFzdCgpKTsKKyAgICAgICAgcmV0
dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmxhc3Qo
KSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiYg
bmF0aXZlVHlwZURlY2xhcmF0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24mJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCiAgICAgewotICAgICAgICBtX25h
dGl2ZVR5cGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUobmF0aXZlVHlwZURlY2xhcmF0aW9u
KSk7CisgICAgICAgIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3Vu
aXF1ZTxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oV1RGTW92ZShuYXRpdmVUeXBlRGVjbGFy
YXRpb24pKSk7CisgICAgICAgIG1faW50cmluc2ljcy5hZGQoKm1fbmF0aXZlVHlwZURlY2xhcmF0
aW9ucy5sYXN0KCkpOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fbmF0aXZl
VHlwZURlY2xhcmF0aW9ucy5sYXN0KCkpOwogICAgIH0KIAotICAgIFZlY3RvcjxBU1Q6OlR5cGVE
ZWZpbml0aW9uPiYgdHlwZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV90eXBlRGVmaW5pdGlvbnM7
IH0KLSAgICBWZWN0b3I8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPiYgc3RydWN0dXJlRGVmaW5p
dGlvbnMoKSB7IHJldHVybiBtX3N0cnVjdHVyZURlZmluaXRpb25zOyB9Ci0gICAgVmVjdG9yPEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uPiYgZW51bWVyYXRpb25EZWZpbml0aW9ucygpIHsgcmV0
dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVm
aW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiYg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX25hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPiYgbmF0
aXZlVHlwZURlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsg
fQorICAgIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCgpIHsgcmV0dXJuIG1fbmFtZUNvbnRleHQ7
IH0KKyAgICBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKCkgeyByZXR1cm4gbV9pbnRyaW5zaWNzOyB9
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVEZWZpbml0aW9uPj4mIHR5cGVE
ZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fdHlwZURlZmluaXRpb25zOyB9CisgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+PiYgc3RydWN0dXJlRGVmaW5p
dGlvbnMoKSB7IHJldHVybiBtX3N0cnVjdHVyZURlZmluaXRpb25zOyB9CisgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4+JiBlbnVtZXJhdGlvbkRl
ZmluaXRpb25zKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zOyB9CisgICAgY29u
c3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4+JiBmdW5j
dGlvbkRlZmluaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvbkRlZmluaXRpb25zOyB9
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4+JiBm
dW5jdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9mdW5jdGlvbkRlZmluaXRpb25zOyB9Cisg
ICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24+PiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX25h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bnMoKSB7IHJldHVybiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOyB9CisgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4+JiBuYXRpdmVUeXBl
RGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zOyB9CiAKIHBy
aXZhdGU6Ci0gICAgVmVjdG9yPEFTVDo6VHlwZURlZmluaXRpb24+IG1fdHlwZURlZmluaXRpb25z
OwotICAgIFZlY3RvcjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+IG1fc3RydWN0dXJlRGVmaW5p
dGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPiBtX2VudW1lcmF0
aW9uRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPiBtX2Z1
bmN0aW9uRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbj4gbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uczsKLSAgICBWZWN0b3I8QVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24+IG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsKKyAgICBOYW1lQ29u
dGV4dCBtX25hbWVDb250ZXh0OworICAgIEludHJpbnNpY3MgbV9pbnRyaW5zaWNzOworICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlRGVmaW5pdGlvbj4+IG1fdHlwZURlZmluaXRp
b25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9u
Pj4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uPj4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zOworICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+PiBtX2Z1bmN0
aW9uRGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24+PiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOworICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+PiBtX25hdGl2
ZVR5cGVEZWNsYXJhdGlvbnM7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNzVlY2FiYjIyZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
SExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCisKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK2NsYXNzIFJlY3Vyc2l2ZVR5cGVDaGVja2VyIDogcHVibGljIFZpc2l0
b3IgeworcHVibGljOgorICAgIH5SZWN1cnNpdmVUeXBlQ2hlY2tlcigpID0gZGVmYXVsdDsKKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pIG92ZXJy
aWRlCisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZXMuYWRkKCZ0eXBlRGVm
aW5pdGlvbik7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlRGVmaW5pdGlvbik7CisKKyAgICAgICAgYXV0byBzdWNj
ZXNzID0gbV90eXBlcy5yZW1vdmUoJnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlcy5hZGQoJnN0cnVjdHVyZURlZmluaXRpb24p
OworICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisKKyAgICAgICAgYXV0byBzdWNjZXNz
ID0gbV90eXBlcy5yZW1vdmUoJnN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBBU1NFUlRf
VU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpU
eXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0
byBhZGRSZXN1bHQgPSBtX3R5cGVzLmFkZCgmdHlwZVJlZmVyZW5jZSk7CisgICAgICAgIGlmIChh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50
IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpCisgICAgICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQodHlwZUFyZ3VtZW50KTsKKyAgICAgICAgdmlzaXROYW1lZFR5cGUoKnR5cGVSZWZl
cmVuY2UucmVzb2x2ZWRUeXBlKCkpOworCisgICAgICAgIGF1dG8gc3VjY2VzcyA9IG1fdHlwZXMu
cmVtb3ZlKCZ0eXBlUmVmZXJlbmNlKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBz
dWNjZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYpIG92
ZXJyaWRlCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBIYXNoU2V0PEFTVDo6VHlwZSo+
IG1fdHlwZXM7Cit9OworCitib29sIGNoZWNrUmVjdXJzaXZlVHlwZXMoUHJvZ3JhbSYgcHJvZ3Jh
bSkKK3sKKyAgICBSZWN1cnNpdmVUeXBlQ2hlY2tlciByZWN1cnNpdmVUeXBlQ2hlY2tlcjsKKyAg
ICByZWN1cnNpdmVUeXBlQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAg
cmV0dXJuIHJlY3Vyc2l2ZVR5cGVDaGVja2VyLmVycm9yKCk7Cit9CisKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVjdXJzaXZlVHlwZUNoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uOWEzYTE5ZGNlMjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgKQEAg
LTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkdQVSkKKworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2Ns
YXNzIFByb2dyYW07CisKK2Jvb2wgY2hlY2tSZWN1cnNpdmVUeXBlcyhQcm9ncmFtJik7CisKK30K
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMjI4MzVmMWU2NAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJs
b2FkSW1wbC5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZlT3Zlcmxv
YWRJbXBsLmgiCisKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitBU1Q6Ok5hbWVkVHlwZSogcmVzb2x2ZVR5
cGVPdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5
cGU+LCAxPiYgcG9zc2libGVUeXBlcywgQVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRz
KQoreworICAgIEFTVDo6TmFtZWRUeXBlKiByZXN1bHQgPSBudWxscHRyOworICAgIGZvciAoYXV0
byYgcG9zc2libGVUeXBlIDogcG9zc2libGVUeXBlcykgeworICAgICAgICBpZiAoaW5mZXJUeXBl
c0ZvclR5cGVBcmd1bWVudHMocG9zc2libGVUeXBlLCB0eXBlQXJndW1lbnRzKSkgeworICAgICAg
ICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgIHJlc3VsdCA9ICZzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlwZSY+KHBvc3NpYmxlVHlw
ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuaApzaW1pbGFy
aXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgKcmVuYW1lIHRvIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1w
bC5oCmluZGV4IGVmNjFlZDEyNjE5Li5jM2Y2MGVhOWQ2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQW5vbnltb3VzVmFyaWFibGVEZWNs
YXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVzb2x2ZU92ZXJsb2FkSW1wbC5oCkBAIC0yNyw4ICsyNyw5IEBACiAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNMVmFsdWUuaCIK
KyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2LDI2
ICszNywxMiBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3Mg
QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBWYWx1ZSB7Ci1wdWJsaWM6Ci0g
ICAgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4pCi0g
ICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgIHsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIH5Bbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKCkgPSBkZWZhdWx0OwotCi0gICAg
QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbihjb25zdCBBbm9ueW1vdXNWYXJpYWJsZURlY2xh
cmF0aW9uJikgPSBkZWxldGU7Ci0gICAgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbihBbm9u
eW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJiYpID0gZGVmYXVsdDsKLQotICAgIExleGVyOjpUb2tl
biBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQotCi1wcml2YXRlOgotICAgIExl
eGVyOjpUb2tlbiBtX29yaWdpbjsKLX07CitjbGFzcyBOYW1lZFR5cGU7CiAKIH0KIAorQVNUOjpO
YW1lZFR5cGUqIHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4mLCBBU1Q6OlR5cGVBcmd1bWVudHMmKTsKKwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ODkyMDU2ZTJlNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBGaW5kQXJyYXlUeXBlcyA6IHB1Ymxp
YyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB+RmluZEFycmF5VHlwZXMoKSA9IGRlZmF1bHQ7CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBtX2FycmF5VHlwZXMuYXBwZW5kKGFycmF5VHlwZSk7CisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChhcnJheVR5cGUpOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6QXJyYXlUeXBlPj4mJiB0YWtlQXJyYXlUeXBlcygpCisgICAgewor
ICAgICAgICByZXR1cm4gV1RGTW92ZShtX2FycmF5VHlwZXMpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkFycmF5VHlwZT4+IG1fYXJy
YXlUeXBlczsKK307CisKK3ZvaWQgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3Jh
bSYgcHJvZ3JhbSkKK3sKKyAgICBGaW5kQXJyYXlUeXBlcyBmaW5kQXJyYXlUeXBlczsKKyAgICBm
aW5kQXJyYXlUeXBlcy5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAgYXV0byBhcnJh
eVR5cGVzID0gZmluZEFycmF5VHlwZXMudGFrZUFycmF5VHlwZXMoKTsKKworICAgIGZvciAoYXV0
byYgYXJyYXlUeXBlIDogYXJyYXlUeXBlcykgeworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGFycmF5VHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJp
bmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZh
cmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQo
KS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5
cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSks
IHByb2dyYW0uaW50cmluc2ljcygpLnVpbnRUeXBlKCkpLCBTdHJpbmcoIm9wZXJhdG9yLmxlbmd0
aCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBX
VEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5YTlhMTE0ZjI3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJy
YXlPcGVyYXRvckxlbmd0aC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplQXJyYXlP
cGVyYXRvckxlbmd0aChQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0
cnVjdG9ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5
bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5lYzQwMGVlN2IwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKQEAgLTAs
MCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEZpbmRBbGxU
eXBlcyA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB+RmluZEFsbFR5cGVzKCkgPSBk
ZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChwb2ludGVyVHlw
ZSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChwb2ludGVyVHlwZSk7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBl
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV91bm5hbWVkVHlwZXMuYXBwZW5kKGFycmF5UmVm
ZXJlbmNlVHlwZSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcnJheVJlZmVyZW5jZVR5
cGUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChhcnJheVR5cGUp
OworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlUeXBlKTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRp
b24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKGVudW1lcmF0
aW9uRGVmaW5pdGlvbik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlbnVtZXJhdGlvbkRl
ZmluaXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0
aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9uYW1l
ZFR5cGVzLmFwcGVuZChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIG1fbmFtZWRUeXBlcy5hcHBlbmQobmF0aXZlVHlwZURlY2xhcmF0aW9u
KTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cisg
ICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpVbm5hbWVkVHlw
ZT4+JiYgdGFrZVVubmFtZWRUeXBlcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZSht
X3VubmFtZWRUeXBlcyk7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpOYW1lZFR5cGU+PiYmIHRha2VOYW1lZFR5cGVzKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBXVEZNb3ZlKG1fbmFtZWRUeXBlcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+PiBtX3VubmFtZWRUeXBl
czsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+IG1f
bmFtZWRUeXBlczsKK307CisKK3ZvaWQgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJiBw
cm9ncmFtKQoreworICAgIEZpbmRBbGxUeXBlcyBmaW5kQWxsVHlwZXM7CisgICAgZmluZEFsbFR5
cGVzLmNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtKTsKKyAgICBhdXRvIG1fdW5uYW1lZFR5cGVz
ID0gZmluZEFsbFR5cGVzLnRha2VVbm5hbWVkVHlwZXMoKTsKKyAgICBhdXRvIG1fbmFtZWRUeXBl
cyA9IGZpbmRBbGxUeXBlcy50YWtlTmFtZWRUeXBlcygpOworCisgICAgZm9yIChhdXRvJiB1bm5h
bWVkVHlwZSA6IG1fdW5uYW1lZFR5cGVzKSB7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQoKS5v
cmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB1bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3Zl
KHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3Jp
Z2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUu
Z2V0KCkuY2xvbmUoKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgZmFsc2UpOwor
ICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGNvcHlDb25zdHJ1Y3RvcikpOworCisgICAg
ICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWZhdWx0Q29uc3RydWN0b3IoTGV4
ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksIFN0cmluZygib3Bl
cmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb25zKCksIFdURjo6bnVsbG9wdCwgZmFsc2UpOworICAgICAgICBwcm9ncmFtLmFw
cGVuZChXVEZNb3ZlKGRlZmF1bHRDb25zdHJ1Y3RvcikpOworICAgIH0KKworICAgIGZvciAoYXV0
byYgbmFtZWRUeXBlIDogbV9uYW1lZFR5cGVzKSB7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCku
b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3Zl
KHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdp
bigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVy
ZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRU
eXBlLmdldCgpKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgZmFsc2UpOworICAg
ICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGNvcHlDb25zdHJ1Y3RvcikpOworCisgICAgICAg
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWZhdWx0Q29uc3RydWN0b3IoTGV4ZXI6
OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwg
V1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVk
VHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5nZXQoKSksIFN0cmluZygib3BlcmF0b3Ig
Y2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zKCksIFdURjo6bnVsbG9wdCwgZmFsc2UpOworICAgICAgICBwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKGRlZmF1bHRDb25zdHJ1Y3RvcikpOworICAgIH0KK30KKworfQorCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplQ29uc3RydWN0b3JzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uODAwMjBkZDdjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMu
aApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K2NsYXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJik7
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0
aW9uRnVuY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
MWQ3YmQyM2EwODAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKQEAgLTAs
MCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMu
aCIKKworI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVy
ZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK3Zv
aWQgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCit7Cisg
ICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9u
RGVmaW5pdGlvbnMoKSkgeworICAgICAgICB7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjEoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVm
aW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgKmVu
dW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOwor
ICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24y
KExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRp
b25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1v
dmUodmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5k
KFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjIpKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tl
bihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygp
LCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIHByb2dyYW0uaW50cmluc2ljcygpLmJvb2xU
eXBlKCkpLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAgICAg
ICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24t
Pm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlv
bkRlZmluaXRpb24pLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBh
cmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAg
ICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0
dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBl
KCkuY2xvbmUoKSwgU3RyaW5nKCJvcGVyYXRvci52YWx1ZSIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAg
ICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVm
aW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgKmVu
dW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOwor
ICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAg
ICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Cisg
ICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSks
IEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRp
b24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBmYWxz
ZSk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJh
dGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxw
dHIpOworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwor
ICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9u
KSk7CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmln
aW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZl
cmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkp
LCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9w
dCwgZmFsc2UpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYzEwNzg3MmVmOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCit2b2lkIHN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYTIzMDI3ODdkYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0
cnVjdHVyZUFjY2Vzc29ycy5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50
aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmgiCisKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBl
LmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VU
eXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xW
YXJpYWJsZURlY2xhcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNl
IFdITFNMIHsKKwordm9pZCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0mIHBy
b2dyYW0pCit7CisgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5z
dHJ1Y3R1cmVEZWZpbml0aW9ucygpKSB7CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxl
bWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24tPnN0cnVjdHVyZUVsZW1lbnRzKCkpIHsKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAor
ICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0
aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxl
bWVudC5vcmlnaW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVs
bG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
cyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUo
dmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1
Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxv
cHQsIHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZzo6Zm9ybWF0KCJvcGVy
YXRvci4lcyIsIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBwcm9n
cmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9w
ZXJhdG9yLmZpZWxkPQorICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2
YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4o
KSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRv
a2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCAqc3RydWN0dXJlRGVmaW5pdGlvbiksIFN0
cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oc3RydWN0
dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBzdHJ1Y3R1cmVFbGVtZW50
LnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAg
ICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMSkp
OworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNs
YXJhdGlvbjIpKTsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVu
dC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5
cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkp
LCAqc3RydWN0dXJlRGVmaW5pdGlvbiksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0iLCBz
dHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJz
KSwgV1RGOjpudWxsb3B0LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQo
V1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCisgICAgICAgICAgICBhdXRv
IGNyZWF0ZUFuZGVyID0gWyZdKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSkgLT4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlw
ZT4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBhZGRyZXNzU3BhY2Us
IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5v
cmlnaW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CisgICAgICAgICAgICAgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVj
dHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgV1RGTW92ZShhcmd1bWVu
dFR5cGUpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgICAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAg
cGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAg
ICAgICAgICAgYXV0byByZXR1cm5UeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlBvaW50ZXJU
eXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFkZHJlc3NTcGFj
ZSwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICAgICAgQVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2Nr
KCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nOjpmb3JtYXQoIm9w
ZXJhdG9yJi4lcyIsIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJl
c3NTcGFjZTo6Q29uc3RhbnQpKTsKKyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFu
ZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2UpKTsKKyAgICAgICAg
ICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVz
c1NwYWNlOjpUaHJlYWRncm91cCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3JlYXRl
QW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZCkpOworICAgICAg
ICB9CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3Nv
cnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi40ZTliOWZmNzBjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCkBAIC0w
LDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJH
UFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3Mg
UHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0mKTsK
KworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjJkMTg1Y2RjM2VmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcApAQCAtMCwwICsxLDk3MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNp
bmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlU
eXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUg
IldITFNMQmFzZUZ1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xCYXNlU2VtYW50
aWMuaCIKKyNpbmNsdWRlICJXSExTTEJsb2NrLmgiCisjaW5jbHVkZSAiV0hMU0xCb29sZWFuTGl0
ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMQnJlYWsuaCIKKyNpbmNsdWRlICJXSExTTEJ1aWx0SW5T
ZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJX
SExTTENvbW1hRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJl
ZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMQ29udGludWUuaCIKKyNpbmNsdWRlICJXSExTTERl
cmVmZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG9XaGlsZUxvb3AuaCIKKyNp
bmNsdWRlICJXSExTTERvdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEVmZmVjdGZ1bEV4
cHJlc3Npb25TdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlv
bi5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKKyNpbmNsdWRlICJXSExT
TEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEZhbGx0aHJvdWdoLmgiCisjaW5jbHVkZSAi
V0hMU0xGbG9hdExpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNpbmNsdWRl
ICJXSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xh
cmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRl
ICJXSExTTElmU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xJbmRleEV4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dpY2Fs
RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCIKKyNp
bmNsdWRlICJXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJX
SExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCisjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbC5oIgor
I2luY2x1ZGUgIldITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAi
V0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKKyNpbmNsdWRlICJXSExTTFJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUuaCIK
KyNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFJldHVy
bi5oIgorI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFNwZWNpYWxp
emF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RhZ2VJbk91dFNlbWFu
dGljLmgiCisjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFN0cnVj
dHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZUVsZW1lbnQuaCIKKyNp
bmNsdWRlICJXSExTTFN3aXRjaENhc2UuaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaFN0YXRlbWVu
dC5oIgorI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TFRyYXAuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1
bWVudC5oIgorI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExT
TFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwu
aCIKKyNpbmNsdWRlICJXSExTTFZhbHVlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xh
cmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5o
IgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFdo
aWxlTG9vcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K3ZvaWQgVmlzaXRvcjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBmb3IgKGF1dG8m
IHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KCp0eXBlRGVmaW5pdGlvbik7CisgICAgZm9yIChhdXRvJiBzdHJ1Y3R1
cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKQorICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoKnN0cnVjdHVyZURlZmluaXRpb24pOworICAgIGZvciAoYXV0byYg
ZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAg
ICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0
aW9ucygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZ1bmN0aW9uRGVmaW5pdGlvbik7
CisgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgIGZvciAoYXV0byYgbmF0aXZlVHlwZURlY2xh
cmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkpCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCgqbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKK30KKwordm9pZCBWaXNpdG9y
Ojp2aXNpdFVubmFtZWRUeXBlKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQoreworICAg
IGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKTsK
KyAgICBlbHNlIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlw
ZSkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlw
ZSkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJl
bmNlVHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzPEFT
VDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgfQorfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0TmFtZWRUeXBlKEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpCit7Cisg
ICAgaWYgKGlzPEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZFR5cGUpKTsK
KyAgICBlbHNlIGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24+KG5hbWVkVHlwZSkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uPihuYW1lZFR5cGUpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNU
OjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAgIGVsc2UgeworICAgICAg
ICBBU1NFUlQoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24+KG5hbWVkVHlwZSkpOworICAgIH0KK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlR5
cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAodHlwZURlZmluaXRpb24u
dHlwZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZSgqdHlwZURlZmlu
aXRpb24udHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN0cnVjdHVyZURl
ZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCit7CisgICAgZm9yIChhdXRvJiBzdHJ1Y3R1
cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRWxlbWVudCk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShlbnVtZXJhdGlvbkRl
ZmluaXRpb24udHlwZSgpKTsKKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51
bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZW51bWVyYXRpb25NZW1iZXIpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KGZ1
bmN0aW9uRGVmaW5pdGlvbikpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmlu
aXRpb24uYmxvY2soKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mPihuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBmb3Ig
KGF1dG8mIHR5cGVBcmd1bWVudCA6IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRz
KCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlQXJndW1lbnQpOworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKK3sKKyAg
ICBmb3IgKGF1dG8mIHR5cGVBcmd1bWVudCA6IHR5cGVSZWZlcmVuY2UudHlwZUFyZ3VtZW50cygp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZUFyZ3VtZW50KTsKKyAgICBpZiAodHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSAmJiBpczxBU1Q6OlR5cGVEZWZpbml0aW9uPigqdHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpIHsKKyAgICAgICAgYXV0byYgdHlwZURlZmluaXRp
b24gPSBkb3duY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZl
ZFR5cGUoKSk7CisgICAgICAgIGlmICh0eXBlRGVmaW5pdGlvbi50eXBlKCkpCisgICAgICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZSgqdHlwZURlZmluaXRpb24udHlwZSgpKTsK
KyAgICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRl
clR5cGUpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UmVmZXJl
bmNlVHlwZSY+KHBvaW50ZXJUeXBlKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpB
cnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlwZSkKK3sKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlJj4oYXJyYXlSZWZlcmVuY2VU
eXBlKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlw
ZSkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShhcnJheVR5cGUudHlwZSgp
KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmIHN0cnVj
dHVyZUVsZW1lbnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUoc3RydWN0
dXJlRWxlbWVudC50eXBlKCkpOworICAgIGlmIChzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqc3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygp
KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVt
ZXJhdGlvbk1lbWJlcikKK3sKKyAgICBpZiAoZW51bWVyYXRpb25NZW1iZXIudmFsdWUoKSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCplbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKTsKK30K
Kwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9u
RGVjbGFyYXRpb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVjbGFyYXRp
b24uYXR0cmlidXRlQmxvY2soKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUo
ZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDog
ZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChwYXJhbWV0ZXIpOworICAgIGlmIChmdW5jdGlvbkRlY2xhcmF0aW9uLnNlbWFudGljKCkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZnVuY3Rpb25EZWNsYXJhdGlvbi5zZW1hbnRp
YygpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlR5cGVBcmd1bWVudCYgdHlwZUFy
Z3VtZW50KQoreworICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25z
dGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikgeworICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoY29uc3RhbnRFeHByZXNzaW9uKTsKKyAgICB9LCBbJl0oc3RkOjp1bmlxdWVfcHRy
PEFTVDo6VHlwZVJlZmVyZW5jZT4mIHR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KCp0eXBlUmVmZXJlbmNlKTsKKyAgICB9KSwgdHlwZUFyZ3VtZW50KTsKK30KKwor
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmIHJlZmVyZW5jZVR5cGUpCit7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUocmVmZXJlbmNlVHlwZS5lbGVtZW50
VHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlNlbWFudGljJiBzZW1hbnRp
YykKK3sKKyAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6QnVpbHRJblNl
bWFudGljJiBidWlsdEluU2VtYW50aWMpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGJ1
aWx0SW5TZW1hbnRpYyk7CisgICAgfSwgWyZdKEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYgcmVzb3Vy
Y2VTZW1hbnRpYykgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVzb3VyY2VTZW1hbnRp
Yyk7CisgICAgfSwgWyZdKEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJiBzcGVj
aWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyk7CisgICAgfSwgWyZdKEFTVDo6U3RhZ2VJ
bk91dFNlbWFudGljJiBzdGFnZUluT3V0U2VtYW50aWMpIHsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHN0YWdlSW5PdXRTZW1hbnRpYyk7CisgICAgfSksIHNlbWFudGljKTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNz
aW9uKQoreworICAgIGNvbnN0YW50RXhwcmVzc2lvbi52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoaW50ZWdlckxpdGVyYWwpOworICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50
ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpOworICAgIH0sIFsmXShBU1Q6OkZsb2F0
TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmbG9h
dExpdGVyYWwpOworICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgewor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobnVsbExpdGVyYWwpOworICAgIH0sIFsmXShBU1Q6
OkJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkgeworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoYm9vbGVhbkxpdGVyYWwpOworICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZSkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoY29uc3RhbnRF
eHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpOworICAgIH0pKTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkF0dHJpYnV0ZUJsb2NrJiBhdHRyaWJ1dGVCbG9jaykKK3sK
KyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uQXR0cmlidXRlIDogYXR0cmlidXRlQmxvY2spCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpCdWlsdEluU2VtYW50aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKQoreworfQorCit2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJikKK3sKK30KKwordm9pZCBWaXNp
dG9yOjp2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKQoreworfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6Ok51bGxMaXRlcmFsJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkJvb2xl
YW5MaXRlcmFsJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikKK3sKK30KKwordm9pZCBWaXNpdG9y
Ojp2aXNpdChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJiBmdW5jdGlvbkF0dHJpYnV0ZSkKK3sKKyAg
ICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9u
QXR0cmlidXRlJiBudW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUpIHsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSk7CisgICAgfSksIGZ1bmN0
aW9uQXR0cmlidXRlKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok51bVRocmVhZHNG
dW5jdGlvbkF0dHJpYnV0ZSYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpCbG9j
ayYgYmxvY2spCit7CisgICAgZm9yIChhdXRvJiBzdGF0ZW1lbnQgOiBibG9jay5zdGF0ZW1lbnRz
KCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqc3RhdGVtZW50KTsKK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KQoreworICAgIGlmIChpczxB
U1Q6OkJsb2NrPihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNh
c3Q8QVNUOjpCbG9jaz4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpCcmVhaz4o
c3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QnJl
YWs+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6Q29udGludWU+KHN0YXRlbWVu
dCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkNvbnRpbnVlPihz
dGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkRvV2hpbGVMb29wPihzdGF0ZW1lbnQp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpEb1doaWxlTG9vcD4o
c3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3Rh
dGVtZW50PihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8
QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKKyAgICBlbHNl
IGlmIChpczxBU1Q6OkZhbGx0aHJvdWdoPihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpGYWxsdGhyb3VnaD4oc3RhdGVtZW50KSk7CisgICAgZWxz
ZSBpZiAoaXM8QVNUOjpGb3JMb29wPihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpGb3JMb29wPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChp
czxBU1Q6OklmU3RhdGVtZW50PihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoZG93bmNhc3Q8QVNUOjpJZlN0YXRlbWVudD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAo
aXM8QVNUOjpSZXR1cm4+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChk
b3duY2FzdDxBU1Q6OlJldHVybj4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpT
d2l0Y2hDYXNlPihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNh
c3Q8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlN3
aXRjaFN0YXRlbWVudD4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRv
d25jYXN0PEFTVDo6U3dpdGNoU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChp
czxBU1Q6OlRyYXA+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3du
Y2FzdDxBU1Q6OlRyYXA+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChkb3duY2FzdDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihzdGF0
ZW1lbnQpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6V2hpbGVMb29wPihz
dGF0ZW1lbnQpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6V2hp
bGVMb29wPihzdGF0ZW1lbnQpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpCcmVhayYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpDb250aW51ZSYpCit7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3Ap
Cit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworfQorCit2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikKK3sKKyAgICBpZiAoaXM8
QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihleHByZXNzaW9u
KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpCb29sZWFuTGl0ZXJhbD4oZXhwcmVzc2lvbikpCisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkJvb2xlYW5MaXRlcmFsPihl
eHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpDYWxsRXhwcmVzc2lvbj4oZXhwcmVz
c2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkNhbGxFeHBy
ZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpDb21tYUV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNU
OjpDb21tYUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkRl
cmVmZXJlbmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChkb3duY2FzdDxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwor
ICAgIGVsc2UgaWYgKGlzPEFTVDo6RmxvYXRMaXRlcmFsPihleHByZXNzaW9uKSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsPihleHByZXNzaW9u
KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpCisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsPihl
eHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpMb2dpY2FsRXhwcmVzc2lvbj4oZXhw
cmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkxvZ2lj
YWxFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpMb2dpY2Fs
Tm90RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChk
b3duY2FzdDxBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxz
ZSBpZiAoaXM8QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6TWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TWFrZVBv
aW50ZXJFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGRvd25jYXN0PEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAg
ZWxzZSBpZiAoaXM8QVNUOjpOdWxsTGl0ZXJhbD4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6Ok51bGxMaXRlcmFsPihleHByZXNzaW9uKSk7Cisg
ICAgZWxzZSBpZiAoaXM8QVNUOjpEb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RG90RXhwcmVzc2lvbj4oZXhwcmVzc2lv
bikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6SW5kZXhFeHByZXNzaW9uPihleHByZXNzaW9uKSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6SW5kZXhFeHByZXNzaW9u
PihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0
PEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2Ug
aWYgKGlzPEFTVDo6VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oZXhwcmVzc2lv
bikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVz
c2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlVuc2lnbmVk
SW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJU
KGlzPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24pKTsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24p
KTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBk
b3RFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6
OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiY+KGRvdEV4cHJlc3Npb24pKTsKK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKQorewor
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpbmRleEV4cHJlc3Npb24uaW5kZXhFeHByZXNzaW9uKCkp
OworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbiY+KGluZGV4RXhwcmVzc2lvbikpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChleHByZXNzaW9uLmJhc2UoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNzaW9u
U3RhdGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlZmZlY3RmdWxFeHByZXNzaW9u
U3RhdGVtZW50LmVmZmVjdGZ1bEV4cHJlc3Npb24oKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpGYWxsdGhyb3VnaCYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpG
b3JMb29wJiBmb3JMb29wKQoreworICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50KTsKKyAgICB9LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lv
bj4mIGV4cHJlc3Npb24pIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpleHByZXNzaW9u
KTsKKyAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsKKyAgICBpZiAoZm9yTG9vcC5j
b25kaXRpb24oKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmb3JMb29wLmNvbmRpdGlv
bigpKTsKKyAgICBpZiAoZm9yTG9vcC5pbmNyZW1lbnQoKSkKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZm9y
TG9vcC5ib2R5KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQm
IGlmU3RhdGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5jb25k
aXRpb25hbCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsK
KyAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQoreworICAgIGlmIChyZXR1cm5TdGF0ZW1lbnQu
dmFsdWUoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpyZXR1cm5TdGF0ZW1lbnQudmFs
dWUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hD
YXNlKQoreworICAgIGlmIChzd2l0Y2hDYXNlLnZhbHVlKCkpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqc3dpdGNoQ2FzZS52YWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dp
dGNoQ2FzZS5ibG9jaygpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN3aXRjaFN0
YXRlbWVudCYgc3dpdGNoU3RhdGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0
Y2hTdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNo
U3RhdGVtZW50LnN3aXRjaENhc2VzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0
Y2hDYXNlKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlRyYXAmKQoreworfQorCit2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQoreworICAgIGZvciAoYXV0byYgdmFyaWFibGVE
ZWNsYXJhdGlvbiA6IHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LnZhcmlhYmxlRGVjbGFy
YXRpb25zKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9u
KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQor
eworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOworfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKK3sK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5
cGUoKSk7CisgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpOworICAg
IGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhw
cmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24u
bGVmdCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmln
aHQoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2Fs
bEV4cHJlc3Npb24pCit7CisgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9u
LmFyZ3VtZW50cygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmFyZ3VtZW50KTsKK30K
Kwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNz
aW9uKQoreworICAgIGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGNvbW1hRXhwcmVzc2lvbi5saXN0
KCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZXhwcmVzc2lvbik7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhw
cmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZGVyZWZlcmVuY2VFeHByZXNzaW9u
LnBvaW50ZXIoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVz
c2lvbiYgbG9naWNhbEV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2lj
YWxFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxFeHBy
ZXNzaW9uLnJpZ2h0KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TG9naWNhbE5v
dEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChsb2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkpOworfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpN
YWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKK3sKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChy
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKTsKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHBy
ZXNzaW9uKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Np
b24mIHRlcm5hcnlFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5
RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlF
eHByZXNzaW9uLmJvZHlFeHByZXNzaW9uKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJu
YXJ5RXhwcmVzc2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vy
cm9yQW5kVmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KHByb2dyYW0pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dFVubmFtZWRUeXBlKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQoreworICAgIGlmICgh
ZXJyb3IoKSkKKyAgICAgICAgdmlzaXRVbm5hbWVkVHlwZSh1bm5hbWVkVHlwZSk7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0TmFtZWRUeXBlKEFTVDo6TmFtZWRUeXBlJiBu
YW1lZFR5cGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdE5hbWVkVHlwZShu
YW1lZFR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5
cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KHR5cGVEZWZpbml0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQor
eworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCit7CisgICAgaWYgKCFlcnJvcigpKQor
ICAgICAgICB2aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6
OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZp
bml0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZnVuY3Rpb25EZWZp
bml0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAg
IGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKCFlcnJvcigpKQor
ICAgICAgICB2aXNpdChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6
OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh0eXBlUmVmZXJlbmNlKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRl
clR5cGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChwb2ludGVyVHlwZSk7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAg
ICB2aXNpdChhcnJheVJlZmVyZW5jZVR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQoreworICAgIGlmICghZXJyb3Io
KSkKKyAgICAgICAgdmlzaXQoYXJyYXlUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1cmVFbGVtZW50KQorewor
ICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoc3RydWN0dXJlRWxlbWVudCk7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXIm
IGVudW1lcmF0aW9uTWVtYmVyKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQo
ZW51bWVyYXRpb25NZW1iZXIpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAg
aWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChmdW5jdGlvbkRlY2xhcmF0aW9uKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUeXBlQXJndW1lbnQmIHR5cGVB
cmd1bWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHR5cGVBcmd1bWVu
dCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmVmZXJlbmNl
VHlwZSYgcmVmZXJlbmNlVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0
KHJlZmVyZW5jZVR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OlNlbWFudGljJiBzZW1hbnRpYykKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZp
c2l0KHNlbWFudGljKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHZpc2l0KGNvbnN0YW50RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJs
b2NrKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYXR0cmlidXRlQmxvY2sp
OworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJ1aWx0SW5TZW1h
bnRpYyYgYnVpbHRJblNlbWFudGljKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQoYnVpbHRJblNlbWFudGljKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpSZXNvdXJjZVNlbWFudGljJiByZXNvdXJjZVNlbWFudGljKQoreworICAgIGlmICgh
ZXJyb3IoKSkKKyAgICAgICAgdmlzaXQocmVzb3VyY2VTZW1hbnRpYyk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFu
dGljJiBzcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMpCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdChzcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMpOworfQorCit2
b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYg
c3RhZ2VJbk91dFNlbWFudGljKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQo
c3RhZ2VJbk91dFNlbWFudGljKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpCit7CisgICAgaWYgKCFlcnJv
cigpKQorICAgICAgICB2aXNpdChpbnRlZ2VyTGl0ZXJhbCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKQoreworICAgIGlmICghZXJyb3IoKSkK
KyAgICAgICAgdmlzaXQoZmxvYXRMaXRlcmFsKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpCit7CisgICAgaWYgKCFl
cnJvcigpKQorICAgICAgICB2aXNpdChudWxsTGl0ZXJhbCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKQor
eworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYm9vbGVhbkxpdGVyYWwpOworfQor
Cit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGNv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKTsKK30KKwordm9pZCBW
aXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGdW5jdGlvbkF0dHJpYnV0ZSYgZnVuY3Rp
b25BdHRyaWJ1dGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChmdW5jdGlv
bkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJiBudW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUp
Cit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChudW1UaHJlYWRzRnVuY3Rpb25B
dHRyaWJ1dGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJs
b2NrJiBibG9jaykKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGJsb2NrKTsK
K30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0
YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHN0YXRlbWVudCk7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QnJlYWsmIGJyZWFr
U3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYnJlYWtTdGF0
ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbnRp
bnVlJiBjb250aW51ZVN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZp
c2l0KGNvbnRpbnVlU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdChkb1doaWxlTG9vcCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHZpc2l0KGV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCit7Cisg
ICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChkb3RFeHByZXNzaW9uKTsKK30KKwordm9p
ZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4
RXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGluZGV4RXhw
cmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCit7CisgICAg
aWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOwor
fQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJl
c3Npb25TdGF0ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdChlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KTsK
K30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYg
ZmFsbHRocm91Z2hTdGF0ZW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNp
dChmYWxsdGhyb3VnaFN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KGZvckxvb3ApOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisg
ICAgICAgIHZpc2l0KGlmU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9y
KCkpCisgICAgICAgIHZpc2l0KHJldHVyblN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBp
ZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHN3aXRjaENhc2UpOworfQorCit2b2lkIFZpc2l0
b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYgc3dpdGNoU3RhdGVt
ZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoc3dpdGNoU3RhdGVtZW50
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUcmFwJiB0cmFw
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodHJhcCk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3Io
KSkKKyAgICAgICAgdmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpOworfQorCit2
b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29w
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQod2hpbGVMb29wKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
JiB2YXJpYWJsZURlY2xhcmF0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQodmFyaWFibGVEZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQor
eworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24p
OworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNhbGxFeHByZXNz
aW9uJiBjYWxsRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0
KGNhbGxFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9y
KCkpCisgICAgICAgIHZpc2l0KGNvbW1hRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5j
ZUV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChkZXJlZmVy
ZW5jZUV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNp
dG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNh
bE5vdEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChsb2dp
Y2FsTm90RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KG1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQorewor
ICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uKTsK
K30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQoreworICAgIGlmICghZXJy
b3IoKSkKKyAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbik7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mIHRl
cm5hcnlFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodGVy
bmFyeUV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKK3sKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHZpc2l0KHZhcmlhYmxlUmVmZXJlbmNlKTsKK30KKworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xWaXNpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFZpc2l0b3IuaAppbmRleCA1MTY4NTZlNDFkMC4uOTQ3Yjc0YmVjMDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCkBAIC0yNyw1
NDMgKzI3LDIyNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMUHJv
Z3JhbS5oIgotI2luY2x1ZGUgIldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgot
I2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xBcnJh
eVR5cGUuaCIKLSNpbmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTEJhc2VTZW1h
bnRpYy5oIgotI2luY2x1ZGUgIldITFNMQmxvY2suaCIKLSNpbmNsdWRlICJXSExTTEJvb2xlYW5M
aXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xCcmVhay5oIgotI2luY2x1ZGUgIldITFNMQnVpbHRJ
blNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUg
IldITFNMQ29tbWFFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Np
b24uaCIKLSNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVy
UmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiV0hMU0xDb250aW51ZS5oIgotI2luY2x1ZGUgIldITFNM
RGVyZWZlcmVuY2VFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgot
I2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMRWZmZWN0ZnVs
RXhwcmVzc2lvblN0YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0
aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIgotI2luY2x1ZGUgIldI
TFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIKLSNpbmNsdWRl
ICJXSExTTEZsb2F0TGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgogI2luY2x1
ZGUgIldITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVj
bGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgotI2luY2x1
ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTEluZGV4RXhwcmVzc2lvbi5o
IgotI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTExvZ2lj
YWxFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oIgot
I2luY2x1ZGUgIldITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUg
IldITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24u
aCIKLSNpbmNsdWRlICJXSExTTE5vZGUuaCIKLSNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFsLmgi
Ci0jaW5jbHVkZSAiV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRl
ICJXSExTTFBhcmFtZXRlci5oIgotI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKLSNpbmNs
dWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMUXVh
bGlmaWVyLmgiCi0jaW5jbHVkZSAiV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgiCi0j
aW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNl
bWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xSZXR1cm4uaCIKICNpbmNsdWRlICJXSExTTFNlbWFu
dGljLmgiCi0jaW5jbHVkZSAiV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaCIK
LSNpbmNsdWRlICJXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMU3Rh
dGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xTd2l0Y2hDYXNlLmgi
Ci0jaW5jbHVkZSAiV0hMU0xTd2l0Y2hTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFRlcm5h
cnlFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xUcmFwLmgiCi0jaW5jbHVkZSAiV0hMU0xU
eXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFR5
cGVEZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCi0jaW5jbHVk
ZSAiV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xWYWx1ZS5o
IgotI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNM
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFZhcmlhYmxl
UmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKLQogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKLWNsYXNzIFZpc2l0b3IgewotICAgIH5W
aXNpdG9yKCkgPSBkZWZhdWx0OwotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KFByb2dyYW0mIHBy
b2dyYW0pCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3Jh
bS50eXBlRGVmaW5pdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KHR5cGVEZWZpbml0aW9uKTsK
LSAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1
cmVEZWZpbml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7
Ci0gICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVt
ZXJhdGlvbkRlZmluaXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdChlbnVtZXJhdGlvbkRlZmlu
aXRpb24pOwotICAgICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0u
ZnVuY3Rpb25EZWZpbml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQoZnVuY3Rpb25EZWZpbml0
aW9uKTsKLSAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJv
Z3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7Ci0gICAgICAgIGZvciAoYXV0byYgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkpCi0gICAgICAgICAg
ICB2aXNpdChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOwotICAgIH0KLQotICAgIHZvaWQgdmlzaXRU
eXBlKEFTVDo6VHlwZSYgdHlwZSkKLSAgICB7Ci0gICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZl
cmVuY2U+KHR5cGUpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJl
bmNlPih0eXBlKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHR5cGUp
KQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odHlwZSkpOwot
ICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odHlwZSkpCi0gICAg
ICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odHlwZSkpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OkFycmF5VHlwZT4odHlw
ZSkpOwotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHR5cGUpKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZp
bml0aW9uJiB0eXBlRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZSh0eXBlRGVm
aW5pdGlvbi50eXBlKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0
cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCi0gICAgewotICAgICAgICBm
b3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVy
ZUVsZW1lbnRzKCkpCi0gICAgICAgICAgICB2aXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShlbnVtZXJhdGlv
bkRlZmluaXRpb24udHlwZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJl
ciA6IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1lbWJlcnMoKSkKLSAgICAgICAg
ICAgIHZpc2l0KGVudW1lcmF0aW9uTWVtYmVyKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKLSAgICB7
Ci0gICAgICAgIHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KGZ1
bmN0aW9uRGVmaW5pdGlvbikpOwotICAgICAgICB2aXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxv
Y2soKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKLSAgICB7Ci0gICAgICAg
IHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24pKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKLSAgICB7Ci0gICAg
ICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogbmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVB
cmd1bWVudHMoKSkKLSAgICAgICAgICAgIHZpc2l0KHR5cGVBcmd1bWVudCk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkK
LSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50
eXBlQXJndW1lbnRzKCkpCi0gICAgICAgICAgICB2aXNpdCh0eXBlQXJndW1lbnQpOwotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkK
LSAgICB7Ci0gICAgICAgIHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZSY+KHBv
aW50ZXJUeXBlKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpCi0gICAgewotICAgICAgICB2aXNpdChz
dGF0aWNfY2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGUmPihhcnJheVJlZmVyZW5jZVR5cGUpKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkK
LSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShhcnJheVR5cGUudHlwZSgpKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1cmVFbGVt
ZW50KQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKTsK
LSAgICAgICAgaWYgKHN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSkKLSAgICAgICAgICAgIHZp
c2l0KCpzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKLSAg
ICB7Ci0gICAgICAgIGlmIChlbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKQotICAgICAgICAgICAg
dmlzaXQoKmVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpOwotICAgIH0KLSAgICAKLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0
aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbi5hdHRyaWJ1dGVC
bG9jaygpKTsKLSAgICAgICAgdmlzaXRUeXBlKGZ1bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsK
LSAgICAgICAgZm9yIChhdXRvJiBwYXJhbWV0ZXIgOiBmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFt
ZXRlcnMoKSkKLSAgICAgICAgICAgIHZpc2l0KHBhcmFtZXRlcik7Ci0gICAgICAgIGlmIChmdW5j
dGlvbkRlY2xhcmF0aW9uLnNlbWFudGljKCkpCi0gICAgICAgICAgICB2aXNpdCgqZnVuY3Rpb25E
ZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpUeXBlQXJndW1lbnQmIHR5cGVBcmd1bWVudCkKLSAgICB7Ci0gICAgICAgIFdURjo6dmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50
RXhwcmVzc2lvbikgewotICAgICAgICAgICAgdmlzaXQoY29uc3RhbnRFeHByZXNzaW9uKTsKLSAg
ICAgICAgfSwgWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+JiB0eXBlUmVm
ZXJlbmNlKSB7Ci0gICAgICAgICAgICB2aXNpdCgqdHlwZVJlZmVyZW5jZSk7Ci0gICAgICAgIH0p
LCB0eXBlQXJndW1lbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJl
ZmVyZW5jZVR5cGUmIHJlZmVyZW5jZVR5cGUpCi0gICAgewotICAgICAgICB2aXNpdFR5cGUocmVm
ZXJlbmNlVHlwZS5lbGVtZW50VHlwZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMpCi0gICAgewotICAgICAgICBXVEY6OnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6QnVpbHRJblNlbWFudGljJiBidWlsdEluU2VtYW50aWMp
IHsKLSAgICAgICAgICAgIHZpc2l0KGJ1aWx0SW5TZW1hbnRpYyk7Ci0gICAgICAgIH0sIFsmXShB
U1Q6OlJlc291cmNlU2VtYW50aWMmIHJlc291cmNlU2VtYW50aWMpIHsKLSAgICAgICAgICAgIHZp
c2l0KHJlc291cmNlU2VtYW50aWMpOwotICAgICAgICB9LCBbJl0oQVNUOjpTcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWMmIHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYykgewotICAg
ICAgICAgICAgdmlzaXQoc3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljKTsKLSAgICAgICAg
fSwgWyZdKEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJiBzdGFnZUluT3V0U2VtYW50aWMpIHsKLSAg
ICAgICAgICAgIHZpc2l0KHN0YWdlSW5PdXRTZW1hbnRpYyk7Ci0gICAgICAgIH0pLCBzZW1hbnRp
Yyk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNz
aW9uJiBjb25zdGFudEV4cHJlc3Npb24pCi0gICAgewotICAgICAgICBjb25zdGFudEV4cHJlc3Np
b24udmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdl
ckxpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KGludGVnZXJMaXRlcmFsKTsKLSAgICAgICAg
fSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCkgewotICAgICAgICAgICAgdmlzaXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCk7Ci0gICAgICAg
IH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7Ci0gICAgICAgICAgICB2
aXNpdChmbG9hdExpdGVyYWwpOwotICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYgbnVs
bExpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KG51bGxMaXRlcmFsKTsKLSAgICAgICAgfSwg
WyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSB7Ci0gICAgICAgICAgICB2
aXNpdChib29sZWFuTGl0ZXJhbCk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVz
c2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZSkgewotICAgICAgICAgICAgdmlzaXQoY29uc3RhbnRFeHByZXNz
aW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpOwotICAgICAgICB9KSk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJsb2Nr
KQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkF0dHJpYnV0ZSA6IGF0dHJpYnV0
ZUJsb2NrKQotICAgICAgICAgICAgdmlzaXQoZnVuY3Rpb25BdHRyaWJ1dGUpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlBhcmFtZXRlciYgcGFyYW1ldGVyKQotICAgIHsK
LSAgICAgICAgdmlzaXRUeXBlKHBhcmFtZXRlci50eXBlKCkpOwotICAgICAgICBpZiAocGFyYW1l
dGVyLnNlbWFudGljKCkpCi0gICAgICAgICAgICB2aXNpdCgqcGFyYW1ldGVyLnNlbWFudGljKCkp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYp
Ci0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlc291cmNlU2Vt
YW50aWMmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTcGVj
aWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGbG9hdExpdGVyYWwm
KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJh
bCYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJvb2xlYW5M
aXRlcmFsJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29u
c3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkF0dHJpYnV0ZSYgZnVuY3Rp
b25BdHRyaWJ1dGUpCi0gICAgewotICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJiBudW1UaHJlYWRzRnVuY3Rpb25B
dHRyaWJ1dGUpIHsKLSAgICAgICAgICAgIHZpc2l0KG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0
ZSk7Ci0gICAgICAgIH0pLCBmdW5jdGlvbkF0dHJpYnV0ZSk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJikKLSAgICB7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQotICAgIHsK
LSAgICAgICAgZm9yIChhdXRvJiBzdGF0ZW1lbnQgOiBibG9jay5zdGF0ZW1lbnRzKCkpCi0gICAg
ICAgICAgICB2aXNpdCgqc3RhdGVtZW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmIChpczxBU1Q6
OkJsb2NrPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpCbG9j
az4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6QnJlYWs+KHN0YXRlbWVu
dCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkJyZWFrPihzdGF0ZW1lbnQpKTsK
LSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSkKLSAgICAgICAg
ICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6Q29udGludWU+KHN0YXRlbWVudCkpOwotICAgICAgICBl
bHNlIGlmIChpczxBU1Q6OkRvV2hpbGVMb29wPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlz
aXQoZG93bmNhc3Q8QVNUOjpEb1doaWxlTG9vcD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzPEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudD4oc3RhdGVtZW50KSkKLSAg
ICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVu
dD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6RmFsbHRocm91Z2g+KHN0
YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkZhbGx0aHJvdWdoPihz
dGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpGb3JMb29wPihzdGF0ZW1lbnQp
KQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpGb3JMb29wPihzdGF0ZW1lbnQpKTsK
LSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpJZlN0YXRlbWVudD4oc3RhdGVtZW50KSkKLSAgICAg
ICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6SWZTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOwotICAg
ICAgICBlbHNlIGlmIChpczxBU1Q6OlJldHVybj4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZp
c2l0KGRvd25jYXN0PEFTVDo6UmV0dXJuPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAo
aXM8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNh
c3Q8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNU
OjpTd2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2Fz
dDxBU1Q6OlN3aXRjaFN0YXRlbWVudD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlz
PEFTVDo6VHJhcD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6
VHJhcD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2Fz
dDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKLSAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpXaGlsZUxvb3A+KHN0YXRlbWVu
dCkpOwotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpXaGlsZUxvb3A+KHN0YXRlbWVu
dCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QnJl
YWsmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb250aW51
ZSYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVM
b29wJiBkb1doaWxlTG9vcCkKLSAgICB7Ci0gICAgICAgIHZpc2l0KGRvV2hpbGVMb29wLmJvZHko
KSk7Ci0gICAgICAgIHZpc2l0KGRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pCi0gICAg
ewotICAgICAgICBpZiAoaXM8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
Ci0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihl
eHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6Qm9vbGVhbkxpdGVyYWw+KGV4
cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpCb29sZWFuTGl0ZXJh
bD4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkNhbGxFeHByZXNzaW9u
PihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6Q2FsbEV4cHJl
c3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpDb21tYUV4cHJl
c3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpDb21t
YUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpEZXJl
ZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNh
c3Q8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxz
ZSBpZiAoaXM8QVNUOjpGbG9hdExpdGVyYWw+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlz
aXQoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxz
ZSBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2
aXNpdChkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSk7Ci0gICAgICAg
IGVsc2UgaWYgKGlzPEFTVDo6TG9naWNhbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAg
ICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
OwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uPihleHByZXNz
aW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6TG9naWNhbE5vdEV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpNYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0
PEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAg
ICBlbHNlIGlmIChpczxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0g
ICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oZXhw
cmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6Ok51bGxMaXRlcmFsPihleHByZXNz
aW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6TnVsbExpdGVyYWw+KGV4cHJl
c3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpQcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNU
OjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZp
c2l0KGRvd25jYXN0PEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
OwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlRlcm5hcnlFeHByZXNzaW9uPihleHByZXNzaW9u
KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VGVybmFyeUV4cHJlc3Npb24+KGV4
cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVChpczxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSk7Ci0gICAg
ICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihleHByZXNzaW9u
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFZmZl
Y3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KQot
ICAgIHsKLSAgICAgICAgdmlzaXQoZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3Rm
dWxFeHByZXNzaW9uKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZh
bGx0aHJvdWdoJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
Rm9yTG9vcCYgZm9yTG9vcCkKLSAgICB7Ci0gICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlz
aXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQpIHsKLSAgICAgICAgICAgIHZpc2l0KHZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50KTsKLSAgICAgICAgfSwgWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJl
c3Npb24+JiBleHByZXNzaW9uKSB7Ci0gICAgICAgICAgICB2aXNpdCgqZXhwcmVzc2lvbik7Ci0g
ICAgICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkpOwotICAgICAgICBpZiAoZm9yTG9v
cC5jb25kaXRpb24oKSkKLSAgICAgICAgICAgIHZpc2l0KCpmb3JMb29wLmNvbmRpdGlvbigpKTsK
LSAgICAgICAgaWYgKGZvckxvb3AuaW5jcmVtZW50KCkpCi0gICAgICAgICAgICB2aXNpdCgqZm9y
TG9vcC5pbmNyZW1lbnQoKSk7Ci0gICAgICAgIHZpc2l0KGZvckxvb3AuYm9keSgpKTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQp
Ci0gICAgewotICAgICAgICB2aXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKLSAgICAg
ICAgdmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKLSAgICAgICAgaWYgKGlmU3RhdGVtZW50LmVs
c2VCb2R5KCkpCi0gICAgICAgICAgICB2aXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1l
bnQpCi0gICAgewotICAgICAgICBpZiAocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpCi0gICAgICAg
ICAgICB2aXNpdCgqcmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOwotICAgIH0KLQotICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaENhc2UmIHN3aXRjaENhc2UpCi0gICAgewotICAgICAg
ICBpZiAoc3dpdGNoQ2FzZS52YWx1ZSgpKQotICAgICAgICAgICAgdmlzaXQoKnN3aXRjaENhc2Uu
dmFsdWUoKSk7Ci0gICAgICAgIHZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1l
bnQpCi0gICAgewotICAgICAgICB2aXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7Ci0gICAg
ICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygp
KQotICAgICAgICAgICAgdmlzaXQoc3dpdGNoQ2FzZSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6VHJhcCYpCi0gICAgewotICAgIH0KK2NsYXNzIFByb2dyYW07CisKK25h
bWVzcGFjZSBBU1QgeworCitjbGFzcyBUeXBlRGVmaW5pdGlvbjsKK2NsYXNzIFN0cnVjdHVyZURl
ZmluaXRpb247CitjbGFzcyBFbnVtZXJhdGlvbkRlZmluaXRpb247CitjbGFzcyBGdW5jdGlvbkRl
ZmluaXRpb247CitjbGFzcyBOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3MgTmF0aXZl
VHlwZURlY2xhcmF0aW9uOworY2xhc3MgVHlwZVJlZmVyZW5jZTsKK2NsYXNzIFBvaW50ZXJUeXBl
OworY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlOworY2xhc3MgQXJyYXlUeXBlOworY2xhc3MgU3Ry
dWN0dXJlRWxlbWVudDsKK2NsYXNzIEVudW1lcmF0aW9uTWVtYmVyOworY2xhc3MgRnVuY3Rpb25E
ZWNsYXJhdGlvbjsKK2NsYXNzIFJlZmVyZW5jZVR5cGU7CitjbGFzcyBDb25zdGFudEV4cHJlc3Np
b247CitjbGFzcyBCdWlsdEluU2VtYW50aWM7CitjbGFzcyBSZXNvdXJjZVNlbWFudGljOworY2xh
c3MgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljOworY2xhc3MgU3RhZ2VJbk91dFNlbWFu
dGljOworY2xhc3MgSW50ZWdlckxpdGVyYWw7CitjbGFzcyBVbnNpZ25lZEludGVnZXJMaXRlcmFs
OworY2xhc3MgRmxvYXRMaXRlcmFsOworY2xhc3MgTnVsbExpdGVyYWw7CitjbGFzcyBCb29sZWFu
TGl0ZXJhbDsKK2NsYXNzIENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlOworY2xhc3MgTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlOworY2xhc3MgQmxvY2s7Citj
bGFzcyBTdGF0ZW1lbnQ7CitjbGFzcyBCcmVhazsKK2NsYXNzIENvbnRpbnVlOworY2xhc3MgRG9X
aGlsZUxvb3A7CitjbGFzcyBFeHByZXNzaW9uOworY2xhc3MgRG90RXhwcmVzc2lvbjsKK2NsYXNz
IEluZGV4RXhwcmVzc2lvbjsKK2NsYXNzIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbjsKK2NsYXNz
IEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ7CitjbGFzcyBGYWxsdGhyb3VnaDsKK2NsYXNz
IEZvckxvb3A7CitjbGFzcyBJZlN0YXRlbWVudDsKK2NsYXNzIFJldHVybjsKK2NsYXNzIFN3aXRj
aENhc2U7CitjbGFzcyBTd2l0Y2hTdGF0ZW1lbnQ7CitjbGFzcyBUcmFwOworY2xhc3MgVmFyaWFi
bGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ7CitjbGFzcyBXaGlsZUxvb3A7CitjbGFzcyBWYXJpYWJs
ZURlY2xhcmF0aW9uOworY2xhc3MgQXNzaWdubWVudEV4cHJlc3Npb247CitjbGFzcyBDYWxsRXhw
cmVzc2lvbjsKK2NsYXNzIENvbW1hRXhwcmVzc2lvbjsKK2NsYXNzIERlcmVmZXJlbmNlRXhwcmVz
c2lvbjsKK2NsYXNzIExvZ2ljYWxFeHByZXNzaW9uOworY2xhc3MgTG9naWNhbE5vdEV4cHJlc3Np
b247CitjbGFzcyBNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uOworY2xhc3MgTWFrZVBvaW50
ZXJFeHByZXNzaW9uOworY2xhc3MgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjsKK2NsYXNzIFRl
cm5hcnlFeHByZXNzaW9uOworY2xhc3MgVmFyaWFibGVSZWZlcmVuY2U7CitjbGFzcyBVbm5hbWVk
VHlwZTsKK2NsYXNzIE5hbWVkVHlwZTsKIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dCkKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IHZhcmlh
YmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LnZhcmlhYmxlRGVjbGFyYXRpb25zKCkpCi0gICAgICAg
ICAgICB2aXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKLSAgICB7Ci0gICAgICAgIHZpc2l0
KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKLSAgICAgICAgdmlzaXQod2hpbGVMb29wLmJvZHko
KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZSh2YXJp
YWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7Ci0gICAgICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9u
LnNlbWFudGljKCkpCi0gICAgICAgICAgICB2aXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5zZW1h
bnRpYygpKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSkK
LSAgICAgICAgICAgIHZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9u
JiBhc3NpZ25tZW50RXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KGFzc2lnbm1lbnRF
eHByZXNzaW9uLmxlZnQoKSk7Ci0gICAgICAgIHZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJp
Z2h0KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNz
aW9uJiBjYWxsRXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgYXJndW1lbnQg
OiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHZpc2l0KCphcmd1bWVu
dCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9u
JiBjb21tYUV4cHJlc3Npb24pCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24g
OiBjb21tYUV4cHJlc3Npb24ubGlzdCgpKQotICAgICAgICAgICAgdmlzaXQoKmV4cHJlc3Npb24p
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVz
c2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQoZGVyZWZl
cmVuY2VFeHByZXNzaW9uLnBvaW50ZXIoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNzaW9uKQotICAgIHsKLSAg
ICAgICAgdmlzaXQobG9naWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKLSAgICAgICAgdmlzaXQobG9n
aWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKQotICAgIHsK
LSAgICAgICAgdmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
JiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQobWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJl
c3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVl
KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlz
aXQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmJhc2UoKSk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24ubFZhbHVlKCkpOwotICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
Lm9sZFZhbHVlKCkpOwotICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5l
d1ZhbHVlKCkpOwotICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1Zh
bHVlRXhwcmVzc2lvbigpKTsKLSAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5yZXN1bHRFeHByZXNzaW9uKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAg
IHZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKLSAgICAgICAgdmlzaXQodGVy
bmFyeUV4cHJlc3Npb24uYm9keUV4cHJlc3Npb24oKSk7Ci0gICAgICAgIHZpc2l0KHRlcm5hcnlF
eHByZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikKLSAgICB7Ci0gICAgfQorfQogCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYpCi0gICAg
ewotICAgIH0KK2NsYXNzIFZpc2l0b3IgeworcHVibGljOgorICAgIHZpcnR1YWwgflZpc2l0b3Io
KSA9IGRlZmF1bHQ7CisKKyAgICAvLyBGSVhNRTogQWRkIGEgd2F5IHRvIHZpc2l0IGEgY29uc3Qg
UHJvZ3JhbQorCisgICAgdm9pZCB2aXNpdFVubmFtZWRUeXBlKEFTVDo6VW5uYW1lZFR5cGUmIHVu
bmFtZWRUeXBlKTsKKyAgICB2b2lkIHZpc2l0TmFtZWRUeXBlKEFTVDo6TmFtZWRUeXBlJiBuYW1l
ZFR5cGUpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUoQVNUOjpVbm5h
bWVkVHlwZSYgdW5uYW1lZFR5cGUpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0TmFtZWRU
eXBlKEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpOworCisgICAgdmlydHVhbCB2b2lkIHZpc2l0
KFByb2dyYW0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlBvaW50ZXJUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRWxlbWVudCYpOworICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJik7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OlR5cGVBcmd1bWVudCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlZmVy
ZW5jZVR5cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTZW1hbnRpYyYpOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYpOworICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OkF0dHJpYnV0ZUJsb2NrJik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6QnVpbHRJblNlbWFudGljJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
UmVzb3VyY2VTZW1hbnRpYyYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlNwZWNpYWxp
emF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0
YWdlSW5PdXRTZW1hbnRpYyYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkludGVnZXJM
aXRlcmFsJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYpOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJik7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6QmxvY2smKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpT
dGF0ZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCcmVhayYpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbnRpbnVlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6RG9XaGlsZUxvb3AmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFeHByZXNz
aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OkZvckxvb3AmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVu
dCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJldHVybiYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OlN3aXRjaENhc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpTd2l0Y2hTdGF0ZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUcmFwJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkNvbW1hRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJl
bmNlRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxFeHBy
ZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Np
b24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNz
aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKTsKKworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KFByb2dyYW0mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZvaWQgY2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgdm9pZCBjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpBcnJheVR5cGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0cnVjdHVy
ZUVsZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkVudW1lcmF0aW9u
TWVtYmVyJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUeXBlQXJndW1lbnQm
KTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmKTsKKyAg
ICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlNlbWFudGljJik7CisgICAgdm9pZCBjaGVj
a0Vycm9yQW5kVmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkF0dHJpYnV0ZUJsb2NrJik7CisgICAgdm9pZCBjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpCdWlsdEluU2VtYW50aWMmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpOworICAgIHZvaWQgY2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJik7CisgICAgdm9pZCBjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpOworICAgIHZvaWQgY2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpOdWxsTGl0ZXJhbCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
Qm9vbGVhbkxpdGVyYWwmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJik7CisgICAgdm9pZCBjaGVj
a0Vycm9yQW5kVmlzaXQoQVNUOjpGdW5jdGlvbkF0dHJpYnV0ZSYpOworICAgIHZvaWQgY2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCbG9jayYpOworICAgIHZvaWQgY2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6U3RhdGVtZW50Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpCcmVhayYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29udGludWUmKTsK
KyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkRvV2hpbGVMb29wJik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYpOworICAgIHZvaWQgY2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkZvckxvb3AmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OklmU3RhdGVtZW50Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpSZXR1cm4m
KTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN3aXRjaENhc2UmKTsKKyAgICB2
b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VHJhcCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OldoaWxlTG9vcCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpDb21tYUV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6TG9naWNhbEV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OkxvZ2ljYWxOb3RFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYpOworCisgICAgdm9pZCBzZXRFcnJv
cigpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fZXJyb3IpOworICAgICAgICBtX2Vycm9yID0g
dHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvcjsg
fQorCitwcml2YXRlOgorICAgIGJvb2wgbV9lcnJvciB7IGZhbHNlIH07IC8vIEZJWE1FOiBNaWdy
YXRlIHRoaXMgdG8gYmUgc29tZSBzb3J0IG9mIGRlc2NyaXB0aXZlIHN0cmluZy4KIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggM2MwZTM2NDcwNTQuLjYwZTc5ZGFmY2IwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dApAQCAtMzA2LDggKzMwNiwyNSBAQCBNb2R1bGVzL3dlYmdwdS9ET01XaW5kb3dXZWJHUFUuY3Bw
CiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQYXJzZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3Bw
CitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwCitNb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTENoZWNrZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVy
VHlwZXMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKK01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwCitNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAorTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKK01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKK01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMVmlzaXRvci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5
cGVBcmd1bWVudC5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1h
bnRpYy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMu
Y3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50
U2VtYW50aWMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2Vt
YW50aWMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwu
Y3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAK
IE1vZHVsZXMvd2ViZ3B1L1dlYkdQVS5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUFkYXB0ZXIu
Y3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXBMYXlvdXQuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDdjMTZl
ZjE3NzUuLjM4ZTA1NmU5MjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDAzLDkgKzY0MDMsMjAgQEAKIAkJMUMyNEVFQTcx
QzcyQTdCNDAwODBGOEZDIC8qIEpTRm9udEZhY2VTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gSlNGb250RmFjZVNldC5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9KU0ZvbnRGYWNlU2V0Lmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJ
CTFDMjY0OTc5MEQ3RTI0OEEwMEJEMTBGMiAvKiBEb2N1bWVudExvYWRlck1hYy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudExvYWRlck1hYy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMzI0OTEwMUM2RDZBM0IwMDdFREIzMiAvKiBG
b250VmFyaWFudEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRm9udFZhcmlhbnRCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUMzMzI3NkMyMUNFREE0MjAwMERDOUYyIC8qIFdITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzZFMjFDRUZGNzQwMDBEQzlGMiAvKiBXSExT
TFJlc29sdmVPdmVybG9hZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZXNvbHZlT3Zlcmxv
YWRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzZGMjFDRjAxMzEw
MDBEQzlGMiAvKiBXSExTTEluZmVyVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJbmZlclR5
cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzcxMjFDRjBCRTEwMDBE
QzlGMiAvKiBXSExTTE5hbWVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE5hbWVkVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3MjIxQ0YwRDJFMDAwREM5RjIg
LyogV0hMU0xVbm5hbWVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFVubmFtZWRUeXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc0MjFENUE3MDYwMDBEQzlGMiAv
KiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUmVjdXJz
aXZlVHlwZUNoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzUy
MUQ1QjBGODAwMERDOUYyIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQzMzMjc3NjIxRDVDMDdFMDAwREM5RjIgLyogV0hMU0xTeW50aGVzaXpl
U3RydWN0dXJlQWNjZXNzb3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZVN0cnVj
dHVyZUFjY2Vzc29ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3NzIx
RDVDQTgzMDAwREM5RjIgLyogV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzgyMUQ1Q0VENDAwMERDOUYyIC8qIFdI
TFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xT
eW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQzM5NjlDRjFCNzQyMTFFMDAyQkNGQTcgLyogRm9udENhY2hlQ29yZVRleHQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhY2hlQ29yZVRleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzY2MjYwRTFDNkU3Q0E2MDBBQjUyN0Mg
LyogRm9udEZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9u
dEZhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzY2MjYwRjFDNkU3Q0E2
MDBBQjUyN0MgLyogRm9udEZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Rm9udEZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM3Q0MyMUQyMUNERTE5
ODAwQzFGQTJDIC8qIFdITFNMTmFtZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1l
Q29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1NjBFOTczMzA4
MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnNwZWN0b3JDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFDODFCOTU3MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xs
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1ODBFOTczMzA4MDAy
NjZFMDcgLyogSW5zcGVjdG9yQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluc3BlY3RvckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjQx
NSw2ICs2NDI2LDggQEAKIAkJMUNBRjM0N0UwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9i
amVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmplY3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBRjM0N0YwQTZDNDA1MjAwQUJFMDZF
IC8qIFdlYlNjcmlwdE9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYlNjcmlwdE9iamVjdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUNBRjM0ODAwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIyQzIxREQ5NkVGMDA2RTg0NkEgLyog
V0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xH
YXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
Q0I2OUIyRDIxREQ5NkVGMDA2RTg0NkEgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUNCNkI0RjgyMTdCODM5MzAwOTNCOUNEIC8qIFRleHREZWNvcmF0
aW9uVGhpY2tuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQjZCNEZCMjE3QjgzOTQwMDkzQjlDRCAv
KiBUZXh0VW5kZXJsaW5lT2Zmc2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRVbmRlcmxpbmVPZmZz
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNDREY1QkIxOTkwMzMyNDAwQkNF
QkFEIC8qIFNWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMzIxNCw5ICsxMzIyNywxNiBAQAogCQlDMTFBOUVDRDIxNDAzQTVD
MDBDRkIyMEEgLyogU3dpdGNoaW5nR1BVQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN3aXRjaGlu
Z0dQVUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMTFBOUVEMjIxNDA1
NzhCMDBDRkIyMEEgLyogU3dpdGNoaW5nR1BVQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFN3aXRjaGluZ0dQVUNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMx
RTFEMjM1MjAzREYxNTQwMDU4NDY2NSAvKiBTY3JlZW5Qcm9wZXJ0aWVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNjcmVlblByb3BlcnRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIw
MTMzNDQyMURBQzA5NTAwQjYwQzI3IC8qIFdITFNMSW50cmluc2ljcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTEludHJpbnNpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwMTMz
NDYyMURBRUU2RTAwQjYwQzI3IC8qIFdITFNMSW50cmluc2ljcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXSExTTEludHJpbnNpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MjAxMzM0NzIxREI0MzYzMDBCNjBDMjcgLyogV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDMjAxNUMwOTFCRTZGRTJDMDA4MjIzODkgLyogRm9udFZhcmlh
bnRCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRWYXJpYW50QnVpbGRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjEwRTkxMTIxQjRCRDEwMDBCN0Y4M0QgLyogV0hMU0xM
ZXhlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTExleGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMEU5MTIyMUI0QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xMZXhlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMjEzOEExMzIxRERFQ0QzMDBGNTE2QkEgLyogV0hMU0xCdWlsdEluU2VtYW50aWMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xCdWlsdEluU2VtYW50aWMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMjEzOEExNTIxRERFQ0U5MDBGNTE2QkEgLyogV0hMU0xSZXNv
dXJjZVNlbWFudGljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMUmVzb3VyY2VTZW1hbnRp
Yy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMTM4QTE2MjFEREVDRkIwMEY1
MTZCQSAvKiBXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMTM4QTE3MjFEREVEMEQwMEY1MTZCQSAvKiBXSExT
TFN0YWdlSW5PdXRTZW1hbnRpYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN0YWdlSW5P
dXRTZW1hbnRpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNkYzMjFD
RDg5QUQwMDIyNzk3OSAvKiBXSExTTFRyYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xUcmFwLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNkY0MjFDRDg5QjMwMDIyNzk3OSAv
KiBXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEZ1bmN0aW9u
RGVmaW5pdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjZGNTIxQ0Q4
OUI1MDAyMjc5NzkgLyogV0hMU0xDb250aW51ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTENvbnRp
bnVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzI0NSw3ICsxMzI2NSw2IEBA
CiAJCUMyMUJGNzBDMjFDRDg5Q0MwMDIyNzk3OSAvKiBXSExTTEV4cHJlc3Npb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyMUJGNzBEMjFDRDg5Q0QwMDIyNzk3OSAvKiBXSExTTFJlZmVyZW5jZVR5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xSZWZlcmVuY2VUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyMUJGNzBFMjFDRDg5Q0UwMDIyNzk3OSAvKiBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlDMjFCRjcwRjIxQ0Q4OUNGMDAyMjc5NzkgLyogV0hMU0xBbm9ueW1v
dXNWYXJpYWJsZURlY2xhcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQW5vbnltb3VzVmFy
aWFibGVEZWNsYXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcx
MDIxQ0Q4OUQwMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMjFCRjcxMTIxQ0Q4OUQxMDAyMjc5NzkgLyogV0hMU0xUeXBlQXJndW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0hMU0xUeXBlQXJndW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzIxQkY3MTIyMUNEODlEMTAwMjI3OTc5IC8qIFdITFNMU3RhdGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMU3RhdGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMzI1Myw3ICsxMzI3Miw2IEBACiAJCUMyMUJGNzE0MjFDRDg5RDMwMDIyNzk3OSAvKiBX
SExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzIxQkY3MTUyMUNEODlENDAwMjI3OTc5IC8qIFdITFNMTG9naWNhbE5vdEV4cHJlc3Np
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxNjIxQ0Q4OUQ1MDAyMjc5NzkgLyogV0hMU0xD
YWxsRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTENhbGxFeHByZXNzaW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyMUJGNzE3MjFDRDg5RDYwMDIyNzk3OSAvKiBX
SExTTFBhcmFtZXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFBhcmFtZXRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxODIxQ0Q4OUQ3MDAyMjc5NzkgLyogV0hMU0xE
b3RFeHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRG90RXhwcmVzc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxOTIxQ0Q4OUQ3MDAyMjc5NzkgLyogV0hM
U0xTd2l0Y2hDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3dpdGNoQ2FzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxQTIxQ0Q4OUQ4MDAyMjc5NzkgLyogV0hMU0xC
cmVhay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEJyZWFrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMzI5OSwxNSArMTMzMTcsMjcgQEAKIAkJQzI4MDgzM0QxQzZEQzIyQzAwMTQ1
MUI2IC8qIEpTRm9udEZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gSlNGb250RmFjZS5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9udEZh
Y2UuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlDMjgwODMzRTFD
NkRDMjJDMDAxNDUxQjYgLyogSlNGb250RmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBKU0ZvbnRGYWNlLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9u
dEZhY2UuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJQzI4MEIzRkQx
RUY0NjA4OTAwRDM1MTM1IC8qIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RmFtaWx5U3BlY2lmaWNhdGlvbk51
bGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjg2RUQ5RTIxREI1QUJBMDA3
MTNDNDAgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyODhDNzI3MjFDOEM2RUYwMDJERjVDQSAvKiBXSExTTFZpc2l0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyODhD
NzI5MjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0hMU0xQcmVwYXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3
MkEyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TFByZXBhcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzI4OEM3MkIyMUM4Q0ND
MjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMTmFtZVJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3
MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMTmFtZVJlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyODhD
NzJEMjFDOTkxREEwMDJERjVDQSAvKiBXSExTTFR5cGVBcmd1bWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXSExTTFR5cGVBcmd1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQUIwQUY0MUU2QjNDNkMwMDEzNDhDNSAvKiBGb250U2VsZWN0aW9uQWxnb3JpdGhtLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRTZWxlY3Rpb25BbGdv
cml0aG0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkFCMEFGNTFFNkIzQzZD
MDAxMzQ4QzUgLyogRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGb250U2VsZWN0aW9uQWxnb3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQUIwQjAzMUU2REU5MkMwMDEzNDhDNSAvKiBGb250U2VsZWN0aW9uVmFs
dWVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRTZWxlY3Rpb25WYWx1ZUlubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzAyMURCNEI0ODAwNEJFMjZFIC8q
IFdITFNMQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTENoZWNrZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3MTIxREI0QjQ4MDA0QkUyNkUgLyog
V0hMU0xDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ2hlY2tlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3MzIxREI0QkJEMDA0QkUyNkUgLyogV0hMU0xOYW1l
UmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lUmVzb2x2ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3NDIxREI1MTBGMDA0QkUyNkUgLyog
V0hMU0xOYW1lQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTE5hbWVDb250ZXh0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzUyMURCNTI2NjAwNEJF
MjZFIC8qIFdITFNMSW5mZXJUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEluZmVy
VHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3NjIxREI1Mzk0
MDA0QkUyNkUgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzJCNTUxNzcyMURCNTQwRjAwNEJFMjZFIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc4MjFEQjU1NzUw
MDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzkyMURCNTU4RjAwNEJFMjZFIC8qIFdITFNM
U3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzJCNTUxN0EyMURCNTU5RTAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUFy
cmF5T3BlcmF0b3JMZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVzaXpl
QXJyYXlPcGVyYXRvckxlbmd0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
QjU1MTdCMjFEQjU1QUYwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxN0MyMURCNTdFRDAwNEJFMjZFIC8qIFdI
TFNMVmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFZpc2l0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkMyQ0Y1NTFFRjM3NjFBMDA0MjgxQTggLyogRm9u
dEZhbWlseVNwZWNpZmljYXRpb25OdWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMkUzOEVGQjFFODM5NkZEMDBDQTNBREYgLyogQ1NTRm9udFN0eWxlVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRm9udFN0eWxlVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkUzOEVGQzFFODM5NkZEMDBDQTNB
REYgLyogQ1NTRm9udFN0eWxlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ1NTRm9udFN0eWxlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1
MzMyLDExICsyNTM2MiwzNiBAQAogCQkJCUMyMUJGNzM3MjFDRDhBMDIwMDIyNzk3OSAvKiBXSExT
TFBhcnNlci5jcHAgKi8sCiAJCQkJQzIxQkY3MzgyMUNEOEEwMzAwMjI3OTc5IC8qIFdITFNMUGFy
c2VyLmggKi8sCiAJCQkJQzIxQkY3M0EyMUNEOEQ3MDAwMjI3OTc5IC8qIFdITFNMUHJvZ3JhbS5o
ICovLAotIAkJCQlDMjg4QzcyNzIxQzhDNkVGMDAyREY1Q0EgLyogV0hMU0xWaXNpdG9yLmggKi8s
Ci0gCQkJCUMyODhDNzI5MjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuY3BwICovLAot
IAkJCQlDMjg4QzcyQTIxQzhDQTUwMDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmggKi8sCi0gCQkJ
CUMyODhDNzJCMjFDOENDQzIwMDJERjVDQSAvKiBXSExTTE5hbWVSZXNvbHZlci5jcHAgKi8sCi0g
CQkJCUMyODhDNzJDMjFDOENDQzIwMDJERjVDQSAvKiBXSExTTE5hbWVSZXNvbHZlci5oICovLAor
CQkJCUMyODhDNzI3MjFDOEM2RUYwMDJERjVDQSAvKiBXSExTTFZpc2l0b3IuaCAqLywKKwkJCQlD
MkI1NTE3QzIxREI1N0VEMDA0QkUyNkUgLyogV0hMU0xWaXNpdG9yLmNwcCAqLywKKwkJCQlDMjg4
QzcyOTIxQzhDQTUwMDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmNwcCAqLywKKwkJCQlDMjg4Qzcy
QTIxQzhDQTUwMDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmggKi8sCisJCQkJQzI4OEM3MkMyMUM4
Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmggKi8sCisJCQkJQzJCNTUxNzMyMURC
NEJCRDAwNEJFMjZFIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLywKKwkJCQkxQzdDQzIxRDIx
Q0RFMTk4MDBDMUZBMkMgLyogV0hMU0xOYW1lQ29udGV4dC5oICovLAorCQkJCUMyQjU1MTc0MjFE
QjUxMEYwMDRCRTI2RSAvKiBXSExTTE5hbWVDb250ZXh0LmNwcCAqLywKKwkJCQkxQzMzMjc2RTIx
Q0VGRjc0MDAwREM5RjIgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmggKi8sCisJCQkJQzI4
NkVEOUUyMURCNUFCQTAwNzEzQzQwIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAgKi8s
CisJCQkJMUMzMzI3NkYyMUNGMDEzMTAwMERDOUYyIC8qIFdITFNMSW5mZXJUeXBlcy5oICovLAor
CQkJCUMyQjU1MTc1MjFEQjUyNjYwMDRCRTI2RSAvKiBXSExTTEluZmVyVHlwZXMuY3BwICovLAor
CQkJCTFDMzMyNzc0MjFENUE3MDYwMDBEQzlGMiAvKiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2Vy
LmggKi8sCisJCQkJQzJCNTUxNzYyMURCNTM5NDAwNEJFMjZFIC8qIFdITFNMUmVjdXJzaXZlVHlw
ZUNoZWNrZXIuY3BwICovLAorCQkJCTFDMzMyNzc1MjFENUIwRjgwMDBEQzlGMiAvKiBXSExTTENo
ZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggKi8sCisJCQkJQzJCNTUxNzcyMURCNTQwRjAwNEJFMjZF
IC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwICovLAorCQkJCTFDMzMyNzc2MjFE
NUMwN0UwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCAqLywK
KwkJCQlDMkI1NTE3ODIxREI1NTc1MDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplU3RydWN0dXJl
QWNjZXNzb3JzLmNwcCAqLywKKwkJCQkxQzMzMjc3NzIxRDVDQTgzMDAwREM5RjIgLyogV0hMU0xT
eW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCAqLywKKwkJCQlDMkI1NTE3OTIxREI1NThG
MDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwICovLAor
CQkJCTFDMzMyNzc4MjFENUNFRDQwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoLmggKi8sCisJCQkJQzJCNTUxN0EyMURCNTU5RTAwNEJFMjZFIC8qIFdITFNMU3lu
dGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwICovLAorCQkJCUMyMDEzMzQ3MjFEQjQzNjMw
MEI2MEMyNyAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCAqLywKKwkJCQlDMkI1NTE3
QjIxREI1NUFGMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcCAqLywK
KwkJCQlDMjAxMzM0NDIxREFDMDk1MDBCNjBDMjcgLyogV0hMU0xJbnRyaW5zaWNzLmggKi8sCisJ
CQkJQzIwMTMzNDYyMURBRUU2RTAwQjYwQzI3IC8qIFdITFNMSW50cmluc2ljcy5jcHAgKi8sCisJ
CQkJQzJCNTUxNzAyMURCNEI0ODAwNEJFMjZFIC8qIFdITFNMQ2hlY2tlci5jcHAgKi8sCisJCQkJ
QzJCNTUxNzEyMURCNEI0ODAwNEJFMjZFIC8qIFdITFNMQ2hlY2tlci5oICovLAorCQkJCTFDQjY5
QjJDMjFERDk2RUYwMDZFODQ2QSAvKiBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAgKi8s
CisJCQkJMUNCNjlCMkQyMUREOTZFRjAwNkU4NDZBIC8qIFdITFNMR2F0aGVyRW50cnlQb2ludEl0
ZW1zLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IFdITFNMOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTI1MzQ0LDcgKzI1Mzk5LDYgQEAKIAkJQzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5
IC8qIEFTVCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
QzIxQkY3MEYyMUNEODlDRjAwMjI3OTc5IC8qIFdITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJh
dGlvbi5oICovLAogCQkJCUMyMUJGNzI1MjFDRDg5RTIwMDIyNzk3OSAvKiBXSExTTEFycmF5UmVm
ZXJlbmNlVHlwZS5oICovLAogCQkJCUMyMUJGNzA5MjFDRDg5Q0EwMDIyNzk3OSAvKiBXSExTTEFy
cmF5VHlwZS5oICovLAogCQkJCUMyMUJGNzMwMjFDRDg5RUQwMDIyNzk3OSAvKiBXSExTTEFzc2ln
bm1lbnRFeHByZXNzaW9uLmggKi8sCkBAIC0yNTM4NCw3ICsyNTQzOCw2IEBACiAJCQkJQzIxQkY3
MjQyMUNEODlFMTAwMjI3OTc5IC8qIFdITFNMTm9kZS5oICovLAogCQkJCUMyMUJGNzA3MjFDRDg5
QzgwMDIyNzk3OSAvKiBXSExTTE51bGxMaXRlcmFsLmggKi8sCiAJCQkJQzIxQkY3MjEyMUNEODlE
RTAwMjI3OTc5IC8qIFdITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmggKi8sCi0JCQkJ
QzIxQkY3MTcyMUNEODlENjAwMjI3OTc5IC8qIFdITFNMUGFyYW1ldGVyLmggKi8sCiAJCQkJQzIx
QkY3MkYyMUNEODlFQzAwMjI3OTc5IC8qIFdITFNMUG9pbnRlclR5cGUuaCAqLywKIAkJCQlDMjFC
RjcyRTIxQ0Q4OUVBMDAyMjc5NzkgLyogV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCAq
LywKIAkJCQlDMjFCRjcwQjIxQ0Q4OUNDMDAyMjc5NzkgLyogV0hMU0xRdWFsaWZpZXIuaCAqLywK
QEAgLTI1NDEyLDcgKzI1NDY1LDE0IEBACiAJCQkJQzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8q
IFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLywKIAkJCQlDMjFCRjcxMzIx
Q0Q4OUQyMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oICovLAogCQkJCUMyMUJG
NzA0MjFDRDg5QzYwMDIyNzk3OSAvKiBXSExTTFdoaWxlTG9vcC5oICovLAotIAkJCQlDMjg4Qzcy
RDIxQzk5MURBMDAyREY1Q0EgLyogV0hMU0xUeXBlQXJndW1lbnQuY3BwICovLAorCQkJCUMyODhD
NzJEMjFDOTkxREEwMDJERjVDQSAvKiBXSExTTFR5cGVBcmd1bWVudC5jcHAgKi8sCisJCQkJMUMz
MzI3NkMyMUNFREE0MjAwMERDOUYyIC8qIFdITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmgg
Ki8sCisJCQkJMUMzMzI3NzEyMUNGMEJFMTAwMERDOUYyIC8qIFdITFNMTmFtZWRUeXBlLmggKi8s
CisJCQkJMUMzMzI3NzIyMUNGMEQyRTAwMERDOUYyIC8qIFdITFNMVW5uYW1lZFR5cGUuaCAqLywK
KwkJCQlDMjEzOEExMzIxRERFQ0QzMDBGNTE2QkEgLyogV0hMU0xCdWlsdEluU2VtYW50aWMuY3Bw
ICovLAorCQkJCUMyMTM4QTE1MjFEREVDRTkwMEY1MTZCQSAvKiBXSExTTFJlc291cmNlU2VtYW50
aWMuY3BwICovLAorCQkJCUMyMTM4QTE2MjFEREVDRkIwMEY1MTZCQSAvKiBXSExTTFNwZWNpYWxp
emF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAgKi8sCisJCQkJQzIxMzhBMTcyMURERUQwRDAwRjUx
NkJBIC8qIFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0g
QVNUOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358304</attachid>
            <date>2019-01-03 20:04:10 -0800</date>
            <delta_ts>2019-01-04 14:59:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>file.txt</filename>
            <type>text/plain</type>
            <size>352951</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXggMmQ1NjdmMDBlNzAuLmViMzkw
ZTQyZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaApAQCAtMzksOCArMzks
OCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVibGlj
IFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFR5
cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgQXJy
YXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAg
ICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJs
aWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYpID0g
ZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhh
ZGRyZXNzU3BhY2UoKSksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfVFlQRShBcnJheVJlZmVyZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBl
KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShBcnJheVJlZmVy
ZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAppbmRleCA0MGI1ZjhkZjZmZS4uYzQxNzcwNWYzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBBcnJh
eVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIEFycmF5VHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlLCB1
bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgQXJyYXlUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRz
KQogICAgIHsKQEAgLTUyLDIwICs1MiwxOCBAQCBwdWJsaWM6CiAgICAgQXJyYXlUeXBlKGNvbnN0
IEFycmF5VHlwZSYpID0gZGVsZXRlOwogICAgIEFycmF5VHlwZShBcnJheVR5cGUmJikgPSBkZWZh
dWx0OwogCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVs
ZW1lbnRzOyB9Ci0KLSAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsg
fQorICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1FbGVtZW50
czsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZT4oTGV4ZXI6
OlRva2VuKG1fb3JpZ2luKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7
CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZT4oTGV4ZXI6OlRva2Vu
KG9yaWdpbigpKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZT4gbV9lbGVtZW50VHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5
cGU+IG1fZWxlbWVudFR5cGU7CiAgICAgdW5zaWduZWQgbV9udW1FbGVtZW50czsKIH07CiAKQEAg
LTc1LDYgKzczLDYgQEAgcHJpdmF0ZToKIAogfQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dI
TFNMX1RZUEUoQXJyYXlUeXBlLCBpc0FycmF5VHlwZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19XSExTTF9VTk5BTUVEX1RZUEUoQXJyYXlUeXBlLCBpc0FycmF5VHlwZSgpKQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEJhc2VTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQmFzZVNlbWFudGljLmgKaW5kZXggNjU3MzM3MmYxMzcuLmM2YTJkMzlhMGMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNl
U2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCYXNlU2VtYW50aWMuaApAQCAtMzQsOCArMzQsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBuYW1lc3BhY2UgV0hMU0wgewogCitjbGFzcyBJbnRyaW5zaWNzOworCiBuYW1lc3BhY2Ug
QVNUIHsKIAorY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworY2xhc3MgVW5uYW1lZFR5cGU7CisK
IGNsYXNzIEJhc2VTZW1hbnRpYyA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKICAgICBCYXNlU2Vt
YW50aWMoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQpAQCAtNDgsNiArNTMsMTQgQEAgcHVibGljOgog
ICAgIEJhc2VTZW1hbnRpYyhjb25zdCBCYXNlU2VtYW50aWMmKSA9IGRlbGV0ZTsKICAgICBCYXNl
U2VtYW50aWMoQmFzZVNlbWFudGljJiYpID0gZGVmYXVsdDsKIAorICAgIHZpcnR1YWwgYm9vbCBp
c0FjY2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNz
JikgY29uc3QgPSAwOworCisgICAgZW51bSBjbGFzcyBTaGFkZXJJdGVtRGlyZWN0aW9uIHsKKyAg
ICAgICAgSW5wdXQsCisgICAgICAgIE91dHB1dAorICAgIH07CisgICAgdmlydHVhbCBib29sIGlz
QWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29u
c3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3QgPSAwOworCiBwcml2YXRlOgogICAgIExleGVy
OjpUb2tlbiBtX29yaWdpbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCb29sZWFuTGl0ZXJhbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaAppbmRleCAyMDBm
MzY0OTMyYi4uODNhNTQ4YThlNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEJvb2xlYW5MaXRlcmFsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaApAQCAtNDYs
MTMgKzQ2LDE4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkJvb2xlYW5MaXRlcmFsKCkgPSBk
ZWZhdWx0OwogCi0gICAgZXhwbGljaXQgQm9vbGVhbkxpdGVyYWwoY29uc3QgQm9vbGVhbkxpdGVy
YWwmKSA9IGRlZmF1bHQ7CisgICAgQm9vbGVhbkxpdGVyYWwoY29uc3QgQm9vbGVhbkxpdGVyYWwm
KSA9IGRlbGV0ZTsKICAgICBCb29sZWFuTGl0ZXJhbChCb29sZWFuTGl0ZXJhbCYmKSA9IGRlZmF1
bHQ7CiAKICAgICBib29sIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogCiAgICAg
Ym9vbCBpc0Jvb2xlYW5MaXRlcmFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQog
CisgICAgQm9vbGVhbkxpdGVyYWwgY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IEJvb2xlYW5MaXRlcmFsKExleGVyOjpUb2tlbihvcmlnaW4oKSksIG1fdmFsdWUpOworICAgIH0K
KwogcHJpdmF0ZToKICAgICBib29sIG1fdmFsdWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1h
bnRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIxMjUzMjZm
YjJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKKworI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZp
bml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xJ
bnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2Jv
b2wgQnVpbHRJblNlbWFudGljOjppc0FjY2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5
cGUmIHVubmFtZWRUeXBlLCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKSBjb25zdAorewor
ICAgIHN3aXRjaCAobV92YXJpYWJsZSkgeworICAgIGNhc2UgVmFyaWFibGU6OlNWSW5zdGFuY2VJ
RDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWludFR5
cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZWZXJ0ZXhJRDoKKyAgICAgICAgcmV0dXJuIG1h
dGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJp
YWJsZTo6UFNpemU6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5z
aWNzLmZsb2F0VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVlBvc2l0aW9uOgorICAgICAg
ICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9hdDRUeXBlKCkpOwor
ICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAgICAgIHJldHVybiBtYXRjaGVz
KHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6
OlNWU2FtcGxlSW5kZXg6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRy
aW5zaWNzLnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWSW5uZXJDb3ZlcmFnZToK
KyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWludFR5cGUo
KSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAgICAgIHJldHVybiBtYXRjaGVz
KHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0NFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZEZXB0aDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNp
Y3MuZmxvYXRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWQ292ZXJhZ2U6CisgICAgICAg
IHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAg
IGNhc2UgVmFyaWFibGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoKKyAgICAgICAgcmV0dXJuIG1hdGNo
ZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQzVHlwZSgpKTsKKyAgICBjYXNlIFZhcmlh
YmxlOjpTVkdyb3VwSUQ6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRy
aW5zaWNzLmZsb2F0M1R5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cEluZGV4Ogor
ICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy51aW50VHlwZSgp
KTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwVGhyZWFkSUQ6CisgICAgICAgIHJldHVybiBt
YXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7CisgICAgfQorfQor
Citib29sIEJ1aWx0SW5TZW1hbnRpYzo6aXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlv
bihTaGFkZXJJdGVtRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRnVuY3Rpb25EZWZpbml0aW9u
JiBmdW5jdGlvbkRlZmluaXRpb24pIGNvbnN0Cit7CisgICAgc3dpdGNoICgqZnVuY3Rpb25EZWZp
bml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9uRGVjbGFyYXRpb246
OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7Cisg
ICAgICAgIGNhc2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ6CisgICAgICAgICAgICBzd2l0
Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSW5zdGFuY2VJ
RDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWVmVydGV4SUQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBTaGFkZXJJdGVtRGlyZWN0
aW9uOjpPdXRwdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgVmFyaWFibGU6OlBTaXplOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZQ
b3NpdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6RnJhZ21l
bnQ6CisgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNhc2UgU2hhZGVySXRl
bURpcmVjdGlvbjo6SW5wdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAgICAgICAgICBjYXNl
IFZhcmlhYmxlOjpTVlBvc2l0aW9uOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZTYW1w
bGVJbmRleDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSW5uZXJDb3ZlcmFnZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFNoYWRl
ckl0ZW1EaXJlY3Rpb246Ok91dHB1dDoKKyAgICAgICAgICAgIHN3aXRjaCAobV92YXJpYWJsZSkg
eworICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAgICAgICAgICBjYXNl
IFZhcmlhYmxlOjpTVkRlcHRoOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZDb3ZlcmFn
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZToKKyAg
ICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBTaGFkZXJJdGVtRGlyZWN0
aW9uOjpJbnB1dDoKKyAgICAgICAgICAgIHN3aXRjaCAobV92YXJpYWJsZSkgeworICAgICAgICAg
ICAgY2FzZSBWYXJpYWJsZTo6U1ZEaXNwYXRjaFRocmVhZElEOgorICAgICAgICAgICAgY2FzZSBW
YXJpYWJsZTo6U1ZHcm91cElEOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cElu
ZGV4OgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cFRocmVhZElEOgorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgU2hhZGVySXRl
bURpcmVjdGlvbjo6T3V0cHV0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorfQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFu
dGljLmgKaW5kZXggNzA0NmRmMzJjZmEuLjhlNzA0MzAwMTU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdElu
U2VtYW50aWMuaApAQCAtNzAsNiArNzAsMTkgQEAgcHVibGljOgogCiAgICAgVmFyaWFibGUgdmFy
aWFibGUoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlOyB9CiAKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQnVpbHRJblNlbWFudGljJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3ZhcmlhYmxlID09IG90aGVyLm1fdmFyaWFibGUgJiYgbV90YXJnZXRJbmRleCA9PSBv
dGhlci5tX3RhcmdldEluZGV4OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBC
dWlsdEluU2VtYW50aWMmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJvb2wgaXNBY2NlcHRhYmxlVHlwZShjb25zdCBB
U1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgSW50cmluc2ljcyYpIGNvbnN0IG92ZXJyaWRlOworICAg
IGJvb2wgaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0
aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSBjb25zdCBvdmVycmlkZTsKKwogcHJpdmF0
ZToKICAgICBWYXJpYWJsZSBtX3ZhcmlhYmxlOwogICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3Rh
cmdldEluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKaW5kZXggNjRhZjcxMzI5OWMuLjhi
MmJkYWY0YmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01NCw5ICs1NSwzMSBAQCBwdWJsaWM6CiAKICAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+PiYgYXJndW1lbnRzKCkgeyByZXR1
cm4gbV9hcmd1bWVudHM7IH0KIAorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsg
fQorCisgICAgdm9pZCBzZXRDYXN0RGF0YSgpCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IHRoaXMKKyAgICB9CisKKyAgICBib29sIGhhc092ZXJsb2FkcygpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fb3ZlcmxvYWRzKTsgfQorICAgIHZvaWQgc2V0T3Zlcmxv
YWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRp
b24+LCAxPiYgb3ZlcmxvYWRzKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KCFoYXNPdmVybG9hZHMo
KSk7CisgICAgICAgIG1fb3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAgIH0KKworICAgIHZvaWQg
c2V0RnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNsYXJhdGlvbikKKyAg
ICB7CisgICAgICAgIGFzc2VydCghbV9mdW5jdGlvbik7CisgICAgICAgIG1fZnVuY3Rpb24gPSAm
ZnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbmFt
ZTsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+PiBtX2FyZ3VtZW50czsK
KyAgICBPcHRpb25hbDxWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4+IG1fb3ZlcmxvYWRzOworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fZnVu
Y3Rpb24geyBudWxscHRyIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lv
bi5oCmluZGV4IGEzOGIwZDViM2ExLi5jMjBhMzBlNTdmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3Rh
bnRFeHByZXNzaW9uLmgKQEAgLTc2LDExICs3Niw4NiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0K
IAorICAgIEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCgpCisgICAgeworICAgICAgICBB
U1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxJbnRlZ2VyTGl0ZXJhbD4obV92YXJpYW50KSk7
CisgICAgICAgIHJldHVybiBXVEY6OmdldDxJbnRlZ2VyTGl0ZXJhbD4obV92YXJpYW50KTsKKyAg
ICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHZpc2l0KFQmJiB0KQogICAgIHsK
ICAgICAgICAgV1RGOjp2aXNpdChXVEZNb3ZlKHQpLCBtX3ZhcmlhbnQpOwogICAgIH0KIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdmlzaXQoVCYmIHQpIGNvbnN0CisgICAgeworICAg
ICAgICBXVEY6OnZpc2l0KFdURk1vdmUodCksIG1fdmFyaWFudCk7CisgICAgfQorCisgICAgQ29u
c3RhbnRFeHByZXNzaW9uIGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEludGVnZXJMaXRlcmFsJiBpbnRlZ2Vy
TGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBpbnRl
Z2VyTGl0ZXJhbC5jbG9uZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9uIHsK
KyAgICAgICAgICAgIHJldHVybiB1bnNpZ25lZEludGVnZXJMaXRlcmFsLmNsb25lKCk7CisgICAg
ICAgIH0sIFsmXShjb25zdCBGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgLT4gQ29uc3RhbnRF
eHByZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdExpdGVyYWwuY2xvbmUoKTsKKyAg
ICAgICAgfSwgWyZdKGNvbnN0IE51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgLT4gQ29uc3RhbnRF
eHByZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsTGl0ZXJhbC5jbG9uZSgpOworICAg
ICAgICB9LCBbJl0oY29uc3QgQm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSAtPiBDb25z
dGFudEV4cHJlc3Npb24geworICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5MaXRlcmFsLmNsb25l
KCk7CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UpIC0+IENvbnN0YW50RXhwcmVzc2lvbiB7CisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRF
eHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuY2xvbmUoKTsKKyAgICAgICAgfSks
IG1fdmFyaWFudCk7CisgICAgfQorCisgICAgYm9vbCBtYXRjaGVzKGNvbnN0IENvbnN0YW50RXhw
cmVzc2lvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBPcHRpb25hbDxib29sPiByZXN1
bHQ7CisgICAgICAgIGRvdWJsZSB2YWx1ZTsKKyAgICAgICAgdmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0oY29uc3QgSW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAg
ICB2YWx1ZSA9IGludGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0sIFsmXShjb25zdCBV
bnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAg
ICAgICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwg
WyZdKGNvbnN0IEZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAgICB2YWx1
ZSA9IGZsb2F0TGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgTnVsbExpdGVy
YWwmKSB7CisgICAgICAgICAgICByZXN1bHQgPSBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPE51bGxM
aXRlcmFsPihvdGhlci5tX3ZhcmlhbnQpOworICAgICAgICB9LCBbJl0oY29uc3QgQm9vbGVhbkxp
dGVyYWwmIGJvb2xlYW5MaXRlcmFsKSB7CisgICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxCb29sZWFuTGl0ZXJhbD4ob3RoZXIubV92YXJpYW50KSkgeworICAgICAgICAgICAg
ICAgIGNvbnN0IGF1dG8mIG90aGVyQm9vbGVhbkxpdGVyYWwgPSBXVEY6OmdldDxCb29sZWFuTGl0
ZXJhbD4ob3RoZXIubV92YXJpYW50KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBib29sZWFu
TGl0ZXJhbC52YWx1ZSgpID09IG90aGVyQm9vbGVhbkxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9LCBb
Jl0oY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSB7CisgICAgICAgICAg
ICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZT4ob3RoZXIubV92YXJpYW50KSkgeworICAgICAgICAgICAgICAgIGNv
bnN0IGF1dG8mIG90aGVyTWVtYmVyUmVmZXJlbmNlID0gV1RGOjpnZXQ8Q29uc3RhbnRFeHByZXNz
aW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2U+KG90aGVyLm1fdmFyaWFudCk7CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gJmNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVm
ZXJlbmNlLmVudW1lcmF0aW9uTWVtYmVyKCkgPT0gJm90aGVyTWVtYmVyUmVmZXJlbmNlLmVudW1l
cmF0aW9uTWVtYmVyKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBmYWxzZTsKKyAgICAgICAgfSkpOworCisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAg
ICAgICByZXR1cm4gKnJlc3VsdDsKKworICAgICAgICBvdGhlci52aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShjb25zdCBJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHZhbHVlID09IGludGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0s
IFsmXShjb25zdCBVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFs
KSB7CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZSA9PSB1bnNpZ25lZEludGVnZXJMaXRlcmFs
LnZhbHVlKCk7CisgICAgICAgIH0sIFsmXShjb25zdCBGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJh
bCkgeworICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUgPT0gZmxvYXRMaXRlcmFsLnZhbHVlKCk7
CisgICAgICAgIH0sIFsmXShjb25zdCBOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IGZhbHNlOworICAgICAgICB9LCBbJl0oY29uc3QgQm9vbGVhbkxpdGVyYWwmKSB7CisgICAg
ICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IENvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikgeworICAgICAgICAgICAgcmVzdWx0
ID0gZmFsc2U7CisgICAgICAgIH0pKTsKKworICAgICAgICBBU1NFUlQocmVzdWx0KTsKKyAgICAg
ICAgcmV0dXJuICpyZXN1bHQ7CisgICAgfQorCiBwcml2YXRlOgogICAgIFZhcmlhbnQ8CiAgICAg
ICAgIEludGVnZXJMaXRlcmFsLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJS
ZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgKaW5kZXggMmMy
NGE5OGIyY2EuLmI3Njk0NzgxYTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgKQEAg
LTM2LDEwICszNiwxMiBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAot
Y2xhc3MgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UgOiBwdWJs
aWMgTm9kZSB7CitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlcjsKKworY2xhc3MgQ29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CiBw
dWJsaWM6CiAgICAgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Uo
TGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBsZWZ0LCBTdHJpbmcmJiByaWdodCkKLSAg
ICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgIDogRXhwcmVzc2lvbihX
VEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9sZWZ0KFdURk1vdmUobGVmdCkpCiAgICAgICAg
ICwgbV9yaWdodChXVEZNb3ZlKHJpZ2h0KSkKICAgICB7CkBAIC01MCwxMCArNTIsMzcgQEAgcHVi
bGljOgogICAgIGV4cGxpY2l0IENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVm
ZXJlbmNlKGNvbnN0IENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
JikgPSBkZWZhdWx0OwogICAgIENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVm
ZXJlbmNlKENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiYpID0g
ZGVmYXVsdDsKIAorICAgIGNvbnN0IFN0cmluZyYgbGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVm
dDsgfQorICAgIGNvbnN0IFN0cmluZyYgcmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9
CisKKyAgICBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSBjbG9u
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmlu
ZyhtX2xlZnQpLCBTdHJpbmcobV9yaWdodCkpOworICAgICAgICByZXN1bHQubV9lbnVtZXJhdGlv
bk1lbWJlciA9IG1fZW51bWVyYXRpb25NZW1iZXI7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIoKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZW51bWVyYXRpb25NZW1iZXIpOworICAgICAgICByZXR1
cm4gKm1fZW51bWVyYXRpb25NZW1iZXI7CisgICAgfQorCisgICAgQVNUOjpFbnVtZXJhdGlvbk1l
bWJlciYgZW51bWVyYXRpb25NZW1iZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
ZW51bWVyYXRpb25NZW1iZXIpOworICAgICAgICByZXR1cm4gKm1fZW51bWVyYXRpb25NZW1iZXI7
CisgICAgfQorCisgICAgdm9pZCBzZXRFbnVtZXJhdGlvbk1lbWJlcihBU1Q6OkVudW1lcmF0aW9u
TWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKKyAgICB7CisgICAgICAgIG1fZW51bWVyYXRpb25N
ZW1iZXIgPSAmZW51bWVyYXRpb25NZW1iZXI7CisgICAgfQorCiBwcml2YXRlOgotICAgIExleGVy
OjpUb2tlbiBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9sZWZ0OwogICAgIFN0cmluZyBtX3JpZ2h0
OworICAgIEFTVDo6RW51bWVyYXRpb25NZW1iZXIqIG1fZW51bWVyYXRpb25NZW1iZXIgeyBudWxs
cHRyIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xEb3RFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb3RFeHByZXNzaW9uLmgKaW5kZXggYzQzYzY5ZWU1NDEu
LmViZjcyMzI2Y2QwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xEb3RFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCkBAIC00OSw2ICs0OSwyNSBA
QCBwdWJsaWM6CiAgICAgRG90RXhwcmVzc2lvbihjb25zdCBEb3RFeHByZXNzaW9uJikgPSBkZWxl
dGU7CiAgICAgRG90RXhwcmVzc2lvbihEb3RFeHByZXNzaW9uJiYpID0gZGVmYXVsdDsKIAorICAg
IGJvb2wgaXNEb3RFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQor
CisgICAgU3RyaW5nIGdldEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIm9wZXJhdG9yLiVzIiwgbV9maWVsZE5hbWUudXRm
OCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgU3RyaW5nIHNldEZ1bmN0aW9uTmFtZSgpIGNvbnN0
IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIm9wZXJhdG9y
LiVzPSIsIG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIFN0cmluZyBh
bmRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0
cmluZzo6Zm9ybWF0KCJvcGVyYXRvciYuJXMiLCBtX2ZpZWxkTmFtZS51dGY4KCkuZGF0YSgpKTsK
KyAgICB9CisKKyAgICBTdHJpbmcmIGZpZWxkTmFtZSgpIHsgcmV0dXJuIG1fZmllbGROYW1lOyB9
CisKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZmllbGROYW1lOwogfTsKQEAgLTU5LDQgKzc4LDYg
QEAgcHJpdmF0ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJ
T04oRG90RXhwcmVzc2lvbiwgaXNEb3RFeHByZXNzaW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRp
b25EZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAppbmRleCA3OTcwYjU5ZTU0YS4uMjRhOGQ1OWRi
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oCkBAIC0yOSw4ICsy
OSwxMSBAQAogCiAjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIgogI2luY2x1ZGUg
IldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5h
bWVkVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTM5LDEzICs0MiwxMSBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1l
c3BhY2UgQVNUIHsKIAotY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uIDogcHVibGljIE5vZGUg
eworY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uIDogcHVibGljIE5hbWVkVHlwZSB7CiBwdWJs
aWM6Ci0gICAgRW51bWVyYXRpb25EZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3Ry
aW5nJiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFR5cGU+JiYgdHlwZSwgRW51bWVyYXRpb25NZW1i
ZXJzJiYgbWVtYmVycykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAg
ICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgRW51bWVyYXRpb25EZWZpbml0aW9uKExl
eGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFt
ZWRUeXBlPiYmIHR5cGUpCisgICAgICAgIDogTmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RG
TW92ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkKLSAgICAgICAgLCBt
X21lbWJlcnMoV1RGTW92ZShtZW1iZXJzKSkKICAgICB7CiAgICAgfQogCkBAIC01NCwxNCArNTUs
MzUgQEAgcHVibGljOgogICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihjb25zdCBFbnVtZXJhdGlv
bkRlZmluaXRpb24mKSA9IGRlbGV0ZTsKICAgICBFbnVtZXJhdGlvbkRlZmluaXRpb24oRW51bWVy
YXRpb25EZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKIAotICAgIFR5cGUmIHR5cGUoKSB7IHJldHVy
biAqbV90eXBlOyB9Ci0gICAgRW51bWVyYXRpb25NZW1iZXJzJiBlbnVtZXJhdGlvbk1lbWJlcnMo
KSB7IHJldHVybiBtX21lbWJlcnM7IH0KKyAgICBib29sIGlzRW51bWVyYXRpb25EZWZpbml0aW9u
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgVW5uYW1lZFR5cGUmIHR5
cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CisKKyAgICBib29sIGFkZChFbnVtZXJhdGlvbk1lbWJl
ciYmIG1lbWJlcikKKyAgICB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9tZW1iZXJzLmFkZCht
ZW1iZXIubmFtZSgpLCBzdGQ6Om1ha2VfdW5pcXVlPEVudW1lcmF0aW9uTWVtYmVyPihXVEZNb3Zl
KG1lbWJlcikpKTsKKyAgICAgICAgcmV0dXJuICFyZXN1bHQuaXNOZXdFbnRyeTsKKyAgICB9CisK
KyAgICBFbnVtZXJhdGlvbk1lbWJlciogbWVtYmVyQnlOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkK
KyAgICB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX21lbWJlcnMuZmluZChuYW1lKTsKKyAg
ICAgICAgaWYgKGl0ZXJhdG9yID09IG1fbWVtYmVycy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgIH0K
KworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEVudW1lcmF0aW9uTWVtYmVyPj4g
ZW51bWVyYXRpb25NZW1iZXJzKCkKKyAgICB7CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEVudW1lcmF0aW9uTWVtYmVyPj4gcmVzdWx0OworICAgICAgICBmb3IgKGF1dG8m
IHBhaXIgOiBtX21lbWJlcnMpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCpwYWlyLnZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6
OlRva2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFR5cGU+IG1fdHlwZTsKLSAgICBFbnVtZXJhdGlvbk1lbWJlcnMgbV9tZW1iZXJzOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4gbV90eXBlOworICAgIEhhc2hNYXA8U3RyaW5nLCBz
dGQ6OnVuaXF1ZV9wdHI8RW51bWVyYXRpb25NZW1iZXI+PiBtX21lbWJlcnM7CiB9OwogCiB9CkBA
IC03MCw0ICs5Miw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
SExTTF9OQU1FRF9UWVBFKEVudW1lcmF0aW9uRGVmaW5pdGlvbiwgaXNFbnVtZXJhdGlvbkRlZmlu
aXRpb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIuaAppbmRleCA5
ZDlkODU0ODgzZS4uMjFlNDA4NGQxMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIu
aApAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6CiAgICAgRW51bWVyYXRpb25NZW1iZXIoY29uc3Qg
RW51bWVyYXRpb25NZW1iZXImKSA9IGRlbGV0ZTsKICAgICBFbnVtZXJhdGlvbk1lbWJlcihFbnVt
ZXJhdGlvbk1lbWJlciYmKSA9IGRlZmF1bHQ7CiAKKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVy
biBtX25hbWU7IH0KICAgICBPcHRpb25hbDxDb25zdGFudEV4cHJlc3Npb24+JiB2YWx1ZSgpIHsg
cmV0dXJuIG1fdmFsdWU7IH0KIAogcHJpdmF0ZToKQEAgLTYyLDcgKzYzLDcgQEAgcHJpdmF0ZToK
ICAgICBPcHRpb25hbDxDb25zdGFudEV4cHJlc3Npb24+IG1fdmFsdWU7CiB9OwogCi10eXBlZGVm
IFZlY3RvcjxFbnVtZXJhdGlvbk1lbWJlcj4gRW51bWVyYXRpb25NZW1iZXJzOwordXNpbmcgRW51
bWVyYXRpb25NZW1iZXJzID0gVmVjdG9yPEVudW1lcmF0aW9uTWVtYmVyPjsKIAogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNGJjMjBmZThlZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVt
YmVyTGl0ZXJhbC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVy
LmgiCisjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xMZXhlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFj
ZSBBU1QgeworCitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwgOiBwdWJsaWMgRXhwcmVz
c2lvbiB7CitwdWJsaWM6CisgICAgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKExleGVyOjpUb2tl
biYmIG9yaWdpbiwgRW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQorICAgICAg
ICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fZW51bWVyYXRpb25N
ZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCgpID0gZGVmYXVsdDsKKworICAgIEVudW1lcmF0aW9uTWVt
YmVyTGl0ZXJhbChjb25zdCBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmKSA9IGRlbGV0ZTsKKyAg
ICBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiYpID0g
ZGVmYXVsdDsKKworICAgIGJvb2wgaXNFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVy
YXRpb25NZW1iZXIoKSB7IHJldHVybiBtX2VudW1lcmF0aW9uTWVtYmVyOyB9CisKK3ByaXZhdGU6
CisgICAgRW51bWVyYXRpb25NZW1iZXImIG1fZW51bWVyYXRpb25NZW1iZXI7Cit9OworCit9CisK
K30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJT04oRW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLCBpc0VudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCgpKQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBlMzY4MzgzNjQ2ZC4uYTc4ODZmYmE2YjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJl
c3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xFeHByZXNzaW9uLmgKQEAgLTU1LDcgKzU1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9v
bCBpc0NhbGxFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNDb21tYUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc0RlcmVmZXJlbmNlRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIGlzRG90RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRmxvYXRMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmRleEV4cHJlc3Npb24oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ludGVnZXJMaXRlcmFsKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNMb2dpY2FsRXhwcmVzc2lvbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9naWNhbE5vdEV4
cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtNjcsNiArNjksNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGlzVGVybmFyeUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkSW50ZWdlckxpdGVyYWwoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxlUmVmZXJl
bmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJh
dGlvbk1lbWJlckxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiBwcml2YXRlOgog
ICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsLmgKaW5kZXggY2Jm
NTQ2OWRiZmEuLmMwMjIzNGRiYTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaApAQCAtMjgsNiAr
MjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24u
aCIKKyNpbmNsdWRlICJXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCIKICNpbmNsdWRlICJXSExTTExl
eGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQwLDIwICs0MSwzMCBAQCBjbGFzcyBG
bG9hdExpdGVyYWwgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CiBwdWJsaWM6CiAgICAgRmxvYXRMaXRl
cmFsKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgZmxvYXQgdmFsdWUpCiAgICAgICAgIDogRXhwcmVz
c2lvbihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV90eXBlKHZhbHVlKQogICAgICAgICAs
IG1fdmFsdWUodmFsdWUpCiAgICAgewogICAgIH0KIAogICAgIHZpcnR1YWwgfkZsb2F0TGl0ZXJh
bCgpID0gZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0IEZsb2F0TGl0ZXJhbChjb25zdCBGbG9hdExp
dGVyYWwmKSA9IGRlZmF1bHQ7CisgICAgRmxvYXRMaXRlcmFsKGNvbnN0IEZsb2F0TGl0ZXJhbCYp
ID0gZGVsZXRlOwogICAgIEZsb2F0TGl0ZXJhbChGbG9hdExpdGVyYWwmJikgPSBkZWZhdWx0Owog
CiAgICAgZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAKICAgICBib29s
IGlzRmxvYXRMaXRlcmFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAg
RmxvYXRMaXRlcmFsIGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIEZsb2F0TGl0ZXJhbCBy
ZXN1bHQoTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgbV92YWx1ZSk7CisgICAgICAgIGlmIChyZXN1
bHQubV90eXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICAgICAgcmVzdWx0Lm1fdHlwZS5yZXNv
bHZlKHJlc3VsdC5tX3R5cGUucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKwogcHJpdmF0ZToKKyAgICBGbG9hdExpdGVyYWxUeXBlIG1fdHlw
ZTsKICAgICBmbG9hdCBtX3ZhbHVlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2U2MGY4OThiZTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
SExTTEZsb2F0TGl0ZXJhbFR5cGUuaCIKKworI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBB
U1QgeworCitib29sIEZsb2F0TGl0ZXJhbFR5cGU6OmNhblJlc29sdmUoY29uc3QgVHlwZSYgdHlw
ZSkgY29uc3QKK3sKKyAgICBpZiAoIWlzPE5hbWVkVHlwZT4odHlwZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxOYW1lZFR5cGU+KHR5cGUp
OworICAgIGlmICghaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNh
c3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpOworICAgIGlmICghbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmlzRmxvYXRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
ICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmNhblJlcHJlc2VudEZsb2F0KCkobV92YWx1ZSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE0YmUxNTkxMzQyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlw
ZS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFJlc29sdmFibGVUeXBlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgSW50cmluc2ljczsK
KworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEZsb2F0TGl0ZXJhbFR5cGUgOiBwdWJsaWMgUmVz
b2x2YWJsZVR5cGUgeworcHVibGljOgorICAgIEZsb2F0TGl0ZXJhbFR5cGUoZmxvYXQgdmFsdWUp
CisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+
RmxvYXRMaXRlcmFsVHlwZSgpID0gZGVmYXVsdDsKKworICAgIEZsb2F0TGl0ZXJhbFR5cGUoY29u
c3QgRmxvYXRMaXRlcmFsVHlwZSYpID0gZGVsZXRlOworICAgIEZsb2F0TGl0ZXJhbFR5cGUoRmxv
YXRMaXRlcmFsVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzRmxvYXRMaXRlcmFsVHlw
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgY2FuUmVzb2x2
ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZmxvYXQgbV92
YWx1ZTsKK307CisKK30KKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xf
UkVTT0xWQUJMRV9UWVBFKEZsb2F0TGl0ZXJhbFR5cGUsIGlzRmxvYXRMaXRlcmFsVHlwZSgpKQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEZ1bmN0aW9uQXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oCmluZGV4IGNiZDcyZDRhOTBj
Li42YWI2NThlMGY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oCkBAIC0zNyw4
ICszNyw4IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi10eXBlZGVm
IFZhcmlhbnQ8TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlPiBGdW5jdGlvbkF0dHJpYnV0ZTsK
LXR5cGVkZWYgVmVjdG9yPEZ1bmN0aW9uQXR0cmlidXRlPiBBdHRyaWJ1dGVCbG9jazsKK3VzaW5n
IEZ1bmN0aW9uQXR0cmlidXRlID0gVmFyaWFudDxOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGU+
OwordXNpbmcgQXR0cmlidXRlQmxvY2sgPSBWZWN0b3I8RnVuY3Rpb25BdHRyaWJ1dGU+OwogCiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaAppbmRleCA3YTdlMGEwNjU2Yy4u
Njc2NDhmNDkzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKQEAgLTMw
LDkgKzMwLDkgQEAKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgiCiAjaW5jbHVk
ZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMTm9kZS5oIgotI2luY2x1ZGUgIldITFNM
UGFyYW1ldGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNM
VHlwZS5oIgorI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFZh
cmlhYmxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYsMTAgKzQ2LDExIEBAIHB1YmxpYzoKICAgICBlbnVt
IGNsYXNzIEVudHJ5UG9pbnRUeXBlIHsKICAgICAgICAgVmVydGV4LAogICAgICAgICBGcmFnbWVu
dCwKLSAgICAgICAgQ29tcHV0ZQorICAgICAgICBDb21wdXRlLAorICAgICAgICAvLyBGSVhNRTog
QWRkIGFuIGVudHJ5IHBvaW50IHR5cGUgZm9yIHRlc3RpbmcKICAgICB9OwogCi0gICAgRnVuY3Rp
b25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0
cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBvaW50VHlwZSwgc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBQYXJhbWV0ZXJz
JiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1hbnRpYykKKyAgICBG
dW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQXR0cmlidXRlQmxvY2sm
JiBhdHRyaWJ1dGVCbG9jaywgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IGVudHJ5UG9pbnRUeXBl
LCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1l
LCBWYXJpYWJsZURlY2xhcmF0aW9ucyYmIHBhcmFtZXRlcnMsIE9wdGlvbmFsPEFTVDo6U2VtYW50
aWM+JiYgc2VtYW50aWMsIGJvb2wgaXNPcGVyYXRvcikKICAgICAgICAgOiBtX29yaWdpbihXVEZN
b3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9hdHRyaWJ1dGVCbG9jayhXVEZNb3ZlKGF0dHJpYnV0
ZUJsb2NrKSkKICAgICAgICAgLCBtX2VudHJ5UG9pbnRUeXBlKGVudHJ5UG9pbnRUeXBlKQpAQCAt
NTcsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCiAg
ICAgICAgICwgbV9wYXJhbWV0ZXJzKFdURk1vdmUocGFyYW1ldGVycykpCiAgICAgICAgICwgbV9z
ZW1hbnRpYyhXVEZNb3ZlKHNlbWFudGljKSkKKyAgICAgICAgLCBtX2lzT3BlcmF0b3IoV1RGTW92
ZShpc09wZXJhdG9yKSkKICAgICB7CiAgICAgfQogCkBAIC02NSwyNyArNjcsMjggQEAgcHVibGlj
OgogICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oY29uc3QgRnVuY3Rpb25EZWNsYXJhdGlvbiYpID0g
ZGVsZXRlOwogICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiYmKSA9
IGRlZmF1bHQ7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbkRlZmluaXRpb24oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgQXR0cmlidXRlQmxvY2sm
IGF0dHJpYnV0ZUJsb2NrKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVCbG9jazsgfQotICAgIEFTVDo6
VHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KLSAgICBQYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgY29uc3QgT3B0aW9uYWw8RW50cnlQ
b2ludFR5cGU+JiBlbnRyeVBvaW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlQb2ludFR5
cGU7IH0KKyAgICBBU1Q6OlVubmFtZWRUeXBlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gKm1fdHlw
ZTsgfQorICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQor
ICAgIGJvb2wgaXNDYXN0KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lID09ICJvcGVyYXRvciBjYXN0
IjsgfQorICAgIGNvbnN0IFZhcmlhYmxlRGVjbGFyYXRpb25zJiBwYXJhbWV0ZXJzKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbnMmIHBhcmFt
ZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KICAgICBPcHRpb25hbDxBU1Q6OlNlbWFu
dGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9Ci0KLSAgICBMZXhlcjo6VG9r
ZW4mJiB0YWtlT3JpZ2luKCkgeyByZXR1cm4gV1RGTW92ZShtX29yaWdpbik7IH0KLSAgICBBdHRy
aWJ1dGVCbG9jayYmIHRha2VBdHRyaWJ1dGVCbG9jaygpIHsgcmV0dXJuIFdURk1vdmUobV9hdHRy
aWJ1dGVCbG9jayk7IH0KLSAgICBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4mJiB0YWtlRW50cnlQ
b2ludFR5cGUoKSB7IHJldHVybiBXVEZNb3ZlKG1fZW50cnlQb2ludFR5cGUpOyB9Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0YWtlVHlwZSgpIHsgcmV0dXJuIFdURk1vdmUobV90
eXBlKTsgfQotICAgIFN0cmluZyYmIHRha2VOYW1lKCkgeyByZXR1cm4gV1RGTW92ZShtX25hbWUp
OyB9Ci0gICAgUGFyYW1ldGVycyYmIHRha2VQYXJhbWV0ZXJzKCkgeyByZXR1cm4gV1RGTW92ZSht
X3BhcmFtZXRlcnMpOyB9Ci0gICAgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiB0YWtlU2VtYW50
aWMoKSB7IHJldHVybiBXVEZNb3ZlKG1fc2VtYW50aWMpOyB9CisgICAgYm9vbCBpc09wZXJhdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9pc09wZXJhdG9yOyB9CiAKIHByaXZhdGU6CiAgICAgTGV4ZXI6
OlRva2VuIG1fb3JpZ2luOwogICAgIEF0dHJpYnV0ZUJsb2NrIG1fYXR0cmlidXRlQmxvY2s7CiAg
ICAgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IG1fZW50cnlQb2ludFR5cGU7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEFTVDo6VHlwZT4gbV90eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVk
VHlwZT4gbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgUGFyYW1ldGVycyBtX3BhcmFt
ZXRlcnM7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbnMgbV9wYXJhbWV0ZXJzOwogICAgIE9wdGlv
bmFsPEFTVDo6U2VtYW50aWM+IG1fc2VtYW50aWM7CisgICAgYm9vbCBtX2lzT3BlcmF0b3I7CiB9
OwogCiB9CkBAIC05NCw0ICs5Nyw5IEBAIHByaXZhdGU6CiAKIH0KIAorI2RlZmluZSBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX1dITFNMX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OKFRvVmFsdWVUeXBlTmFt
ZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OldI
TFNMOjpBU1Q6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25z
dCBXZWJDb3JlOjpXSExTTDo6QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiB0eXBlKSB7IHJldHVy
biB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRnVuY3Rpb25EZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaAppbmRleCBhNDkwN2IwZDI5OC4u
YjZiN2JhMDc3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oCkBAIC01MCw2
ICs1MCw4IEBAIHB1YmxpYzoKICAgICBGdW5jdGlvbkRlZmluaXRpb24oY29uc3QgRnVuY3Rpb25E
ZWZpbml0aW9uJikgPSBkZWxldGU7CiAgICAgRnVuY3Rpb25EZWZpbml0aW9uKEZ1bmN0aW9uRGVm
aW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRnVuY3Rpb25EZWZpbml0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgQmxvY2smIGJsb2NrKCkgeyBy
ZXR1cm4gbV9ibG9jazsgfQogICAgIGJvb2wgcmVzdHJpY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVzdHJpY3RlZDsgfQogCkBAIC02NCw0ICs2Niw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19XSExTTF9GVU5DVElPTl9ERUNMQVJBVElPTihGdW5jdGlvbkRlZmlu
aXRpb24sIGlzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4
cHJlc3Npb24uaAppbmRleCA2YmI2YTBmMGRhYi4uNDNlNjBhMTA0OTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTElu
ZGV4RXhwcmVzc2lvbi5oCkBAIC00OSw2ICs0OSwyNSBAQCBwdWJsaWM6CiAgICAgSW5kZXhFeHBy
ZXNzaW9uKGNvbnN0IEluZGV4RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAgIEluZGV4RXhwcmVz
c2lvbihJbmRleEV4cHJlc3Npb24mJikgPSBkZWZhdWx0OwogCisgICAgYm9vbCBpc0luZGV4RXhw
cmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBn
ZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0
cmluZygib3BlcmF0b3JbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIH0K
KworICAgIFN0cmluZyBzZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFN0cmluZygib3BlcmF0b3ImW10iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKTsKKyAgICB9CisKKyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcoIm9wZXJhdG9yW109IiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgfQorCisgICAgRXhwcmVzc2lvbiYgaW5kZXhF
eHByZXNzaW9uKCkgeyByZXR1cm4gKm1faW5kZXg7IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9pbmRleDsKIH07CkBAIC01OSw0ICs3OCw2IEBAIHByaXZh
dGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9FWFBSRVNTSU9OKEluZGV4
RXhwcmVzc2lvbiwgaXNJbmRleEV4cHJlc3Npb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJh
bC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdl
ckxpdGVyYWwuaAppbmRleCA2ODU0ZGQyN2YwYy4uNjUwMTc0ODVlYTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50
ZWdlckxpdGVyYWwuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNp
bmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFs
VHlwZS5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDAsMjAgKzQxLDMwIEBAIGNsYXNzIEludGVnZXJMaXRlcmFsIDogcHVibGljIEV4cHJlc3Np
b24gewogcHVibGljOgogICAgIEludGVnZXJMaXRlcmFsKExleGVyOjpUb2tlbiYmIG9yaWdpbiwg
aW50IHZhbHVlKQogICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAg
ICAsIG1fdHlwZSh2YWx1ZSkKICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9
CiAKICAgICB2aXJ0dWFsIH5JbnRlZ2VyTGl0ZXJhbCgpID0gZGVmYXVsdDsKIAotICAgIGV4cGxp
Y2l0IEludGVnZXJMaXRlcmFsKGNvbnN0IEludGVnZXJMaXRlcmFsJikgPSBkZWZhdWx0OworICAg
IEludGVnZXJMaXRlcmFsKGNvbnN0IEludGVnZXJMaXRlcmFsJikgPSBkZWxldGU7CiAgICAgSW50
ZWdlckxpdGVyYWwoSW50ZWdlckxpdGVyYWwmJikgPSBkZWZhdWx0OwogCiAgICAgaW50IHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogCiAgICAgYm9vbCBpc0ludGVnZXJMaXRlcmFs
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgSW50ZWdlckxpdGVyYWwg
Y2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgSW50ZWdlckxpdGVyYWwgcmVzdWx0KExleGVy
OjpUb2tlbihvcmlnaW4oKSksIG1fdmFsdWUpOworICAgICAgICBpZiAocmVzdWx0Lm1fdHlwZS5y
ZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUucmVzb2x2ZShyZXN1bHQu
bV90eXBlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKIHByaXZhdGU6CisgICAgSW50ZWdlckxpdGVyYWxUeXBlIG1fdHlwZTsKICAgICBp
bnQgbV92YWx1ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMjMzM2FmZWE1YwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEludGVnZXJMaXRlcmFsVHlwZS5jcHAKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xJ
bnRlZ2VyTGl0ZXJhbFR5cGUuaCIKKworI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1Qg
eworCitib29sIEludGVnZXJMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShjb25zdCBUeXBlJiB0eXBl
KSBjb25zdAoreworICAgIGlmICghaXM8TmFtZWRUeXBlPih0eXBlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PE5hbWVkVHlwZT4odHlwZSk7
CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2Fz
dDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAgaWYgKCFuYXRpdmVUeXBl
RGVjbGFyYXRpb24uaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
bmF0aXZlVHlwZURlY2xhcmF0aW9uLmNhblJlcHJlc2VudEludGVnZXIoKShtX3ZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit9CisKK30KKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkyZjQxM2I3OWM3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVy
YWxUeXBlLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5cGUuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBJbnRyaW5z
aWNzOworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgSW50ZWdlckxpdGVyYWxUeXBlIDogcHVi
bGljIFJlc29sdmFibGVUeXBlIHsKK3B1YmxpYzoKKyAgICBJbnRlZ2VyTGl0ZXJhbFR5cGUoaW50
IHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgfkludGVnZXJMaXRlcmFsVHlwZSgpID0gZGVmYXVsdDsKKworICAgIEludGVnZXJMaXRl
cmFsVHlwZShjb25zdCBJbnRlZ2VyTGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBJbnRlZ2Vy
TGl0ZXJhbFR5cGUoSW50ZWdlckxpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wg
aXNJbnRlZ2VyTGl0ZXJhbFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisK
KyAgICBib29sIGNhblJlc29sdmUoY29uc3QgVHlwZSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIGludCBtX3ZhbHVlOworfTsKKworfQorCit9CisKK30KKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19XSExTTF9SRVNPTFZBQkxFX1RZUEUoSW50ZWdlckxpdGVyYWxUeXBlLCBpc0lu
dGVnZXJMaXRlcmFsVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY3ZGIwMDAxNmEwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBl
LmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE5v
ZGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1l
c3BhY2UgQVNUIHsKKworY2xhc3MgTmFtZWRUeXBlIDogcHVibGljIFR5cGUgeworcHVibGljOgor
ICAgIE5hbWVkVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUpCisgICAg
ICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fbmFtZShXVEZNb3Zl
KG5hbWUpKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5OYW1lZFR5cGUoKSA9IGRlZmF1
bHQ7CisKKyAgICBOYW1lZFR5cGUoY29uc3QgTmFtZWRUeXBlJikgPSBkZWxldGU7CisgICAgTmFt
ZWRUeXBlKE5hbWVkVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBjb25zdCBMZXhlcjo6VG9rZW4m
IG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkg
eyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICBib29sIGlzTmFtZWRUeXBlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1R5cGVEZWZpbml0aW9uKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTdHJ1Y3R1cmVEZWZp
bml0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbnVt
ZXJhdGlvbkRlZmluaXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc05hdGl2ZVR5cGVEZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisK
KyAgICB2aXJ0dWFsIGNvbnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlz
OyB9CisgICAgdmlydHVhbCBUeXBlJiB1bmlmeU5vZGUoKSB7IHJldHVybiAqdGhpczsgfQorCitw
cml2YXRlOgorICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKKyAgICBTdHJpbmcgbV9uYW1lOwor
fTsKKworfQorCit9CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNM
X05BTUVEX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6Ok5hbWVkVHlw
ZSYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZUEUoTmFtZWRUeXBl
LCBpc05hbWVkVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24uaAppbmRleCAwMTBlNmViYTcwMC4uYTgxNGJlNjhlMjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgKQEAgLTM3LDggKzM3LDgg
QEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBw
dWJsaWMgRnVuY3Rpb25EZWNsYXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0cmli
dXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBvaW50VHlwZSwgc3RkOjp1
bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBQYXJhbWV0ZXJzJiYg
cGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1hbnRpYywgYm9vbCByZXN0
cmljdGVkKQotICAgICAgICA6IEZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZShvcmlnaW4pLCBX
VEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSwgV1RGTW92ZShlbnRyeVBvaW50VHlwZSksIFdURk1vdmUo
dHlwZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoc2VtYW50
aWMpKQorICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiYm
IGZ1bmN0aW9uRGVjbGFyYXRpb24sIGJvb2wgcmVzdHJpY3RlZCkKKyAgICAgICAgOiBGdW5jdGlv
bkRlY2xhcmF0aW9uKFdURk1vdmUoZnVuY3Rpb25EZWNsYXJhdGlvbikpCiAgICAgICAgICwgbV9y
ZXN0cmljdGVkKHJlc3RyaWN0ZWQpCiAgICAgewogICAgIH0KQEAgLTQ4LDYgKzQ4LDggQEAgcHVi
bGljOgogICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oY29uc3QgTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzTmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwog
ICAgIGJvb2wgcmVzdHJpY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3RlZDsgfQogCiBw
cml2YXRlOgpAQCAtNjAsNCArNjIsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfV0hMU0xfRlVOQ1RJT05fREVDTEFSQVRJT04oTmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiwgaXNOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaAppbmRleCAzMjBhYmMzYzQ3NS4uYzY3ZWM1MTVh
ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCkBAIC0yOCw3ICsy
OCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNp
bmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgogI2luY2x1
ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTM4LDExICszOCwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNU
IHsKIAotY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHVibGljIFR5cGUgeworY2xhc3Mg
TmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHVibGljIE5hbWVkVHlwZSB7CiBwdWJsaWM6CiAgICAg
TmF0aXZlVHlwZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFt
ZSwgVHlwZUFyZ3VtZW50cyYmIHR5cGVBcmd1bWVudHMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RG
TW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgICAgICA6
IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90
eXBlQXJndW1lbnRzKFdURk1vdmUodHlwZUFyZ3VtZW50cykpCiAgICAgewogICAgIH0KQEAgLTUy
LDE4ICs1MSw0NyBAQCBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURlY2xhcmF0aW9uKGNvbnN0IE5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bihOYXRpdmVUeXBlRGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OwogCisgICAgYm9vbCBpc05hdGl2
ZVR5cGVEZWNsYXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFN0cmlu
ZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIFR5cGVBcmd1bWVudHMmIHR5cGVBcmd1
bWVudHMoKSB7IHJldHVybiBtX3R5cGVBcmd1bWVudHM7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGJvb2wgaXNJ
bnQoKSBjb25zdCB7IHJldHVybiBtX2lzSW50OyB9CisgICAgYm9vbCBpc051bWJlcigpIGNvbnN0
IHsgcmV0dXJuIG1faXNOdW1iZXI7IH0KKyAgICBib29sIGlzRmxvYXRpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2lzRmxvYXRpbmc7IH0KKyAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9pc1ZlY3RvcjsgfQorICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiBtX2lzTWF0
cml4OyB9CisgICAgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2lzVGV4dHVyZTsg
fQorICAgIGJvb2wgaXNTaWduZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2lnbmVkOyB9CisgICAg
Y29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGludCk+JiBjYW5SZXByZXNlbnRJbnRlZ2VyKCkgY29u
c3QgeyByZXR1cm4gbV9jYW5SZXByZXNlbnRJbnRlZ2VyOyB9CisgICAgY29uc3Qgc3RkOjpmdW5j
dGlvbjxib29sKHVuc2lnbmVkKT4mIGNhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcigpIGNvbnN0
IHsgcmV0dXJuIG1fY2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyOyB9CisgICAgY29uc3Qgc3Rk
OjpmdW5jdGlvbjxib29sKGZsb2F0KT4mIGNhblJlcHJlc2VudEZsb2F0KCkgY29uc3QgeyByZXR1
cm4gbV9jYW5SZXByZXNlbnRGbG9hdDsgfQorCisgICAgdm9pZCBzZXRJc0ludCgpIHsgbV9pc0lu
dCA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzTnVtYmVyKCkgeyBtX2lzTnVtYmVyID0gdHJ1ZTsg
fQorICAgIHZvaWQgc2V0SXNGbG9hdGluZygpIHsgbV9pc0Zsb2F0aW5nID0gdHJ1ZTsgfQorICAg
IHZvaWQgc2V0SXNWZWN0b3IoKSB7IG1faXNWZWN0b3IgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRJ
c01hdHJpeCgpIHsgbV9pc01hdHJpeCA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzVGV4dHVyZSgp
IHsgbV9pc1RleHR1cmUgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRJc1NpZ25lZCgpIHsgbV9pc1Np
Z25lZCA9IHRydWU7IH0KKyAgICB2b2lkIHNldENhblJlcHJlc2VudEludGVnZXIoc3RkOjpmdW5j
dGlvbjxib29sKGludCk+JiYgY2FuUmVwcmVzZW50KSB7IG1fY2FuUmVwcmVzZW50SW50ZWdlciA9
IFdURk1vdmUoY2FuUmVwcmVzZW50KTsgfQorICAgIHZvaWQgc2V0Q2FuUmVwcmVzZW50VW5zaWdu
ZWRJbnRlZ2VyKHN0ZDo6ZnVuY3Rpb248Ym9vbCh1bnNpZ25lZCk+JiYgY2FuUmVwcmVzZW50KSB7
IG1fY2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyID0gV1RGTW92ZShjYW5SZXByZXNlbnQpOyB9
CisgICAgdm9pZCBzZXRDYW5SZXByZXNlbnRGbG9hdChzdGQ6OmZ1bmN0aW9uPGJvb2woZmxvYXQp
PiYmIGNhblJlcHJlc2VudCkgeyBtX2NhblJlcHJlc2VudEZsb2F0ID0gV1RGTW92ZShjYW5SZXBy
ZXNlbnQpOyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIFN0
cmluZyBtX25hbWU7CiAgICAgVHlwZUFyZ3VtZW50cyBtX3R5cGVBcmd1bWVudHM7CisgICAgc3Rk
OjpmdW5jdGlvbjxib29sKGludCk+IG1fY2FuUmVwcmVzZW50SW50ZWdlcjsKKyAgICBzdGQ6OmZ1
bmN0aW9uPGJvb2wodW5zaWduZWQpPiBtX2NhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcjsKKyAg
ICBzdGQ6OmZ1bmN0aW9uPGJvb2woZmxvYXQpPiBtX2NhblJlcHJlc2VudEZsb2F0OworICAgIGJv
b2wgbV9pc0ludCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzTnVtYmVyIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faXNGbG9hdGluZyB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzVmVjdG9yIHsgZmFs
c2UgfTsKKyAgICBib29sIG1faXNNYXRyaXggeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1RleHR1
cmUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1NpZ25lZCB7IGZhbHNlIH07CiB9OwogCiB9CkBA
IC03Miw0ICsxMDAsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
V0hMU0xfTkFNRURfVFlQRShOYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlzTmF0aXZlVHlwZURlY2xh
cmF0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgKaW5kZXggZWU2NDdjZjlkMzku
LmZjZDg4ZWFkNDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNp
bmNsdWRlICJXSExTTE51bGxMaXRlcmFsVHlwZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTQ1LDEyICs0NiwyMSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5OdWxsTGl0ZXJhbCgp
ID0gZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0IE51bGxMaXRlcmFsKGNvbnN0IE51bGxMaXRlcmFs
JikgPSBkZWZhdWx0OworICAgIE51bGxMaXRlcmFsKGNvbnN0IE51bGxMaXRlcmFsJikgPSBkZWxl
dGU7CiAgICAgTnVsbExpdGVyYWwoTnVsbExpdGVyYWwmJikgPSBkZWZhdWx0OwogCiAgICAgYm9v
bCBpc051bGxMaXRlcmFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAg
TnVsbExpdGVyYWwgY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBO
dWxsTGl0ZXJhbChMZXhlcjo6VG9rZW4ob3JpZ2luKCkpKTsKKyAgICAgICAgaWYgKHJlc3VsdC5t
X3R5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUo
cmVzdWx0Lm1fdHlwZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCiBwcml2YXRlOgorICAgIE51bGxMaXRlcmFsVHlwZSBtX3R5cGU7CiB9
OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWxUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uZmUzYzE0YThhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbFR5cGUu
Y3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWxUeXBlLmgiCisK
KyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworYm9vbCBOdWxsTGl0ZXJhbFR5
cGU6OmNhblJlc29sdmUoY29uc3QgVHlwZSYgdHlwZSkgY29uc3QKK3sKKyAgICBpZiAoIWlzPFVu
bmFtZWRUeXBlPih0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIHVubmFt
ZWRUeXBlID0gZG93bmNhc3Q8VW5uYW1lZFR5cGU+KHR5cGUpOworICAgIGlmICghaXM8UmVmZXJl
bmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQW5vbnltb3VzVmFyaWFibGVEZWNs
YXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TnVsbExpdGVyYWxUeXBlLmgKc2ltaWxhcml0eSBpbmRleCA3NSUKcmVuYW1lIGZyb20gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQW5vbnltb3VzVmFyaWFibGVE
ZWNsYXJhdGlvbi5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaAppbmRleCBlZjYxZWQxMjYxOS4uOGYxOGMyMmYz
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaApAQCAtMjcsMzEg
KzI3LDMwIEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5o
IgotI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmFibGVUeXBl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAorY2xhc3Mg
SW50cmluc2ljczsKKwogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIEFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24gOiBwdWJsaWMgVmFsdWUgeworY2xhc3MgTnVsbExpdGVyYWxUeXBlIDogcHVi
bGljIFJlc29sdmFibGVUeXBlIHsKIHB1YmxpYzoKLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xh
cmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbikKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3Zl
KG9yaWdpbikpCi0gICAgewotICAgIH0KKyAgICBOdWxsTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7
CisKKyAgICB2aXJ0dWFsIH5OdWxsTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0
dWFsIH5Bbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKCkgPSBkZWZhdWx0OworICAgIE51bGxM
aXRlcmFsVHlwZShjb25zdCBOdWxsTGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBOdWxsTGl0
ZXJhbFR5cGUoTnVsbExpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKIAotICAgIEFub255bW91c1Zh
cmlhYmxlRGVjbGFyYXRpb24oY29uc3QgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYpID0g
ZGVsZXRlOwotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oQW5vbnltb3VzVmFyaWFi
bGVEZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CisgICAgYm9vbCBpc051bGxMaXRlcmFsVHlwZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIExleGVyOjpUb2tlbiBvcmln
aW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIGJvb2wgY2FuUmVzb2x2ZShjb25z
dCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1f
b3JpZ2luOwogfTsKIAogfQpAQCAtNjAsNCArNTksNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfUkVTT0xWQUJMRV9UWVBFKE51bGxMaXRlcmFsVHlwZSwg
aXNOdWxsTGl0ZXJhbFR5cGUoKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAppbmRleCAx
NTI5NDI2YTJlZC4uNjNjMjA5M2M1MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaApAQCAtMzksOCAr
MzksOCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgUG9pbnRlclR5cGUgOiBwdWJsaWMgUmVm
ZXJlbmNlVHlwZSB7CiBwdWJsaWM6Ci0gICAgUG9pbnRlclR5cGUoTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBTdHJpbmcmJiBhZGRyZXNzU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBlbGVtZW50
VHlwZSkKLSAgICAgICAgOiBSZWZlcmVuY2VUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShh
ZGRyZXNzU3BhY2UpLCBXVEZNb3ZlKGVsZW1lbnRUeXBlKSkKKyAgICBQb2ludGVyVHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UsIHN0ZDo6dW5pcXVl
X3B0cjxVbm5hbWVkVHlwZT4gZWxlbWVudFR5cGUpCisgICAgICAgIDogUmVmZXJlbmNlVHlwZShX
VEZNb3ZlKG9yaWdpbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCiAgICAg
ewogICAgIH0KIApAQCAtNDksMTEgKzQ5LDExIEBAIHB1YmxpYzoKICAgICBQb2ludGVyVHlwZShj
b25zdCBQb2ludGVyVHlwZSYpID0gZGVsZXRlOwogICAgIFBvaW50ZXJUeXBlKFBvaW50ZXJUeXBl
JiYpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1BvaW50ZXJUeXBlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkg
Y29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBv
aW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBTdHJpbmcoYWRkcmVzc1NwYWNlKCkp
LCBlbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgYWRkcmVzc1NwYWNlKCksIGVs
ZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtNjUsNiArNjUsNiBA
QCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShQb2lu
dGVyVHlwZSwgaXNQb2ludGVyVHlwZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9V
Tk5BTUVEX1RZUEUoUG9pbnRlclR5cGUsIGlzUG9pbnRlclR5cGUoKSkKIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCmluZGV4IGJhMzhhNWMwMWVh
Li5kMDVhNzJjMWZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLmgKQEAgLTUxLDEwICs1MSwzMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAg
dmlydHVhbCBTdHJpbmcgZ2V0RnVuY3Rpb25OYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
U3RyaW5nIHNldEZ1bmN0aW9uTmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBh
bmRGdW5jdGlvbk5hbWUoKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIHNldFBvc3NpYmxlR2V0T3Zl
cmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFy
YXRpb24+LCAxPiYgb3ZlcmxvYWRzKQorICAgIHsKKyAgICAgICAgbV9wb3NzaWJsZUdldE92ZXJs
b2FkcyA9IG92ZXJsb2FkczsKKyAgICB9CisgICAgdm9pZCBzZXRQb3NzaWJsZVNldE92ZXJsb2Fk
cyhjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9u
PiwgMT4mIG92ZXJsb2FkcykKKyAgICB7CisgICAgICAgIG1fcG9zc2libGVTZXRPdmVybG9hZHMg
PSBvdmVybG9hZHM7CisgICAgfQorICAgIHZvaWQgc2V0UG9zc2libGVBbmRPdmVybG9hZHMoY29u
c3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+
JiBvdmVybG9hZHMpCisgICAgeworICAgICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3Zl
cmxvYWRzOworICAgIH0KKwogICAgIEV4cHJlc3Npb24mIGJhc2UoKSB7IHJldHVybiAqbV9iYXNl
OyB9CiAKIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fYmFzZTsK
KyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwg
MT4gbV9wb3NzaWJsZUdldE92ZXJsb2FkczsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZVNldE92ZXJsb2FkczsKKyAg
ICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4g
bV9wb3NzaWJsZUFuZE92ZXJsb2FkczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFF1YWxpZmllci5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUXVhbGlmaWVyLmgKaW5kZXggMzMz
ZjA1MjI0NDEuLmY3Y2QyZmRmZmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xRdWFsaWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xRdWFsaWZpZXIuaApAQCAtNDYsNyArNDYsNyBA
QCBlbnVtIGNsYXNzIFF1YWxpZmllciB7CiAgICAgU2FtcGxlCiB9OwogCi10eXBlZGVmIFZlY3Rv
cjxRdWFsaWZpZXI+IFF1YWxpZmllcnM7Cit1c2luZyBRdWFsaWZpZXJzID0gVmVjdG9yPFF1YWxp
Zmllcj47CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5oCmluZGV4IGE0YzE0Y2UxY2YzLi5jZDU1NjMyMGRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5B
QkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlv
bi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExT
TFZhcmlhYmxlUmVmZXJlbmNlLmgiCkBAIC01Miw4ICs1Miw4IEBAIHB1YmxpYzoKICAgICBSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVf
cHRyPEV4cHJlc3Npb24+IGxWYWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tl
bihvcmlnaW4pKQogICAgICAgICAsIG1fbFZhbHVlKFdURk1vdmUobFZhbHVlKSkKLSAgICAgICAg
LCBtX29sZFZhbHVlKExleGVyOjpUb2tlbihvcmlnaW4pKQotICAgICAgICAsIG1fbmV3VmFsdWUo
V1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fb2xkVmFsdWUoTGV4ZXI6OlRva2VuKG9yaWdp
biksIFF1YWxpZmllcnMoKSwgbnVsbHB0ciwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0
cikKKyAgICAgICAgLCBtX25ld1ZhbHVlKFdURk1vdmUob3JpZ2luKSwgUXVhbGlmaWVycygpLCBu
dWxscHRyLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKQogICAgIHsKICAgICB9CiAK
QEAgLTg3LDE1ICs4NywxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1JlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBFeHByZXNz
aW9uJiBsVmFsdWUoKSB7IHJldHVybiAqbV9sVmFsdWU7IH0KLSAgICBBbm9ueW1vdXNWYXJpYWJs
ZURlY2xhcmF0aW9uJiBvbGRWYWx1ZSgpIHsgcmV0dXJuIG1fb2xkVmFsdWU7IH0KLSAgICBBbm9u
eW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJiBuZXdWYWx1ZSgpIHsgcmV0dXJuIG1fbmV3VmFsdWU7
IH0KKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uJiBvbGRWYWx1ZSgpIHsgcmV0dXJuIG1fb2xkVmFs
dWU7IH0KKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uJiBuZXdWYWx1ZSgpIHsgcmV0dXJuIG1fbmV3
VmFsdWU7IH0KICAgICBFeHByZXNzaW9uJiBuZXdWYWx1ZUV4cHJlc3Npb24oKSB7IHJldHVybiAq
bV9uZXdWYWx1ZUV4cHJlc3Npb247IH0KICAgICBFeHByZXNzaW9uJiByZXN1bHRFeHByZXNzaW9u
KCkgeyByZXR1cm4gKm1fcmVzdWx0RXhwcmVzc2lvbjsgfQogCiBwcml2YXRlOgogICAgIHN0ZDo6
dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2xWYWx1ZTsKLSAgICBBbm9ueW1vdXNWYXJpYWJsZURl
Y2xhcmF0aW9uIG1fb2xkVmFsdWU7Ci0gICAgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiBt
X25ld1ZhbHVlOworICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbV9vbGRWYWx1ZTsKKyAgICBWYXJp
YWJsZURlY2xhcmF0aW9uIG1fbmV3VmFsdWU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Np
b24+IG1fbmV3VmFsdWVFeHByZXNzaW9uOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9u
PiBtX3Jlc3VsdEV4cHJlc3Npb247CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oCmluZGV4IDIy
NTdmOWJlMjQwLi41ZDI5ZmZkNWI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaApAQCAtMjgs
NyArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTExleGVyLmgi
Ci0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zNywxMSArMzcsMTggQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAK
LWNsYXNzIFJlZmVyZW5jZVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBSZWZlcmVuY2VUeXBl
IDogcHVibGljIFVubmFtZWRUeXBlIHsKIHB1YmxpYzoKLSAgICBSZWZlcmVuY2VUeXBlKExleGVy
OjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgYWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8
VHlwZT4mJiBlbGVtZW50VHlwZSkKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
Ci0gICAgICAgICwgbV9hZGRyZXNzU3BhY2UoV1RGTW92ZShhZGRyZXNzU3BhY2UpKQorICAgIGVu
dW0gY2xhc3MgQWRkcmVzc1NwYWNlIHsKKyAgICAgICAgQ29uc3RhbnQsCisgICAgICAgIERldmlj
ZSwKKyAgICAgICAgVGhyZWFkZ3JvdXAsCisgICAgICAgIFRocmVhZAorICAgIH07CisKKyAgICBS
ZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJlc3NT
cGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAgICAg
ICA6IFVubmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgLCBtX2FkZHJlc3NTcGFj
ZShhZGRyZXNzU3BhY2UpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShXVEZNb3ZlKGVsZW1lbnRU
eXBlKSkKICAgICB7CiAgICAgfQpAQCAtNTAsMTggKzU3LDE1IEBAIHB1YmxpYzoKIAogICAgIFJl
ZmVyZW5jZVR5cGUoY29uc3QgUmVmZXJlbmNlVHlwZSYpID0gZGVsZXRlOwogICAgIFJlZmVyZW5j
ZVR5cGUoUmVmZXJlbmNlVHlwZSYmKSA9IGRlZmF1bHQ7Ci0gICAgCi0gICAgVHlwZSYgZWxlbWVu
dFR5cGUoKSB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgY29u
c3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQotICAg
IGNvbnN0IFN0cmluZyYgYWRkcmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3Bh
Y2U7IH0KLSAgICBjb25zdCBUeXBlJiBlbGVtZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX2Vs
ZW1lbnRUeXBlOyB9CisgICAgYm9vbCBpc1JlZmVyZW5jZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBmYWxzZTsgfQorCisgICAgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9CisgICAgVW5uYW1lZFR5cGUmIGVsZW1lbnRUeXBl
KCkgY29uc3QgeyByZXR1cm4gKm1fZWxlbWVudFR5cGU7IH0KIAogcHJpdmF0ZToKLSAgICBMZXhl
cjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgU3RyaW5nIG1fYWRkcmVzc1NwYWNlOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxUeXBlPiBtX2VsZW1lbnRUeXBlOworICAgIEFkZHJlc3NTcGFjZSBtX2FkZHJl
c3NTcGFjZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IG1fZWxlbWVudFR5cGU7
CiB9OwogCiB9CkBAIC03MCw0ICs3NCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoUmVmZXJlbmNlVHlwZSwgaXNSZWZlcmVuY2VU
eXBlKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUmVzb2x2YWJsZVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc29sdmFibGVUeXBlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZmOWJlNTZhM2VhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb2x2YWJsZVR5
cGUuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xV
bm5hbWVkVHlwZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgUmVzb2x2YWJs
ZVR5cGUgOiBwdWJsaWMgVHlwZSB7CitwdWJsaWM6CisgICAgUmVzb2x2YWJsZVR5cGUoKSA9IGRl
ZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5SZXNvbHZhYmxlVHlwZSgpID0gZGVmYXVsdDsKKworICAg
IFJlc29sdmFibGVUeXBlKGNvbnN0IFJlc29sdmFibGVUeXBlJikgPSBkZWxldGU7CisgICAgUmVz
b2x2YWJsZVR5cGUoUmVzb2x2YWJsZVR5cGUmJikgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBi
b29sIGlzRmxvYXRMaXRlcmFsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzSW50ZWdlckxpdGVyYWxUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNOdWxsTGl0ZXJhbFR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCBjYW5SZXNvbHZlKGNvbnN0
IFR5cGUmKSBjb25zdCA9IDA7CisKKyAgICBVbm5hbWVkVHlwZSogcmVzb2x2ZWRUeXBlKCkgeyBy
ZXR1cm4gbV9yZXNvbHZlZFR5cGUuZ2V0KCk7IH0KKworICAgIHZvaWQgcmVzb2x2ZShzdGQ6OnVu
aXF1ZV9wdHI8VW5uYW1lZFR5cGU+JiYgdHlwZSkKKyAgICB7CisgICAgICAgIG1fcmVzb2x2ZWRU
eXBlID0gV1RGTW92ZSh0eXBlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVf
cHRyPFVubmFtZWRUeXBlPiBtX3Jlc29sdmVkVHlwZTsKK307CisKK30KKworfQorCit9CisKKyNk
ZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9SRVNPTFZBQkxFX1RZUEUoVG9WYWx1
ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNU
eXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlc29sdmFibGVUeXBlJiB0eXBlKSB7IHJl
dHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWE4ZThhMWRmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFu
dGljLmNwcApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUp
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMu
aCIKKworI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5
cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZl
cmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2Jv
b2wgUmVzb3VyY2VTZW1hbnRpYzo6aXNBY2NlcHRhYmxlVHlwZShjb25zdCBBU1Q6OlVubmFtZWRU
eXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgTW9kZTo6VW5vcmRlcmVkQWNjZXNzVmll
dzoKKyAgICAgICAgaWYgKGlzPFJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkgeworICAgICAg
ICAgICAgYXV0byYgcmVmZXJlbmNlVHlwZSA9IGRvd25jYXN0PFJlZmVyZW5jZVR5cGU+KHVubmFt
ZWRUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFjZSgp
ID09IFJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQgfHwgcmVmZXJlbmNlVHlw
ZS5hZGRyZXNzU3BhY2UoKSA9PSBSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmljZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGlzPFR5cGVSZWZlcmVuY2U+KHVubmFt
ZWRUeXBlKSkgeworICAgICAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PFR5
cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJl
bmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAgIGlmIChpczxOYXRpdmVUeXBlRGVjbGFy
YXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNv
bHZlZFR5cGUoKSkuaXNUZXh0dXJlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGNhc2UgTW9kZTo6VGV4dHVyZToKKyAgICAgICAgaWYgKGlzPFJlZmVyZW5jZVR5cGU+
KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZWZlcmVuY2VUeXBl
Pih1bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gUmVmZXJlbmNlVHlwZTo6QWRkcmVzc1Nw
YWNlOjpDb25zdGFudDsKKyAgICAgICAgaWYgKGlzPEFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChpczxUeXBlUmVmZXJlbmNlPih1
bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2Fz
dDxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICBBU1NFUlQodHlwZVJl
ZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8TmF0aXZlVHlwZURl
Y2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2Uu
cmVzb2x2ZWRUeXBlKCkpLmlzVGV4dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBjYXNlIE1vZGU6OkJ1ZmZlcjoKKyAgICAgICAgaWYgKGlzPFJlZmVyZW5jZVR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZWZlcmVuY2VU
eXBlPih1bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gUmVmZXJlbmNlVHlwZTo6QWRkcmVz
c1NwYWNlOjpDb25zdGFudDsKKyAgICAgICAgcmV0dXJuIGlzPEFycmF5VHlwZT4odW5uYW1lZFR5
cGUpOworICAgIGNhc2UgTW9kZTo6U2FtcGxlcjoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5u
YW1lZFR5cGUsIGludHJpbnNpY3Muc2FtcGxlclR5cGUoKSk7CisgICAgfQorfQorCitib29sIFJl
c291cmNlU2VtYW50aWM6OmlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVy
SXRlbURpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBTaGFkZXJJdGVtRGlyZWN0aW9uOjpJbnB1dDsK
K30KKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmgK
aW5kZXggYWIzYjQzMGY0NDIuLjZhZTMxN2EzNTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1h
bnRpYy5oCkBAIC02Miw2ICs2MiwxOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgdW5zaWduZWQgc3BhY2UoKSBjb25zdCB7IHJl
dHVybiBtX3NwYWNlOyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVzb3VyY2VTZW1h
bnRpYyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tb2RlID09IG90aGVy
Lm1fbW9kZSAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXggJiYgbV9zcGFjZSA9PSBvdGhlci5t
X3NwYWNlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZXNvdXJjZVNlbWFu
dGljJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICB9CisKKyAgICBib29sIGlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVk
VHlwZSYsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQWNj
ZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29uc3Qg
RnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisKIHByaXZhdGU6CiAgICAgTW9k
ZSBtX21vZGU7CiAgICAgdW5zaWduZWQgbV9pbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJldHVybi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKaW5kZXggYzViZmM5ZTQy
ODYuLmFjOTMyM2QyNDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaApAQCAtNTQsOCArNTQsMTEgQEAgcHVibGljOgog
CiAgICAgRXhwcmVzc2lvbiogdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CiAKKyAg
ICB2b2lkIHNldEZ1bmN0aW9uKEZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25EZWZpbml0aW9u
KSB7IG1fZnVuY3Rpb24gPSBmdW5jdGlvbkRlZmluaXRpb247IH0KKwogcHJpdmF0ZToKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV92YWx1ZTsgLy8gbnVsbGFibGUKKyAgICBGdW5j
dGlvbkRlZmluaXRpb24qIG1fZnVuY3Rpb247CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTZW1hbnRpYy5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU2VtYW50aWMuaAppbmRleCBi
MDUyYjkyZWEyNi4uYjJjMDkwYmYxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNlbWFudGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU2VtYW50aWMuaApAQCAtMzksNyArMzksNyBA
QCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotdHlwZWRlZiBWYXJpYW50
PEJ1aWx0SW5TZW1hbnRpYywgUmVzb3VyY2VTZW1hbnRpYywgU3BlY2lhbGl6YXRpb25Db25zdGFu
dFNlbWFudGljLCBTdGFnZUluT3V0U2VtYW50aWM+IFNlbWFudGljOwordXNpbmcgU2VtYW50aWMg
PSBWYXJpYW50PEJ1aWx0SW5TZW1hbnRpYywgUmVzb3VyY2VTZW1hbnRpYywgU3BlY2lhbGl6YXRp
b25Db25zdGFudFNlbWFudGljLCBTdGFnZUluT3V0U2VtYW50aWM+OwogCiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxp
emF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMjRiYWVjYzA0MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNw
ZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaCIKKworI2luY2x1ZGUgIldI
TFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgorI2luY2x1ZGUg
IldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitib29sIFNwZWNpYWxpemF0aW9uQ29uc3Rh
bnRTZW1hbnRpYzo6aXNBY2NlcHRhYmxlVHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5h
bWVkVHlwZSwgY29uc3QgSW50cmluc2ljcyYpIGNvbnN0Cit7CisgICAgaWYgKCFpczxUeXBlUmVm
ZXJlbmNlPih1bm5hbWVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiB0
eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpOworICAg
IEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBpZiAoIWlzPE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpLmlzTnVtYmVyKCk7Cit9CisKK2Jvb2wg
U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljOjppc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVt
RGlyZWN0aW9uKFNoYWRlckl0ZW1EaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRl
ZmluaXRpb24mKSBjb25zdAoreworICAgIHJldHVybiBkaXJlY3Rpb24gPT0gU2hhZGVySXRlbURp
cmVjdGlvbjo6SW5wdXQ7Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRp
b25Db25zdGFudFNlbWFudGljLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaAppbmRleCA5YTdjNTNm
ZDRiNi4uOWE4NGFiOWNmYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0
aW9uQ29uc3RhbnRTZW1hbnRpYy5oCkBAIC00OCw2ICs0OCwxOSBAQCBwdWJsaWM6CiAgICAgU3Bl
Y2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljKGNvbnN0IFNwZWNpYWxpemF0aW9uQ29uc3RhbnRT
ZW1hbnRpYyYpID0gZGVsZXRlOwogICAgIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyhT
cGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmJikgPSBkZWZhdWx0OwogCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIGlzQWNjZXB0YWJsZVR5cGUoY29u
c3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdCBvdmVycmlkZTsK
KyAgICBib29sIGlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURp
cmVjdGlvbiwgY29uc3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisKIHBy
aXZhdGU6CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjAzYzQ2MDg4ZmYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFn
ZUluT3V0U2VtYW50aWMuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3RhZ2VJ
bk91dFNlbWFudGljLmgiCisKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUg
IldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRl
ZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExT
TEludHJpbnNpY3MuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKwor
Ym9vbCBTdGFnZUluT3V0U2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5h
bWVkVHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdAoreworICAgIGlm
IChpczxBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
aWYgKCFpczxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5u
YW1lZFR5cGUpOworICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAg
ICBhdXRvJiByZXNvbHZlZFR5cGUgPSAqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKTsKKyAg
ICBpZiAoaXM8RW51bWVyYXRpb25EZWZpbml0aW9uPihyZXNvbHZlZFR5cGUpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocmVzb2x2ZWRU
eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiA9IGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVz
b2x2ZWRUeXBlKCkpOworICAgIHJldHVybiBuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNOdW1iZXIo
KQorICAgICAgICB8fCBuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNWZWN0b3IoKQorICAgICAgICB8
fCBuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNNYXRyaXgoKTsKK30KKworYm9vbCBTdGFnZUluT3V0
U2VtYW50aWM6OmlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURp
cmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZp
bml0aW9uKSBjb25zdAoreworICAgIHN3aXRjaCAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBv
aW50VHlwZSgpKSB7CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlw
ZTo6VmVydGV4OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEZ1bmN0aW9uRGVjbGFy
YXRpb246OkVudHJ5UG9pbnRUeXBlOjpGcmFnbWVudDoKKyAgICAgICAgcmV0dXJuIGRpcmVjdGlv
biA9PSBTaGFkZXJJdGVtRGlyZWN0aW9uOjpJbnB1dDsKKyAgICBjYXNlIEZ1bmN0aW9uRGVjbGFy
YXRpb246OkVudHJ5UG9pbnRUeXBlOjpDb21wdXRlOgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNl
bWFudGljLmgKaW5kZXggYTM5OTI3ODFlM2EuLjI5OWI5MWJkOTkyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50
aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xT
dGFnZUluT3V0U2VtYW50aWMuaApAQCAtNTEsNiArNTEsMTkgQEAgcHVibGljOgogCiAgICAgdW5z
aWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgU3RhZ2VJbk91dFNlbWFudGljJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFN0YWdlSW5PdXRTZW1hbnRpYyYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBpc0Fj
Y2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNzJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0
aW9uKFNoYWRlckl0ZW1EaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpIGNvbnN0
IG92ZXJyaWRlOworCiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kZXg7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhdGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0
ZW1lbnQuaAppbmRleCA0MzRkMjFhMDQzMi4uZmVkZDA2OGY4YjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5o
CkBAIC02Nyw3ICs2Nyw3IEBAIHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwog
fTsKIAotdHlwZWRlZiBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YXRlbWVudD4+IFN0YXRlbWVu
dHM7Cit1c2luZyBTdGF0ZW1lbnRzID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGF0ZW1lbnQ+
PjsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKaW5kZXggODdjYzYy
ZjIzNTYuLmE4Yzk4ZTk5YjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5o
CkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAi
V0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVk
ZSAiV0hMU0xOYW1lZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM5LDExICszOSwxMCBAQCBuYW1lc3BhY2UgV0hM
U0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlvbiA6IHB1
YmxpYyBUeXBlIHsKK2NsYXNzIFN0cnVjdHVyZURlZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBl
IHsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdp
biwgU3RyaW5nJiYgbmFtZSwgU3RydWN0dXJlRWxlbWVudHMmJiBzdHJ1Y3R1cmVFbGVtZW50cykK
LSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdU
Rk1vdmUobmFtZSkpCisgICAgICAgIDogTmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92
ZShuYW1lKSkKICAgICAgICAgLCBtX3N0cnVjdHVyZUVsZW1lbnRzKFdURk1vdmUoc3RydWN0dXJl
RWxlbWVudHMpKQogICAgIHsKICAgICB9CkBAIC01MywxNyArNTIsMTEgQEAgcHVibGljOgogICAg
IFN0cnVjdHVyZURlZmluaXRpb24oY29uc3QgU3RydWN0dXJlRGVmaW5pdGlvbiYpID0gZGVsZXRl
OwogICAgIFN0cnVjdHVyZURlZmluaXRpb24oU3RydWN0dXJlRGVmaW5pdGlvbiYmKSA9IGRlZmF1
bHQ7CiAKLSAgICBTdHJ1Y3R1cmVFbGVtZW50cyYgc3RydWN0dXJlRWxlbWVudHMoKSB7IHJldHVy
biBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9CisgICAgYm9vbCBpc1N0cnVjdHVyZURlZmluaXRpb24o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
VHlwZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBTdHJ1Y3R1cmVF
bGVtZW50cyYgc3RydWN0dXJlRWxlbWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRz
OyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBt
X25hbWU7CiAgICAgU3RydWN0dXJlRWxlbWVudHMgbV9zdHJ1Y3R1cmVFbGVtZW50czsKIH07CiAK
QEAgLTczLDQgKzY2LDYgQEAgcHJpdmF0ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X1dITFNMX05BTUVEX1RZUEUoU3RydWN0dXJlRGVmaW5pdGlvbiwgaXNTdHJ1Y3R1cmVEZWZpbml0
aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oCmluZGV4IDE0YmU0
MWM3Mjk4Li42YTY0YjA5YzA0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaApAQCAt
NDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgU3RydWN0dXJlRWxlbWVudCA6
IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKLSAgICBTdHJ1Y3R1cmVFbGVtZW50KExleGVyOjpUb2tl
biYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVlX3B0cjxUeXBl
PiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIE9wdGlvbmFsPFNlbWFudGljPiBzZW1hbnRpYykKKyAg
ICBTdHJ1Y3R1cmVFbGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1
YWxpZmllcnMsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBu
YW1lLCBPcHRpb25hbDxTZW1hbnRpYz4gc2VtYW50aWMpCiAgICAgICAgIDogbV9vcmlnaW4oV1RG
TW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMp
KQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAtNTUsMTggKzU1LDIwIEBAIHB1
YmxpYzoKICAgICBTdHJ1Y3R1cmVFbGVtZW50KGNvbnN0IFN0cnVjdHVyZUVsZW1lbnQmKSA9IGRl
bGV0ZTsKICAgICBTdHJ1Y3R1cmVFbGVtZW50KFN0cnVjdHVyZUVsZW1lbnQmJikgPSBkZWZhdWx0
OwogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBjb25zdCBMZXhl
cjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgVW5uYW1l
ZFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBuYW1l
KCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgT3B0aW9uYWw8U2VtYW50aWM+JiBzZW1hbnRpYygp
IHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KIAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9v
cmlnaW47CiAgICAgUXVhbGlmaWVycyBtX3F1YWxpZmllcnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IG1fdHlwZTsK
ICAgICBTdHJpbmcgbV9uYW1lOwogICAgIE9wdGlvbmFsPFNlbWFudGljPiBtX3NlbWFudGljOwog
fTsKIAotdHlwZWRlZiBWZWN0b3I8U3RydWN0dXJlRWxlbWVudD4gU3RydWN0dXJlRWxlbWVudHM7
Cit1c2luZyBTdHJ1Y3R1cmVFbGVtZW50cyA9IFZlY3RvcjxTdHJ1Y3R1cmVFbGVtZW50PjsKIAog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xUeXBlLmgKaW5kZXggY2Y0Y2JjODg3OTAuLjg3OTc4MDE3NmM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZS5oCkBAIC00Miwx
NSArNDIsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+VHlwZSgpID0gZGVmYXVsdDsKIAot
ICAgIFR5cGUoY29uc3QgVHlwZSYpID0gZGVsZXRlOworICAgIGV4cGxpY2l0IFR5cGUoY29uc3Qg
VHlwZSYpID0gZGVsZXRlOwogICAgIFR5cGUoVHlwZSYmKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0
dWFsIGJvb2wgaXNUeXBlUmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQotCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBib29sIGlzTmFtZWRUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNVbm5hbWVkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAKIHByaXZhdGU6CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKaW5kZXggN2U1ODAxZTNi
NTYuLjk4MDg2NjRkMWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKQEAgLTIzLDE0ICsy
MywxNCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNwcmFn
bWEgb25jZQotCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgogCi0j
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Np
b24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvVmFy
aWFudC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ5LDcgKzQ5LDcgQEAgVHlwZUFy
Z3VtZW50cyBjbG9uZShjb25zdCBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKQogVHlwZUFy
Z3VtZW50IGNsb25lKGNvbnN0IFR5cGVBcmd1bWVudCYgdHlwZUFyZ3VtZW50KQogewogICAgIHJl
dHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oY29uc3QgQ29uc3RhbnRFeHByZXNz
aW9uJiBjb25zdGFudEV4cHJlc3Npb24pIC0+IFR5cGVBcmd1bWVudCB7Ci0gICAgICAgIHJldHVy
biBjb25zdGFudEV4cHJlc3Npb247CisgICAgICAgIHJldHVybiBjb25zdGFudEV4cHJlc3Npb24u
Y2xvbmUoKTsKICAgICB9LCBbXShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4m
IHR5cGVSZWZlcmVuY2UpIC0+IFR5cGVBcmd1bWVudCB7CiAgICAgICAgIHJldHVybiB0eXBlUmVm
ZXJlbmNlLT5jbG9uZVR5cGVSZWZlcmVuY2UoKTsKICAgICB9KSwgdHlwZUFyZ3VtZW50KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5
cGVBcmd1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVHlwZUFyZ3VtZW50LmgKaW5kZXggZTM4NWQ1MGQ1ZWYuLjNiMDM3YmEzNTFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJn
dW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xUeXBlQXJndW1lbnQuaApAQCAtNDAsOCArNDAsOCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xh
c3MgVHlwZVJlZmVyZW5jZTsKIAotdHlwZWRlZiBWYXJpYW50PENvbnN0YW50RXhwcmVzc2lvbiwg
c3RkOjp1bmlxdWVfcHRyPFR5cGVSZWZlcmVuY2U+PiBUeXBlQXJndW1lbnQ7Ci10eXBlZGVmIFZl
Y3RvcjxUeXBlQXJndW1lbnQ+IFR5cGVBcmd1bWVudHM7Cit1c2luZyBUeXBlQXJndW1lbnQgPSBW
YXJpYW50PENvbnN0YW50RXhwcmVzc2lvbiwgc3RkOjp1bmlxdWVfcHRyPFR5cGVSZWZlcmVuY2U+
PjsKK3VzaW5nIFR5cGVBcmd1bWVudHMgPSBWZWN0b3I8VHlwZUFyZ3VtZW50PjsKIAogVHlwZUFy
Z3VtZW50IGNsb25lKGNvbnN0IFR5cGVBcmd1bWVudCYpOwogVHlwZUFyZ3VtZW50cyBjbG9uZShj
b25zdCBUeXBlQXJndW1lbnRzJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAppbmRleCBmNzM2
MjllMjliMS4uZWQxYzQ3NWE4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaApAQCAtMjks
NyArMjksOCBAQAogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMTm9k
ZS5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMSArMzksMTAgQEAgbmFtZXNw
YWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFR5cGVEZWZpbml0aW9uIDog
cHVibGljIFR5cGUgeworY2xhc3MgVHlwZURlZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsK
IHB1YmxpYzoKLSAgICBUeXBlRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmlu
ZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSkKLSAgICAgICAgOiBt
X29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkp
CisgICAgVHlwZURlZmluaXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1l
LCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiB0eXBlKQorICAgICAgICA6IE5h
bWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBl
KFdURk1vdmUodHlwZSkpCiAgICAgewogICAgIH0KQEAgLTUyLDE4ICs1MiwyNCBAQCBwdWJsaWM6
CiAgICAgVHlwZURlZmluaXRpb24oY29uc3QgVHlwZURlZmluaXRpb24mKSA9IGRlbGV0ZTsKICAg
ICBUeXBlRGVmaW5pdGlvbihUeXBlRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBBU1Q6
OlR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CisgICAgYm9vbCBpc1R5cGVEZWZpbml0
aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiB0
eXBlKCkgeyByZXR1cm4gbV90eXBlLmdldCgpOyB9CisKKyAgICBjb25zdCBUeXBlJiB1bmlmeU5v
ZGUoKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBBU1NFUlQobV90eXBlKTsKKyAgICAg
ICAgcmV0dXJuIG1fdHlwZS0+dW5pZnlOb2RlKCk7CisgICAgfQorCisgICAgVHlwZSYgdW5pZnlO
b2RlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUpOworICAgICAgICBy
ZXR1cm4gbV90eXBlLT51bmlmeU5vZGUoKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6
OlRva2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEFTVDo6VHlwZT4gbV90eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBl
PiBtX3R5cGU7CiB9OwogCiB9CkBAIC03Miw0ICs3OCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9OQU1FRF9UWVBFKFR5cGVEZWZpbml0aW9uLCBpc1R5
cGVEZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCmluZGV4IDQ5
NDQxZDhiNWM3Li45YWNiOTNkNmQ5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaApAQCAtMjgs
OCArMjgsOSBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTExleGVyLmgi
Ci0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFy
YXRpb24uaCIKICNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgIldITFNM
VW5uYW1lZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMzgsMTAgKzM5LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5h
bWVzcGFjZSBBU1QgewogCi1jbGFzcyBUeXBlUmVmZXJlbmNlIDogcHVibGljIFR5cGUgeworY2xh
c3MgVHlwZVJlZmVyZW5jZSA6IHB1YmxpYyBVbm5hbWVkVHlwZSB7CiBwdWJsaWM6CiAgICAgVHlw
ZVJlZmVyZW5jZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIFR5cGVBcmd1
bWVudHMmJiB0eXBlQXJndW1lbnRzKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2lu
KSkKKyAgICAgICAgOiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9u
YW1lKFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlQXJndW1lbnRzKFdURk1vdmUodHlw
ZUFyZ3VtZW50cykpCiAgICAgewpAQCAtNTIsMjQgKzUzLDUzIEBAIHB1YmxpYzoKICAgICBUeXBl
UmVmZXJlbmNlKGNvbnN0IFR5cGVSZWZlcmVuY2UmKSA9IGRlbGV0ZTsKICAgICBUeXBlUmVmZXJl
bmNlKFR5cGVSZWZlcmVuY2UmJikgPSBkZWZhdWx0OwogCisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxUeXBlUmVmZXJlbmNlPiB3cmFwKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgTmFtZWRUeXBl
JiByZXNvbHZlZFR5cGUpCisgICAgeworICAgICAgICBUeXBlQXJndW1lbnRzIHR5cGVBcmd1bWVu
dHM7CisgICAgICAgIGlmIChpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHJlc29sdmVkVHlwZSkp
CisgICAgICAgICAgICB0eXBlQXJndW1lbnRzID0gQVNUOjpjbG9uZShkb3duY2FzdDxOYXRpdmVU
eXBlRGVjbGFyYXRpb24+KHJlc29sdmVkVHlwZSkudHlwZUFyZ3VtZW50cygpKTsKKyAgICAgICAg
YXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVSZWZlcmVuY2U+KFdURk1vdmUob3Jp
Z2luKSwgU3RyaW5nKHJlc29sdmVkVHlwZS5uYW1lKCkpLCBXVEZNb3ZlKHR5cGVBcmd1bWVudHMp
KTsKKyAgICAgICAgcmVzdWx0LT5zZXRSZXNvbHZlZFR5cGUocmVzb2x2ZWRUeXBlKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBib29sIGlzVHlwZVJlZmVyZW5jZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0
dXJuIG1fbmFtZTsgfQogICAgIFR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMoKSB7IHJldHVy
biBtX3R5cGVBcmd1bWVudHM7IH0KKyAgICBOYW1lZFR5cGUqIHJlc29sdmVkVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzb2x2ZWRUeXBlOyB9CisKKyAgICBjb25zdCBUeXBlJiB1bmlmeU5vZGUo
KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmVzb2x2ZWRUeXBlKTsK
KyAgICAgICAgcmV0dXJuIG1fcmVzb2x2ZWRUeXBlLT51bmlmeU5vZGUoKTsKKyAgICB9CisKKyAg
ICBUeXBlJiB1bmlmeU5vZGUoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmVz
b2x2ZWRUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1fcmVzb2x2ZWRUeXBlLT51bmlmeU5vZGUoKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzZXRSZXNvbHZlZFR5cGUoTmFtZWRUeXBlJiByZXNvbHZl
ZFR5cGUpCisgICAgeworICAgICAgICBtX3Jlc29sdmVkVHlwZSA9ICZyZXNvbHZlZFR5cGU7Cisg
ICAgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVSZWZlcmVuY2U+IGNsb25lVHlwZVJlZmVy
ZW5jZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUeXBl
UmVmZXJlbmNlPihMZXhlcjo6VG9rZW4obV9vcmlnaW4pLCBTdHJpbmcobV9uYW1lKSwgQVNUOjpj
bG9uZShtX3R5cGVBcmd1bWVudHMpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
VHlwZVJlZmVyZW5jZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgU3RyaW5nKG1fbmFtZSksIEFT
VDo6Y2xvbmUobV90eXBlQXJndW1lbnRzKSk7CiAgICAgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRy
PFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1l
ZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiBjbG9u
ZVR5cGVSZWZlcmVuY2UoKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1f
b3JpZ2luOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgVHlwZUFyZ3VtZW50cyBtX3R5cGVBcmd1
bWVudHM7CisgICAgTmFtZWRUeXBlKiBtX3Jlc29sdmVkVHlwZSB7IG51bGxwdHIgfTsKIH07CiAK
IH0KQEAgLTc4LDYgKzEwOCw2IEBAIHByaXZhdGU6CiAKIH0KIAotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19XSExTTF9UWVBFKFR5cGVSZWZlcmVuY2UsIGlzVHlwZVJlZmVyZW5jZSgpKQorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoVHlwZVJlZmVyZW5jZSwgaXNUeXBl
UmVmZXJlbmNlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5ZTMyOWYxMjM1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUu
aApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMTm9k
ZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVz
cGFjZSBBU1QgeworCitjbGFzcyBVbm5hbWVkVHlwZSA6IHB1YmxpYyBUeXBlIHsKK3B1YmxpYzoK
KyAgICBVbm5hbWVkVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4pCisgICAgICAgIDogbV9vcmln
aW4oV1RGTW92ZShvcmlnaW4pKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Vbm5hbWVk
VHlwZSgpID0gZGVmYXVsdDsKKworICAgIFVubmFtZWRUeXBlKGNvbnN0IFVubmFtZWRUeXBlJikg
PSBkZWxldGU7CisgICAgVW5uYW1lZFR5cGUoVW5uYW1lZFR5cGUmJikgPSBkZWZhdWx0OworCisg
ICAgYm9vbCBpc1VubmFtZWRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc1R5cGVSZWZlcmVuY2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1BvaW50ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5VHlwZSgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVmZXJlbmNlVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNvbnN0
IHsgcmV0dXJuICp0aGlzOyB9CisgICAgdmlydHVhbCBUeXBlJiB1bmlmeU5vZGUoKSB7IHJldHVy
biAqdGhpczsgfQorCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNs
b25lKCkgY29uc3QgPSAwOworCisgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25z
dCB7IHJldHVybiBtX29yaWdpbjsgfQorCitwcml2YXRlOgorICAgIExleGVyOjpUb2tlbiBtX29y
aWdpbjsKK307CisKK30KKworfQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19XSExTTF9VTk5BTUVEX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVO
YW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6
OlVubmFtZWRUeXBlJiB0eXBlKSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQ
RShVbm5hbWVkVHlwZSwgaXNVbm5hbWVkVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAppbmRleCA1OGQ2ZTIzMDc1ZS4uZmM0M2ViY2E1Yjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgKQEAgLTI5LDYgKzI5
LDcgQEAKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4
ZXIuaCIKKyNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsMjAgKzQxLDMwIEBAIGNsYXNzIFVuc2lnbmVkSW50
ZWdlckxpdGVyYWwgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CiBwdWJsaWM6CiAgICAgVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIHVuc2lnbmVkIHZhbHVlKQogICAg
ICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fdHlwZSh2YWx1
ZSkKICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9CiAKICAgICB2aXJ0dWFs
IH5VbnNpZ25lZEludGVnZXJMaXRlcmFsKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbChjb25zdCBVbnNpZ25lZEludGVnZXJMaXRlcmFsJikgPSBkZWZh
dWx0OworICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwoY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCYpID0gZGVsZXRlOwogICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwoVW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CiAKICAgICB1bnNpZ25lZCB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KIAogICAgIGJvb2wgaXNVbnNpZ25lZEludGVnZXJMaXRlcmFsKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCBjbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFs
IHJlc3VsdChMZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBtX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJl
c3VsdC5tX3R5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgICAgICByZXN1bHQubV90eXBlLnJl
c29sdmUocmVzdWx0Lm1fdHlwZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCiBwcml2YXRlOgorICAgIFVuc2lnbmVkSW50ZWdlckxpdGVy
YWxUeXBlIG1fdHlwZTsKICAgICB1bnNpZ25lZCBtX3ZhbHVlOwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lYTJkODQ0MTgxZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWxUeXBlLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJM
RShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFVuc2lnbmVk
SW50ZWdlckxpdGVyYWxUeXBlLmgiCisKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNU
IHsKKworYm9vbCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShjb25zdCBU
eXBlJiB0eXBlKSBjb25zdAoreworICAgIGlmICghaXM8TmFtZWRUeXBlPih0eXBlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PE5hbWVkVHlw
ZT4odHlwZSk7CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24g
PSBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAgaWYgKCFu
YXRpdmVUeXBlRGVjbGFyYXRpb24uaXNJbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzU2lnbmVkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5jYW5SZXByZXNlbnRVbnNpZ25l
ZEludGVnZXIoKShtX3ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0
cnVlOworfQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxU
eXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNp
Z25lZEludGVnZXJMaXRlcmFsVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5lZmNiNDhhZGJhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgK
QEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5cGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBJbnRyaW5zaWNzOworCitu
YW1lc3BhY2UgQVNUIHsKKworY2xhc3MgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUgOiBwdWJs
aWMgUmVzb2x2YWJsZVR5cGUgeworcHVibGljOgorICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxU
eXBlKHVuc2lnbmVkIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgflVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKCkgPSBkZWZhdWx0
OworCisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoY29uc3QgVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZShV
bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CisKKyAgICBib29sIGNhblJlc29sdmUoY29uc3QgVHlwZSYpIGNvbnN0IG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIHVuc2lnbmVkIG1fdmFsdWU7Cit9OworCit9CisKK30KKworfQorCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1JFU09MVkFCTEVfVFlQRShVbnNpZ25lZEludGVnZXJM
aXRlcmFsVHlwZSwgaXNVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSgpKQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZh
cmlhYmxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAppbmRleCBmZjAzNjgxOTNiZC4uYzM1NjRm
NmMxNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKQEAgLTQ0LDcgKzQ0
LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb24gOiBwdWJs
aWMgVmFsdWUgewogcHVibGljOgotICAgIFZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2Vu
JiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPEFTVDo6
VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4mJiBzZW1hbnRp
Yywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5pdGlhbGl6ZXIpCisgICAgVmFyaWFi
bGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFF1YWxpZmllcnMmJiBxdWFsaWZp
ZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBu
YW1lLCBPcHRpb25hbDxTZW1hbnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJl
c3Npb24+JiYgaW5pdGlhbGl6ZXIpCiAgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4p
KQogICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAs
IG1fdHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAtNjAsMjAgKzYwLDIzIEBAIHB1YmxpYzoKICAgICBW
YXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OwogCiAg
ICAgTGV4ZXI6OlRva2VuIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAg
U3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAKLSAgICBUeXBlJiB0eXBlKCkgeyBy
ZXR1cm4gKm1fdHlwZTsgfQorICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4g
Km1fdHlwZTsgfQogICAgIE9wdGlvbmFsPFNlbWFudGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBt
X3NlbWFudGljOyB9CiAgICAgRXhwcmVzc2lvbiogaW5pdGlhbGl6ZXIoKSB7IHJldHVybiBtX2lu
aXRpYWxpemVyLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2lu
OwogICAgIFF1YWxpZmllcnMgbV9xdWFsaWZpZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbV90
eXBlOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgT3B0aW9uYWw8U2VtYW50aWM+IG1fc2VtYW50
aWM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1faW5pdGlhbGl6ZXI7CiB9Owog
Cit1c2luZyBWYXJpYWJsZURlY2xhcmF0aW9ucyA9IFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9u
PjsKKwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVuY2UuaAppbmRleCAyYWU4Mjhk
NTI5NS4uZTM5ZWNmNWM1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVuY2UuaApAQCAt
MjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMQW5v
bnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNs
YXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNM
TGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKQEAgLTU1LDE5
ICs1NSwyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFZhcmlhYmxlUmVmZXJlbmNlIHdyYXAoVmFy
aWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKICAgICB7CiAgICAgICAgIFZh
cmlhYmxlUmVmZXJlbmNlIHJlc3VsdChMZXhlcjo6VG9rZW4odmFyaWFibGVEZWNsYXJhdGlvbi5v
cmlnaW4oKSkpOwotICAgICAgICByZXN1bHQubV92YXJpYWJsZSA9IHsgJnZhcmlhYmxlRGVjbGFy
YXRpb24gfTsKKyAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSAmdmFyaWFibGVEZWNsYXJhdGlv
bjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBzdGF0aWMgVmFyaWFibGVS
ZWZlcmVuY2Ugd3JhcChBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJiBhbm9ueW1vdXNWYXJp
YWJsZURlY2xhcmF0aW9uKQorICAgIGJvb2wgaXNWYXJpYWJsZVJlZmVyZW5jZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1f
bmFtZTsgfQorCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiogdmFyaWFibGUoKSB7IHJldHVybiBt
X3ZhcmlhYmxlOyB9CisKKyAgICB2b2lkIHNldFZhcmlhYmxlKFZhcmlhYmxlRGVjbGFyYXRpb24m
IHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgewotICAgICAgICBWYXJpYWJsZVJlZmVyZW5jZSBy
ZXN1bHQoTGV4ZXI6OlRva2VuKGFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24ub3JpZ2luKCkp
KTsKLSAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSB7ICZhbm9ueW1vdXNWYXJpYWJsZURlY2xh
cmF0aW9uIH07Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIG1fdmFyaWFibGUgPSAm
dmFyaWFibGVEZWNsYXJhdGlvbjsKICAgICB9CiAKLSAgICBib29sIGlzVmFyaWFibGVSZWZlcmVu
Y2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KIHByaXZhdGU6CiAgICAgVmFy
aWFibGVSZWZlcmVuY2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQogICAgICAgICA6IEV4cHJlc3Np
b24oV1RGTW92ZShvcmlnaW4pKQpAQCAtNzUsNyArNzcsNyBAQCBwcml2YXRlOgogICAgIH0KIAog
ICAgIFN0cmluZyBtX25hbWU7Ci0gICAgT3B0aW9uYWw8VmFyaWFudDxWYXJpYWJsZURlY2xhcmF0
aW9uKiwgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbio+PiBtX3ZhcmlhYmxlOworICAgIFZh
cmlhYmxlRGVjbGFyYXRpb24qIG1fdmFyaWFibGU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rp
b25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tE
dXBsaWNhdGVGdW5jdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi42ZDVlZjM3NTY3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCkBAIC0wLDAg
KzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgiCisKKyNp
bmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlU
eXBlLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBl
UmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsK
KworYm9vbCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJiBwcm9ncmFtKQor
eworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbj4+IGZ1bmN0aW9uczsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHBy
b2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKCpm
dW5jdGlvbkRlZmluaXRpb24pOworICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgZnVu
Y3Rpb25zLmFwcGVuZCgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisKKyAgICBzdGQ6OnNv
cnQoZnVuY3Rpb25zLmJlZ2luKCksIGZ1bmN0aW9ucy5lbmQoKSwgW10oY29uc3QgQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uJiBhLCBjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGIpIC0+
IGJvb2wgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RkOjptaW4oYS5uYW1l
KCkubGVuZ3RoKCksIGIubmFtZSgpLmxlbmd0aCgpKTsgKytpKSB7CisgICAgICAgICAgICBpZiAo
YS5uYW1lKClbaV0gPCBiLm5hbWUoKVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIGlmIChhLm5hbWUoKVtpXSA+IGIubmFtZSgpW2ldKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYS5uYW1lKCkubGVu
Z3RoKCkgPCBiLm5hbWUoKS5sZW5ndGgoKTsKKyAgICB9KTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBqID0g
aSArIDE7IGogPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChmdW5j
dGlvbnNbaV0uZ2V0KCkubmFtZSgpICE9IGZ1bmN0aW9uc1tqXS5nZXQoKS5uYW1lKCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uPihmdW5jdGlvbnNbaV0uZ2V0KCkpICYmIGlzPEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbj4oZnVuY3Rpb25zW2pdLmdldCgpKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNp
emUoKSAhPSBmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkuaXND
YXN0KCkpIHsKKyAgICAgICAgICAgICAgICBib29sIHNhbWUgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCkudHlwZSgpLCBmdW5jdGlvbnNbal0u
Z2V0KCkudHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgc2FtZSA9IGZhbHNlOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsg
ayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2spIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1l
dGVycygpW2tdLnR5cGUoKSwgZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50eXBl
KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGlmIChzYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJvb2wgc2FtZSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVy
cygpLnNpemUoKTsgKytrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5j
dGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSwgZnVuY3Rpb25zW2pdLmdldCgp
LnBhcmFtZXRlcnMoKVtrXS50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzYW1l
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2FtZSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3Bl
cmF0b3ImW10iICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIK
KyAgICAgICAgICAgICYmIGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihmdW5jdGlvbnNbaV0u
Z2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5cGUg
PSBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLnR5cGUoKTsKKyAgICAgICAgICAg
IGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGF1dG8qIHJlc29sdmVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odHlwZSku
cmVzb2x2ZWRUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uPigqcmVzb2x2ZWRUeXBlKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24+KCpyZXNvbHZlZFR5cGUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVpbnQiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChmdW5jdGlvbnNb
aV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiICYmIGZ1bmN0aW9uc1tpXS5nZXQo
KS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEKKyAgICAgICAgICAgICYmIChpczxBU1Q6OkFycmF5
UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
CisgICAgICAgICAgICB8fCBpczxBU1Q6OkFycmF5VHlwZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3BlcmF0b3I9PSIKKyAg
ICAgICAgICAgICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDIK
KyAgICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdldCgp
LnBhcmFtZXRlcnMoKVswXS50eXBlKCkpCisgICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5j
ZVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKQorICAgICAg
ICAgICAgJiYgbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUo
KSwgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ZWNlZTc4MmM1ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworYm9vbCBjaGVja0R1cGxpY2F0
ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJik7CisKK30KKworfQorCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ4NWFiMDVlMjYzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xD
aGVja2VyLmNwcApAQCAtMCwwICsxLDQ1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xDaGVja2VyLmgiCisK
KyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJy
YXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCIKKyNpbmNs
dWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisj
aW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5o
IgorI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQT0RD
aGVja2VyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIFBPRENoZWNrZXIoKSA9IGRl
ZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5QT0RDaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgdm9p
ZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9u
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoZW51bWVyYXRpb25EZWZp
bml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
IW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc051bWJlcigpCisgICAgICAgICAgICAmJiAhbmF0aXZl
VHlwZURlY2xhcmF0aW9uLmlzVmVjdG9yKCkKKyAgICAgICAgICAgICYmICFuYXRpdmVUeXBlRGVj
bGFyYXRpb24uaXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRp
b24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdChzdHJ1Y3R1cmVEZWZp
bml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5
cGVEZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQodHlw
ZURlZmluaXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFy
cmF5VHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KGFycmF5VHlw
ZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBzZXRFcnJvcigp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJl
bmNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2
ZWRUeXBlKCkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXROYW1lZFR5cGUoKnR5cGVSZWZl
cmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgIH0KK307CisKK2NsYXNzIENoZWNrZXIgOiBwdWJs
aWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgQ2hlY2tlcihjb25zdCBJbnRyaW5zaWNzJiBpbnRy
aW5zaWNzKQorICAgICAgICA6IG1faW50cmluc2ljcyhpbnRyaW5zaWNzKQorICAgIHsKKyAgICB9
CisKKyAgICB+Q2hlY2tlcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoUHJvZ3JhbSYg
cHJvZ3JhbSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgdHlwZURlZmluaXRp
b24gOiBwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KCp0eXBlRGVmaW5pdGlvbik7CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVm
aW5pdGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCgqc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGZvciAoYXV0
byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25z
KCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmVudW1lcmF0aW9uRGVmaW5pdGlv
bik7CisgICAgICAgIGZvciAoYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHJvZ3JhbS5u
YXRpdmVUeXBlRGVjbGFyYXRpb25zKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
Km5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CisKKyAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRl
ZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCgqZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgZm9yIChhdXRv
JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9ucygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBjaGVja1NoYWRlclR5
cGUoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgp
KSB7CisgICAgICAgIGNhc2UgQVNUOjpGdW5jdGlvbkRlZmluaXRpb246OkVudHJ5UG9pbnRUeXBl
OjpWZXJ0ZXg6CisgICAgICAgICAgICByZXR1cm4gIW1fdmVydGV4RW50cnlQb2ludHMuYWRkKGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpLmlzTmV3RW50cnk7CisgICAgICAgIGNhc2UgQVNUOjpG
dW5jdGlvbkRlZmluaXRpb246OkVudHJ5UG9pbnRUeXBlOjpGcmFnbWVudDoKKyAgICAgICAgICAg
IHJldHVybiAhbV9mcmFnbWVudEVudHJ5UG9pbnRzLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFt
ZSgpKS5pc05ld0VudHJ5OworICAgICAgICBjYXNlIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uOjpF
bnRyeVBvaW50VHlwZTo6Q29tcHV0ZToKKyAgICAgICAgICAgIHJldHVybiAhbV9jb21wdXRlRW50
cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpLmlzTmV3RW50cnk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoZWNrU2VtYW50aWNzKEFTVDo6RnVuY3Rpb25EZWZp
bml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCisgICAgeworICAgICAgICBhdXRvIGVudHJ5UG9p
bnRJdGVtcyA9IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhtX2ludHJpbnNpY3MsIGZ1bmN0aW9uRGVm
aW5pdGlvbik7CisgICAgICAgIGlmICghZW50cnlQb2ludEl0ZW1zKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBhdXRvIGlucHV0SXRlbXMgPSBXVEZNb3ZlKGVudHJ5UG9pbnRJ
dGVtcy0+aW5wdXRzKTsKKyAgICAgICAgYXV0byBvdXRwdXRJdGVtcyA9IFdURk1vdmUoZW50cnlQ
b2ludEl0ZW1zLT5vdXRwdXRzKTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGNoZWNr
RHVwbGljYXRlU2VtYW50aWNzID0gWyZdKGNvbnN0IFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGl0
ZW1zKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGZhc3Rl
ciB0aGFuIE8obl4yKS4KKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0
ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBp
ICsgMTsgaiA8IGl0ZW1zLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaXRlbXNbaV0uc2VtYW50aWMgPT0gaXRlbXNbal0uc2VtYW50aWMpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fTsKKyAgICAgICAgICAgIGlmICghY2hlY2tEdXBsaWNhdGVTZW1hbnRpY3MoaW5wdXRJdGVtcykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFjaGVja0R1
cGxpY2F0ZVNlbWFudGljcyhvdXRwdXRJdGVtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBjaGVja1NlbWFu
dGljVHlwZXMgPSBbJl0oY29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gYWNjZXB0YWJsZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0oY29uc3QgQVNUOjpCYXNlU2VtYW50aWMmIHNlbWFudGljKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzZW1hbnRpYy5pc0FjY2VwdGFibGVUeXBlKGl0ZW0u
dW5uYW1lZFR5cGUsIG1faW50cmluc2ljcyk7CisgICAgICAgICAgICAgICAgICAgIH0pLCBpdGVt
LnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhY2NlcHRhYmxlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAo
IWNoZWNrU2VtYW50aWNUeXBlcyhpbnB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNUeXBlcyhvdXRwdXRJdGVtcykp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byBjaGVja1NlbWFudGljRm9yU2hhZGVyVHlwZSA9IFsmXShjb25zdCBW
ZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpdGVtcywgQVNUOjpCYXNlU2VtYW50aWM6OlNoYWRlckl0
ZW1EaXJlY3Rpb24gZGlyZWN0aW9uKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1
dG8mIGl0ZW0gOiBpdGVtcykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGFjY2VwdGFibGUg
PSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEFTVDo6QmFzZVNlbWFudGlj
JiBzZW1hbnRpYykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Vt
YW50aWMuaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihkaXJlY3Rpb24sIGZ1bmN0
aW9uRGVmaW5pdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0pLCBpdGVtLnNlbWFudGljKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFhY2NlcHRhYmxlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50
aWNGb3JTaGFkZXJUeXBlKGlucHV0SXRlbXMsIEFTVDo6QmFzZVNlbWFudGljOjpTaGFkZXJJdGVt
RGlyZWN0aW9uOjpJbnB1dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgaWYgKCFjaGVja1NlbWFudGljRm9yU2hhZGVyVHlwZShvdXRwdXRJdGVtcywgQVNUOjpC
YXNlU2VtYW50aWM6OlNoYWRlckl0ZW1EaXJlY3Rpb246Ok91dHB1dCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0
byBjaGVja1BPRERhdGEgPSBbJl0oY29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFBPRENoZWNrZXIgcG9kQ2hlY2tlcjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlw
ZShkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihpdGVtLnVubmFtZWRUeXBlKS5lbGVtZW50VHlw
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9kQ2hl
Y2tlci5jaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShkb3duY2FzdDxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4oaXRlbS51bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPihpdGVtLnVubmFtZWRUeXBlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0VW5u
YW1lZFR5cGUoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpLnR5cGUo
KSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAocG9kQ2hlY2tlci5lcnJvcigpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBp
ZiAoIWNoZWNrUE9ERGF0YShpbnB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBpZiAoIWNoZWNrUE9ERGF0YShvdXRwdXRJdGVtcykpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIGVudW0g
Y2xhc3MgQ2hlY2tLaW5kIHsKKyAgICAgICAgICAgIEluZGV4LAorICAgICAgICAgICAgRG90Cisg
ICAgICAgIH07CisKKyAgICAgICAgYXV0byBjaGVja0dldHRlciA9IFsmXShDaGVja0tpbmQga2lu
ZCkgLT4gYm9vbCB7CisgICAgICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0g
a2luZCA9PSBDaGVja0tpbmQ6OkluZGV4ID8gMiA6IDE7CisgICAgICAgICAgICBpZiAoZnVuY3Rp
b25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJz
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8mIHVuaWZ5
Tm9kZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLnVuaWZ5Tm9k
ZSgpOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1l
ZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAg
ICAgYXV0byBjaGVja1NldHRlciA9IFsmXShDaGVja0tpbmQga2luZCkgLT4gYm9vbCB7CisgICAg
ICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6
OkluZGV4ID8gMyA6IDI7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFt
ZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRVbmlmeU5vZGUg
PSBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKS51bmlmeU5vZGUoKTsK
KyAgICAgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlO
b2RlKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNU
OjpVbm5hbWVkVHlwZT4oZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSk7CisgICAgICAgICAgICAgICAg
aWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFtYXRjaGVz
KGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCksIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAvLyBGSVhNRTogQWRkIGZ1bmN0aW9uIHJlc29sdXRpb24gY29kZS4KKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAgIGF1dG8gY2hlY2tBbmRlciA9IFsmXShD
aGVja0tpbmQga2luZCkgLT4gYm9vbCB7CisgICAgICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQ
YXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6OkluZGV4ID8gMiA6IDE7CisgICAgICAgICAg
ICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0
ZWRQYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBmdW5jdGlvbkRlZmluaXRpb24u
dHlwZSgpLnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVk
VHlwZT4odW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlw
ZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6UG9pbnRlclR5cGU+
KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9
IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLnVuaWZ5Tm9kZSgpOwor
ICAgICAgICAgICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGF1dG8mIHVu
bmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSAmJiAhaXM8
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoIWZ1bmN0aW9uRGVmaW5p
dGlvbi5pc09wZXJhdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYg
KGZ1bmN0aW9uRGVmaW5pdGlvbi5pc0Nhc3QoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IrKyIKKyAg
ICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLS0iKSB7
CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkg
IT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIW1h
dGNoZXMoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCksIGZ1bmN0aW9u
RGVmaW5pdGlvbi50eXBlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmlu
aXRpb24ubmFtZSgpID09ICJvcGVyYXRvcisiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmlu
aXRpb24ubmFtZSgpID09ICJvcGVyYXRvci0iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25E
ZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMQorICAgICAgICAgICAgICAgICYmIGZ1
bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IDIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yKiIKKyAgICAg
ICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLyIKKyAgICAg
ICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yJSIKKyAgICAg
ICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yJiIKKyAgICAg
ICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yfCIKKyAgICAg
ICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yXiIKKyAgICAg
ICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPDwiCisgICAg
ICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcHJlYXRvcj4+Iikgewor
ICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9
IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0g
Im9wZXJhdG9yfiIpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmlu
aXRpb24ubmFtZSgpID09ICJvcGVyYXRvcj09IgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZp
bml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I8IgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZp
bml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I8PSIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPj0iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rp
b25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25EZWZpbml0aW9u
LnR5cGUoKSwgbV9pbnRyaW5zaWNzLmJvb2xUeXBlKCkpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlm
IChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdIikgeworICAgICAgICAg
ICAgaWYgKCFjaGVja0dldHRlcihDaGVja0tpbmQ6OkluZGV4KSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXT0iKSB7CisgICAg
ICAgICAgICBpZiAoIWNoZWNrU2V0dGVyKENoZWNrS2luZDo6SW5kZXgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIpIHsK
KyAgICAgICAgICAgIGlmICghY2hlY2tBbmRlcihDaGVja0tpbmQ6OkluZGV4KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVy
YXRvci4iKSkgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkuZW5k
c1dpdGgoIj0iKSkgeworICAgICAgICAgICAgICAgIGlmICghY2hlY2tTZXR0ZXIoQ2hlY2tLaW5k
OjpEb3QpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghY2hlY2tHZXR0ZXIoQ2hlY2tLaW5kOjpEb3Qp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZp
bml0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvciYuIikpIHsKKyAgICAgICAgICAgIGlm
ICghY2hlY2tBbmRlcihDaGVja0tpbmQ6OkRvdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24m
IGZ1bmN0aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChmdW5jdGlv
bkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSkgeworICAgICAgICAgICAgaWYgKCFjaGVja1No
YWRlclR5cGUoZnVuY3Rpb25EZWZpbml0aW9uKSkgeworICAgICAgICAgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKCFjaGVja1NlbWFudGljcyhmdW5jdGlvbkRlZmluaXRpb24pKSB7CisgICAgICAgICAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKCFjaGVja09wZXJhdG9yT3ZlcmxvYWQoZnVuY3Rpb25EZWZp
bml0aW9uKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRp
b24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24m
IGVudW1lcmF0aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdFVubmFtZWRUeXBlKGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworCisg
ICAgICAgIGF1dG8mIGJhc2VUeXBlID0gZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKS51bmlm
eU5vZGUoKTsKKworICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VUeXBlKSkg
eworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBhdXRvJiB1bm5hbWVkQmFzZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+
KGJhc2VUeXBlKTsKKyAgICAgICAgaWYgKCFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRC
YXNlKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlQmFzZSA9IGRvd25jYXN0PEFTVDo6
VHlwZVJlZmVyZW5jZT4odW5uYW1lZEJhc2UpOworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5j
ZUJhc2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBpZiAoIWlzPEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpKSB7CisgICAgICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGlmICghZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNl
QmFzZS5yZXNvbHZlZFR5cGUoKSkuaXNJbnQoKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoYXV0byYgbWVt
YmVyIDogZW51bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpKSB7CisgICAg
ICAgICAgICBpZiAoIW1lbWJlci5nZXQoKS52YWx1ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoZSByZXN0IG9mIHRoaXMg
ZnVuY3Rpb24KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVy
VHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBGb2xsb3dpbmcgcG9pbnRlciB0eXBl
cyBjYW4gY2F1c2UgaW5maW5pdGUgbG9vcHMgYmVjYXVzZSBvZiBkYXRhIHN0cnVjdHVyZXMKKyAg
ICAgICAgLy8gbGlrZSBsaW5rZWQgbGlzdHMuCisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBGb2xsb3dp
bmcgYXJyYXkgcmVmZXJlbmNlIHR5cGVzIGNhbiBjYXVzZSBpbmZpbml0ZSBsb29wcyBiZWNhdXNl
IG9mIGRhdGEKKyAgICAgICAgLy8gc3RydWN0dXJlcyBsaWtlIGxpbmtlZCBsaXN0cy4KKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgp
KTsKKworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZVJlZmVyZW5jZSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIGNsYXNzIFJlc29sdmFibGVUeXBlUmVmZXJlbmNlIDogcHVibGljIHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpSZXNvbHZhYmxlVHlwZT4sIHB1YmxpYyBSZWZDb3Vu
dGVkPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiB7CisgICAgfTsKKworICAgIHVzaW5nIFJlc29s
dmluZ1R5cGUgPSBWYXJpYW50PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgUmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2U+OworCisgICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBS
ZXNvbHZpbmdUeXBlPiBtX3R5cGVNYXA7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fdmVydGV4RW50
cnlQb2ludHM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fZnJhZ21lbnRFbnRyeVBvaW50czsKKyAg
ICBIYXNoU2V0PFN0cmluZz4gbV9jb21wdXRlRW50cnlQb2ludHM7CisgICAgY29uc3QgSW50cmlu
c2ljcyYgbV9pbnRyaW5zaWNzOworfTsKKworYm9vbCBjaGVjayhQcm9ncmFtJiBwcm9ncmFtKQor
eworICAgIENoZWNrZXIgY2hlY2tlcihwcm9ncmFtLmludHJpbnNpY3MoKSk7CisgICAgY2hlY2tl
ci5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAgcmV0dXJuICFjaGVja2VyLmVycm9y
KCk7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmVkMjY4ZDczNDFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmgKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCiti
b29sIGNoZWNrKFByb2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRl
bXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJF
bnRyeVBvaW50SXRlbXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5hMDhjNjVmZjJmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcApAQCAtMCwwICsxLDE3
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCIKKworI2luY2x1ZGUg
IldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hM
U0wgeworCitjbGFzcyBHYXRoZXJlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBH
YXRoZXJlcihjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBBU1Q6OlNlbWFudGljKiBzZW1h
bnRpYyA9IG51bGxwdHIpCisgICAgICAgIDogbV9pbnRyaW5zaWNzKGludHJpbnNpY3MpCisgICAg
ICAgICwgbV9jdXJyZW50U2VtYW50aWMoc2VtYW50aWMpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgfkdhdGhlcmVyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCByZXNldCgpCisgICAgewor
ICAgICAgICBtX2N1cnJlbnRTZW1hbnRpYyA9IG51bGxwdHI7CisgICAgfQorCisgICAgVmVjdG9y
PEVudHJ5UG9pbnRJdGVtPiYmIHRha2VFbnRyeVBvaW50SXRlbXMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFdURk1vdmUobV9lbnRyeVBvaW50SXRlbXMpOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1
cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQ
b2ludEl0ZW0obV90eXBlUmVmZXJlbmNlcy5sYXN0KCkuZ2V0KCksICptX2N1cnJlbnRTZW1hbnRp
YykpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24m
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICghbV9jdXJyZW50U2Vt
YW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKG1hdGNoZXMobmF0aXZlVHlwZURlY2xhcmF0aW9uLCBtX2lu
dHJpbnNpY3Mudm9pZFR5cGUoKSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBl
bmQoRW50cnlQb2ludEl0ZW0obV90eXBlUmVmZXJlbmNlcy5sYXN0KCkuZ2V0KCksICptX2N1cnJl
bnRTZW1hbnRpYykpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZp
bml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKG1fY3VycmVu
dFNlbWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3Ry
dWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICBpZiAo
c3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygpKQorICAgICAgICAgICAgICAgIG1fY3VycmVudFNl
bWFudGljID0gJipzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCk7CisgICAgICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRWxlbWVudCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHR5cGVEZWZpbml0aW9uLnR5cGUoKSk7CisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdFVubmFtZWRUeXBlKCp0eXBlRGVmaW5pdGlvbi50eXBlKCkpOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBt
X3R5cGVSZWZlcmVuY2VzLmFwcGVuZCh0eXBlUmVmZXJlbmNlKTsKKyAgICAgICAgYXV0byBkZXB0
aCA9IG1fdHlwZVJlZmVyZW5jZXMuc2l6ZSgpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXRO
YW1lZFR5cGUoKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBBU1NFUlRf
VU5VU0VEKGRlcHRoLCBtX3R5cGVSZWZlcmVuY2VzLnNpemUoKSA9PSBkZXB0aCk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRyeVBvaW50SXRl
bXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKHBvaW50ZXJUeXBlLCAqbV9jdXJyZW50U2VtYW50aWMp
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBhcnJh
eVJlZmVyZW5jZVR5cGUpCisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7
CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShhcnJheVJl
ZmVyZW5jZVR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkKKyAgICB7CisgICAgICAgIGlmICghbV9jdXJy
ZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9p
bnRJdGVtKGFycmF5VHlwZSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9p
ZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCisg
ICAgeworICAgICAgICBBU1NFUlQoIW1fY3VycmVudFNlbWFudGljKTsKKyAgICAgICAgaWYgKHZh
cmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKKyAgICAgICAgICAgIG1fY3VycmVudFNlbWFu
dGljID0gJip2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCk7CisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdFVubmFtZWRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgY29uc3QgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOworICAgIEFT
VDo6U2VtYW50aWMqIG1fY3VycmVudFNlbWFudGljIHsgbnVsbHB0ciB9OworICAgIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VHlwZVJlZmVyZW5jZT4+IG1fdHlwZVJlZmVyZW5j
ZXM7CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBtX2VudHJ5UG9pbnRJdGVtczsKK307CisK
K09wdGlvbmFsPEVudHJ5UG9pbnRJdGVtcz4gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKGNvbnN0IElu
dHJpbnNpY3MmIGludHJpbnNpY3MsIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRl
ZmluaXRpb24pCit7CisgICAgQVNTRVJUKGZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlw
ZSgpKTsKKyAgICBHYXRoZXJlciBpbnB1dEdhdGhlcmVyKGludHJpbnNpY3MpOworICAgIGZvciAo
YXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkgeworICAg
ICAgICBpbnB1dEdhdGhlcmVyLnJlc2V0KCk7CisgICAgICAgIGlucHV0R2F0aGVyZXIuY2hlY2tF
cnJvckFuZFZpc2l0KHBhcmFtZXRlcik7CisgICAgICAgIGlmIChpbnB1dEdhdGhlcmVyLmVycm9y
KCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKyAgICBHYXRoZXJl
ciBvdXRwdXRHYXRoZXJlcihpbnRyaW5zaWNzLCBmdW5jdGlvbkRlZmluaXRpb24uc2VtYW50aWMo
KSA/ICYqZnVuY3Rpb25EZWZpbml0aW9uLnNlbWFudGljKCkgOiBudWxscHRyKTsKKyAgICBvdXRw
dXRHYXRoZXJlci5jaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShmdW5jdGlvbkRlZmluaXRp
b24udHlwZSgpKTsKKyAgICBpZiAob3V0cHV0R2F0aGVyZXIuZXJyb3IoKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7eyBpbnB1dEdhdGhlcmVyLnRha2VFbnRy
eVBvaW50SXRlbXMoKSwgb3V0cHV0R2F0aGVyZXIudGFrZUVudHJ5UG9pbnRJdGVtcygpIH19Owor
fQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQYXJhbWV0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKc2ltaWxhcml0eSBp
bmRleCA2MiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUGFyYW1ldGVyLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKaW5kZXggOTI1ODZmODY5MWYu
LmUxZWI4MjkyMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQYXJhbWV0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oCkBAIC0yNywxMyArMjcsOSBA
QAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNs
dWRlICJXSExTTFF1YWxpZmllci5oIgogI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKLSNpbmNs
dWRlICJXSExTTFR5cGUuaCIKLSNpbmNsdWRlICJXSExTTFZhbHVlLmgiCisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDM2ICszNywzMCBA
QCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgUGFyYW1ldGVy
IDogcHVibGljIFZhbHVlIHsKLXB1YmxpYzoKLSAgICBQYXJhbWV0ZXIoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlw
ZT4mJiB0eXBlLCBPcHRpb25hbDxTdHJpbmc+JiYgbmFtZSwgT3B0aW9uYWw8QVNUOjpTZW1hbnRp
Yz4mJiBzZW1hbnRpYykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAg
ICAgICwgbV9xdWFsaWZpZXJzKFdURk1vdmUocXVhbGlmaWVycykpCi0gICAgICAgICwgbV90eXBl
KFdURk1vdmUodHlwZSkpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAgICAg
ICwgbV9zZW1hbnRpYyhXVEZNb3ZlKHNlbWFudGljKSkKLSAgICB7Ci0gICAgfQorY2xhc3MgRnVu
Y3Rpb25EZWZpbml0aW9uOwogCi0gICAgdmlydHVhbCB+UGFyYW1ldGVyKCkgPSBkZWZhdWx0Owor
fQogCi0gICAgUGFyYW1ldGVyKGNvbnN0IFBhcmFtZXRlciYpID0gZGVsZXRlOwotICAgIFBhcmFt
ZXRlcihQYXJhbWV0ZXImJikgPSBkZWZhdWx0OworY2xhc3MgSW50cmluc2ljczsKK2NsYXNzIFVu
bmFtZWRUeXBlOwogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KLSAgICBP
cHRpb25hbDxBU1Q6OlNlbWFudGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9
CitzdHJ1Y3QgRW50cnlQb2ludEl0ZW0geworICAgIEVudHJ5UG9pbnRJdGVtKEFTVDo6VW5uYW1l
ZFR5cGUmIHVubmFtZWRUeXBlLCBBU1Q6OlNlbWFudGljJiBzZW1hbnRpYykKKyAgICAgICAgOiB1
bm5hbWVkVHlwZSh1bm5hbWVkVHlwZSkKKyAgICAgICAgLCBzZW1hbnRpYyhzZW1hbnRpYykKKyAg
ICB7CisgICAgfQogCi1wcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBR
dWFsaWZpZXJzIG1fcXVhbGlmaWVyczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiBt
X3R5cGU7Ci0gICAgT3B0aW9uYWw8U3RyaW5nPiBtX25hbWU7Ci0gICAgT3B0aW9uYWw8QVNUOjpT
ZW1hbnRpYz4gbV9zZW1hbnRpYzsKKyAgICBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZTsK
KyAgICBBU1Q6OlNlbWFudGljJiBzZW1hbnRpYzsKIH07CiAKLXR5cGVkZWYgVmVjdG9yPFBhcmFt
ZXRlcj4gUGFyYW1ldGVyczsKK3N0cnVjdCBFbnRyeVBvaW50SXRlbXMgeworICAgIFZlY3RvcjxF
bnRyeVBvaW50SXRlbT4gaW5wdXRzOworICAgIFZlY3RvcjxFbnRyeVBvaW50SXRlbT4gb3V0cHV0
czsKK307CiAKLX0KK09wdGlvbmFsPEVudHJ5UG9pbnRJdGVtcz4gZ2F0aGVyRW50cnlQb2ludEl0
ZW1zKGNvbnN0IEludHJpbnNpY3MmLCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOwogCiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5m
ZXJUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTElu
ZmVyVHlwZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iNzlh
YTFjZjY1NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldI
TFNMSW5mZXJUeXBlcy5oIgorCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1
ZGUgIldITFNMUmVzb2x2YWJsZVR5cGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgV0hMU0wgeworCitzdGF0aWMgYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VHlwZSYgdW5p
ZnlUaGlzLCBjb25zdCBBU1Q6OlR5cGUmIHVuaWZ5T3RoZXIpCit7CisgICAgaWYgKCZ1bmlmeVRo
aXMgPT0gJnVuaWZ5T3RoZXIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlzPEFT
VDo6TmFtZWRUeXBlPih1bmlmeVRoaXMpICYmIGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeU90aGVy
KSkgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgYXV0byYgbmFtZWRUaGlzID0gZG93
bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5VGhpcyk7CisgICAgICAgIGF1dG8mIG5hbWVkT3Ro
ZXIgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlPdGhlcik7CisgICAgICAgIEFTU0VS
VCghaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUaGlzKSAmJiAhaXM8QVNUOjpUeXBlRGVm
aW5pdGlvbj4obmFtZWRPdGhlcikpOworI2VuZGlmCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9IGVsc2UgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5VGhpcykgJiYgaXM8QVNUOjpV
bm5hbWVkVHlwZT4odW5pZnlPdGhlcikpIHsKKyAgICAgICAgYXV0byYgdW5uYW1lZFRoaXMgPSBk
b3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeVRoaXMpOworICAgICAgICBhdXRvJiB1bm5h
bWVkT3RoZXIgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU90aGVyKTsKKyAgICAg
ICAgQVNTRVJUKCFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUaGlzKSAmJiAhaXM8QVNU
OjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkT3RoZXIpKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6UG9p
bnRlclR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkT3Ro
ZXIpKSB7CisgICAgICAgICAgICBhdXRvJiBwb2ludGVyVGhpcyA9IGRvd25jYXN0PEFTVDo6UG9p
bnRlclR5cGU+KHVubmFtZWRUaGlzKTsKKyAgICAgICAgICAgIGF1dG8mIHBvaW50ZXJPdGhlciA9
IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRPdGhlcik7CisgICAgICAgICAgICBp
ZiAocG9pbnRlclRoaXMuYWRkcmVzc1NwYWNlKCkgIT0gcG9pbnRlck90aGVyLmFkZHJlc3NTcGFj
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBt
YXRjaGVzKHBvaW50ZXJUaGlzLmVsZW1lbnRUeXBlKCksIHBvaW50ZXJPdGhlci5lbGVtZW50VHlw
ZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+
KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZE90aGVy
KSl7CisgICAgICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZVRoaXMgPSBkb3duY2FzdDxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFRoaXMpOworICAgICAgICAgICAgYXV0byYgYXJy
YXlSZWZlcmVuY2VPdGhlciA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5h
bWVkT3RoZXIpOworICAgICAgICAgICAgaWYgKGFycmF5UmVmZXJlbmNlVGhpcy5hZGRyZXNzU3Bh
Y2UoKSAhPSBhcnJheVJlZmVyZW5jZU90aGVyLmFkZHJlc3NTcGFjZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKGFycmF5UmVmZXJl
bmNlVGhpcy5lbGVtZW50VHlwZSgpLCBhcnJheVJlZmVyZW5jZU90aGVyLmVsZW1lbnRUeXBlKCkp
OworICAgICAgICB9CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFRoaXMp
ICYmIGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkT3RoZXIpKSB7CisgICAgICAgICAgICBhdXRv
JiBhcnJheVRoaXMgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFRoaXMpOworICAg
ICAgICAgICAgYXV0byYgYXJyYXlPdGhlciA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5h
bWVkT3RoZXIpOworICAgICAgICAgICAgaWYgKGFycmF5VGhpcy5udW1FbGVtZW50cygpICE9IGFy
cmF5T3RoZXIubnVtRWxlbWVudHMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhhcnJheVRoaXMudHlwZSgpLCBhcnJheU90aGVyLnR5
cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Jvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5h
bWVkVHlwZSwgY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgb3RoZXIpCit7CisgICAgcmV0dXJuIG1h
dGNoZXModW5uYW1lZFR5cGUudW5pZnlOb2RlKCksIG90aGVyLnVuaWZ5Tm9kZSgpKTsKK30KKwor
Ym9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUsIGNvbnN0IEFTVDo6
TmFtZWRUeXBlJiBvdGhlcikKK3sKKyAgICByZXR1cm4gbWF0Y2hlcyhuYW1lZFR5cGUudW5pZnlO
b2RlKCksIG90aGVyLnVuaWZ5Tm9kZSgpKTsKK30KKworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6
VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBBU1Q6Ok5hbWVkVHlwZSYgb3RoZXIpCit7
CisgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUudW5pZnlOb2RlKCksIG90aGVyLnVuaWZ5
Tm9kZSgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5k
Q29tbWl0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBBU1Q6OlJlc29sdmFibGVUeXBl
JiByZXNvbHZhYmxlVHlwZSkKK3sKKyAgICBhdXRvJiB1bmlmeU5vZGUgPSB1bm5hbWVkVHlwZS51
bmlmeU5vZGUoKTsKKyAgICBpZiAoIXJlc29sdmFibGVUeXBlLmNhblJlc29sdmUodW5pZnlOb2Rl
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5u
YW1lZFR5cGU+IHJlc3VsdDsKKyAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkp
IHsKKyAgICAgICAgYXV0byYgbmFtZWRVbmlmeU5vZGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlw
ZT4odW5pZnlOb2RlKTsKKyAgICAgICAgcmVzdWx0ID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KExleGVyOjpUb2tlbihuYW1lZFVuaWZ5Tm9kZS5vcmlnaW4oKSksIG5hbWVkVW5pZnlOb2RlKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0ID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4o
dW5pZnlOb2RlKS5jbG9uZSgpOworICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUocmVzdWx0LT5j
bG9uZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpV
bm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJs
ZVR5cGUxLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZTIpCit7CisgICAgLy8g
UHVsbCBvdXQgdGhlIHR3byBwcmVmZXJyZWRUeXBlcworICAgIC8vIE1ha2Ugc3VyZSBib3RoIG9m
IHRoZSByZXNvbHZhYmxlVHlwZXMgY2FuUmVzb2x2ZSgpIHdpdGggYm90aCBvZiB0aGUgcHJlZmVy
cmVkVHlwZXMKKyAgICAvLyBQaWNrIHRoZSB3aW5uZXIKKyAgICAvLyBSZXNvbHZlIGJvdGggb2Yg
dGhlIHJlc29sdmFibGUgdHlwZXMKKyAgICAvLyByZXR1cm4gdGhlIHdpbm5lcgorfQorCitib29s
IGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFTVDo6TmFtZWRUeXBlJiBwb3NzaWJsZVR5cGUs
IEFTVDo6VHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cykKK3sKKyAgICBpZiAoaXM8QVNUOjpU
eXBlRGVmaW5pdGlvbj4ocG9zc2libGVUeXBlKQorICAgICAgICB8fCBpczxBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24+KHBvc3NpYmxlVHlwZSkKKyAgICAgICAgfHwgaXM8QVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24+KHBvc3NpYmxlVHlwZSkpIHsKKyAgICAgICAgcmV0dXJuIHR5cGVBcmd1bWVu
dHMuaXNFbXB0eSgpOworICAgIH0KKworICAgIEFTU0VSVChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbj4ocG9zc2libGVUeXBlKSk7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9u
ID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHBvc3NpYmxlVHlwZSk7Cisg
ICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpICE9IHR5
cGVBcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUo
KTsgKytpKSB7CisgICAgICAgIEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKiB0eXBlQXJndW1lbnRF
eHByZXNzaW9uID0gbnVsbHB0cjsKKyAgICAgICAgQVNUOjpUeXBlUmVmZXJlbmNlKiB0eXBlQXJn
dW1lbnRUeXBlUmVmZXJlbmNlID0gbnVsbHB0cjsKKyAgICAgICAgQVNUOjpDb25zdGFudEV4cHJl
c3Npb24qIG5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24gPSBudWxscHRyOworICAgICAgICBB
U1Q6OlR5cGVSZWZlcmVuY2UqIG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UgPSBudWxs
cHRyOworCisgICAgICAgIGF1dG8gYXNzaWduID0gWyZdKEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBl
QXJndW1lbnQsIEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKiYgZXhwcmVzc2lvbiwgQVNUOjpUeXBl
UmVmZXJlbmNlKiYgdHlwZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgV1RGOjp2aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNz
aW9uKSB7CisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9ICZjb25zdGFudEV4cHJlc3Npb247
CisgICAgICAgICAgICB9LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4m
IHRoZVR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICB0eXBlUmVmZXJlbmNlID0gdGhl
VHlwZVJlZmVyZW5jZS5nZXQoKTsKKyAgICAgICAgICAgIH0pLCB0eXBlQXJndW1lbnQpOworICAg
ICAgICB9OworCisgICAgICAgIGFzc2lnbih0eXBlQXJndW1lbnRzW2ldLCB0eXBlQXJndW1lbnRF
eHByZXNzaW9uLCB0eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlKTsKKyAgICAgICAgYXNzaWduKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbaV0sIG5hdGl2ZVR5cGVBcmd1bWVu
dEV4cHJlc3Npb24sIG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpOworCisgICAgICAg
IGlmICh0eXBlQXJndW1lbnRFeHByZXNzaW9uICYmIG5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Np
b24pIHsKKyAgICAgICAgICAgIGlmICghdHlwZUFyZ3VtZW50RXhwcmVzc2lvbi0+bWF0Y2hlcygq
bmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVzc2lvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9IGVsc2UgaWYgKHR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UgJiYgbmF0
aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgaWYgKCFtYXRjaGVz
KCp0eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlLCAqbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVy
ZW5jZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMwMTViZjU0NDIwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5
cGVzLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVk
ZSA8bWVtb3J5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBVbm5hbWVkVHlwZTsKK2NsYXNzIE5hbWVkVHlwZTsK
K2NsYXNzIFJlc29sdmFibGVUeXBlOworCit9CisKK2Jvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6OlVu
bmFtZWRUeXBlJiwgY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYpOworYm9vbCBtYXRjaGVzKGNvbnN0
IEFTVDo6TmFtZWRUeXBlJiwgY29uc3QgQVNUOjpOYW1lZFR5cGUmKTsKK2Jvb2wgbWF0Y2hlcyhj
b25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgQVNUOjpOYW1lZFR5cGUmKTsKK3N0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENvbW1pdChBU1Q6OlVubmFtZWRUeXBl
JiwgQVNUOjpSZXNvbHZhYmxlVHlwZSYpOworc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5
cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmLCBBU1Q6OlJlc29sdmFibGVU
eXBlJik7Citib29sIGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFTVDo6TmFtZWRUeXBlJiBw
b3NzaWJsZVR5cGUsIEFTVDo6VHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cyk7CisKK30KKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMSW50cmluc2ljcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTEludHJpbnNpY3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5iYjJhNjhhZTUyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5jcHAKQEAgLTAsMCArMSwzNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgorCisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4
cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgIldI
TFNMVHlwZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitJbnRyaW5zaWNzOjpJbnRyaW5zaWNzKCkK
KyAgICA6IG1fdGV4dHVyZVR5cGVOYW1lcyB7IFN0cmluZygiVGV4dHVyZTFEIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTFEIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1
cmUxREFycmF5IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBT
dHJpbmcoIlJXVGV4dHVyZTFEQXJyYXkiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwK
KyAgICAgICAgICAgIFN0cmluZygiVGV4dHVyZTJEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTJEIiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUyREFycmF5IiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVy
ZTJEQXJyYXkiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0
cmluZygiVGV4dHVyZTNEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAg
ICAgICBTdHJpbmcoIlJXVGV4dHVyZTNEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCks
CisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmVDdWJlIiwgIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpIH0KKyAgICAsIG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzIHsgU3RyaW5nKCJ1Y2hh
ciIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJ1
c2hvcnQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmlu
ZygidWludCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3Ry
aW5nKCJjaGFyIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBT
dHJpbmcoInNob3J0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAg
ICBTdHJpbmcoImludCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAg
ICAgU3RyaW5nKCJoYWxmIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAg
ICAgICBTdHJpbmcoImZsb2F0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgfQorICAg
ICwgbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzIHsgU3RyaW5nKCJoYWxmIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoImZsb2F0IiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkgfQoreworICAgIEFTU0VSVChtX3RleHR1cmVUeXBlTmFtZXMu
c2l6ZSgpID09IDExKTsgLy8gZnVsbFRleHR1cmVzIGhhcmRjb2RlcyB0aGUgbGVuZ3RoIG9mIHRo
aXMgYXJyYXkuCisgICAgQVNTRVJUKG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKSA9PSA4
KTsgLy8gZnVsbFRleHR1cmVzIGhhcmRjb2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkuCisg
ICAgQVNTRVJUKG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcy5zaXplKCkgPT0gMik7IC8vIHRleHR1
cmVEZXB0aDJEICYgZnJpZW5kcyBoYXJkY29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5Lgor
fQorCit2b2lkIEludHJpbnNpY3M6OmFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
KQoreworICAgIC8vIEZJWE1FOiBQb3B1bGF0ZSB0aGlzLgorfQorCitib29sIEludHJpbnNpY3M6
OmFkZFByaW1pdGl2ZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xh
cmF0aW9uKQoreworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygp
LnNpemUoKSAhPSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidm9pZCIpCisgICAgICAgIG1fdm9pZFR5cGUgPSAmbmF0
aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5u
YW1lKCkgPT0gImJvb2wiKQorICAgICAgICBtX2Jvb2xUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJh
dGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1Y2hh
ciIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzSW50KCk7CisgICAgICAg
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQgeCkgeworICAgICAgICAg
ICAgcmV0dXJuIHggPj0gMCAmJiB4IDw9IDB4RkY7CisgICAgICAgIH0pOworICAgICAgICBuYXRp
dmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2ln
bmVkIHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4IDw9IDB4RkY7CisgICAgICAgIH0pOworICAg
ICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQg
eCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDx1
aW50OF90Pih4KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAgICAgIG1fdWNoYXJUeXBlID0gJm5h
dGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5uYW1lKCkgPT0gInVzaG9ydCIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNl
dElzSW50KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOwor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShp
bnQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPj0gMCAmJiB4IDw9IDB4RkZGRjsKKyAgICAg
ICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRVbnNp
Z25lZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPD0gMHhG
RkZGOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJl
cHJlc2VudEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxmbG9hdD4oc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHgpKSA9PSB4OworICAgICAgICB9KTsKKyAg
ICAgICAgbV91c2hvcnRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2Ug
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVpbnQiKSB7CisgICAgICAgIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFy
YXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENh
blJlcHJlc2VudEludGVnZXIoW10oaW50IHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4ID49IDA7
CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVz
ZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXBy
ZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHN0YXRpY19jYXN0PHVpbnQzMl90Pih4KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAg
ICAgIG1fdWludFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIH0gZWxzZSBpZiAo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiY2hhciIpIHsKKyAgICAgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldElzSW50KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRJc051bWJlcigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNTaWdu
ZWQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVn
ZXIoW10oaW50IHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4ID49IC0xMjggJiYgeCA8PSAxMjc7
CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVz
ZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4
IDw9IDEyNzsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRD
YW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PGludDhfdD4oeCkpID09IHg7CisgICAgICAgIH0pOwor
ICAgICAgICBtX2NoYXJUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2Ug
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInNob3J0IikgeworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJ
c1NpZ25lZCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50
SW50ZWdlcihbXShpbnQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPj0gLTMyNzY4ICYmIHgg
PD0gMzI3Njc7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0
Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIHsKKyAgICAgICAgICAg
IHJldHVybiB4IDw9IDMyNzY3OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50MTZfdD4oeCkpID09IHg7Cisg
ICAgICAgIH0pOworICAgICAgICBtX3Nob3J0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247
CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJpbnQiKSB7
CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRp
dmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldElzU2lnbmVkKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRD
YW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50
VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4IDw9
IDIxNDc0ODM2NDc7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24u
c2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxpbnQzMl90Pih4KSkgPT0geDsKKyAgICAgICAg
fSk7CisgICAgICAgIG1faW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBl
bHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJoYWxmIikgeworICAgICAg
ICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnNldElzRmxvYXRpbmcoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50KSB7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5S
ZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQpIHsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENh
blJlcHJlc2VudEZsb2F0KFtdKGZsb2F0KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfSk7CisgICAgICAgIG1faGFsZlR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOwor
ICAgIH0gZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZmxvYXQiKSB7
CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNGbG9hdGluZygpOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQpIHsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9u
LnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQpIHsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbV9mbG9hdFR5cGUgPSAmbmF0aXZlVHlwZURlY2xh
cmF0aW9uOworICAgIH0KKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJhdG9taWNfaW50IikKKyAgICAgICAgbV9hdG9taWNJbnRUeXBlID0gJm5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09
ICJhdG9taWNfdWludCIpCisgICAgICAgIG1fYXRvbWljVWludFR5cGUgPSAmbmF0aXZlVHlwZURl
Y2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0g
InNhbXBsZXIiKQorICAgICAgICBtX3NhbXBsZXJUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlv
bjsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEludHJpbnNpY3M6OmFkZFZlY3RvcihBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlmIChuYXRpdmVUeXBlRGVj
bGFyYXRpb24ubmFtZSgpICE9ICJ2ZWN0b3IiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0g
Mik7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjp1bmlxdWVfcHRyPEFT
VDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClb
MF0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhw
cmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSkpOworICAg
IGF1dG8mIGlubmVyVHlwZVBvaW50ZXIgPSBXVEY6OmdldDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpU
eXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7
CisgICAgYXV0byYgbGVuZ3RoRXhwcmVzc2lvbiA9IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHBy
ZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKTsKKyAgICBB
U1NFUlQoaW5uZXJUeXBlUG9pbnRlcik7CisgICAgYXV0byYgaW5uZXJUeXBlID0gKmlubmVyVHlw
ZVBvaW50ZXI7CisgICAgQVNTRVJUKGlubmVyVHlwZS50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09
IDApOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiogYXJyYXk7CisgICAgaWYgKGlu
bmVyVHlwZS5uYW1lKCkgPT0gImJvb2wiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yQm9vbDsK
KyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJ1Y2hhciIpCisgICAgICAgIGFycmF5
ID0gbV92ZWN0b3JVY2hhcjsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJ1c2hv
cnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yVXNob3J0OworICAgIGVsc2UgaWYgKGlubmVy
VHlwZS5uYW1lKCkgPT0gInVpbnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yVWludDsKKyAg
ICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJjaGFyIikKKyAgICAgICAgYXJyYXkgPSBt
X3ZlY3RvckNoYXI7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAic2hvcnQiKQor
ICAgICAgICBhcnJheSA9IG1fdmVjdG9yU2hvcnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5h
bWUoKSA9PSAiaW50IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvckludDsKKyAgICBlbHNlIGlm
IChpbm5lclR5cGUubmFtZSgpID09ICJoYWxmIikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3Rvckhh
bGY7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiZmxvYXQiKQorICAgICAgICBh
cnJheSA9IG1fdmVjdG9yRmxvYXQ7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICBpbnQgbGVuZ3RoID0gbGVuZ3RoRXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgp
LnZhbHVlKCk7CisgICAgQVNTRVJUKGxlbmd0aCA+PSAyICYmIGxlbmd0aCA8PSA0KTsKKyAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNWZWN0b3IoKTsKKyAgICBhcnJheVtsZW5ndGggLSAy
XSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
SW50cmluc2ljczo6YWRkTWF0cml4KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVU
eXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
IT0gIm1hdHJpeCIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChuYXRpdmVU
eXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAzKTsKKyAgICBBU1NFUlQo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVmZXJlbmNl
Pj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIEFTU0VS
VChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVU
eXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgQVNTRVJUKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi50eXBlQXJndW1lbnRzKClbMl0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGVQb2ludGVyID0g
V1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgIGF1dG8mIHJvd0V4cHJlc3Npb24g
PSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9u
LnR5cGVBcmd1bWVudHMoKVsxXSk7CisgICAgYXV0byYgY29sdW1uRXhwcmVzc2lvbiA9IFdURjo6
Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFy
Z3VtZW50cygpWzJdKTsKKyAgICBBU1NFUlQoaW5uZXJUeXBlUG9pbnRlcik7CisgICAgYXV0byYg
aW5uZXJUeXBlID0gKmlubmVyVHlwZVBvaW50ZXI7CisgICAgQVNTRVJUKGlubmVyVHlwZS50eXBl
QXJndW1lbnRzKCkuc2l6ZSgpID09IDApOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
KiAoKmFycmF5KVszXTsKKyAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiaGFsZiIpCisgICAg
ICAgIGFycmF5ID0gbV9tYXRyaXhIYWxmOworICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJm
bG9hdCIpCisgICAgICAgIGFycmF5ID0gbV9tYXRyaXhGbG9hdDsKKyAgICBpbnQgcm93ID0gcm93
RXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgpLnZhbHVlKCk7CisgICAgQVNTRVJUKHJvdyA+PSAy
ICYmIHJvdyA8PSA0KTsKKyAgICBpbnQgY29sdW1uID0gY29sdW1uRXhwcmVzc2lvbi5pbnRlZ2Vy
TGl0ZXJhbCgpLnZhbHVlKCk7CisgICAgQVNTRVJUKGNvbHVtbiA+PSAyICYmIGNvbHVtbiA8PSA0
KTsKKyAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNNYXRyaXgoKTsKKyAgICBhcnJheVty
b3cgLSAyXVtjb2x1bW4gLSAyXSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgSW50cmluc2ljczo6YWRkRnVsbFRleHR1cmUoQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgQVNUOjpUeXBlUmVmZXJlbmNl
JiBpbm5lclR5cGUpCit7CisgICAgdW5zaWduZWQgdGV4dHVyZVR5cGVJbmRleCA9IG1fdGV4dHVy
ZVR5cGVOYW1lcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGV4dHVy
ZVR5cGVOYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0
aW9uLm5hbWUoKSA9PSBtX3RleHR1cmVUeXBlTmFtZXNbaV0pCisgICAgICAgICAgICB0ZXh0dXJl
VHlwZUluZGV4ID0gaTsKKyAgICB9CisgICAgaWYgKHRleHR1cmVUeXBlSW5kZXggPT0gbV90ZXh0
dXJlVHlwZU5hbWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWdu
ZWQgaW5uZXJUeXBlSW5kZXggPSBtX3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCk7CisgICAg
dW5zaWduZWQgdmVjdG9yTGVuZ3RoOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Rl
eHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaW5uZXJUeXBl
Lm5hbWUoKS5zdGFydHNXaXRoKG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzW2ldKSkgeworICAgICAg
ICAgICAgdGV4dHVyZVR5cGVJbmRleCA9IGk7CisgICAgICAgICAgICBpZiAoaW5uZXJUeXBlLm5h
bWUoKSA9PSBtX3RleHR1cmVJbm5lclR5cGVOYW1lc1tpXSkKKyAgICAgICAgICAgICAgICB2ZWN0
b3JMZW5ndGggPSAxOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KGlubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgPT0gbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXNbaV0u
bGVuZ3RoKCkgKyAxKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5uZXJUeXBlLm5hbWUoKVtp
bm5lclR5cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0gPT0gJzInCisgICAgICAgICAgICAgICAgICAg
IHx8IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAtIDFdID09ICcz
JworICAgICAgICAgICAgICAgICAgICB8fCBpbm5lclR5cGUubmFtZSgpW2lubmVyVHlwZS5uYW1l
KCkubGVuZ3RoKCkgLSAxXSA9PSAnNCcpOworICAgICAgICAgICAgICAgIHZlY3Rvckxlbmd0aCA9
IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAtIDFdIC0gJzAnOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChpbm5lclR5cGVJbmRl
eCAhPSBtX3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCkpOworICAgIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5zZXRJc1RleHR1cmUoKTsKKyAgICBtX2Z1bGxUZXh0dXJlc1t0ZXh0dXJlVHlwZUlu
ZGV4XVtpbm5lclR5cGVJbmRleF1bdmVjdG9yTGVuZ3RoIC0gMV0gPSAmbmF0aXZlVHlwZURlY2xh
cmF0aW9uOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6OmFkZERlcHRo
VGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9u
LCBBU1Q6OlR5cGVSZWZlcmVuY2UmIGlubmVyVHlwZSkKK3sKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbioqIHRleHR1cmU7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gIlRleHR1cmVEZXB0aDJEIikKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZURlcHRo
MkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0
dXJlRGVwdGgyRCIpCisgICAgICAgIHRleHR1cmUgPSBtX3J3VGV4dHVyZURlcHRoMkQ7CisgICAg
ZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZURlcHRoMkRB
cnJheSIpCisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVEZXB0aDJEQXJyYXk7CisgICAgZWxz
ZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlRGVwdGgyREFy
cmF5IikKKyAgICAgICAgdGV4dHVyZSA9IG1fcndUZXh0dXJlRGVwdGgyREFycmF5OworICAgIGVs
c2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVEZXB0aEN1YmUi
KQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlRGVwdGhDdWJlOworICAgIGVsc2UKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgdW5zaWduZWQgaW5uZXJUeXBlSW5kZXggPSBt
X2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KGlubmVyVHlwZS5uYW1lKCkgPT0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzW2ldKQorICAgICAg
ICAgICAgaW5uZXJUeXBlSW5kZXggPSBpOworICAgIH0KKyAgICBBU1NFUlQoaW5uZXJUeXBlSW5k
ZXggIT0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKSk7CisgICAgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnNldElzVGV4dHVyZSgpOworICAgIHRleHR1cmVbaW5uZXJUeXBlSW5kZXhdID0g
Jm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJbnRy
aW5zaWNzOjphZGRUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBl
RGVjbGFyYXRpb24pCit7CisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKCkuc2l6ZSgpID09IDEpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRp
b24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlUG9pbnRlciA9IFdU
Rjo6Z2V0PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVj
bGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBBU1NFUlQoaW5uZXJUeXBlUG9pbnRl
cik7CisgICAgYXV0byYgaW5uZXJUeXBlID0gKmlubmVyVHlwZVBvaW50ZXI7CisgICAgQVNTRVJU
KGlubmVyVHlwZS50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDApOworICAgIGlmIChhZGRGdWxs
VGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlubmVyVHlwZSkpIHsKKyAgICAgICAgbV90
ZXh0dXJlU2V0LmFkZCgmbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoYWRkRGVwdGhUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgaW5u
ZXJUeXBlKSkKKyAgICAgICAgbV90ZXh0dXJlU2V0LmFkZCgmbmF0aXZlVHlwZURlY2xhcmF0aW9u
KTsKK30KKwordm9pZCBJbnRyaW5zaWNzOjphZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24m
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoYWRkUHJpbWl0aXZlKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoYWRkVmVjdG9yKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoYWRkTWF0cml4KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBhZGRUZXh0dXJlKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbik7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk5MDIxZjk0NjgxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRy
aW5zaWNzLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7
CisKK2NsYXNzIEludHJpbnNpY3MgeworcHVibGljOgorICAgIEludHJpbnNpY3MoKTsKKworICAg
IHZvaWQgYWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZvaWQgYWRk
KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiYgdm9pZFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdm9pZFR5
cGUpOworICAgICAgICByZXR1cm4gKm1fdm9pZFR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mIGJvb2xUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2Jvb2xUeXBlKTsKKyAgICAgICAgcmV0dXJuICptX2Jvb2xUeXBlOworICAgIH0KKworICAg
IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiB1aW50VHlwZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQobV91aW50VHlwZSk7CisgICAgICAgIHJldHVybiAqbV91aW50VHlwZTsKKyAg
ICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgc2FtcGxlclR5cGUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2FtcGxlclR5cGUpOworICAgICAgICByZXR1cm4g
Km1fc2FtcGxlclR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24m
IGZsb2F0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9mbG9hdFR5cGUpOwor
ICAgICAgICByZXR1cm4gKm1fZmxvYXRUeXBlOworICAgIH0KKworICAgIEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJiBmbG9hdDNUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X3ZlY3RvckZsb2F0WzFdKTsKKyAgICAgICAgcmV0dXJuICptX3ZlY3RvckZsb2F0WzFdOworICAg
IH0KKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBmbG9hdDRUeXBlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZlY3RvckZsb2F0WzJdKTsKKyAgICAgICAgcmV0dXJu
ICptX3ZlY3RvckZsb2F0WzJdOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGFkZFByaW1p
dGl2ZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkVmVjdG9yKEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGRNYXRyaXgoQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBib29sIGFkZEZ1bGxUZXh0dXJlKEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uJiwgQVNUOjpUeXBlUmVmZXJlbmNlJik7CisgICAgYm9vbCBhZGREZXB0
aFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mLCBBU1Q6OlR5cGVSZWZlcmVuY2Um
KTsKKyAgICB2b2lkIGFkZFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKwor
ICAgIEhhc2hTZXQ8Y29uc3QgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qPiBtX3RleHR1cmVT
ZXQ7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92b2lkVHlwZTsKKyAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9ib29sVHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiogbV91Y2hhclR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24qIG1fdXNob3J0VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV91aW50
VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9jaGFyVHlwZTsKKyAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9zaG9ydFR5cGU7CisgICAgQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24qIG1faW50VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biogbV9oYWxmVHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9mbG9hdFR5
cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fYXRvbWljSW50VHlwZTsKKyAg
ICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9hdG9taWNVaW50VHlwZTsKKyAgICBBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9zYW1wbGVyVHlwZTsKKworICAgIEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckJvb2xbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24qIG1fdmVjdG9yVWNoYXJbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24qIG1fdmVjdG9yVXNob3J0WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBt
X3ZlY3RvclVpbnRbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9y
Q2hhclszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JTaG9ydFsz
XTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JJbnRbM107CisgICAg
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9ySGFsZlszXTsKKyAgICBBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JGbG9hdFszXTsKKworICAgIEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uKiBtX21hdHJpeEhhbGZbM11bM107CisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qIG1fbWF0cml4RmxvYXRbM11bM107CisKKyAgICBWZWN0b3I8U3RyaW5nPiBt
X3RleHR1cmVUeXBlTmFtZXM7CisgICAgVmVjdG9yPFN0cmluZz4gbV90ZXh0dXJlSW5uZXJUeXBl
TmFtZXM7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9mdWxsVGV4dHVyZXNb
MTFdWzhdWzRdOworCisgICAgVmVjdG9yPFN0cmluZz4gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVz
OworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3RleHR1cmVEZXB0aDJEWzJdOwor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3J3VGV4dHVyZURlcHRoMkRbMl07Cisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdGV4dHVyZURlcHRoMkRBcnJheVsyXTsK
KyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9yd1RleHR1cmVEZXB0aDJEQXJyYXlb
Ml07CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdGV4dHVyZURlcHRoQ3ViZVsy
XTsKK307CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKaW5kZXggM2IxOTM0ZTkzMTYuLmU5YWVhZTdi
NTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TExleGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TExleGVyLmNwcApAQCAtMjMsOCArMjMsNiBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNwcmFnbWEgb25jZQotCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV0hMU0xMZXhlci5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi40ZTg2YmI5ODA0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwCkBAIC0w
LDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisKKyNpbmNsdWRlICJX
SExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZp
bml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFN0
cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworTmFtZUNvbnRleHQ6Ok5hbWVDb250ZXh0KE5hbWVD
b250ZXh0KiBwYXJlbnQpCisgICAgOiBtX3BhcmVudChwYXJlbnQpCit7Cit9CisKK2Jvb2wgTmFt
ZUNvbnRleHQ6OmFkZChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKK3sKKyAg
ICBpZiAoZXhpc3RzKHR5cGVEZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKHR5cGVEZWZpbml0aW9uLm5hbWUoKSwg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQodHlwZURlZmluaXRpb24pOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9u
JiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQoreworICAgIGlmIChleGlzdHMoc3RydWN0dXJlRGVmaW5p
dGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBt
X3R5cGVzLmFkZChzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICBpZiAoIXJlc3VsdC5pc05l
d0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRp
b25EZWZpbml0aW9uKQoreworICAgIGlmIChleGlzdHMoZW51bWVyYXRpb25EZWZpbml0aW9uLm5h
bWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMu
YWRkKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRy
eSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBw
ZW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
TmFtZUNvbnRleHQ6OmFkZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0
aW9uKQoreworICAgIGlmIChtX3R5cGVzLmZpbmQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkg
IT0gbV90eXBlcy5lbmQoKQorICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9ucy5hZGQoZnVuY3Rpb25EZWZpbml0aW9u
Lm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZnVuY3Rp
b25EZWZpbml0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6
YWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikKK3sKKyAgICBpZiAobV90eXBlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
bmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9ucy5hZGQobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkpOworICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUuYXBwZW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobV9mdW5jdGlvbnMuZmluZChu
YXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX2Z1bmN0aW9ucy5lbmQoKQorICAgICAg
ICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1f
dmFyaWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQg
PSBtX3R5cGVzLmFkZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24m
IHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKGV4aXN0cyh2YXJpYWJsZURlY2xhcmF0
aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1f
dmFyaWFibGVzLmFkZChTdHJpbmcodmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lKCkpLCAmdmFyaWFi
bGVEZWNsYXJhdGlvbik7CisgICAgcmV0dXJuIHJlc3VsdC5pc05ld0VudHJ5OworfQorCitWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KiBOYW1lQ29udGV4
dDo6Z2V0VHlwZXMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBt
X3R5cGVzLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fdHlwZXMuZW5kKCkpIHsK
KyAgICAgICAgaWYgKG1fcGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRU
eXBlcyhuYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiAm
aXRlcmF0b3ItPnZhbHVlOworfQorCitWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiogTmFtZUNvbnRleHQ6OmdldEZ1bmN0aW9ucyhjb25z
dCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rpb25zLmZpbmQo
bmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZnVuY3Rpb25zLmVuZCgpKSB7CisgICAgICAg
IGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0RnVuY3Rpb25z
KG5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuICZpdGVy
YXRvci0+dmFsdWU7Cit9CisKK0FTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogTmFtZUNvbnRleHQ6
OmdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0g
bV92YXJpYWJsZXMuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV92YXJpYWJsZXMu
ZW5kKCkpIHsKKyAgICAgICAgaWYgKG1fcGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIG1fcGFy
ZW50LT5nZXRWYXJpYWJsZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
ICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmV4aXN0
cyhTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIG1fdHlwZXMuZmluZChuYW1lKSAhPSBtX3R5
cGVzLmVuZCgpCisgICAgICAgIHx8IG1fZnVuY3Rpb25zLmZpbmQobmFtZSkgIT0gbV9mdW5jdGlv
bnMuZW5kKCkKKyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChuYW1lKSAhPSBtX3ZhcmlhYmxl
cy5lbmQoKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kM2RmODAwMTRhZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaApA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3Bh
Y2UgQVNUIHsKKworY2xhc3MgTmFtZWRUeXBlOworY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbjsK
K2NsYXNzIFR5cGVEZWZpbml0aW9uOworY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlvbjsKK2NsYXNz
IEVudW1lcmF0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIEZ1bmN0aW9uRGVmaW5pdGlvbjsKK2NsYXNz
IE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBOYXRpdmVUeXBlRGVjbGFyYXRpb247
CitjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uOworCit9CisKK2NsYXNzIE5hbWVDb250ZXh0IHsK
K3B1YmxpYzoKKyAgICBOYW1lQ29udGV4dChOYW1lQ29udGV4dCogcGFyZW50ID0gbnVsbHB0cik7
CisKKyAgICBib29sIGFkZChBU1Q6OlR5cGVEZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQoQVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpFbnVtZXJhdGlvbkRl
ZmluaXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOworICAg
IGJvb2wgYWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRk
KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uJik7CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6
Ok5hbWVkVHlwZT4sIDE+KiBnZXRUeXBlcyhjb25zdCBTdHJpbmcmKTsKKyAgICBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiogZ2V0RnVu
Y3Rpb25zKGNvbnN0IFN0cmluZyYpOworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogZ2V0
VmFyaWFibGUoY29uc3QgU3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgYm9vbCBleGlzdHMoU3Ry
aW5nJik7CisKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpOYW1lZFR5cGU+LCAxPj4gbV90eXBlczsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4+
IG1fZnVuY3Rpb25zOworICAgIEhhc2hNYXA8U3RyaW5nLCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24qPiBtX3ZhcmlhYmxlczsKKyAgICBOYW1lQ29udGV4dCogbV9wYXJlbnQ7Cit9OworCit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKaW5kZXggNzgwZDVjNTQyNWEuLmQ1MmMyYTFj
ZGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TE5hbWVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCkBAIC0yOCwxOSArMjgsMjQ1IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2ZXIuaCIKIAotI2luY2x1ZGUgIldI
TFNMVmlzaXRvci5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmgi
CisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2ZU92
ZXJsb2FkSW1wbC5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUg
IldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVudC5o
IgorI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9v
cC5oIgorI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVE
ZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKKyNpbmNs
dWRlICJXSExTTFJldHVybi5oIgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xF
bnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFt
ZXNwYWNlIFdITFNMIHsKIAotY2xhc3MgTmFtZVJlc29sdmVyIDogcHVibGljIFZpc2l0b3Igewot
ICAgIH5OYW1lUmVzb2x2ZXIoKSA9IGRlZmF1bHQ7Ci19OworTmFtZVJlc29sdmVyOjpOYW1lUmVz
b2x2ZXIoTmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KQorICAgIDogbV9uYW1lQ29udGV4dChuYW1l
Q29udGV4dCkKK3sKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6VHlwZVJlZmVy
ZW5jZSYgdHlwZVJlZmVyZW5jZSkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZVJlZmVy
ZW5jZSk7CisgICAgaWYgKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8qIGNhbmRpZGF0ZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKHR5
cGVSZWZlcmVuY2UubmFtZSgpKTsKKyAgICBpZiAoY2FuZGlkYXRlcyA9PSBudWxscHRyKSB7Cisg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGF1dG8g
cmVzdWx0ID0gcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoKmNhbmRpZGF0ZXMsIHR5cGVSZWZlcmVu
Y2UudHlwZUFyZ3VtZW50cygpKSkKKyAgICAgICAgdHlwZVJlZmVyZW5jZS5zZXRSZXNvbHZlZFR5
cGUoKnJlc3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIE5hbWVDb250ZXh0IG5ld05h
bWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIgbmV3TmFtZVJlc29s
dmVyKG5ld05hbWVDb250ZXh0KTsKKyAgICB2aXNpdFVubmFtZWRUeXBlKGZ1bmN0aW9uRGVmaW5p
dGlvbi50eXBlKCkpOworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKSkgeworICAgICAgICBuZXdOYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFu
ZFZpc2l0KHBhcmFtZXRlcik7CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IG5ld05hbWVDb250ZXh0
LmFkZChwYXJhbWV0ZXIpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgbmV3
TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2so
KSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkJsb2NrJiBibG9jaykKK3sK
KyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJl
c29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQoYmxvY2spOworfQorCit2b2lk
IE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCit7Cisg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAgIE5h
bWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIo
bmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5ib2R5KCkpOworICAg
IGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgpKSB7CisgICAgICAgIE5hbWVDb250ZXh0IG5hbWVD
b250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICAgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0
KS5jaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpOworICAgIH0KK30K
Kwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCit7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICBO
YW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVy
KG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7Cit9CisK
K3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiB3aGlsZUxvb3ApCit7
CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVS
ZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkp
OworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7Cit9CisK
K3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApCit7CisgICAg
TmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZl
cihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3ApOworfQorCit2b2lkIE5h
bWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xh
cmF0aW9uKQoreworICAgIG1fbmFtZUNvbnRleHQuYWRkKHZhcmlhYmxlRGVjbGFyYXRpb24pOwor
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uKTsKK30KIAotdm9pZCBy
ZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mKQordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFT
VDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKQogeworICAgIGlmICh2YXJp
YWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYXV0
byogdmFyaWFibGUgPSBtX25hbWVDb250ZXh0LmdldFZhcmlhYmxlKHZhcmlhYmxlUmVmZXJlbmNl
Lm5hbWUoKSkpCisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLnNldFZhcmlhYmxlKCp2YXJpYWJs
ZSk7CisgICAgZWxzZSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuTm9k
ZSkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50RnVuY3Rpb24pOworICAgIHJldHVybk5vZGUuc2V0
RnVuY3Rpb24obV9jdXJyZW50RnVuY3Rpb24pOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZXR1
cm5Ob2RlKTsKK30KIAordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCit7CisgICAgaWYgKGF1dG8q
IGdldEZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5nZXRGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgIHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5zZXRQb3NzaWJsZUdldE92ZXJsb2FkcygqZ2V0RnVuY3Rpb25zKTsKKyAgICBpZiAo
YXV0byogc2V0RnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLnNldEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLnNldFBvc3NpYmxlU2V0T3ZlcmxvYWRzKCpzZXRGdW5jdGlvbnMpOworICAg
IGlmIChhdXRvKiBhbmRGdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kRnVuY3Rpb25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9zc2libGVBbmRPdmVybG9hZHMoKmFuZEZ1bmN0aW9ucyk7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7Cit9CisK
K3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Np
b24pCit7CisgICAgaWYgKGlzPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGRvdEV4cHJlc3Npb24u
YmFzZSgpKSkgeworICAgICAgICBpZiAoYXV0byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29u
dGV4dC5nZXRUeXBlcyhkb3duY2FzdDxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNz
aW9uLmJhc2UoKSkubmFtZSgpKSkgeworICAgICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uVHlw
ZXMtPnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBlID0gKCpl
bnVtZXJhdGlvblR5cGVzKVswXTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbj4odHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24+KHR5cGUpOworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBtZW1iZXIgPSBl
bnVtZXJhdGlvbkRlZmluaXRpb24ubWVtYmVyQnlOYW1lKGRvdEV4cHJlc3Npb24uZmllbGROYW1l
KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRv
dCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIEVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbHMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAgICAgICAgICAg
ICAgICAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gZG90RXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFBlcmhhcHMgZG8gdGhpcyB3aXRoIHZhcmlhbnRz
IG9yIGEgUmV3cml0ZXIgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgZG90RXhwcmVzc2lv
bi5+RG90RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgICAgICBuZXcgKCZkb3RFeHByZXNz
aW9uKSBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChXVEZNb3ZlKG9yaWdpbiksICptZW1i
ZXIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3RFeHByZXNzaW9uKTsKK30KKwordm9pZCBO
YW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQor
eworICAgIGlmICghY2FsbEV4cHJlc3Npb24uaGFzT3ZlcmxvYWRzKCkpIHsKKyAgICAgICAgaWYg
KGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGNhbGxFeHByZXNz
aW9uLm5hbWUoKSkpCisgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1
bmN0aW9ucyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0
Q2FzdERhdGEoKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbnMgPSBtX25hbWVDb250
ZXh0LmdldEZ1bmN0aW9ucyhjYWxsRXhwcmVzc2lvbi5uYW1lKCkpKQorICAgICAgICAgICAgICAg
IGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChjYWxsRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkNv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkKK3sKKyAgICBpZiAoYXV0byBlbnVtZXJh
dGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhjb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5sZWZ0KCkpKSB7CisgICAgICAgIEFTU0VSVChlbnVtZXJh
dGlvblR5cGVzLT5zaXplKCkgPT0gMSk7CisgICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBlID0g
KCplbnVtZXJhdGlvblR5cGVzKVswXTsKKyAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uPih0eXBlKSkgeworICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uPih0eXBlKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBtZW1iZXIgPSBlbnVtZXJhdGlv
bkRlZmluaXRpb24ubWVtYmVyQnlOYW1lKGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVt
YmVyUmVmZXJlbmNlLnJpZ2h0KCkpKSB7CisgICAgICAgICAgICAgICAgY29uc3RhbnRFeHByZXNz
aW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Uuc2V0RW51bWVyYXRpb25NZW1iZXIoKm1lbWJl
cik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHNldEVycm9yKCk7Cit9CisKKy8vIEZJWE1FOiBNYWtlIHN1cmUgYWxs
IHRoZSBuYW1lcyBoYXZlIGJlZW4gcmVzb2x2ZWQuCisKK2Jvb2wgcmVzb2x2ZU5hbWVzSW5UeXBl
cyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKK3sKKyAgICBm
b3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkgewor
ICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlRGVmaW5pdGlvbik7
CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3Jh
bS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vy
cm9yQW5kVmlzaXQoKnN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBpZiAobmFtZVJlc29s
dmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAo
YXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRp
b25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCgqZW51bWVy
YXRpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpKSB7CisgICAgICAg
IG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoKm5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7
CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgcmVzb2x2ZU5hbWVzSW5G
dW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCit7
CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVm
aW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVm
aW5pdGlvbihmdW5jdGlvbkRlZmluaXRpb24uZ2V0KCkpOworICAgICAgICBuYW1lUmVzb2x2ZXIu
Y2hlY2tFcnJvckFuZFZpc2l0KCpmdW5jdGlvbkRlZmluaXRpb24pOworICAgICAgICBpZiAobmFt
ZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IG5hbWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKG51bGxwdHIpOworICAg
IGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFu
ZFZpc2l0KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNv
bHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKaW5kZXggNDdkNGQ2YTU3OTMuLmU0MDhlOGMx
OGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TE5hbWVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMTmFtZVJlc29sdmVyLmgKQEAgLTI3LDEzICsyNyw0OSBAQAogCiAjaWYgRU5BQkxFKFdF
QkdQVSkKIAotI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMTmFtZUNv
bnRleHQuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi12b2lkIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3Jh
bSYgcHJvZ3JhbSk7CitjbGFzcyBQcm9ncmFtOworCitjbGFzcyBOYW1lUmVzb2x2ZXIgOiBwdWJs
aWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgTmFtZVJlc29sdmVyKE5hbWVDb250ZXh0Jik7CisK
KyAgICB2aXJ0dWFsIH5OYW1lUmVzb2x2ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlOwor
CisgICAgdm9pZCBzZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKEFTVDo6RnVuY3Rpb25EZWZp
bml0aW9uKiBmdW5jdGlvbkRlZmluaXRpb24pCisgICAgeworICAgICAgICBtX2N1cnJlbnRGdW5j
dGlvbiA9IGZ1bmN0aW9uRGVmaW5pdGlvbjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB2
aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlzaXQoQVNUOjpCbG9jayYgYmxvY2spIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNU
OjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNU
OjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRv
V2hpbGVMb29wJiB3aGlsZUxvb3ApIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JM
b29wJiBmb3JMb29wKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuTm9kZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB2
aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhw
cmVzc2lvbikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBj
YWxsRXhwcmVzc2lvbikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkgb3ZlcnJpZGU7CisKKyAgICBOYW1lQ29udGV4dCBtX25h
bWVDb250ZXh0OworICAgIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uKiBtX2N1cnJlbnRGdW5jdGlv
biB7IG51bGxwdHIgfTsKK307CisKK2Jvb2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiwg
TmFtZVJlc29sdmVyJik7Citib29sIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mLCBO
YW1lUmVzb2x2ZXImKTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKaW5kZXggYmM2ZTczZTZhMWYuLmE3ZGI1ZTUzNDdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBh
cnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
YXJzZXIuY3BwCkBAIC0zOCw3ICszOCw4IEBAIFBhcnNlcjo6UGFyc2VyKCkKIHsKIH0KIAotYXV0
byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBN
b2RlIG1vZGUpIC0+IE9wdGlvbmFsPEVycm9yPgorLy8gRklYTUU6IFJldHVybiBhIGJldHRlciBl
cnJvciBjb2RlIGZyb20gdGhpcywgYW5kIHJlcG9ydCBpdCB0byBKYXZhU2NyaXB0LgorYXV0byBQ
YXJzZXI6OnBhcnNlKFByb2dyYW0mIHByb2dyYW0sIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9k
ZSBtb2RlKSAtPiBPcHRpb25hbDxFcnJvcj4KIHsKICAgICBtX2xleGVyID0gTGV4ZXIoc3RyaW5n
Vmlldyk7CiAgICAgbV9tb2RlID0gbW9kZTsKQEAgLTU0LDcgKzU1LDExIEBAIGF1dG8gUGFyc2Vy
OjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2Rl
KSAtPiBPcHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVHlwZURlZmluaXRpb24o
KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKHR5cGVEZWZpbml0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVmaW5pdGlvbikpOwor
ICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKnR5
cGVEZWZpbml0aW9uKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAg
ICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCB0eXBlRGVmaW5pdGlv
bi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNjQsNyArNjksMTEgQEAgYXV0byBQYXJzZXI6
OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUp
IC0+IE9wdGlvbmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VTdHJ1Y3R1cmVEZWZpbml0
aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVEZWZpbml0
aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpzdHJ1Y3R1cmVE
ZWZpbml0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBl
bmQoV1RGTW92ZSgqc3RydWN0dXJlRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlmICgh
c3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3Ih
ICVzIiwgc3RydWN0dXJlRGVmaW5pdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzQs
NyArODMsMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmll
dyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmEKICAgICAgICAgICAgICAgICByZXR1
cm4gcGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKTsKICAgICAgICAgICAgIH0pOwogICAgICAg
ICAgICAgaWYgKGVudW1lcmF0aW9uRGVmaW5pdGlvbikgewotICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoV1RGTW92ZSgqZW51bWVyYXRpb25EZWZpbml0aW9uKSk7CisgICAgICAgICAgICAg
ICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqZW51bWVyYXRpb25EZWZp
bml0aW9uKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAg
ICAgICAgIFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCBlbnVtZXJhdGlvbkRlZmluaXRp
b24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTg1LDcgKzk4LDExIEBAIGF1dG8gUGFyc2Vy
OjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2Rl
KSAtPiBPcHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWZpbml0
aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRp
b24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKmZ1bmN0aW9uRGVm
aW5pdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5k
KFdURk1vdmUoKmZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3Vj
Y2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVz
IiwgZnVuY3Rpb25EZWZpbml0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZXJyb3IgPSBm
dW5jdGlvbkRlZmluaXRpb24uZXJyb3IoKTsKQEAgLTk2LDcgKzExMywxMSBAQCBhdXRvIFBhcnNl
cjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9k
ZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24oKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1v
dmUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1
Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAg
IFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
LT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDYsNyArMTI3LDExIEBAIGF1dG8gUGFyc2Vy
OjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2Rl
KSAtPiBPcHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlTmF0aXZlVHlwZURlY2xh
cmF0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlRGVj
bGFyYXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dy
YW0uYXBwZW5kKFdURk1vdmUoKm5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAg
ICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5h
bWUgRXJyb3IhICVzIiwgbmF0aXZlVHlwZURlY2xhcmF0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC00NTQsMTYgKzQ3OSw1MiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlU3VmZml4Tm9u
QWJicmV2aWF0ZWQoKSAtPiBFeHBlY3RlZDxUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZQogICAgICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHJpZ2h0U3F1YXJlQnJhY2tldC5lcnJvcigp
KTsKICAgICAgICAgcmV0dXJuIHt7ICp0b2tlbiwgV1RGOjpudWxsb3B0LCAqbnVtRWxlbWVudHMg
fX07CiAgICAgfQotICAgIGF1dG8gYWRkcmVzc1NwYWNlID0gY29uc3VtZVR5cGVzKHsgTGV4ZXI6
OlRva2VuOjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2UsIExleGVy
OjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkfSk7
Ci0gICAgaWYgKCFhZGRyZXNzU3BhY2UpCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
PihhZGRyZXNzU3BhY2UuZXJyb3IoKSk7Ci0gICAgcmV0dXJuIHt7ICp0b2tlbiwgeyAqYWRkcmVz
c1NwYWNlIH0sIFdURjo6bnVsbG9wdCB9fTsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZVRva2VuID0g
Y29uc3VtZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpEZXZpY2UsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExleGVyOjpU
b2tlbjo6VHlwZTo6VGhyZWFkfSk7CisgICAgaWYgKCFhZGRyZXNzU3BhY2VUb2tlbikKKyAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZVRva2VuLmVycm9yKCkpOwor
ICAgIEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsKKyAgICBz
d2l0Y2ggKGFkZHJlc3NTcGFjZVRva2VuLT50eXBlKSB7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46
OlR5cGU6OkNvbnN0YW50OgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5
cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGV4
ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2U6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVm
ZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cDoKKyAgICAgICAgYWRkcmVzc1NwYWNl
ID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkOgorICAgICAgICBh
ZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKFN0cmluZygiU29tZXRo
aW5nIHJlYWxseSBiYWQgaGFwcGVuZWQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkp
OworICAgIH0KKyAgICByZXR1cm4ge3sgKnRva2VuLCB7IGFkZHJlc3NTcGFjZSB9LCBXVEY6Om51
bGxvcHQgfX07CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+IHsKLSAgICBhdXRvIGFk
ZHJlc3NTcGFjZSA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQs
IExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdy
b3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOwotICAgIGlmICghYWRkcmVzc1NwYWNl
KQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYWRkcmVzc1NwYWNlLmVycm9yKCkp
OworYXV0byBQYXJzZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHsKKyAgICBhdXRvIGFkZHJlc3NT
cGFjZVRva2VuID0gY29uc3VtZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudCwg
TGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2UsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3Jv
dXAsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkfSk7CisgICAgaWYgKCFhZGRyZXNzU3BhY2VU
b2tlbikKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZVRva2Vu
LmVycm9yKCkpOworICAgIEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NT
cGFjZTsKKyAgICBzd2l0Y2ggKGFkZHJlc3NTcGFjZVRva2VuLT50eXBlKSB7CisgICAgY2FzZSBM
ZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0YW50OgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6
OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2U6CisgICAgICAgIGFkZHJlc3NTcGFj
ZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cDoKKyAgICAgICAg
YWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdy
b3VwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFk
OgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKFN0
cmluZygiU29tZXRoaW5nIHJlYWxseSBiYWQgaGFwcGVuZWQiLCBTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSkpOworICAgIH0KICAgICBhdXRvIG5hbWUgPSBjb25zdW1lVHlwZShMZXhlcjo6
VG9rZW46OlR5cGU6OklkZW50aWZpZXIpOwogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CkBAIC00NzEsMTIgKzUzMiwxMiBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6VHlwZT4sIEVycgogICAgIGlmICghdHlwZUFyZ3VtZW50cykKICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGVBcmd1bWVudHMuZXJyb3IoKSk7CiAKLSAgICBh
dXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4QWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1
ZmZpeEFiYnJldmlhdGVkJiB0eXBlU3VmZml4QWJicmV2aWF0ZWQsIHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlR5cGU+JiYgcHJldmlvdXMpIC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IHsKKyAg
ICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4QWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlw
ZVN1ZmZpeEFiYnJldmlhdGVkJiB0eXBlU3VmZml4QWJicmV2aWF0ZWQsIHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpV
bm5hbWVkVHlwZT4gewogICAgICAgICBzd2l0Y2ggKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tl
bi50eXBlKSB7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpTdGFyOgotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRv
a2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZS0+c3RyaW5nVmll
dy50b1N0cmluZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeEFi
YnJldmlhdGVkLnRva2VuKSwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAg
ICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpTcXVhcmVCcmFja2V0UGFpcjoKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhl
cjo6VG9rZW4odHlwZVN1ZmZpeEFiYnJldmlhdGVkLnRva2VuKSwgYWRkcmVzc1NwYWNlLT5zdHJp
bmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4o
dHlwZVN1ZmZpeEFiYnJldmlhdGVkLnRva2VuKSwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZp
b3VzKSk7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tl
dDoKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlUeXBlPihM
ZXhlcjo6VG9rZW4odHlwZVN1ZmZpeEFiYnJldmlhdGVkLnRva2VuKSwgV1RGTW92ZShwcmV2aW91
cyksICp0eXBlU3VmZml4QWJicmV2aWF0ZWQubnVtRWxlbWVudHMpOwogICAgICAgICBkZWZhdWx0
OgpAQCAtNDg4LDcgKzU0OSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUo
KSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyCiAgICAgYXV0byBm
aXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZCA9IHBhcnNlVHlwZVN1ZmZpeEFiYnJldmlhdGVkKCk7
CiAgICAgaWYgKCFmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZCkKICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0VHlwZVN1ZmZpeEFiYnJldmlhdGVkLmVycm9yKCkpOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNU
OjpUeXBlUmVmZXJlbmNlPihMZXhlcjo6VG9rZW4oKmFkZHJlc3NTcGFjZSksIG5hbWUtPnN0cmlu
Z1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6
VHlwZVJlZmVyZW5jZT4oV1RGTW92ZSgqYWRkcmVzc1NwYWNlVG9rZW4pLCBuYW1lLT5zdHJpbmdW
aWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKICAgICByZXN1bHQgPSBj
b25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkKCpmaXJzdFR5cGVTdWZmaXhBYmJyZXZp
YXRlZCwgV1RGTW92ZShyZXN1bHQpKTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBhdXRv
IHR5cGVTdWZmaXhBYmJyZXZpYXRlZCA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPFR5cGVT
dWZmaXhBYmJyZXZpYXRlZCwgRXJyb3I+PihbJl0oKSB7CkBAIC01MDMsNyArNTY0LDcgQEAgYXV0
byBQYXJzZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+LCBFcnIKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCi1h
dXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VOb25BZGRy
ZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5
cGU+LCBFcnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygpOwogICAgIGlmICghb3JpZ2lu
KQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwpAQCAt
NTE0LDEyICs1NzUsMTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgp
IC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LAogICAgIGlmICghdHlwZUFy
Z3VtZW50cykKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGVBcmd1bWVudHMu
ZXJyb3IoKSk7CiAKLSAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4Tm9uQWJicmV2aWF0
ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkJiB0eXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgcHJldmlvdXMpIC0+IHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IHsKKyAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4
Tm9uQWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkJiB0eXBl
U3VmZml4Tm9uQWJicmV2aWF0ZWQsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYm
IHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAg
ICBzd2l0Y2ggKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbi50eXBlKSB7CiAgICAgICAg
IGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpTdGFyOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25B
YmJyZXZpYXRlZC50b2tlbiksIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2Ut
PnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5
cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbiksICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQu
YWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpTcXVhcmVCcmFja2V0UGFpcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZp
eE5vbkFiYnJldmlhdGVkLnRva2VuKSwgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NT
cGFjZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4
ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbiksICp0eXBlU3VmZml4Tm9u
QWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgIGNh
c2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldDoKICAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1
ZmZpeE5vbkFiYnJldmlhdGVkLnRva2VuKSwgV1RGTW92ZShwcmV2aW91cyksICp0eXBlU3VmZml4
Tm9uQWJicmV2aWF0ZWQubnVtRWxlbWVudHMpOwogICAgICAgICBkZWZhdWx0OgpAQCAtNTI4LDcg
KzU4OSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwKICAgICAgICAgfQogICAgIH07CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFT
VDo6VHlwZVJlZmVyZW5jZT4oV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0
cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFT
VDo6VW5uYW1lZFR5cGU+IHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBlUmVmZXJl
bmNlPihXVEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1v
dmUoKnR5cGVBcmd1bWVudHMpKTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBhdXRvIHR5
cGVTdWZmaXhOb25BYmJyZXZpYXRlZCA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPFR5cGVT
dWZmaXhOb25BYmJyZXZpYXRlZCwgRXJyb3I+PihbJl0oKSB7CiAgICAgICAgICAgICByZXR1cm4g
cGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQoKTsKQEAgLTU0MiwxNCArNjAzLDE0IEBAIGF1
dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpUeXBlPiwKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCi1h
dXRvIFBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6
VHlwZT4sIEVycm9yPiB7Ci0gICAgYXV0byB0eXBlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPj4oWyZdKCkgeworYXV0byBQYXJz
ZXI6OnBhcnNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRU
eXBlPiwgRXJyb3I+IHsKKyAgICBhdXRvIHR5cGUgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPj4oWyZdKCkgewogICAg
ICAgICByZXR1cm4gcGFyc2VBZGRyZXNzU3BhY2VUeXBlKCk7CiAgICAgfSk7CiAgICAgaWYgKHR5
cGUpCiAgICAgICAgIHJldHVybiB0eXBlOwogCi0gICAgdHlwZSA9IGJhY2t0cmFja2luZ1Njb3Bl
PEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKKyAg
ICB0eXBlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6
VW5uYW1lZFR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKICAgICAgICAgcmV0dXJuIHBhcnNlTm9uQWRk
cmVzc1NwYWNlVHlwZSgpOwogICAgIH0pOwogICAgIGlmICh0eXBlKQpAQCAtODQ3LDcgKzkwOCw3
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigpIC0+IEV4cGVjdGVk
PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uCiAgICAgaWYgKCFuYW1lKQogICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4obmFtZS5lcnJvcigpKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlR5cGU+IHR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
IHR5cGU7CiAgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb2xvbikpIHsKICAg
ICAgICAgYXV0byBwYXJzZWRUeXBlID0gcGFyc2VUeXBlKCk7CiAgICAgICAgIGlmICghcGFyc2Vk
VHlwZSkKQEAgLTg2MywyMSArOTI0LDI1IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9u
RGVmaW5pdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uCiAgICAg
aWYgKCFmaXJzdEVudW1lcmF0aW9uTWVtYmVyKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxF
cnJvcj4oZmlyc3RFbnVtZXJhdGlvbk1lbWJlci5lcnJvcigpKTsKIAotICAgIEFTVDo6RW51bWVy
YXRpb25NZW1iZXJzIG1lbWJlcnM7Ci0gICAgbWVtYmVycy5hcHBlbmQoV1RGTW92ZSgqZmlyc3RF
bnVtZXJhdGlvbk1lbWJlcikpOworICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uIHJlc3Vs
dChXVEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUo
dHlwZSkpOworICAgIGF1dG8gc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgqZmlyc3RFbnVt
ZXJhdGlvbk1lbWJlcikpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGZhaWwo
U3RyaW5nKCJDYW5ub3QgYWRkIGVudW1lcmF0aW9uIG1lbWJlciIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpKTsKIAogICAgIHdoaWxlICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6
Q29tbWEpKSB7CiAgICAgICAgIGF1dG8gbWVtYmVyID0gcGFyc2VFbnVtZXJhdGlvbk1lbWJlcigp
OwogICAgICAgICBpZiAoIW1lbWJlcikKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVy
cm9yPihtZW1iZXIuZXJyb3IoKSk7Ci0gICAgICAgIG1lbWJlcnMuYXBwZW5kKFdURk1vdmUoKm1l
bWJlcikpOworICAgICAgICBzdWNjZXNzID0gcmVzdWx0LmFkZChXVEZNb3ZlKCptZW1iZXIpKTsK
KyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuIGZhaWwoU3RyaW5nKCJD
YW5ub3QgYWRkIGVudW1lcmF0aW9uIG1lbWJlciIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpKTsKICAgICB9CiAKICAgICBhdXRvIHJpZ2h0Q3VybHlCcmFja2V0ID0gY29uc3VtZVR5cGUo
TGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodEN1cmx5QnJhY2tldCk7CiAgICAgaWYgKCFyaWdodEN1
cmx5QnJhY2tldCkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHJpZ2h0Q3VybHlC
cmFja2V0LmVycm9yKCkpOwogCi0gICAgcmV0dXJuIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
KFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSh0
eXBlKSwgV1RGTW92ZShtZW1iZXJzKSk7CisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0K
IAogYXV0byBQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25NZW1iZXIoKSAtPiBFeHBlY3RlZDxBU1Q6
OkVudW1lcmF0aW9uTWVtYmVyLCBFcnJvcj4gewpAQCAtOTgxLDcgKzEwNDYsNyBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VBdHRyaWJ1dGVCbG9jaygpIC0+IEV4cGVjdGVkPEFTVDo6QXR0cmlidXRlQmxv
Y2ssIEVycm9yPiB7CiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQYXJz
ZXI6OnBhcnNlUGFyYW1ldGVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXIsIEVycm9yPiB7
CithdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24sIEVycm9yPiB7CiAgICAgYXV0byBvcmlnaW4gPSBwZWVrKCk7CiAgICAgaWYg
KCFvcmlnaW4pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3Io
KSk7CkBAIC05OTIsNyArMTA1Nyw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+
IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4gewogICAgIGlmICghdHlwZSkKICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7CiAKLSAgICBPcHRpb25h
bDxTdHJpbmc+IG5hbWU7CisgICAgU3RyaW5nIG5hbWU7CiAgICAgaWYgKGF1dG8gdG9rZW4gPSB0
cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllcikpCiAgICAgICAgIG5hbWUgPSB0
b2tlbi0+c3RyaW5nVmlldy50b1N0cmluZygpOwogCkBAIC0xMDAwLDE4ICsxMDY1LDE4IEBAIGF1
dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVyLCBF
cnJvcj4gewogICAgICAgICBhdXRvIHNlbWFudGljID0gcGFyc2VTZW1hbnRpYygpOwogICAgICAg
ICBpZiAoIXNlbWFudGljKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNl
bWFudGljLmVycm9yKCkpOwotICAgICAgICByZXR1cm4gQVNUOjpQYXJhbWV0ZXIoV1RGTW92ZSgq
b3JpZ2luKSwgV1RGTW92ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSgqdHlwZSksIFdURk1vdmUobmFt
ZSksIFdURk1vdmUoKnNlbWFudGljKSk7CisgICAgICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSgq
dHlwZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoKnNlbWFudGljKSwgbnVsbHB0cik7CiAgICAg
fQogCi0gICAgcmV0dXJuIEFTVDo6UGFyYW1ldGVyKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUo
cXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEY6Om51bGxvcHQp
OworICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwg
V1RGTW92ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSgqdHlwZSksIFdURk1vdmUobmFtZSksIFdURjo6
bnVsbG9wdCwgbnVsbHB0cik7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcnMoKSAt
PiBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlcnMsIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VQ
YXJhbWV0ZXJzKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucywgRXJyb3I+
IHsKICAgICBhdXRvIGxlZnRQYXJlbnRoZXNpcyA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6
VHlwZTo6TGVmdFBhcmVudGhlc2lzKTsKICAgICBpZiAoIWxlZnRQYXJlbnRoZXNpcykKICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGxlZnRQYXJlbnRoZXNpcy5lcnJvcigpKTsKIAot
ICAgIEFTVDo6UGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbnMgcGFyYW1ldGVyczsKICAgICBpZiAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlJp
Z2h0UGFyZW50aGVzaXMpKQogICAgICAgICByZXR1cm4gV1RGTW92ZShwYXJhbWV0ZXJzKTsKIApA
QCAtMTA5NSwxNCArMTE2MCwxNiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnRyeVBvaW50RnVuY3Rp
b25EZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYQogICAgIGlmICgh
cGFyYW1ldGVycykKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHBhcmFtZXRlcnMu
ZXJyb3IoKSk7CiAKKyAgICBib29sIGlzT3BlcmF0b3IgPSBmYWxzZTsKKwogICAgIGlmICh0cnlU
eXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29sb24pKSB7CiAgICAgICAgIGF1dG8gc2VtYW50aWMg
PSBwYXJzZVNlbWFudGljKCk7CiAgICAgICAgIGlmICghc2VtYW50aWMpCiAgICAgICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oc2VtYW50aWMuZXJyb3IoKSk7Ci0gICAgICAgIHJldHVy
biBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShhdHRy
aWJ1dGVCbG9jayksIGVudHJ5UG9pbnRUeXBlLCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5n
Vmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMp
KTsKKyAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmln
aW4pLCBXVEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSwgZW50cnlQb2ludFR5cGUsIFdURk1vdmUoKnR5
cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBX
VEZNb3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3IpOwogICAgIH0KIAotICAgIHJldHVybiBBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShhdHRyaWJ1dGVC
bG9jayksIGVudHJ5UG9pbnRUeXBlLCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50
b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0KTsKKyAgICByZXR1
cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoYXR0
cmlidXRlQmxvY2spLCBlbnRyeVBvaW50VHlwZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmlu
Z1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNP
cGVyYXRvcik7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0
aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4gewpAQCAt
MTExNyw2ICsxMTg0LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFy
YXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXQKICAgICBhdXRvIG5hbWUg
PSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIsIExleGVyOjpU
b2tlbjo6VHlwZTo6T3BlcmF0b3JOYW1lIH0pOwogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CisgICAgYXV0byBpc09wZXJhdG9y
ID0gbmFtZS0+dHlwZSA9PSBMZXhlcjo6VG9rZW46OlR5cGU6Ok9wZXJhdG9yTmFtZTsKIAogICAg
IGF1dG8gcGFyYW1ldGVycyA9IHBhcnNlUGFyYW1ldGVycygpOwogICAgIGlmICghcGFyYW1ldGVy
cykKQEAgLTExMjYsMTAgKzExOTQsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0
aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXQKICAgICAg
ICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAgICAgaWYgKCFzZW1hbnRp
YykKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5lcnJvcigp
KTsKLSAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmln
aW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcu
dG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSk7Cisg
ICAgICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwg
eyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3Ry
aW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0
b3IpOwogICAgIH0KIAotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92
ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJp
bmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQpOwor
ICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9
LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5n
KCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpOwogfQog
CiBhdXRvIFBhcnNlcjo6cGFyc2VPcGVyYXRvckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBl
Y3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiB7CkBAIC0xMTQ1LDE0ICsxMjEz
LDE2IEBAIGF1dG8gUGFyc2VyOjpwYXJzZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+
IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhCiAgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAg
ICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocGFyYW1ldGVycy5lcnJvcigpKTsKIAorICAg
IGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CisKICAgICBpZiAodHJ5VHlwZShMZXhlcjo6VG9rZW46
OlR5cGU6OkNvbG9uKSkgewogICAgICAgICBhdXRvIHNlbWFudGljID0gcGFyc2VTZW1hbnRpYygp
OwogICAgICAgICBpZiAoIXNlbWFudGljKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KHNlbWFudGljLmVycm9yKCkpOwotICAgICAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0
eXBlKSwgU3RyaW5nKCJPcGVyYXRvciBDYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYykpOworICAgICAgICBy
ZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RG
OjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpz
ZW1hbnRpYyksIGlzT3BlcmF0b3IpOwogICAgIH0KIAotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUo
KnR5cGUpLCBTdHJpbmcoIk9wZXJhdG9yIENhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCk7CisgICAgcmV0dXJuIEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9w
dCwgV1RGTW92ZSgqdHlwZSksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09w
ZXJhdG9yKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+
IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHsKQEAgLTEyMDAsNyAr
MTI3MCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSAt
PiBFeHBlY3RlZDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjCiAgICAgaWYgKCFzZW1pY29sb24pCiAg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1pY29sb24uZXJyb3IoKSk7CiAKLSAg
ICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKGZ1bmN0aW9uRGVjbGFyYXRp
b24tPnRha2VPcmlnaW4oKSwgZnVuY3Rpb25EZWNsYXJhdGlvbi0+dGFrZUF0dHJpYnV0ZUJsb2Nr
KCksIGZ1bmN0aW9uRGVjbGFyYXRpb24tPnRha2VFbnRyeVBvaW50VHlwZSgpLCBmdW5jdGlvbkRl
Y2xhcmF0aW9uLT50YWtlVHlwZSgpLCBmdW5jdGlvbkRlY2xhcmF0aW9uLT50YWtlTmFtZSgpLCBm
dW5jdGlvbkRlY2xhcmF0aW9uLT50YWtlUGFyYW1ldGVycygpLCBmdW5jdGlvbkRlY2xhcmF0aW9u
LT50YWtlU2VtYW50aWMoKSwgcmVzdHJpY3RlZCk7CisgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpmdW5jdGlvbkRlY2xhcmF0aW9uKSwgcmVzdHJpY3Rl
ZCk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUJsb2NrKCkgLT4gRXhwZWN0ZWQ8QVNUOjpCbG9j
aywgRXJyb3I+IHsKQEAgLTEyNjEsNyArMTMzMSwxMCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VJZlN0
YXRlbWVudCgpIC0+IEV4cGVjdGVkPEFTVDo6SWZTdGF0ZW1lbnQsIEVycm9yPiB7CiAgICAgICAg
IGVsc2VCb2R5ID0gV1RGTW92ZSgqcGFyc2VkRWxzZUJvZHkpOwogICAgIH0KIAotICAgIHJldHVy
biBBU1Q6OklmU3RhdGVtZW50KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoKmNvbmRpdGlvbmFs
KSwgV1RGTW92ZSgqYm9keSksIFdURk1vdmUoZWxzZUJvZHkpKTsKKyAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4+IGNhc3RBcmd1bWVudHM7CisgICAgY2FzdEFyZ3Vt
ZW50cy5hcHBlbmQoV1RGTW92ZSgqY29uZGl0aW9uYWwpKTsKKyAgICBhdXRvIGJvb2xDYXN0ID0g
c3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKm9yaWdp
biksIFN0cmluZygiYm9vbCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3Zl
KGNhc3RBcmd1bWVudHMpKTsKKyAgICByZXR1cm4gQVNUOjpJZlN0YXRlbWVudChXVEZNb3ZlKCpv
cmlnaW4pLCBXVEZNb3ZlKGJvb2xDYXN0KSwgV1RGTW92ZSgqYm9keSksIFdURk1vdmUoZWxzZUJv
ZHkpKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlU3dpdGNoU3RhdGVtZW50KCkgLT4gRXhwZWN0
ZWQ8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQsIEVycm9yPiB7CkBAIC0xNDQzLDcgKzE1MTYsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VEb1doaWxlTG9vcCgpIC0+IEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxv
b3AsIEVycm9yPiB7CiAgICAgcmV0dXJuIEFTVDo6RG9XaGlsZUxvb3AoV1RGTW92ZSgqb3JpZ2lu
KSwgV1RGTW92ZSgqYm9keSksIFdURk1vdmUoKmNvbmRpdGlvbmFsKSk7CiB9CiAKLWF1dG8gUGFy
c2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4m
JiB0eXBlKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiB7Cith
dXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlVubmFtZWRUeXBlPiYmIHR5cGUpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biwgRXJyb3I+IHsKICAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKICAgICBpZiAoIW9yaWdpbikK
ICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKQEAgLTE0
ODgsNyArMTU2MSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkg
LT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0CiAgICAgaWYgKCF0eXBlKQog
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odHlwZS5lcnJvcigpKTsKIAotICAgIGF1
dG8gZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+KCgqdHlwZSktPmNsb25lKCkpKTsKKyAgICBhdXRvIGZp
cnN0VmFyaWFibGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigoKnR5cGUp
LT5jbG9uZSgpKTsKICAgICBpZiAoIWZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikKICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigp
KTsKIApAQCAtMTQ5Niw3ICsxNTY5LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNs
YXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3QKICAgICBy
ZXN1bHQuYXBwZW5kKFdURk1vdmUoKmZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikpOwogCiAgICAg
d2hpbGUgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb21tYSkpIHsKLSAgICAgICAgYXV0
byB2YXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlR5cGU+KCgqdHlwZSktPmNsb25lKCkpKTsKKyAgICAgICAgYXV0byB2YXJp
YWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKCgqdHlwZSktPmNsb25l
KCkpOwogICAgICAgICBpZiAoIXZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4odmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsKICAgICAg
ICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCp2YXJpYWJsZURlY2xhcmF0aW9uKSk7CkBAIC0xOTU5
LDggKzIwMzIsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlVGVybmFyeUNvbmRpdGlvbmFsKCkgLT4g
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2kKICAgICBpZiAoIWVsc2VFeHBy
ZXNzaW9uKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZWxzZUV4cHJlc3Npb24u
ZXJyb3IoKSk7CiAKLSAgICAvLyBGSVhNRTogQ2FzdCB0aGUgcHJlZGljYXRlIHRvIGEgYm9vbC4K
LSAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3Vu
aXF1ZTxBU1Q6OlRlcm5hcnlFeHByZXNzaW9uPihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKCpw
cmVkaWNhdGUpLCBXVEZNb3ZlKCpib2R5RXhwcmVzc2lvbiksIFdURk1vdmUoKmVsc2VFeHByZXNz
aW9uKSkpOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPj4gY2Fz
dEFyZ3VtZW50czsKKyAgICBjYXN0QXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpwcmVkaWNhdGUp
KTsKKyAgICBhdXRvIGJvb2xDYXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNz
aW9uPihMZXhlcjo6VG9rZW4oKm9yaWdpbiksIFN0cmluZygiYm9vbCIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhc3RBcmd1bWVudHMpKTsKKyAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlRlcm5h
cnlFeHByZXNzaW9uPihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKGJvb2xDYXN0KSwgV1RGTW92
ZSgqYm9keUV4cHJlc3Npb24pLCBXVEZNb3ZlKCplbHNlRXhwcmVzc2lvbikpKTsKIH0KIAogYXV0
byBQYXJzZXI6OnBhcnNlQXNzaWdubWVudCgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gewpAQCAtMjE3OCw3ICsyMjUzLDYgQEAgYXV0byBQYXJz
ZXI6OnBhcnNlUG9zc2libGVSZWxhdGlvbmFsQmluYXJ5T3BlcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHQKICAgICAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUo
cHJldmlvdXMpKTsKICAgICAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKm5l
eHQpKTsKICAgICAgICAgICAgIHByZXZpb3VzID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxF
eHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKnJlbGF0aW9uYWxCaW5hcnlPcGVyYXRpb24pLCBTdHJp
bmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShj
YWxsQXJndW1lbnRzKSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQ2FzdCB0aGUgYXJndW1lbnQg
dG8gYSBib29sCiAgICAgICAgICAgICBwcmV2aW91cyA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpM
b2dpY2FsTm90RXhwcmVzc2lvbj4oV1RGTW92ZSgqcmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbiks
IFdURk1vdmUocHJldmlvdXMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0y
MzY0LDggKzI0MzgsMTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVQcmVmaXgoKSAtPiBF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPiwKICAgICAgICAgICAgIGNh
bGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKm5leHQpKTsKICAgICAgICAgICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6Q2Fs
bEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwgU3RyaW5nKCJvcGVyYXRvcn4iLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYWxsQXJndW1lbnRzKSkpOwog
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpFeGNsYW1hdGlvblBv
aW50OgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+
KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2Vu
KCpwcmVmaXgpLCBXVEZNb3ZlKCpuZXh0KSkpOworICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6
VHlwZTo6RXhjbGFtYXRpb25Qb2ludDogeworICAgICAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OkV4cHJlc3Npb24+PiBjYXN0QXJndW1lbnRzOworICAgICAgICAgICAgY2FzdEFy
Z3VtZW50cy5hcHBlbmQoV1RGTW92ZSgqbmV4dCkpOworICAgICAgICAgICAgYXV0byBib29sQ2Fz
dCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpw
cmVmaXgpLCBTdHJpbmcoImJvb2wiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RG
TW92ZShjYXN0QXJndW1lbnRzKSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PEFTVDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkxvZ2ljYWxOb3RFeHByZXNz
aW9uPihMZXhlcjo6VG9rZW4oKnByZWZpeCksIFdURk1vdmUoYm9vbENhc3QpKSk7CisgICAgICAg
IH0KICAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkFuZDoKICAgICAgICAgICAgIHJl
dHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1ha2VfdW5pcXVlPEFT
VDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKnByZWZpeCksIFdURk1vdmUo
Km5leHQpKSk7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpBdDoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oCmluZGV4IGRh
M2UwNmIwMWU0Li44MDEzOTE0OTgwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpZiBFTkFC
TEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9u
LmgiCiAjaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKICNpbmNsdWRlICJXSExT
TEFycmF5VHlwZS5oIgogI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKQEAg
LTY4LDcgKzY3LDYgQEAKICNpbmNsdWRlICJXSExTTE5vZGUuaCIKICNpbmNsdWRlICJXSExTTE51
bGxMaXRlcmFsLmgiCiAjaW5jbHVkZSAiV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUu
aCIKLSNpbmNsdWRlICJXSExTTFBhcmFtZXRlci5oIgogI2luY2x1ZGUgIldITFNMUG9pbnRlclR5
cGUuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKICNpbmNsdWRlICJXSExTTFByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5oIgpAQCAtMTU0LDEzICsxNTIsMTMgQEAgcHJpdmF0ZToKICAgICBF
eHBlY3RlZDxUeXBlU3VmZml4QWJicmV2aWF0ZWQsIEVycm9yPiBwYXJzZVR5cGVTdWZmaXhBYmJy
ZXZpYXRlZCgpOwogICAgIHN0cnVjdCBUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQgewogICAgICAg
ICBMZXhlcjo6VG9rZW4gdG9rZW47Ci0gICAgICAgIE9wdGlvbmFsPExleGVyOjpUb2tlbj4gYWRk
cmVzc1NwYWNlOworICAgICAgICBPcHRpb25hbDxBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NT
cGFjZT4gYWRkcmVzc1NwYWNlOwogICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbnVtRWxlbWVu
dHM7CiAgICAgfTsKICAgICBFeHBlY3RlZDxUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQsIEVycm9y
PiBwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCgpOwotICAgIEV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4gcGFyc2VBZGRyZXNzU3BhY2VUeXBlKCk7Ci0gICAg
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiBwYXJzZU5vbkFkZHJl
c3NTcGFjZVR5cGUoKTsKLSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwg
RXJyb3I+IHBhcnNlVHlwZSgpOworICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVu
bmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOworICAgIEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNlTm9uQWRkcmVz
c1NwYWNlVHlwZSgpOworICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRU
eXBlPiwgRXJyb3I+IHBhcnNlVHlwZSgpOwogICAgIEV4cGVjdGVkPEFTVDo6VHlwZURlZmluaXRp
b24sIEVycm9yPiBwYXJzZVR5cGVEZWZpbml0aW9uKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpCdWls
dEluU2VtYW50aWMsIEVycm9yPiBwYXJzZUJ1aWx0SW5TZW1hbnRpYygpOwogICAgIEV4cGVjdGVk
PEFTVDo6UmVzb3VyY2VTZW1hbnRpYywgRXJyb3I+IHBhcnNlUmVzb3VyY2VTZW1hbnRpYygpOwpA
QCAtMTc1LDggKzE3Myw4IEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlvbigpOwogICAgIEV4
cGVjdGVkPEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLCBFcnJvcj4gcGFyc2VOdW1U
aHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUoKTsKICAgICBFeHBlY3RlZDxBU1Q6OkF0dHJpYnV0ZUJs
b2NrLCBFcnJvcj4gcGFyc2VBdHRyaWJ1dGVCbG9jaygpOwotICAgIEV4cGVjdGVkPEFTVDo6UGFy
YW1ldGVyLCBFcnJvcj4gcGFyc2VQYXJhbWV0ZXIoKTsKLSAgICBFeHBlY3RlZDxBU1Q6OlBhcmFt
ZXRlcnMsIEVycm9yPiBwYXJzZVBhcmFtZXRlcnMoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZVBhcmFtZXRlcigpOworICAgIEV4cGVjdGVkPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnMsIEVycm9yPiBwYXJzZVBhcmFtZXRlcnMoKTsKICAgICBF
eHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZUVudHJ5UG9pbnRG
dW5jdGlvbkRlY2xhcmF0aW9uKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uLCBFcnJvcj4gcGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigpOwogICAgIEV4cGVj
dGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlT3BlcmF0b3JGdW5jdGlv
bkRlY2xhcmF0aW9uKCk7CkBAIC0xOTIsNyArMTkwLDcgQEAgcHJpdmF0ZToKICAgICBFeHBlY3Rl
ZDxBU1Q6OkZvckxvb3AsIEVycm9yPiBwYXJzZUZvckxvb3AoKTsKICAgICBFeHBlY3RlZDxBU1Q6
OldoaWxlTG9vcCwgRXJyb3I+IHBhcnNlV2hpbGVMb29wKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpE
b1doaWxlTG9vcCwgRXJyb3I+IHBhcnNlRG9XaGlsZUxvb3AoKTsKLSAgICBFeHBlY3RlZDxBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJik7CisgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlVubmFtZWRUeXBlPiYmKTsKICAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zU3RhdGVtZW50LCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpOwogICAg
IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0YXRlbWVudD4sIEVycm9yPiBwYXJzZVN0
YXRlbWVudCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByZXBhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQcmVwYXJlLmNwcAppbmRleCAwZWI2NGRlY2Q0ZC4uNDYwZTk0NmZkZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJl
LmNwcApAQCAtMjgsMTAgKzI4LDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
V0hMU0xQcmVwYXJlLmgiCiAKKyNpbmNsdWRlICJXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25z
LmgiCisjaW5jbHVkZSAiV0hMU0xDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2
ZXIuaCIKICNpbmNsdWRlICJXSExTTFBhcnNlci5oIgogI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5o
IgorI2luY2x1ZGUgIldITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCIKICNpbmNsdWRlICJXSExT
TFN0YW5kYXJkTGlicmFyeS5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0
b3JMZW5ndGguaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCIKKyNp
bmNsdWRlICJXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oIgorI2luY2x1ZGUg
IldITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTUwLDggKzU3LDIzIEBAIE9wdGlvbmFsPFByZXBhcmF0aW9uUmVzdWx0PiBwcmVw
YXJlKFN0cmluZ1ZpZXcgc291cmNlKQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIHJlc29sdmVOYW1lc0luVHlwZXMocHJvZ3JhbSk7CisgICAg
TmFtZVJlc29sdmVyIG5hbWVSZXNvbHZlcihwcm9ncmFtLm5hbWVDb250ZXh0KCkpOworICAgIGlm
ICghcmVzb2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghY2hlY2tSZWN1cnNpdmVUeXBlcyhwcm9ncmFt
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBzeW50aGVzaXplU3RydWN0dXJl
QWNjZXNzb3JzKHByb2dyYW0pOworICAgIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhw
cm9ncmFtKTsKKyAgICBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChwcm9ncmFtKTsKKyAg
ICBzeW50aGVzaXplQ29uc3RydWN0b3JzKHByb2dyYW0pOworICAgIGlmICghY2hlY2tEdXBsaWNh
dGVGdW5jdGlvbnMocHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
aWYgKCFyZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCiAKKyAgICBpZiAoY2hlY2socHJvZ3JhbSkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcmV0dXJuIFByZXBhcmF0aW9uUmVzdWx0
KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcm9ncmFtLmgKaW5kZXggNTYzMGZlNjllZTQuLjYwZWU0NzkwMTVhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaApAQCAtMjks
NiArMjksOCBAQAogCiAjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKICNp
bmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSW50cmlu
c2ljcy5oIgorI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKICNpbmNsdWRlICJXSExTTE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgpAQCAtNDQs
NDUgKzQ2LDY0IEBAIHB1YmxpYzoKICAgICBQcm9ncmFtKCkgPSBkZWZhdWx0OwogICAgIFByb2dy
YW0oUHJvZ3JhbSYmKSA9IGRlZmF1bHQ7CiAKLSAgICB2b2lkIGFwcGVuZChBU1Q6OlR5cGVEZWZp
bml0aW9uJiYgdHlwZURlZmluaXRpb24pCisgICAgYm9vbCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5p
dGlvbiYmIHR5cGVEZWZpbml0aW9uKQogICAgIHsKLSAgICAgICAgbV90eXBlRGVmaW5pdGlvbnMu
YXBwZW5kKFdURk1vdmUodHlwZURlZmluaXRpb24pKTsKKyAgICAgICAgbV90eXBlRGVmaW5pdGlv
bnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBlRGVmaW5pdGlvbj4oV1RGTW92ZSh0
eXBlRGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX3R5
cGVEZWZpbml0aW9ucy5sYXN0KCkpOwogICAgIH0KLSAgICB2b2lkIGFwcGVuZChBU1Q6OlN0cnVj
dHVyZURlZmluaXRpb24mJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQorCisgICAgYm9vbCBhcHBlbmQo
QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiYgc3RydWN0dXJlRGVmaW5pdGlvbikKICAgICB7Ci0g
ICAgICAgIG1fc3RydWN0dXJlRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoc3RydWN0dXJlRGVm
aW5pdGlvbikpOworICAgICAgICBtX3N0cnVjdHVyZURlZmluaXRpb25zLmFwcGVuZChzdGQ6Om1h
a2VfdW5pcXVlPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4oV1RGTW92ZShzdHJ1Y3R1cmVEZWZp
bml0aW9uKSkpOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fc3RydWN0dXJl
RGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24mJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCisKKyAgICBib29sIGFwcGVu
ZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYmIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKICAg
ICB7Ci0gICAgICAgIG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5hcHBlbmQoV1RGTW92ZShlbnVt
ZXJhdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zLmFw
cGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihXVEZNb3Zl
KGVudW1lcmF0aW9uRGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQu
YWRkKCptX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBh
cHBlbmQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mJiBmdW5jdGlvbkRlZmluaXRpb24pCisKKyAg
ICBib29sIGFwcGVuZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYmIGZ1bmN0aW9uRGVmaW5pdGlv
bikKICAgICB7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBlbmQoV1RGTW92ZShm
dW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlZmluaXRpb25zLmFwcGVu
ZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihXVEZNb3ZlKGZ1bmN0
aW9uRGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX2Z1
bmN0aW9uRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKKwor
ICAgIGJvb2wgYXBwZW5kKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmIG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24pCiAgICAgewotICAgICAgICBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb25zLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAg
ICAgbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbikpKTsKKyAgICAgICAgbV9pbnRyaW5zaWNzLmFkZCgqbV9uYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9ucy5sYXN0KCkpOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1f
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBl
bmQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCisK
KyAgICBib29sIGFwcGVuZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYmIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbikKICAgICB7Ci0gICAgICAgIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5hcHBl
bmQoV1RGTW92ZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgbV9uYXRpdmVUeXBl
RGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihXVEZNb3ZlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpKTsKKyAgICAgICAgbV9pbnRy
aW5zaWNzLmFkZCgqbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSk7CisgICAgICAgIHJl
dHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSk7
CiAgICAgfQogCi0gICAgVmVjdG9yPEFTVDo6VHlwZURlZmluaXRpb24+JiB0eXBlRGVmaW5pdGlv
bnMoKSB7IHJldHVybiBtX3R5cGVEZWZpbml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6OlN0cnVj
dHVyZURlZmluaXRpb24+JiBzdHJ1Y3R1cmVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fc3RydWN0
dXJlRGVmaW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+
JiBlbnVtZXJhdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmluaXRp
b25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPiYgZnVuY3Rpb25EZWZp
bml0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWZpbml0aW9uczsgfQotICAgIFZlY3RvcjxB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
cygpIHsgcmV0dXJuIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KLSAgICBWZWN0b3I8
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+JiBuYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkgeyBy
ZXR1cm4gbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zOyB9CisgICAgTmFtZUNvbnRleHQmIG5hbWVD
b250ZXh0KCkgeyByZXR1cm4gbV9uYW1lQ29udGV4dDsgfQorICAgIEludHJpbnNpY3MmIGludHJp
bnNpY3MoKSB7IHJldHVybiBtX2ludHJpbnNpY3M7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEFTVDo6VHlwZURlZmluaXRpb24+PiYgdHlwZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV90
eXBlRGVmaW5pdGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbj4+JiBzdHJ1Y3R1cmVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fc3RydWN0
dXJlRGVmaW5pdGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uPj4mIGVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX2Vu
dW1lcmF0aW9uRGVmaW5pdGlvbnM7IH0KKyAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMoKSBjb25zdCB7
IHJldHVybiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMoKSB7IHJl
dHVybiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7IH0KKyAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4+JiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7
IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbj4+JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uPj4mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSB7IHJldHVybiBt
X25hdGl2ZVR5cGVEZWNsYXJhdGlvbnM7IH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8QVNUOjpU
eXBlRGVmaW5pdGlvbj4gbV90eXBlRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbj4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsKLSAgICBWZWN0b3I8QVNUOjpF
bnVtZXJhdGlvbkRlZmluaXRpb24+IG1fZW51bWVyYXRpb25EZWZpbml0aW9uczsKLSAgICBWZWN0
b3I8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+IG1fZnVuY3Rpb25EZWZpbml0aW9uczsKLSAgICBW
ZWN0b3I8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiBtX25hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb25zOwotICAgIFZlY3RvcjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4gbV9uYXRp
dmVUeXBlRGVjbGFyYXRpb25zOworICAgIE5hbWVDb250ZXh0IG1fbmFtZUNvbnRleHQ7CisgICAg
SW50cmluc2ljcyBtX2ludHJpbnNpY3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlR5cGVEZWZpbml0aW9uPj4gbV90eXBlRGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+PiBtX3N0cnVjdHVyZURlZmluaXRpb25z
OworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+
PiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4+IG1fZnVuY3Rpb25EZWZpbml0aW9uczsKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4+IG1fbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4+IG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsKIH07CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjM3NWVjYWJiMjJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5j
cHAKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIu
aCIKKworI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUmVj
dXJzaXZlVHlwZUNoZWNrZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgflJlY3Vy
c2l2ZVR5cGVDaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVE
ZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV90eXBlcy5hZGQoJnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVE
ZWZpbml0aW9uKTsKKworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmdHlw
ZURlZmluaXRpb24pOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOwor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1
cmVEZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X3R5cGVzLmFkZCgmc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChhZGRSZXN1bHQu
aXNOZXdFbnRyeSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVEZWZp
bml0aW9uKTsKKworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmc3RydWN0
dXJlRGVmaW5pdGlvbik7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVu
Y2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZXMuYWRk
KCZ0eXBlUmVmZXJlbmNlKTsKKyAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Cisg
ICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgZm9yIChhdXRvJiB0eXBlQXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1
bWVudHMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlQXJndW1lbnQpOwor
ICAgICAgICB2aXNpdE5hbWVkVHlwZSgqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisK
KyAgICAgICAgYXV0byBzdWNjZXNzID0gbV90eXBlcy5yZW1vdmUoJnR5cGVSZWZlcmVuY2UpOwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgfQorCitw
cml2YXRlOgorICAgIEhhc2hTZXQ8QVNUOjpUeXBlKj4gbV90eXBlczsKK307CisKK2Jvb2wgY2hl
Y2tSZWN1cnNpdmVUeXBlcyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIFJlY3Vyc2l2ZVR5cGVD
aGVja2VyIHJlY3Vyc2l2ZVR5cGVDaGVja2VyOworICAgIHJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNo
ZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtKTsKKyAgICByZXR1cm4gcmVjdXJzaXZlVHlwZUNoZWNr
ZXIuZXJyb3IoKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hl
Y2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45YTNhMTlkY2Uy
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKworYm9vbCBjaGVj
a1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3Zlcmxv
YWRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVz
b2x2ZU92ZXJsb2FkSW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmEyMjgzNWYxZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcApAQCAtMCwwICsxLDU1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCIKKworI2luY2x1ZGUgIldI
TFNMSW5mZXJUeXBlcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExT
TCB7CisKK0FTVDo6TmFtZWRUeXBlKiByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbChWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+JiBwb3NzaWJsZVR5cGVzLCBB
U1Q6OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMpCit7CisgICAgQVNUOjpOYW1lZFR5cGUq
IHJlc3VsdCA9IG51bGxwdHI7CisgICAgZm9yIChhdXRvJiBwb3NzaWJsZVR5cGUgOiBwb3NzaWJs
ZVR5cGVzKSB7CisgICAgICAgIGlmIChpbmZlclR5cGVzRm9yVHlwZUFyZ3VtZW50cyhwb3NzaWJs
ZVR5cGUsIHR5cGVBcmd1bWVudHMpKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmVzdWx0ID0gJnN0YXRpY19j
YXN0PEFTVDo6TmFtZWRUeXBlJj4ocG9zc2libGVUeXBlKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3Zl
cmxvYWRJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmMzZjYw
ZWE5ZDY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
bmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIE5hbWVkVHlwZTsKKworfQorCitBU1Q6Ok5hbWVkVHlw
ZSogcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpOYW1lZFR5cGU+LCAxPiYsIEFTVDo6VHlwZUFyZ3VtZW50cyYpOworCit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NjljZTI1NDE2YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBGaW5kQXJyYXlUeXBlcyA6IHB1
YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB+RmluZEFycmF5VHlwZXMoKSA9IGRlZmF1bHQ7
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBtX2FycmF5VHlwZXMuYXBwZW5kKGFycmF5VHlwZSk7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChhcnJheVR5cGUpOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEFTVDo6QXJyYXlUeXBlPj4mJiB0YWtlQXJyYXlUeXBlcygpCisgICAg
eworICAgICAgICByZXR1cm4gV1RGTW92ZShtX2FycmF5VHlwZXMpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkFycmF5VHlwZT4+IG1f
YXJyYXlUeXBlczsKK307CisKK3ZvaWQgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJv
Z3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBGaW5kQXJyYXlUeXBlcyBmaW5kQXJyYXlUeXBlczsKKyAg
ICBmaW5kQXJyYXlUeXBlcy5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAgYXV0byBh
cnJheVR5cGVzID0gZmluZEFycmF5VHlwZXMudGFrZUFycmF5VHlwZXMoKTsKKworICAgIGJvb2wg
aXNPcGVyYXRvciA9IHRydWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKworICAg
IGZvciAoYXV0byYgYXJyYXlUeXBlIDogYXJyYXlUeXBlcykgeworICAgICAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBl
LmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGFycmF5VHlwZS5nZXQoKS5jbG9u
ZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChX
VEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJp
YnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVy
OjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBwcm9ncmFtLmludHJpbnNpY3MoKS51
aW50VHlwZSgpKSwgU3RyaW5nKCJvcGVyYXRvci5sZW5ndGgiLCBTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9y
KSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVBcnJheU9wZXJhdG9yTGVuZ3RoLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5YTlhMTE0ZjI3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlP
cGVyYXRvckxlbmd0aC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNw
YWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplQXJyYXlPcGVy
YXRvckxlbmd0aChQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVj
dG9ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVDb25zdHJ1Y3RvcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi40MjIxZmEwMjJkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKQEAgLTAsMCAr
MSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEZpbmRBbGxUeXBl
cyA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB+RmluZEFsbFR5cGVzKCkgPSBkZWZh
dWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChwb2ludGVyVHlwZSk7
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChwb2ludGVyVHlwZSk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgbV91bm5hbWVkVHlwZXMuYXBwZW5kKGFycmF5UmVmZXJl
bmNlVHlwZSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcnJheVJlZmVyZW5jZVR5cGUp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChhcnJheVR5cGUpOwor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlUeXBlKTsKKyAgICB9CisKKyAgICB2b2lk
IHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24p
IG92ZXJyaWRlCisgICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKGVudW1lcmF0aW9u
RGVmaW5pdGlvbik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlbnVtZXJhdGlvbkRlZmlu
aXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9u
JiBzdHJ1Y3R1cmVEZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9uYW1lZFR5
cGVzLmFwcGVuZChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KHN0cnVjdHVyZURlZmluaXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIG1fbmFtZWRUeXBlcy5hcHBlbmQobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CisgICAg
fQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpVbm5hbWVkVHlwZT4+
JiYgdGFrZVVubmFtZWRUeXBlcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX3Vu
bmFtZWRUeXBlcyk7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpOYW1lZFR5cGU+PiYmIHRha2VOYW1lZFR5cGVzKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBXVEZNb3ZlKG1fbmFtZWRUeXBlcyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+PiBtX3VubmFtZWRUeXBlczsK
KyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+IG1fbmFt
ZWRUeXBlczsKK307CisKK3ZvaWQgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJiBwcm9n
cmFtKQoreworICAgIEZpbmRBbGxUeXBlcyBmaW5kQWxsVHlwZXM7CisgICAgZmluZEFsbFR5cGVz
LmNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtKTsKKyAgICBhdXRvIG1fdW5uYW1lZFR5cGVzID0g
ZmluZEFsbFR5cGVzLnRha2VVbm5hbWVkVHlwZXMoKTsKKyAgICBhdXRvIG1fbmFtZWRUeXBlcyA9
IGZpbmRBbGxUeXBlcy50YWtlTmFtZWRUeXBlcygpOworCisgICAgYm9vbCBpc09wZXJhdG9yID0g
dHJ1ZTsKKyAgICBib29sIGlzUmVzdHJpY3RlZCA9IGZhbHNlOworCisgICAgZm9yIChhdXRvJiB1
bm5hbWVkVHlwZSA6IG1fdW5uYW1lZFR5cGVzKSB7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQo
KS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB1bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgp
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZN
b3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6
OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygp
LCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksIFN0cmluZygib3BlcmF0
b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICBw
cm9ncmFtLmFwcGVuZChXVEZNb3ZlKGNvcHlDb25zdHJ1Y3RvcikpOworCisgICAgICAgIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWZhdWx0Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFT
VDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZS5nZXQoKS5jbG9u
ZSgpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucygpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3Ip
LCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGRlZmF1bHRD
b25zdHJ1Y3RvcikpOworICAgIH0KKworICAgIGZvciAoYXV0byYgbmFtZWRUeXBlIDogbV9uYW1l
ZFR5cGVzKSB7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xh
cmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxp
ZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUu
Z2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0
LCBudWxscHRyKTsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJz
OworICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24p
KTsKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3Rv
cihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5v
cmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5h
bWVkVHlwZS5nZXQoKSksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0
b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGNvcHlD
b25zdHJ1Y3RvcikpOworCisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBk
ZWZhdWx0Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihu
YW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVs
bG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0
KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucygp
LCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICBwcm9n
cmFtLmFwcGVuZChXVEZNb3ZlKGRlZmF1bHRDb25zdHJ1Y3RvcikpOworICAgIH0KK30KKworfQor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODAwMjBkZDdjNzAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVD
b25zdHJ1Y3RvcnMuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhlc2l6ZUNvbnN0cnVjdG9y
cyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rp
b25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMGJhOTA1NjJiZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9u
cy5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplRW51bWVyYXRp
b25GdW5jdGlvbnMuaCIKKworI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldI
TFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBX
SExTTCB7CisKK3ZvaWQgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHBy
b2dyYW0pCit7CisgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKKyAgICBib29sIGlzUmVzdHJp
Y3RlZCA9IGZhbHNlOworICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJv
Z3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgeworICAgICAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24xKExleGVyOjpUb2tl
bihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9u
LT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJp
YWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmln
aW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCAqZW51bWVyYXRpb25EZWZp
bml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24xKSk7CisgICAgICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CisgICAgICAg
ICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVm
aW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwg
QVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRp
b24tPm9yaWdpbigpKSwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkuYm9vbFR5cGUoKSksIFN0cmluZygi
b3BlcmF0b3I9PSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAg
ICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7
CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0
aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCAqZW51bWVy
YXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAg
ICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAg
ICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25E
ZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0
LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoIm9wZXJhdG9y
LnZhbHVlIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVy
cyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAg
ICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24t
Pm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlv
bkRlZmluaXRpb24pLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBh
cmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAg
ICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksIFN0cmluZygib3BlcmF0b3IgY2Fz
dCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBX
VEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAgICAgcHJv
Z3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAg
IH0KKworICAgICAgICB7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFy
aWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmln
aW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5j
bG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgQVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24t
Pm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmln
aW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpu
dWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgICAgIHByb2dyYW0u
YXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICB9Cisg
ICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51
bWVyYXRpb25GdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uYWMxMDc4NzJlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oCkBAIC0w
LDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJH
UFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3Mg
UHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMoUHJvZ3JhbSYp
OworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJl
QWNjZXNzb3JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZmU4
MTNkYjM4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCkBAIC0wLDAgKzEs
ODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oIgorCisj
aW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgor
I2luY2x1ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVy
ZW5jZS5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK3ZvaWQgc3ludGhlc2l6ZVN0cnVj
dHVyZUFjY2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIGJvb2wgaXNPcGVyYXRvciA9
IHRydWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIHN0
cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpIHsKKyAg
ICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi0+
c3RydWN0dXJlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8v
IFRoZSBnZXR0ZXI6IG9wZXJhdG9yLmZpZWxkCisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVs
ZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgKnN0cnVjdHVyZURl
ZmluaXRpb24pLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAg
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAg
ICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1
cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQs
IHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRv
ci4lcyIsIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAg
ICAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
Ly8gVGhlIHNldHRlcjogb3BlcmF0b3IuZmllbGQ9CisgICAgICAgICAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24xKExleGVyOjpUb2tlbihzdHJ1Y3R1
cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksICpzdHJ1Y3R1
cmVEZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24yKExl
eGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCks
IHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IG51bGxwdHIpOworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFy
YW1ldGVyczsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlh
YmxlRGVjbGFyYXRpb24xKSk7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RG
TW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMikpOworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFT
VDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCAqc3RydWN0dXJlRGVm
aW5pdGlvbiksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0iLCBzdHJ1Y3R1cmVFbGVtZW50
Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0
LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtLmFw
cGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBvcGVyYXRvciYuZmllbGQKKyAgICAgICAgICAg
IGF1dG8gY3JlYXRlQW5kZXIgPSBbJl0oQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2Ug
YWRkcmVzc1NwYWNlKSAtPiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24geworICAgICAg
ICAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlBvaW50
ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFkZHJlc3NT
cGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVt
ZW50Lm9yaWdpbigpKSwgKnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4o
c3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBXVEZNb3ZlKGFy
Z3VtZW50VHlwZSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICAg
ICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9p
bnRlclR5cGU+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgYWRkcmVz
c1NwYWNlLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgICAgICAg
ICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQu
b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShy
ZXR1cm5UeXBlKSwgU3RyaW5nOjpmb3JtYXQoIm9wZXJhdG9yJi4lcyIsIHN0cnVjdHVyZUVsZW1l
bnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxv
cHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAgICAgICAgIHJldHVybiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHBy
b2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNl
OjpDb25zdGFudCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNU
OjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmljZSkpOworICAgICAgICAgICAgcHJv
Z3JhbS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6
OlRocmVhZGdyb3VwKSk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihB
U1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkKSk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0
dXJlQWNjZXNzb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRl
OWI5ZmY3MGMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmgKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFt
OworCit2b2lkIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYpOworCit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFZpc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xWaXNpdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uMmQxODVjZGMzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCkBAIC0wLDAgKzEsOTczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXSExTTFZpc2l0b3IuaCIKKworI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUg
IldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIK
KyNpbmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xC
YXNlRnVuY3Rpb25BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTEJhc2VTZW1hbnRpYy5oIgor
I2luY2x1ZGUgIldITFNMQmxvY2suaCIKKyNpbmNsdWRlICJXSExTTEJvb2xlYW5MaXRlcmFsLmgi
CisjaW5jbHVkZSAiV0hMU0xCcmVhay5oIgorI2luY2x1ZGUgIldITFNMQnVpbHRJblNlbWFudGlj
LmgiCisjaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29t
bWFFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKKyNp
bmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
LmgiCisjaW5jbHVkZSAiV0hMU0xDb250aW51ZS5oIgorI2luY2x1ZGUgIldITFNMRGVyZWZlcmVu
Y2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgorI2luY2x1ZGUg
IldITFNMRG90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRWZmZWN0ZnVsRXhwcmVzc2lv
blN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIgorI2luY2x1ZGUgIldITFNMRXhwcmVz
c2lvbi5oIgorI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIKKyNpbmNsdWRlICJXSExTTEZs
b2F0TGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgorI2luY2x1ZGUgIldITFNM
RnVuY3Rpb25BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24u
aCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNM
SWZTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEluZGV4RXhwcmVzc2lvbi5oIgorI2luY2x1
ZGUgIldITFNMSW50ZWdlckxpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTExvZ2ljYWxFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUg
IldITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTWFr
ZVBvaW50ZXJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNs
dWRlICJXSExTTE5vZGUuaCIKKyNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFsLmgiCisjaW5jbHVk
ZSAiV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTFBv
aW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTFF1YWxpZmllci5oIgorI2luY2x1ZGUgIldITFNMUmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgorI2luY2x1
ZGUgIldITFNMUmVzb3VyY2VTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMUmV0dXJuLmgiCisj
aW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3BlY2lhbGl6YXRpb25D
b25zdGFudFNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaCIK
KyNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVm
aW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRWxlbWVudC5oIgorI2luY2x1ZGUg
IldITFNMU3dpdGNoQ2FzZS5oIgorI2luY2x1ZGUgIldITFNMU3dpdGNoU3RhdGVtZW50LmgiCisj
aW5jbHVkZSAiV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMVHJhcC5o
IgorI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50Lmgi
CisjaW5jbHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJl
ZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oIgorI2lu
Y2x1ZGUgIldITFNMVmFsdWUuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24u
aCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgiCisjaW5j
bHVkZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMV2hpbGVMb29w
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwordm9pZCBW
aXNpdG9yOjp2aXNpdChQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIGZvciAoYXV0byYgdHlwZURl
ZmluaXRpb24gOiBwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKnR5cGVEZWZpbml0aW9uKTsKKyAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZURlZmlu
aXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgZm9yIChhdXRvJiBlbnVtZXJh
dGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KCplbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgIGZvciAo
YXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICBm
b3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb25zKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbik7CisgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24g
OiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0
VW5uYW1lZFR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCit7CisgICAgaWYgKGlz
PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpOworICAgIGVs
c2UgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSk7Cisg
ICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
Pih1bm5hbWVkVHlwZSkpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoaXM8QVNUOjpBcnJh
eVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2Fz
dDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXROYW1lZFR5cGUoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKK3sKKyAgICBpZiAo
aXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGRvd25jYXN0PEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAgIGVs
c2UgaWYgKGlzPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFt
ZWRUeXBlKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KG5h
bWVkVHlwZSkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbj4obmFtZWRUeXBlKSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VS
VChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSk7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFt
ZWRUeXBlKSk7CisgICAgfQorfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VHlwZURlZmlu
aXRpb24mIHR5cGVEZWZpbml0aW9uKQoreworICAgIGlmICh0eXBlRGVmaW5pdGlvbi50eXBlKCkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBlKCp0eXBlRGVmaW5pdGlvbi50
eXBlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlv
biYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1l
bnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQor
eworICAgIGNoZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBlKGVudW1lcmF0aW9uRGVmaW5pdGlv
bi50eXBlKCkpOworICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25NZW1iZXIgOiBlbnVtZXJhdGlv
bkRlZmluaXRpb24uZW51bWVyYXRpb25NZW1iZXJzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChlbnVtZXJhdGlvbk1lbWJlcik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpG
dW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4oZnVuY3Rpb25E
ZWZpbml0aW9uKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5i
bG9jaygpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24pKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGZvciAoYXV0byYg
dHlwZUFyZ3VtZW50IDogbmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVBcmd1bWVudCk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQoreworICAgIGZvciAo
YXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlQXJndW1lbnQpOworICAgIGlmICh0eXBlUmVmZXJl
bmNlLnJlc29sdmVkVHlwZSgpICYmIGlzPEFTVDo6VHlwZURlZmluaXRpb24+KCp0eXBlUmVmZXJl
bmNlLnJlc29sdmVkVHlwZSgpKSkgeworICAgICAgICBhdXRvJiB0eXBlRGVmaW5pdGlvbiA9IGRv
d25jYXN0PEFTVDo6VHlwZURlZmluaXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgp
KTsKKyAgICAgICAgaWYgKHR5cGVEZWZpbml0aW9uLnR5cGUoKSkKKyAgICAgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdFVubmFtZWRUeXBlKCp0eXBlRGVmaW5pdGlvbi50eXBlKCkpOworICAgIH0K
K30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkK
K3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VUeXBl
Jj4ocG9pbnRlclR5cGUpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBlKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChzdGF0aWNfY2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGUmPihhcnJheVJlZmVyZW5jZVR5cGUpKTsK
K30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQorewor
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBlKGFycmF5VHlwZS50eXBlKCkpOworfQor
Cit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3RydWN0dXJlRWxlbWVudCYgc3RydWN0dXJlRWxl
bWVudCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShzdHJ1Y3R1cmVFbGVt
ZW50LnR5cGUoKSk7CisgICAgaWYgKHN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSkKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KCpzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkpOworfQor
Cit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9u
TWVtYmVyKQoreworICAgIGlmIChlbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKQorICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoKmVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpOworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNsYXJh
dGlvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbi5hdHRy
aWJ1dGVCbG9jaygpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShmdW5jdGlv
bkRlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgZm9yIChhdXRvJiBwYXJhbWV0ZXIgOiBmdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHBh
cmFtZXRlcik7CisgICAgaWYgKGZ1bmN0aW9uRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmdW5jdGlvbkRlY2xhcmF0aW9uLnNlbWFudGljKCkpOwor
fQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBlQXJndW1lbnQp
Cit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkNvbnN0YW50RXhw
cmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChjb25zdGFudEV4cHJlc3Npb24pOworICAgIH0sIFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpU
eXBlUmVmZXJlbmNlPiYgdHlwZVJlZmVyZW5jZSkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoKnR5cGVSZWZlcmVuY2UpOworICAgIH0pLCB0eXBlQXJndW1lbnQpOworfQorCit2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYgcmVmZXJlbmNlVHlwZSkKK3sKKyAgICBj
aGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShyZWZlcmVuY2VUeXBlLmVsZW1lbnRUeXBlKCkp
OworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U2VtYW50aWMmIHNlbWFudGljKQorewor
ICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpCdWlsdEluU2VtYW50aWMm
IGJ1aWx0SW5TZW1hbnRpYykgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYnVpbHRJblNl
bWFudGljKTsKKyAgICB9LCBbJl0oQVNUOjpSZXNvdXJjZVNlbWFudGljJiByZXNvdXJjZVNlbWFu
dGljKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZXNvdXJjZVNlbWFudGljKTsKKyAg
ICB9LCBbJl0oQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmIHNwZWNpYWxpemF0
aW9uQ29uc3RhbnRTZW1hbnRpYykgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3BlY2lh
bGl6YXRpb25Db25zdGFudFNlbWFudGljKTsKKyAgICB9LCBbJl0oQVNUOjpTdGFnZUluT3V0U2Vt
YW50aWMmIHN0YWdlSW5PdXRTZW1hbnRpYykgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
c3RhZ2VJbk91dFNlbWFudGljKTsKKyAgICB9KSwgc2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pCit7
CisgICAgY29uc3RhbnRFeHByZXNzaW9uLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6
SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChpbnRlZ2VyTGl0ZXJhbCk7CisgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCk7CisgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFs
JiBmbG9hdExpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZsb2F0TGl0ZXJh
bCk7CisgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRlcmFsKSB7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChudWxsTGl0ZXJhbCk7CisgICAgfSwgWyZdKEFTVDo6Qm9vbGVh
bkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChi
b29sZWFuTGl0ZXJhbCk7CisgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVy
UmVmZXJlbmNlKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChjb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSk7CisgICAgfSkpOworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJsb2NrKQoreworICAgIGZv
ciAoYXV0byYgZnVuY3Rpb25BdHRyaWJ1dGUgOiBhdHRyaWJ1dGVCbG9jaykKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uQXR0cmlidXRlKTsKK30KKwordm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpSZXNvdXJjZVNlbWFudGljJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
dmlzaXQoQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZp
c2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpGbG9hdExpdGVyYWwmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TnVs
bExpdGVyYWwmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVy
YWwmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6RnVuY3Rpb25BdHRyaWJ1dGUmIGZ1bmN0aW9uQXR0cmlidXRlKQoreworICAgIFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1
dGUmIG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkgeworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQobnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKTsKKyAgICB9KSwgZnVuY3Rpb25BdHRy
aWJ1dGUpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9u
QXR0cmlidXRlJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkJsb2NrJiBibG9j
aykKK3sKKyAgICBmb3IgKGF1dG8mIHN0YXRlbWVudCA6IGJsb2NrLnN0YXRlbWVudHMoKSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpzdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6U3RhdGVtZW50JiBzdGF0ZW1lbnQpCit7CisgICAgaWYgKGlzPEFTVDo6Qmxv
Y2s+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6
OkJsb2NrPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkJyZWFrPihzdGF0ZW1l
bnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpCcmVhaz4oc3Rh
dGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Q29udGludWU+KHN0YXRlbWVu
dCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RG9XaGlsZUxvb3A+KHN0YXRlbWVudCkpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkRvV2hpbGVMb29wPihzdGF0ZW1l
bnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+
KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkVm
ZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlz
PEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChkb3duY2FzdDxBU1Q6OkZhbGx0aHJvdWdoPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChp
czxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChk
b3duY2FzdDxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6
SWZTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3du
Y2FzdDxBU1Q6OklmU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6
OlJldHVybj4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0
PEFTVDo6UmV0dXJuPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlN3aXRjaENh
c2U+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6
OlN3aXRjaENhc2U+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6U3dpdGNoU3Rh
dGVtZW50PihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8
QVNUOjpTd2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6
VHJhcD4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFT
VDo6VHJhcD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uc1N0YXRlbWVudD4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGRvd25jYXN0PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVudCkp
OworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoaXM8QVNUOjpXaGlsZUxvb3A+KHN0YXRlbWVu
dCkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpXaGlsZUxvb3A+
KHN0YXRlbWVudCkpOworICAgIH0KK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkJyZWFr
JikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNvbnRpbnVlJikKK3sKK30KKwor
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkKK3sKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
dmlzaXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIGlmIChpczxBU1Q6OkFz
c2lnbm1lbnRFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRvd25jYXN0PEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAg
ICBlbHNlIGlmIChpczxBU1Q6OkJvb2xlYW5MaXRlcmFsPihleHByZXNzaW9uKSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Qm9vbGVhbkxpdGVyYWw+KGV4cHJlc3Np
b24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkNhbGxFeHByZXNzaW9uPihleHByZXNzaW9uKSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Q2FsbEV4cHJlc3Npb24+
KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkNvbW1hRXhwcmVzc2lvbj4oZXhw
cmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkNvbW1h
RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RGVyZWZlcmVu
Y2VFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRv
d25jYXN0PEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxz
ZSBpZiAoaXM8QVNUOjpGbG9hdExpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWw+KGV4cHJlc3Npb24pKTsKKyAg
ICBlbHNlIGlmIChpczxBU1Q6OkludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWw+KGV4cHJlc3Np
b24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uPihleHByZXNzaW9u
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6TG9naWNhbEV4cHJl
c3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkxvZ2ljYWxOb3RFeHBy
ZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0
PEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChp
czxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpNYWtlUG9pbnRlckV4
cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNh
c3Q8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlm
IChpczxBU1Q6Ok51bGxMaXRlcmFsPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGRvd25jYXN0PEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNl
IGlmIChpczxBU1Q6OkRvdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Cisg
ICAgZWxzZSBpZiAoaXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJlc3Npb24+KGV4cHJl
c3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24+
KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8
QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChkb3duY2FzdDxBU1Q6OlRlcm5hcnlFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Cisg
ICAgZWxzZSBpZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoaXM8QVNU
OjpWYXJpYWJsZVJlZmVyZW5jZT4oZXhwcmVzc2lvbikpOworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZXhwcmVzc2lvbikpOworICAg
IH0KK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJl
c3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uJj4oZG90RXhwcmVzc2lvbikpOworfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24pCit7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGluZGV4RXhwcmVzc2lvbi5pbmRleEV4cHJlc3Npb24oKSk7CisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uJj4oaW5kZXhFeHByZXNzaW9uKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIGV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGV4cHJlc3Npb24uYmFzZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1l
bnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1l
bnQuZWZmZWN0ZnVsRXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OkZhbGx0aHJvdWdoJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkZvckxvb3Am
IGZvckxvb3ApCit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQpOworICAgIH0sIFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPiYgZXhw
cmVzc2lvbikgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmV4cHJlc3Npb24pOworICAg
IH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkpOworICAgIGlmIChmb3JMb29wLmNvbmRpdGlv
bigpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZvckxvb3AuY29uZGl0aW9uKCkpOwor
ICAgIGlmIChmb3JMb29wLmluY3JlbWVudCgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
KmZvckxvb3AuaW5jcmVtZW50KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wLmJv
ZHkoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0
ZW1lbnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFs
KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5ib2R5KCkpOworICAgIGlm
IChpZlN0YXRlbWVudC5lbHNlQm9keSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmlm
U3RhdGVtZW50LmVsc2VCb2R5KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UmV0
dXJuJiByZXR1cm5TdGF0ZW1lbnQpCit7CisgICAgaWYgKHJldHVyblN0YXRlbWVudC52YWx1ZSgp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnJldHVyblN0YXRlbWVudC52YWx1ZSgpKTsK
K30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7
CisgICAgaWYgKHN3aXRjaENhc2UudmFsdWUoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KCpzd2l0Y2hDYXNlLnZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hDYXNl
LmJsb2NrKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50
JiBzd2l0Y2hTdGF0ZW1lbnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaFN0YXRl
bWVudC52YWx1ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1l
bnQuc3dpdGNoQ2FzZXMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2Up
OworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VHJhcCYpCit7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQpCit7CisgICAgZm9yIChhdXRvJiB2YXJpYWJsZURlY2xhcmF0
aW9uIDogdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQudmFyaWFibGVEZWNsYXJhdGlvbnMo
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb24pOworfQor
Cit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCit7CisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQoreworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsK
KyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSk7CisgICAgaWYgKHZh
cmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpOworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9u
KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkp
OworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsK
K30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVz
c2lvbikKK3sKKyAgICBmb3IgKGF1dG8mIGFyZ3VtZW50IDogY2FsbEV4cHJlc3Npb24uYXJndW1l
bnRzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqYXJndW1lbnQpOworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCit7
CisgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogY29tbWFFeHByZXNzaW9uLmxpc3QoKSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpleHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9y
Ojp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9u
KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkZXJlZmVyZW5jZUV4cHJlc3Npb24ucG9pbnRl
cigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBs
b2dpY2FsRXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4cHJl
c3Npb24ubGVmdCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24u
cmlnaHQoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVz
c2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxv
Z2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uLmxWYWx1ZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VQb2lu
dGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24ub2xkVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHByZXNzaW9uKCkpOworICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnJlc3VsdEV4cHJlc3Npb24o
KSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYgdGVy
bmFyeUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNz
aW9uLnByZWRpY2F0ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Np
b24uYm9keUV4cHJlc3Npb24oKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHBy
ZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6
VmFyaWFibGVSZWZlcmVuY2UmKQoreworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRW
aXNpdChQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQocHJvZ3JhbSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0VW5uYW1l
ZFR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdFVubmFtZWRUeXBlKHVubmFtZWRUeXBlKTsKK30KKwordm9pZCBWaXNp
dG9yOjpjaGVja0Vycm9yQW5kVmlzaXROYW1lZFR5cGUoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlw
ZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0TmFtZWRUeXBlKG5hbWVkVHlw
ZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VHlwZURlZmlu
aXRpb24mIHR5cGVEZWZpbml0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQodHlwZURlZmluaXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCit7CisgICAg
aWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAg
IHZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24p
Cit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChmdW5jdGlvbkRlZmluaXRpb24p
OworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAgaWYgKCFl
cnJvcigpKQorICAgICAgICB2aXNpdChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAg
IHZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKK3sKKyAgICBp
ZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHR5cGVSZWZlcmVuY2UpOworfQorCit2b2lkIFZp
c2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkK
K3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHBvaW50ZXJUeXBlKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUm
IGFycmF5UmVmZXJlbmNlVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0
KGFycmF5UmVmZXJlbmNlVHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAg
ICAgICB2aXNpdChhcnJheVR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKK30KKwordm9pZCBW
aXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVy
YXRpb25NZW1iZXIpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChlbnVtZXJh
dGlvbk1lbWJlcik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVjbGFyYXRpb24pOworfQorCit2b2lkIFZp
c2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5cGVBcmd1bWVudCYgdHlwZUFyZ3VtZW50
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodHlwZUFyZ3VtZW50KTsKK30K
Kwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJiBy
ZWZlcmVuY2VUeXBlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQocmVmZXJl
bmNlVHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U2Vt
YW50aWMmIHNlbWFudGljKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoc2Vt
YW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkK
KyAgICAgICAgdmlzaXQoY29uc3RhbnRFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRlQmxvY2spCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChhdHRyaWJ1dGVCbG9jayk7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QnVpbHRJblNlbWFudGljJiBi
dWlsdEluU2VtYW50aWMpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChidWls
dEluU2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OlJlc291cmNlU2VtYW50aWMmIHJlc291cmNlU2VtYW50aWMpCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdChyZXNvdXJjZVNlbWFudGljKTsKK30KKwordm9pZCBWaXNpdG9yOjpj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmIHNw
ZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYykKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJiBzdGFnZUlu
T3V0U2VtYW50aWMpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzdGFnZUlu
T3V0U2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisg
ICAgICAgIHZpc2l0KGludGVnZXJMaXRlcmFsKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJM
aXRlcmFsKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAg
ICB2aXNpdChmbG9hdExpdGVyYWwpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkKK3sKKyAgICBpZiAoIWVycm9yKCkp
CisgICAgICAgIHZpc2l0KG51bGxMaXRlcmFsKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpCit7CisgICAg
aWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChib29sZWFuTGl0ZXJhbCk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVy
UmVmZXJlbmNlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY29uc3RhbnRF
eHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpOworfQorCit2b2lkIFZpc2l0b3I6
OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJiBmdW5jdGlvbkF0dHJp
YnV0ZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZ1bmN0aW9uQXR0cmli
dXRlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOdW1UaHJl
YWRzRnVuY3Rpb25BdHRyaWJ1dGUmIG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkKK3sKKyAg
ICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0
ZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QmxvY2smIGJs
b2NrKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYmxvY2spOworfQorCit2
b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoc3RhdGVtZW50KTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCcmVhayYgYnJlYWtTdGF0ZW1l
bnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChicmVha1N0YXRlbWVudCk7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29udGludWUmIGNv
bnRpbnVlU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY29u
dGludWVTdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KGRvV2hpbGVMb29wKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkK
KyAgICAgICAgdmlzaXQoZXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICBpZiAo
IWVycm9yKCkpCisgICAgICAgIHZpc2l0KGRvdEV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0
b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNz
aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoaW5kZXhFeHByZXNzaW9u
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0
YXRlbWVudCYgZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9y
KCkpCisgICAgICAgIHZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpOworfQorCit2
b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZhbGx0aHJvdWdoJiBmYWxsdGhy
b3VnaFN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZhbGx0
aHJvdWdoU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpGb3JMb29wJiBmb3JMb29wKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQoZm9yTG9vcCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAg
dmlzaXQoaWZTdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAg
ICAgICAgdmlzaXQocmV0dXJuU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIGlmICghZXJy
b3IoKSkKKyAgICAgICAgdmlzaXQoc3dpdGNoQ2FzZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzd2l0Y2hTdGF0ZW1lbnQpOworfQor
Cit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlRyYXAmIHRyYXApCit7Cisg
ICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh0cmFwKTsKK30KKwordm9pZCBWaXNpdG9y
OjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYg
dmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAg
ICAgICB2aXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCit7Cisg
ICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh3aGlsZUxvb3ApOworfQorCit2b2lkIFZp
c2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlh
YmxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh2YXJp
YWJsZURlY2xhcmF0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCit7CisgICAg
aWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbik7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNh
bGxFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY2FsbEV4
cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNv
bW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAg
ICAgICAgdmlzaXQoY29tbWFFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVz
c2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGRlcmVmZXJlbmNlRXhw
cmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TG9n
aWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkK
KyAgICAgICAgdmlzaXQobG9naWNhbEV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhw
cmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGxvZ2ljYWxOb3RF
eHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpN
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24pOworfQorCit2
b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQor
ICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNp
dG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4
cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh0ZXJuYXJ5RXhw
cmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFy
aWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKQoreworICAgIGlmICghZXJyb3IoKSkK
KyAgICAgICAgdmlzaXQodmFyaWFibGVSZWZlcmVuY2UpOworfQorCit9CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZp
c2l0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRv
ci5oCmluZGV4IDUxNjg1NmU0MWQwLi45NDdiNzRiZWMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKQEAgLTI3LDU0MyArMjcs
MjI3IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgi
Ci0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKLSNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5o
IgotI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExT
TEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgi
Ci0jaW5jbHVkZSAiV0hMU0xCbG9jay5oIgotI2luY2x1ZGUgIldITFNMQm9vbGVhbkxpdGVyYWwu
aCIKLSNpbmNsdWRlICJXSExTTEJyZWFrLmgiCi0jaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50
aWMuaCIKLSNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xD
b21tYUV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIgot
I2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UuaCIKLSNpbmNsdWRlICJXSExTTENvbnRpbnVlLmgiCi0jaW5jbHVkZSAiV0hMU0xEZXJlZmVy
ZW5jZUV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCi0jaW5jbHVk
ZSAiV0hMU0xEb3RFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xFZmZlY3RmdWxFeHByZXNz
aW9uU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIK
LSNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyLmgiCi0jaW5jbHVkZSAiV0hMU0xFeHBy
ZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xGYWxsdGhyb3VnaC5oIgotI2luY2x1ZGUgIldITFNM
RmxvYXRMaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCiAjaW5jbHVkZSAiV0hM
U0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlv
bi5oIgotI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hM
U0xJZlN0YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMSW5kZXhFeHByZXNzaW9uLmgiCi0jaW5j
bHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMTG9naWNhbEV4cHJl
c3Npb24uaCIKLSNpbmNsdWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xN
YWtlUG9pbnRlckV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgotI2lu
Y2x1ZGUgIldITFNMTm9kZS5oIgotI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKLSNpbmNs
dWRlICJXSExTTE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNM
UGFyYW1ldGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgotI2luY2x1ZGUgIldI
TFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIu
aCIKLSNpbmNsdWRlICJXSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKLSNpbmNsdWRl
ICJXSExTTFJlZmVyZW5jZVR5cGUuaCIKLSNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMu
aCIKLSNpbmNsdWRlICJXSExTTFJldHVybi5oIgogI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIK
LSNpbmNsdWRlICJXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oIgotI2luY2x1
ZGUgIldITFNMU3RhZ2VJbk91dFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQu
aCIKLSNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKLSNpbmNsdWRlICJXSExT
TFN0cnVjdHVyZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFN3aXRjaENhc2UuaCIKLSNpbmNs
dWRlICJXSExTTFN3aXRjaFN0YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJl
c3Npb24uaCIKLSNpbmNsdWRlICJXSExTTFRyYXAuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIK
ICNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgotI2luY2x1ZGUgIldITFNMVHlwZURlZmlu
aXRpb24uaCIKLSNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJXSExT
TFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTFZhbHVlLmgiCi0jaW5j
bHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVu
Y2UuaCIKLSNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgotCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAotY2xhc3MgVmlzaXRvciB7Ci0gICAgflZpc2l0b3Io
KSA9IGRlZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkK
LSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgdHlwZURlZmluaXRpb24gOiBwcm9ncmFtLnR5cGVE
ZWZpbml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQodHlwZURlZmluaXRpb24pOwotICAgICAg
ICBmb3IgKGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmlu
aXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKLSAgICAg
ICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9u
RGVmaW5pdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7
Ci0gICAgICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlv
bkRlZmluaXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOwot
ICAgICAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKTsKLSAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRp
b24gOiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Ci0gICAgfQotCi0gICAgdm9pZCB2aXNpdFR5cGUoQVNU
OjpUeXBlJiB0eXBlKQotICAgIHsKLSAgICAgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4o
dHlwZSkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5
cGUpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odHlwZSkpCi0gICAg
ICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih0eXBlKSk7Ci0gICAgICAg
IGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih0eXBlKSkKLSAgICAgICAgICAg
IHZpc2l0KGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih0eXBlKSk7Ci0gICAgICAg
IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlUeXBlPih0eXBlKSk7Ci0g
ICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odHlwZSkpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24m
IHR5cGVEZWZpbml0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHR5cGVEZWZpbml0aW9u
LnR5cGUoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJl
RGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0
byYgc3RydWN0dXJlRWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVu
dHMoKSkKLSAgICAgICAgICAgIHZpc2l0KHN0cnVjdHVyZUVsZW1lbnQpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRp
b25EZWZpbml0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi50eXBlKCkpOwotICAgICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51
bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpKQotICAgICAgICAgICAgdmlz
aXQoZW51bWVyYXRpb25NZW1iZXIpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQotICAgIHsKLSAgICAg
ICAgdmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4oZnVuY3Rpb25E
ZWZpbml0aW9uKSk7Ci0gICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQo
c3RhdGljX2Nhc3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4obmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbikpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQotICAgIHsKLSAgICAgICAgZm9y
IChhdXRvJiB0eXBlQXJndW1lbnQgOiBuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50
cygpKQotICAgICAgICAgICAgdmlzaXQodHlwZUFyZ3VtZW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQotICAgIHsK
LSAgICAgICAgZm9yIChhdXRvJiB0eXBlQXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1
bWVudHMoKSkKLSAgICAgICAgICAgIHZpc2l0KHR5cGVBcmd1bWVudCk7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKQotICAgIHsK
LSAgICAgICAgdmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlJj4ocG9pbnRlclR5
cGUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlwZSkKLSAgICB7Ci0gICAgICAgIHZpc2l0KHN0YXRpY19j
YXN0PEFTVDo6UmVmZXJlbmNlVHlwZSY+KGFycmF5UmVmZXJlbmNlVHlwZSkpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQotICAgIHsK
LSAgICAgICAgdmlzaXRUeXBlKGFycmF5VHlwZS50eXBlKCkpOwotICAgIH0KLQotICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpCi0g
ICAgewotICAgICAgICB2aXNpdFR5cGUoc3RydWN0dXJlRWxlbWVudC50eXBlKCkpOwotICAgICAg
ICBpZiAoc3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygpKQotICAgICAgICAgICAgdmlzaXQoKnN0
cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQotICAgIHsKLSAg
ICAgICAgaWYgKGVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpCi0gICAgICAgICAgICB2aXNpdCgq
ZW51bWVyYXRpb25NZW1iZXIudmFsdWUoKSk7Ci0gICAgfQotICAgIAotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pCi0g
ICAgewotICAgICAgICB2aXNpdChmdW5jdGlvbkRlY2xhcmF0aW9uLmF0dHJpYnV0ZUJsb2NrKCkp
OwotICAgICAgICB2aXNpdFR5cGUoZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAg
ICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygp
KQotICAgICAgICAgICAgdmlzaXQocGFyYW1ldGVyKTsKLSAgICAgICAgaWYgKGZ1bmN0aW9uRGVj
bGFyYXRpb24uc2VtYW50aWMoKSkKLSAgICAgICAgICAgIHZpc2l0KCpmdW5jdGlvbkRlY2xhcmF0
aW9uLnNlbWFudGljKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlR5
cGVBcmd1bWVudCYgdHlwZUFyZ3VtZW50KQotICAgIHsKLSAgICAgICAgV1RGOjp2aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNz
aW9uKSB7Ci0gICAgICAgICAgICB2aXNpdChjb25zdGFudEV4cHJlc3Npb24pOwotICAgICAgICB9
LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4mIHR5cGVSZWZlcmVuY2Up
IHsKLSAgICAgICAgICAgIHZpc2l0KCp0eXBlUmVmZXJlbmNlKTsKLSAgICAgICAgfSksIHR5cGVB
cmd1bWVudCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVmZXJlbmNl
VHlwZSYgcmVmZXJlbmNlVHlwZSkKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShyZWZlcmVuY2VU
eXBlLmVsZW1lbnRUeXBlKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlNlbWFudGljJiBzZW1hbnRpYykKLSAgICB7Ci0gICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbJl0oQVNUOjpCdWlsdEluU2VtYW50aWMmIGJ1aWx0SW5TZW1hbnRpYykgewotICAg
ICAgICAgICAgdmlzaXQoYnVpbHRJblNlbWFudGljKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6UmVz
b3VyY2VTZW1hbnRpYyYgcmVzb3VyY2VTZW1hbnRpYykgewotICAgICAgICAgICAgdmlzaXQocmVz
b3VyY2VTZW1hbnRpYyk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3Rh
bnRTZW1hbnRpYyYgc3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljKSB7Ci0gICAgICAgICAg
ICB2aXNpdChzcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMpOwotICAgICAgICB9LCBbJl0o
QVNUOjpTdGFnZUluT3V0U2VtYW50aWMmIHN0YWdlSW5PdXRTZW1hbnRpYykgewotICAgICAgICAg
ICAgdmlzaXQoc3RhZ2VJbk91dFNlbWFudGljKTsKLSAgICAgICAgfSksIHNlbWFudGljKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNv
bnN0YW50RXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIGNvbnN0YW50RXhwcmVzc2lvbi52aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJh
bCkgewotICAgICAgICAgICAgdmlzaXQoaW50ZWdlckxpdGVyYWwpOwotICAgICAgICB9LCBbJl0o
QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7Ci0g
ICAgICAgICAgICB2aXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsKTsKLSAgICAgICAgfSwgWyZd
KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KGZs
b2F0TGl0ZXJhbCk7Ci0gICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJh
bCkgewotICAgICAgICAgICAgdmlzaXQobnVsbExpdGVyYWwpOwotICAgICAgICB9LCBbJl0oQVNU
OjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KGJv
b2xlYW5MaXRlcmFsKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVt
YmVyUmVmZXJlbmNlKSB7Ci0gICAgICAgICAgICB2aXNpdChjb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZSk7Ci0gICAgICAgIH0pKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRlQmxvY2spCi0gICAg
ewotICAgICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uQXR0cmlidXRlIDogYXR0cmlidXRlQmxvY2sp
Ci0gICAgICAgICAgICB2aXNpdChmdW5jdGlvbkF0dHJpYnV0ZSk7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6UGFyYW1ldGVyJiBwYXJhbWV0ZXIpCi0gICAgewotICAgICAg
ICB2aXNpdFR5cGUocGFyYW1ldGVyLnR5cGUoKSk7Ci0gICAgICAgIGlmIChwYXJhbWV0ZXIuc2Vt
YW50aWMoKSkKLSAgICAgICAgICAgIHZpc2l0KCpwYXJhbWV0ZXIuc2VtYW50aWMoKSk7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QnVpbHRJblNlbWFudGljJikKLSAgICB7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYp
Ci0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlNwZWNpYWxpemF0
aW9uQ29uc3RhbnRTZW1hbnRpYyYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJikKLSAgICB7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpCi0gICAgewot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYpCi0gICAg
ewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJikKLSAg
ICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwm
KQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4
cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpCi0gICAgewotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJiBmdW5jdGlvbkF0dHJp
YnV0ZSkKLSAgICB7Ci0gICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNU
OjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmIG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0
ZSkgewotICAgICAgICAgICAgdmlzaXQobnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKTsKLSAg
ICAgICAgfSksIGZ1bmN0aW9uQXR0cmlidXRlKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmKQotICAgIHsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYgYmxvY2spCi0gICAgewotICAgICAg
ICBmb3IgKGF1dG8mIHN0YXRlbWVudCA6IGJsb2NrLnN0YXRlbWVudHMoKSkKLSAgICAgICAgICAg
IHZpc2l0KCpzdGF0ZW1lbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlN0YXRlbWVudCYgc3RhdGVtZW50KQotICAgIHsKLSAgICAgICAgaWYgKGlzPEFTVDo6QmxvY2s+
KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkJsb2NrPihzdGF0
ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpCcmVhaz4oc3RhdGVtZW50KSkKLSAg
ICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6QnJlYWs+KHN0YXRlbWVudCkpOwotICAgICAg
ICBlbHNlIGlmIChpczxBU1Q6OkNvbnRpbnVlPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlz
aXQoZG93bmNhc3Q8QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYg
KGlzPEFTVDo6RG9XaGlsZUxvb3A+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3du
Y2FzdDxBU1Q6OkRvV2hpbGVMb29wPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8
QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50PihzdGF0ZW1lbnQpKQotICAgICAgICAg
ICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50PihzdGF0
ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpGYWxsdGhyb3VnaD4oc3RhdGVtZW50
KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVu
dCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkpCi0gICAg
ICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkpOwotICAgICAg
ICBlbHNlIGlmIChpczxBU1Q6OklmU3RhdGVtZW50PihzdGF0ZW1lbnQpKQotICAgICAgICAgICAg
dmlzaXQoZG93bmNhc3Q8QVNUOjpJZlN0YXRlbWVudD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVs
c2UgaWYgKGlzPEFTVDo6UmV0dXJuPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93
bmNhc3Q8QVNUOjpSZXR1cm4+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6
OlN3aXRjaENhc2U+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6
OlN3aXRjaENhc2U+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlN3aXRj
aFN0YXRlbWVudD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6
U3dpdGNoU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpU
cmFwPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpUcmFwPihz
dGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7Ci0g
ICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCcmVhayYpCi0g
ICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbnRpbnVlJikKLSAg
ICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRv
V2hpbGVMb29wKQotICAgIHsKLSAgICAgICAgdmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKLSAg
ICAgICAgdmlzaXQoZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikKLSAgICB7Ci0gICAg
ICAgIGlmIChpczxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAg
ICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGV4cHJlc3Np
b24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpCb29sZWFuTGl0ZXJhbD4oZXhwcmVzc2lv
bikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkJvb2xlYW5MaXRlcmFsPihleHBy
ZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6Q2FsbEV4cHJlc3Npb24+KGV4cHJl
c3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpDYWxsRXhwcmVzc2lvbj4o
ZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkNvbW1hRXhwcmVzc2lvbj4o
ZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkNvbW1hRXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkRlcmVmZXJlbmNl
RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6
OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChp
czxBU1Q6OkZsb2F0TGl0ZXJhbD4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3du
Y2FzdDxBU1Q6OkZsb2F0TGl0ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChp
czxBU1Q6OkludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRv
d25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXM8QVNUOjpMb2dpY2FsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2
aXNpdChkb3duY2FzdDxBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGlzPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQot
ICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oZXhw
cmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpN
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAg
ICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihleHByZXNzaW9u
KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKQot
ICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpOdWxsTGl0ZXJhbD4oZXhwcmVzc2lvbikp
OwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbj4oZXhw
cmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93
bmNhc3Q8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGlzPEFTVDo6VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAg
ICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oZXhwcmVzc2lv
bikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWw+KGV4
cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVn
ZXJMaXRlcmFsPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNT
RVJUKGlzPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgICAg
IHZpc2l0KGRvd25jYXN0PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24pKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4
cHJlc3Npb25TdGF0ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpCi0gICAgewot
ICAgICAgICB2aXNpdChlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmVmZmVjdGZ1bEV4cHJl
c3Npb24oKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RmFsbHRocm91
Z2gmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29w
JiBmb3JMb29wKQotICAgIHsKLSAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudCkgewotICAgICAgICAgICAgdmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQpOwotICAgICAgICB9LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4m
IGV4cHJlc3Npb24pIHsKLSAgICAgICAgICAgIHZpc2l0KCpleHByZXNzaW9uKTsKLSAgICAgICAg
fSksIGZvckxvb3AuaW5pdGlhbGl6YXRpb24oKSk7Ci0gICAgICAgIGlmIChmb3JMb29wLmNvbmRp
dGlvbigpKQotICAgICAgICAgICAgdmlzaXQoKmZvckxvb3AuY29uZGl0aW9uKCkpOwotICAgICAg
ICBpZiAoZm9yTG9vcC5pbmNyZW1lbnQoKSkKLSAgICAgICAgICAgIHZpc2l0KCpmb3JMb29wLmlu
Y3JlbWVudCgpKTsKLSAgICAgICAgdmlzaXQoZm9yTG9vcC5ib2R5KCkpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKLSAgICB7
Ci0gICAgICAgIHZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOwotICAgICAgICB2aXNp
dChpZlN0YXRlbWVudC5ib2R5KCkpOwotICAgICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHko
KSkKLSAgICAgICAgICAgIHZpc2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKLSAg
ICB7Ci0gICAgICAgIGlmIChyZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSkKLSAgICAgICAgICAgIHZp
c2l0KCpyZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKLSAgICB7Ci0gICAgICAgIGlmIChz
d2l0Y2hDYXNlLnZhbHVlKCkpCi0gICAgICAgICAgICB2aXNpdCgqc3dpdGNoQ2FzZS52YWx1ZSgp
KTsKLSAgICAgICAgdmlzaXQoc3dpdGNoQ2FzZS5ibG9jaygpKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkKLSAg
ICB7Ci0gICAgICAgIHZpc2l0KHN3aXRjaFN0YXRlbWVudC52YWx1ZSgpKTsKLSAgICAgICAgZm9y
IChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpCi0gICAg
ICAgICAgICB2aXNpdChzd2l0Y2hDYXNlKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpUcmFwJikKLSAgICB7Ci0gICAgfQorY2xhc3MgUHJvZ3JhbTsKKworbmFtZXNwYWNl
IEFTVCB7CisKK2NsYXNzIFR5cGVEZWZpbml0aW9uOworY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlv
bjsKK2NsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIEZ1bmN0aW9uRGVmaW5pdGlv
bjsKK2NsYXNzIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBOYXRpdmVUeXBlRGVj
bGFyYXRpb247CitjbGFzcyBUeXBlUmVmZXJlbmNlOworY2xhc3MgUG9pbnRlclR5cGU7CitjbGFz
cyBBcnJheVJlZmVyZW5jZVR5cGU7CitjbGFzcyBBcnJheVR5cGU7CitjbGFzcyBTdHJ1Y3R1cmVF
bGVtZW50OworY2xhc3MgRW51bWVyYXRpb25NZW1iZXI7CitjbGFzcyBGdW5jdGlvbkRlY2xhcmF0
aW9uOworY2xhc3MgUmVmZXJlbmNlVHlwZTsKK2NsYXNzIENvbnN0YW50RXhwcmVzc2lvbjsKK2Ns
YXNzIEJ1aWx0SW5TZW1hbnRpYzsKK2NsYXNzIFJlc291cmNlU2VtYW50aWM7CitjbGFzcyBTcGVj
aWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWM7CitjbGFzcyBTdGFnZUluT3V0U2VtYW50aWM7Citj
bGFzcyBJbnRlZ2VyTGl0ZXJhbDsKK2NsYXNzIFVuc2lnbmVkSW50ZWdlckxpdGVyYWw7CitjbGFz
cyBGbG9hdExpdGVyYWw7CitjbGFzcyBOdWxsTGl0ZXJhbDsKK2NsYXNzIEJvb2xlYW5MaXRlcmFs
OworY2xhc3MgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2U7Citj
bGFzcyBOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGU7CitjbGFzcyBCbG9jazsKK2NsYXNzIFN0
YXRlbWVudDsKK2NsYXNzIEJyZWFrOworY2xhc3MgQ29udGludWU7CitjbGFzcyBEb1doaWxlTG9v
cDsKK2NsYXNzIEV4cHJlc3Npb247CitjbGFzcyBEb3RFeHByZXNzaW9uOworY2xhc3MgSW5kZXhF
eHByZXNzaW9uOworY2xhc3MgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uOworY2xhc3MgRWZmZWN0
ZnVsRXhwcmVzc2lvblN0YXRlbWVudDsKK2NsYXNzIEZhbGx0aHJvdWdoOworY2xhc3MgRm9yTG9v
cDsKK2NsYXNzIElmU3RhdGVtZW50OworY2xhc3MgUmV0dXJuOworY2xhc3MgU3dpdGNoQ2FzZTsK
K2NsYXNzIFN3aXRjaFN0YXRlbWVudDsKK2NsYXNzIFRyYXA7CitjbGFzcyBWYXJpYWJsZURlY2xh
cmF0aW9uc1N0YXRlbWVudDsKK2NsYXNzIFdoaWxlTG9vcDsKK2NsYXNzIFZhcmlhYmxlRGVjbGFy
YXRpb247CitjbGFzcyBBc3NpZ25tZW50RXhwcmVzc2lvbjsKK2NsYXNzIENhbGxFeHByZXNzaW9u
OworY2xhc3MgQ29tbWFFeHByZXNzaW9uOworY2xhc3MgRGVyZWZlcmVuY2VFeHByZXNzaW9uOwor
Y2xhc3MgTG9naWNhbEV4cHJlc3Npb247CitjbGFzcyBMb2dpY2FsTm90RXhwcmVzc2lvbjsKK2Ns
YXNzIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb247CitjbGFzcyBNYWtlUG9pbnRlckV4cHJl
c3Npb247CitjbGFzcyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uOworY2xhc3MgVGVybmFyeUV4
cHJlc3Npb247CitjbGFzcyBWYXJpYWJsZVJlZmVyZW5jZTsKK2NsYXNzIFVubmFtZWRUeXBlOwor
Y2xhc3MgTmFtZWRUeXBlOwogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQotICAg
IHsKLSAgICAgICAgZm9yIChhdXRvJiB2YXJpYWJsZURlY2xhcmF0aW9uIDogdmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQudmFyaWFibGVEZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHZp
c2l0KHZhcmlhYmxlRGVjbGFyYXRpb24pOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQotICAgIHsKLSAgICAgICAgdmlzaXQod2hpbGVM
b29wLmNvbmRpdGlvbmFsKCkpOwotICAgICAgICB2aXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2
YXJpYWJsZURlY2xhcmF0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHZhcmlhYmxlRGVj
bGFyYXRpb24udHlwZSgpKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50
aWMoKSkKLSAgICAgICAgICAgIHZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkp
OwotICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKQotICAgICAg
ICAgICAgdmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2ln
bm1lbnRFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQoYXNzaWdubWVudEV4cHJlc3Np
b24ubGVmdCgpKTsKLSAgICAgICAgdmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNh
bGxFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxF
eHByZXNzaW9uLmFyZ3VtZW50cygpKQotICAgICAgICAgICAgdmlzaXQoKmFyZ3VtZW50KTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1h
RXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGNvbW1h
RXhwcmVzc2lvbi5saXN0KCkpCi0gICAgICAgICAgICB2aXNpdCgqZXhwcmVzc2lvbik7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBk
ZXJlZmVyZW5jZUV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChkZXJlZmVyZW5jZUV4
cHJlc3Npb24ucG9pbnRlcigpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpMb2dpY2FsRXhwcmVzc2lvbiYgbG9naWNhbEV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2
aXNpdChsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOwotICAgICAgICB2aXNpdChsb2dpY2FsRXhw
cmVzc2lvbi5yaWdodCgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpM
b2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCi0gICAgewotICAgICAg
ICB2aXNpdChsb2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkpOwotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChtYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikK
LSAgICB7Ci0gICAgICAgIHZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5s
VmFsdWUoKSk7Ci0gICAgICAgIHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFs
dWUoKSk7Ci0gICAgICAgIHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWUo
KSk7Ci0gICAgICAgIHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHBy
ZXNzaW9uKCkpOwotICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnJlc3Vs
dEV4cHJlc3Npb24oKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VGVy
bmFyeUV4cHJlc3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQo
dGVybmFyeUV4cHJlc3Npb24ucHJlZGljYXRlKCkpOwotICAgICAgICB2aXNpdCh0ZXJuYXJ5RXhw
cmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKLSAgICAgICAgdmlzaXQodGVybmFyeUV4cHJlc3Np
b24uZWxzZUV4cHJlc3Npb24oKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6VmFyaWFibGVSZWZlcmVuY2UmKQotICAgIHsKLSAgICB9Cit9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJikKLSAgICB7Ci0gICAg
fQorY2xhc3MgVmlzaXRvciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+VmlzaXRvcigpID0gZGVm
YXVsdDsKKworICAgIC8vIEZJWE1FOiBBZGQgYSB3YXkgdG8gdmlzaXQgYSBjb25zdCBQcm9ncmFt
CisKKyAgICB2b2lkIHZpc2l0VW5uYW1lZFR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5
cGUpOworICAgIHZvaWQgdmlzaXROYW1lZFR5cGUoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSk7
CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShBU1Q6OlVubmFtZWRUeXBl
JiB1bm5hbWVkVHlwZSk7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXROYW1lZFR5cGUoQVNU
OjpOYW1lZFR5cGUmIG5hbWVkVHlwZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoUHJvZ3Jh
bSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJik7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYpOworICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpUeXBlUmVmZXJlbmNlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UG9p
bnRlclR5cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5
cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXImKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
VHlwZUFyZ3VtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVmZXJlbmNlVHlw
ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlNlbWFudGljJik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpCdWlsdEluU2VtYW50aWMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZXNvdXJj
ZVNlbWFudGljJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3BlY2lhbGl6YXRpb25D
b25zdGFudFNlbWFudGljJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RhZ2VJbk91
dFNlbWFudGljJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6TnVsbExpdGVyYWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpCb29sZWFuTGl0ZXJhbCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25BdHRyaWJ1dGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpCbG9jayYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0YXRlbWVu
dCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJyZWFrJik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6Q29udGludWUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpE
b1doaWxlTG9vcCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkV4cHJlc3Npb24mKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkZhbGx0aHJvdWdoJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
Rm9yTG9vcCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50Jik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6U3dpdGNoQ2FzZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN3aXRj
aFN0YXRlbWVudCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlRyYXAmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYpOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OkNhbGxFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29tbWFF
eHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHBy
ZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYpOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYpOworCisgICAgdm9pZCBj
aGVja0Vycm9yQW5kVmlzaXQoUHJvZ3JhbSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6VHlwZURlZmluaXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OlN0cnVjdHVyZURlZmluaXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OlBvaW50ZXJUeXBlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBcnJh
eVJlZmVyZW5jZVR5cGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkFycmF5
VHlwZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RydWN0dXJlRWxlbWVu
dCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXIm
KTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24m
KTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5cGVBcmd1bWVudCYpOworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U2VtYW50aWMmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6UmVzb3VyY2VTZW1hbnRpYyYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpGbG9hdExpdGVyYWwmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
Ok51bGxMaXRlcmFsJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCb29sZWFu
TGl0ZXJhbCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkJsb2NrJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpTdGF0ZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJyZWFr
Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDb250aW51ZSYpOworICAgIHZv
aWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OkluZGV4RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50Jik7CisgICAgdm9pZCBjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6Rm9yTG9vcCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SWZTdGF0
ZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJldHVybiYpOworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYpOworICAgIHZvaWQgY2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50Jik7CisgICAgdm9pZCBjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpUcmFwJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6V2hpbGVMb29wJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpBc3NpZ25tZW50RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6Q2FsbEV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNv
bW1hRXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RGVyZWZl
cmVuY2VFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpMb2dp
Y2FsRXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TG9naWNh
bE5vdEV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJik7CisKKyAgICB2b2lkIHNldEVycm9yKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbV9lcnJvcik7CisgICAgICAgIG1fZXJyb3IgPSB0cnVlOwor
ICAgIH0KKworICAgIGJvb2wgZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9CisKK3By
aXZhdGU6CisgICAgYm9vbCBtX2Vycm9yIHsgZmFsc2UgfTsgLy8gRklYTUU6IE1pZ3JhdGUgdGhp
cyB0byBiZSBzb21lIHNvcnQgb2YgZGVzY3JpcHRpdmUgc3RyaW5nLgogfTsKIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCAzYzBlMzY0NzA1NC4uZWIwM2VkNjI0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0z
MDYsOCArMzA2LDI5IEBAIE1vZHVsZXMvd2ViZ3B1L0RPTVdpbmRvd1dlYkdQVS5jcHAKIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFBhcnNlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKK01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMQ2hlY2tlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5j
cHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAorTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENo
ZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50
aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAorTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xWaXNpdG9yLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3Vt
ZW50LmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNw
cAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAKK01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRp
Yy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5j
cHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwCitN
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCitNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3BwCitNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAKK01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKK01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcAogTW9kdWxlcy93ZWJncHUv
V2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVQWRhcHRlci5jcHAKIE1vZHVsZXMvd2Vi
Z3B1L1dlYkdQVUJpbmRHcm91cExheW91dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwN2MxNmVmMTc3NS4uYzY2MmIxMzIz
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTY0MDMsOSArNjQwMywyMCBAQAogCQkxQzI0RUVBNzFDNzJBN0I0MDA4MEY4RkMg
LyogSlNGb250RmFjZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0Zv
bnRGYWNlU2V0Lmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9udEZhY2VTZXQu
aDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUMyNjQ5NzkwRDdFMjQ4
QTAwQkQxMEYyIC8qIERvY3VtZW50TG9hZGVyTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TG9hZGVyTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUMzMjQ5MTAxQzZENkEzQjAwN0VEQjMyIC8qIEZvbnRWYXJpYW50QnVpbGRl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250VmFyaWFudEJ1
aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc2QzIxQ0VEQTQy
MDAwREM5RjIgLyogV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUMzMzI3NkUyMUNFRkY3NDAwMERDOUYyIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2Fk
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NkYyMUNGMDEzMTAwMERDOUYyIC8qIFdITFNM
SW5mZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEluZmVyVHlwZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzEyMUNGMEJFMTAwMERDOUYyIC8qIFdITFNMTmFt
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTmFtZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFDMzMyNzcyMjFDRjBEMkUwMDBEQzlGMiAvKiBXSExTTFVubmFtZWRU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVW5uYW1lZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzQyMUQ1QTcwNjAwMERDOUYyIC8qIFdITFNMUmVjdXJzaXZl
VHlwZUNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3NTIxRDVCMEY4MDAwREM5RjIg
LyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTENo
ZWNrRHVwbGljYXRlRnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
MzMyNzc2MjFENUMwN0UwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3Nv
cnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc3MjFENUNBODMwMDBEQzlGMiAv
KiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzMzMjc3ODIxRDVDRUQ0MDAwREM5RjIgLyogV0hMU0xTeW50aGVzaXplQXJy
YXlPcGVyYXRvckxlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVBcnJheU9w
ZXJhdG9yTGVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMzk2OUNGMUI3
NDIxMUUwMDJCQ0ZBNyAvKiBGb250Q2FjaGVDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FjaGVDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDNjYyNjBFMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RmFjZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjYyNjBGMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250
RmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RmFjZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzdDQzIxRDIxQ0RFMTk4MDBDMUZBMkMgLyogV0hM
U0xOYW1lQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE5hbWVDb250ZXh0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNw
ZWN0b3JDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3Bl
Y3RvckNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTcw
RTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCOTU4MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0
b3JDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ2xp
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NDE1LDYgKzY0MjYsMTcgQEAK
IAkJMUNBRjM0N0UwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmplY3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUNBRjM0N0YwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9i
amVjdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlNjcmlw
dE9iamVjdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBRjM0ODAwQTZDNDA1
MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQ0I2OUIyQzIxREQ5NkVGMDA2RTg0NkEgLyogV0hMU0xHYXRoZXJFbnRy
eVBvaW50SXRlbXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50
SXRlbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIyRDIxREQ5NkVG
MDA2RTg0NkEgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUNCNjlCMzIyMURFRDQwQjAwNkU4NDZBIC8qIFdITFNMUmVzb2x2YWJsZVR5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xSZXNvbHZhYmxlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxQ0I2OUIzNDIxREVENjNBMDA2RTg0NkEgLyogV0hMU0xGbG9hdExpdGVyYWxUeXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRmxvYXRMaXRlcmFsVHlwZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQ0I2OUIzNTIxREVENjQ5MDA2RTg0NkEgLyogV0hMU0xJbnRlZ2Vy
TGl0ZXJhbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCMzYyMURFRDY1NzAwNkU4NDZBIC8q
IFdITFNMTnVsbExpdGVyYWxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTnVsbExpdGVyYWxU
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjM3MjFERUQ2NkIwMDZF
ODQ2QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUNCNjlCMzgyMURGMDNFMTAwNkU4NDZBIC8qIFdITFNMRmxvYXRMaXRlcmFsVHlw
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIzOTIxREYwM0YzMDA2RTg0NkEgLyogV0hM
U0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbnRlZ2Vy
TGl0ZXJhbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIzQTIx
REYwNDAzMDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQ0I2OUIzQjIxREYwNDFFMDA2RTg0NkEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRl
cmFsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVy
YWxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNCNkI0RjgyMTdCODM5
MzAwOTNCOUNEIC8qIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRl
eHREZWNvcmF0aW9uVGhpY2tuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFD
QjZCNEZCMjE3QjgzOTQwMDkzQjlDRCAvKiBUZXh0VW5kZXJsaW5lT2Zmc2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRleHRVbmRlcmxpbmVPZmZzZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUNDREY1QkIxOTkwMzMyNDAwQkNFQkFEIC8qIFNWR1RvT1RGRm9udENvbnZlcnNpb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVG9PVEZGb250Q29udmVy
c2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzIxNCw5ICsxMzIzNiwx
NiBAQAogCQlDMTFBOUVDRDIxNDAzQTVDMDBDRkIyMEEgLyogU3dpdGNoaW5nR1BVQ2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFN3aXRjaGluZ0dQVUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMTFBOUVEMjIxNDA1NzhCMDBDRkIyMEEgLyogU3dpdGNoaW5nR1BVQ2xpZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN3aXRjaGluZ0dQVUNsaWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMxRTFEMjM1MjAzREYxNTQwMDU4NDY2NSAvKiBTY3JlZW5Q
cm9wZXJ0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmVlblByb3BlcnRpZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwMTMzNDQyMURBQzA5NTAwQjYwQzI3IC8qIFdITFNMSW50
cmluc2ljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEludHJpbnNpY3MuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzIwMTMzNDYyMURBRUU2RTAwQjYwQzI3IC8qIFdITFNMSW50cmlu
c2ljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEludHJpbnNpY3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjAxMzM0NzIxREI0MzYzMDBCNjBDMjcgLyogV0hMU0xT
eW50aGVzaXplQ29uc3RydWN0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUNv
bnN0cnVjdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjAxNUMwOTFCRTZG
RTJDMDA4MjIzODkgLyogRm9udFZhcmlhbnRCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRW
YXJpYW50QnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjEwRTkxMTIx
QjRCRDEwMDBCN0Y4M0QgLyogV0hMU0xMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExT
TExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMEU5MTIyMUI0QkQx
MDAwQjdGODNEIC8qIFdITFNMTGV4ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xMZXhlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjEzOEExMzIxRERFQ0QzMDBGNTE2QkEgLyog
V0hMU0xCdWlsdEluU2VtYW50aWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xCdWlsdElu
U2VtYW50aWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjEzOEExNTIxRERF
Q0U5MDBGNTE2QkEgLyogV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUMyMTM4QTE2MjFEREVDRkIwMEY1MTZCQSAvKiBXSExTTFNwZWNpYWxpemF0aW9uQ29uc3Rh
bnRTZW1hbnRpYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFNwZWNpYWxpemF0aW9uQ29u
c3RhbnRTZW1hbnRpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMTM4QTE3
MjFEREVEMEQwMEY1MTZCQSAvKiBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMUJGNkYzMjFDRDg5QUQwMDIyNzk3OSAvKiBXSExTTFRyYXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xUcmFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
MUJGNkY0MjFDRDg5QjMwMDIyNzk3OSAvKiBXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMjFCRjZGNTIxQ0Q4OUI1MDAyMjc5NzkgLyogV0hMU0xDb250aW51ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXSExTTENvbnRpbnVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMzI0NSw3ICsxMzI3NCw2IEBACiAJCUMyMUJGNzBDMjFDRDg5Q0MwMDIyNzk3OSAvKiBX
SExTTEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xFeHByZXNzaW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzBEMjFDRDg5Q0QwMDIyNzk3OSAvKiBXSExT
TFJlZmVyZW5jZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZWZlcmVuY2VUeXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzBFMjFDRDg5Q0UwMDIyNzk3OSAvKiBX
SExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN0YWdlSW5PdXRT
ZW1hbnRpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjFCRjcwRjIxQ0Q4OUNG
MDAyMjc5NzkgLyogV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDMjFCRjcxMDIxQ0Q4OUQwMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxMTIxQ0Q4OUQxMDAyMjc5Nzkg
LyogV0hMU0xUeXBlQXJndW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xUeXBlQXJndW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MTIyMUNEODlEMTAwMjI3OTc5
IC8qIFdITFNMU3RhdGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3RhdGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzI1Myw3ICsxMzI4MSw2IEBACiAJCUMyMUJG
NzE0MjFDRDg5RDMwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MTUyMUNEODlENDAwMjI3OTc5IC8q
IFdITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xMb2dpY2Fs
Tm90RXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxNjIx
Q0Q4OUQ1MDAyMjc5NzkgLyogV0hMU0xDYWxsRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTENhbGxFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyMUJG
NzE3MjFDRDg5RDYwMDIyNzk3OSAvKiBXSExTTFBhcmFtZXRlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTFBhcmFtZXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxODIx
Q0Q4OUQ3MDAyMjc5NzkgLyogV0hMU0xEb3RFeHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdI
TFNMRG90RXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcx
OTIxQ0Q4OUQ3MDAyMjc5NzkgLyogV0hMU0xTd2l0Y2hDYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdI
TFNMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxQTIx
Q0Q4OUQ4MDAyMjc5NzkgLyogV0hMU0xCcmVhay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEJyZWFr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzI5OSwxNSArMTMzMjYsMjcgQEAK
IAkJQzI4MDgzM0QxQzZEQzIyQzAwMTQ1MUI2IC8qIEpTRm9udEZhY2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNGb250RmFjZS5jcHA7IHBhdGggPSBEZXJpdmVk
U291cmNlcy9XZWJDb3JlL0pTRm9udEZhY2UuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwogCQlDMjgwODMzRTFDNkRDMjJDMDAxNDUxQjYgLyogSlNGb250RmFjZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0ZvbnRGYWNlLmg7IHBhdGggPSBEZXJp
dmVkU291cmNlcy9XZWJDb3JlL0pTRm9udEZhY2UuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKIAkJQzI4MEIzRkQxRUY0NjA4OTAwRDM1MTM1IC8qIEZvbnRGYW1pbHlTcGVj
aWZpY2F0aW9uTnVsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBG
b250RmFtaWx5U3BlY2lmaWNhdGlvbk51bGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMjg2RUQ5RTIxREI1QUJBMDA3MTNDNDAgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyODhDNzI3MjFDOEM2RUYwMDJERjVDQSAvKiBX
SExTTFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xWaXNpdG9yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyODhDNzI5MjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBh
cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xQcmVwYXJlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MkEyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFy
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFByZXBhcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQzI4OEM3MkIyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTmFtZVJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJl
c29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTmFtZVJlc29sdmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyODhDNzJEMjFDOTkxREEwMDJERjVDQSAvKiBXSExTTFR5cGVB
cmd1bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFR5cGVBcmd1bWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQUIwQUY0MUU2QjNDNkMwMDEzNDhDNSAvKiBG
b250U2VsZWN0aW9uQWxnb3JpdGhtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMkFCMEFGNTFFNkIzQzZDMDAxMzQ4QzUgLyogRm9udFNlbGVjdGlvbkFsZ29yaXRo
bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250U2VsZWN0aW9uQWxnb3Jp
dGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQUIwQjAzMUU2REU5MkMwMDEz
NDhDNSAvKiBGb250U2VsZWN0aW9uVmFsdWVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRT
ZWxlY3Rpb25WYWx1ZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJC
NTUxNzAyMURCNEI0ODAwNEJFMjZFIC8qIFdITFNMQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXSExTTENoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1
NTE3MTIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdI
TFNMQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3MzIxREI0
QkJEMDA0QkUyNkUgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V0hMU0xOYW1lUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1
NTE3NDIxREI1MTBGMDA0QkUyNkUgLyogV0hMU0xOYW1lQ29udGV4dC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXSExTTE5hbWVDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzJCNTUxNzUyMURCNTI2NjAwNEJFMjZFIC8qIFdITFNMSW5mZXJUeXBlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXSExTTEluZmVyVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDMkI1NTE3NjIxREI1Mzk0MDA0QkUyNkUgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hl
Y2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzcyMURCNTQwRjAwNEJFMjZF
IC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyQjU1MTc4MjFEQjU1NzUwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1
cmVBY2Nlc3NvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVzaXplU3RydWN0
dXJlQWNjZXNzb3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzky
MURCNTU4RjAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25z
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxN0EyMURCNTU5RTAwNEJF
MjZFIC8qIFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTdCMjFEQjU1QUYwMDRCRTI2RSAvKiBXSExTTFN5
bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVz
aXplQ29uc3RydWN0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUx
N0MyMURCNTdFRDAwNEJFMjZFIC8qIFdITFNMVmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXSExTTFZpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkMyQ0Y1
NTFFRjM3NjFBMDA0MjgxQTggLyogRm9udEZhbWlseVNwZWNpZmljYXRpb25OdWxsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkUzOEVGQjFFODM5NkZEMDBDQTNBREYg
LyogQ1NTRm9udFN0eWxlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ1NTRm9udFN0eWxlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDMkUzOEVGQzFFODM5NkZEMDBDQTNBREYgLyogQ1NTRm9udFN0eWxlVmFsdWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRm9udFN0eWxlVmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MzMyLDExICsyNTM3MSwzNiBAQAogCQkJCUMyMUJGNzM3
MjFDRDhBMDIwMDIyNzk3OSAvKiBXSExTTFBhcnNlci5jcHAgKi8sCiAJCQkJQzIxQkY3MzgyMUNE
OEEwMzAwMjI3OTc5IC8qIFdITFNMUGFyc2VyLmggKi8sCiAJCQkJQzIxQkY3M0EyMUNEOEQ3MDAw
MjI3OTc5IC8qIFdITFNMUHJvZ3JhbS5oICovLAotIAkJCQlDMjg4QzcyNzIxQzhDNkVGMDAyREY1
Q0EgLyogV0hMU0xWaXNpdG9yLmggKi8sCi0gCQkJCUMyODhDNzI5MjFDOENBNTAwMDJERjVDQSAv
KiBXSExTTFByZXBhcmUuY3BwICovLAotIAkJCQlDMjg4QzcyQTIxQzhDQTUwMDAyREY1Q0EgLyog
V0hMU0xQcmVwYXJlLmggKi8sCi0gCQkJCUMyODhDNzJCMjFDOENDQzIwMDJERjVDQSAvKiBXSExT
TE5hbWVSZXNvbHZlci5jcHAgKi8sCi0gCQkJCUMyODhDNzJDMjFDOENDQzIwMDJERjVDQSAvKiBX
SExTTE5hbWVSZXNvbHZlci5oICovLAorCQkJCUMyODhDNzI3MjFDOEM2RUYwMDJERjVDQSAvKiBX
SExTTFZpc2l0b3IuaCAqLywKKwkJCQlDMkI1NTE3QzIxREI1N0VEMDA0QkUyNkUgLyogV0hMU0xW
aXNpdG9yLmNwcCAqLywKKwkJCQlDMjg4QzcyOTIxQzhDQTUwMDAyREY1Q0EgLyogV0hMU0xQcmVw
YXJlLmNwcCAqLywKKwkJCQlDMjg4QzcyQTIxQzhDQTUwMDAyREY1Q0EgLyogV0hMU0xQcmVwYXJl
LmggKi8sCisJCQkJQzI4OEM3MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVy
LmggKi8sCisJCQkJQzJCNTUxNzMyMURCNEJCRDAwNEJFMjZFIC8qIFdITFNMTmFtZVJlc29sdmVy
LmNwcCAqLywKKwkJCQkxQzdDQzIxRDIxQ0RFMTk4MDBDMUZBMkMgLyogV0hMU0xOYW1lQ29udGV4
dC5oICovLAorCQkJCUMyQjU1MTc0MjFEQjUxMEYwMDRCRTI2RSAvKiBXSExTTE5hbWVDb250ZXh0
LmNwcCAqLywKKwkJCQkxQzMzMjc2RTIxQ0VGRjc0MDAwREM5RjIgLyogV0hMU0xSZXNvbHZlT3Zl
cmxvYWRJbXBsLmggKi8sCisJCQkJQzI4NkVEOUUyMURCNUFCQTAwNzEzQzQwIC8qIFdITFNMUmVz
b2x2ZU92ZXJsb2FkSW1wbC5jcHAgKi8sCisJCQkJMUMzMzI3NkYyMUNGMDEzMTAwMERDOUYyIC8q
IFdITFNMSW5mZXJUeXBlcy5oICovLAorCQkJCUMyQjU1MTc1MjFEQjUyNjYwMDRCRTI2RSAvKiBX
SExTTEluZmVyVHlwZXMuY3BwICovLAorCQkJCTFDMzMyNzc0MjFENUE3MDYwMDBEQzlGMiAvKiBX
SExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmggKi8sCisJCQkJQzJCNTUxNzYyMURCNTM5NDAwNEJF
MjZFIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwICovLAorCQkJCTFDMzMyNzc1MjFE
NUIwRjgwMDBEQzlGMiAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggKi8sCisJCQkJ
QzJCNTUxNzcyMURCNTQwRjAwNEJFMjZFIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMu
Y3BwICovLAorCQkJCTFDMzMyNzc2MjFENUMwN0UwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVT
dHJ1Y3R1cmVBY2Nlc3NvcnMuaCAqLywKKwkJCQlDMkI1NTE3ODIxREI1NTc1MDA0QkUyNkUgLyog
V0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcCAqLywKKwkJCQkxQzMzMjc3NzIx
RDVDQTgzMDAwREM5RjIgLyogV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCAq
LywKKwkJCQlDMkI1NTE3OTIxREI1NThGMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplRW51bWVy
YXRpb25GdW5jdGlvbnMuY3BwICovLAorCQkJCTFDMzMyNzc4MjFENUNFRDQwMDBEQzlGMiAvKiBX
SExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmggKi8sCisJCQkJQzJCNTUxN0EyMURC
NTU5RTAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwICov
LAorCQkJCUMyMDEzMzQ3MjFEQjQzNjMwMEI2MEMyNyAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1
Y3RvcnMuaCAqLywKKwkJCQlDMkI1NTE3QjIxREI1NUFGMDA0QkUyNkUgLyogV0hMU0xTeW50aGVz
aXplQ29uc3RydWN0b3JzLmNwcCAqLywKKwkJCQlDMjAxMzM0NDIxREFDMDk1MDBCNjBDMjcgLyog
V0hMU0xJbnRyaW5zaWNzLmggKi8sCisJCQkJQzIwMTMzNDYyMURBRUU2RTAwQjYwQzI3IC8qIFdI
TFNMSW50cmluc2ljcy5jcHAgKi8sCisJCQkJQzJCNTUxNzAyMURCNEI0ODAwNEJFMjZFIC8qIFdI
TFNMQ2hlY2tlci5jcHAgKi8sCisJCQkJQzJCNTUxNzEyMURCNEI0ODAwNEJFMjZFIC8qIFdITFNM
Q2hlY2tlci5oICovLAorCQkJCTFDQjY5QjJDMjFERDk2RUYwMDZFODQ2QSAvKiBXSExTTEdhdGhl
ckVudHJ5UG9pbnRJdGVtcy5jcHAgKi8sCisJCQkJMUNCNjlCMkQyMUREOTZFRjAwNkU4NDZBIC8q
IFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IFdITFNM
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI1MzQ0LDcgKzI1NDA4LDYgQEAKIAkJ
QzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5IC8qIEFTVCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQzIxQkY3MEYyMUNEODlDRjAwMjI3OTc5IC8qIFdITFNM
QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oICovLAogCQkJCUMyMUJGNzI1MjFDRDg5RTIw
MDIyNzk3OSAvKiBXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oICovLAogCQkJCUMyMUJGNzA5MjFD
RDg5Q0EwMDIyNzk3OSAvKiBXSExTTEFycmF5VHlwZS5oICovLAogCQkJCUMyMUJGNzMwMjFDRDg5
RUQwMDIyNzk3OSAvKiBXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmggKi8sCkBAIC0yNTM4NCw3
ICsyNTQ0Nyw2IEBACiAJCQkJQzIxQkY3MjQyMUNEODlFMTAwMjI3OTc5IC8qIFdITFNMTm9kZS5o
ICovLAogCQkJCUMyMUJGNzA3MjFDRDg5QzgwMDIyNzk3OSAvKiBXSExTTE51bGxMaXRlcmFsLmgg
Ki8sCiAJCQkJQzIxQkY3MjEyMUNEODlERTAwMjI3OTc5IC8qIFdITFNMTnVtVGhyZWFkc0Z1bmN0
aW9uQXR0cmlidXRlLmggKi8sCi0JCQkJQzIxQkY3MTcyMUNEODlENjAwMjI3OTc5IC8qIFdITFNM
UGFyYW1ldGVyLmggKi8sCiAJCQkJQzIxQkY3MkYyMUNEODlFQzAwMjI3OTc5IC8qIFdITFNMUG9p
bnRlclR5cGUuaCAqLywKIAkJCQlDMjFCRjcyRTIxQ0Q4OUVBMDAyMjc5NzkgLyogV0hMU0xQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCAqLywKIAkJCQlDMjFCRjcwQjIxQ0Q4OUNDMDAyMjc5Nzkg
LyogV0hMU0xRdWFsaWZpZXIuaCAqLywKQEAgLTI1NDEyLDcgKzI1NDc0LDIzIEBACiAJCQkJQzIx
QkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQuaCAqLywKIAkJCQlDMjFCRjcxMzIxQ0Q4OUQyMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZVJl
ZmVyZW5jZS5oICovLAogCQkJCUMyMUJGNzA0MjFDRDg5QzYwMDIyNzk3OSAvKiBXSExTTFdoaWxl
TG9vcC5oICovLAotIAkJCQlDMjg4QzcyRDIxQzk5MURBMDAyREY1Q0EgLyogV0hMU0xUeXBlQXJn
dW1lbnQuY3BwICovLAorCQkJCUMyODhDNzJEMjFDOTkxREEwMDJERjVDQSAvKiBXSExTTFR5cGVB
cmd1bWVudC5jcHAgKi8sCisJCQkJMUMzMzI3NkMyMUNFREE0MjAwMERDOUYyIC8qIFdITFNMRW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsLmggKi8sCisJCQkJMUMzMzI3NzEyMUNGMEJFMTAwMERDOUYy
IC8qIFdITFNMTmFtZWRUeXBlLmggKi8sCisJCQkJMUMzMzI3NzIyMUNGMEQyRTAwMERDOUYyIC8q
IFdITFNMVW5uYW1lZFR5cGUuaCAqLywKKwkJCQlDMjEzOEExMzIxRERFQ0QzMDBGNTE2QkEgLyog
V0hMU0xCdWlsdEluU2VtYW50aWMuY3BwICovLAorCQkJCUMyMTM4QTE1MjFEREVDRTkwMEY1MTZC
QSAvKiBXSExTTFJlc291cmNlU2VtYW50aWMuY3BwICovLAorCQkJCUMyMTM4QTE2MjFEREVDRkIw
MEY1MTZCQSAvKiBXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAgKi8sCisJ
CQkJQzIxMzhBMTcyMURERUQwRDAwRjUxNkJBIC8qIFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmNw
cCAqLywKKwkJCQkxQ0I2OUIzMjIxREVENDBCMDA2RTg0NkEgLyogV0hMU0xSZXNvbHZhYmxlVHlw
ZS5oICovLAorCQkJCTFDQjY5QjM0MjFERUQ2M0EwMDZFODQ2QSAvKiBXSExTTEZsb2F0TGl0ZXJh
bFR5cGUuaCAqLywKKwkJCQkxQ0I2OUIzNTIxREVENjQ5MDA2RTg0NkEgLyogV0hMU0xJbnRlZ2Vy
TGl0ZXJhbFR5cGUuaCAqLywKKwkJCQkxQ0I2OUIzNjIxREVENjU3MDA2RTg0NkEgLyogV0hMU0xO
dWxsTGl0ZXJhbFR5cGUuaCAqLywKKwkJCQkxQ0I2OUIzNzIxREVENjZCMDA2RTg0NkEgLyogV0hM
U0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oICovLAorCQkJCTFDQjY5QjM4MjFERjAzRTEw
MDZFODQ2QSAvKiBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwICovLAorCQkJCTFDQjY5QjM5MjFE
RjAzRjMwMDZFODQ2QSAvKiBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8sCisJCQkJMUNC
NjlCM0EyMURGMDQwMzAwNkU4NDZBIC8qIFdITFNMTnVsbExpdGVyYWxUeXBlLmNwcCAqLywKKwkJ
CQkxQ0I2OUIzQjIxREYwNDFFMDA2RTg0NkEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZS5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IEFTVDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358378</attachid>
            <date>2019-01-04 14:59:57 -0800</date>
            <delta_ts>2019-01-04 20:04:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>382244</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXggMmQ1NjdmMDBlNzAuLmViMzkw
ZTQyZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaApAQCAtMzksOCArMzks
OCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVibGlj
IFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFR5
cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgQXJy
YXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAg
ICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJs
aWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYpID0g
ZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhh
ZGRyZXNzU3BhY2UoKSksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfVFlQRShBcnJheVJlZmVyZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBl
KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShBcnJheVJlZmVy
ZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAppbmRleCA0MGI1ZjhkZjZmZS4uYzQxNzcwNWYzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBBcnJh
eVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIEFycmF5VHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlLCB1
bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgQXJyYXlUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRz
KQogICAgIHsKQEAgLTUyLDIwICs1MiwxOCBAQCBwdWJsaWM6CiAgICAgQXJyYXlUeXBlKGNvbnN0
IEFycmF5VHlwZSYpID0gZGVsZXRlOwogICAgIEFycmF5VHlwZShBcnJheVR5cGUmJikgPSBkZWZh
dWx0OwogCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVs
ZW1lbnRzOyB9Ci0KLSAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsg
fQorICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1FbGVtZW50
czsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZT4oTGV4ZXI6
OlRva2VuKG1fb3JpZ2luKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7
CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZT4oTGV4ZXI6OlRva2Vu
KG9yaWdpbigpKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZT4gbV9lbGVtZW50VHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5
cGU+IG1fZWxlbWVudFR5cGU7CiAgICAgdW5zaWduZWQgbV9udW1FbGVtZW50czsKIH07CiAKQEAg
LTc1LDYgKzczLDYgQEAgcHJpdmF0ZToKIAogfQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dI
TFNMX1RZUEUoQXJyYXlUeXBlLCBpc0FycmF5VHlwZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19XSExTTF9VTk5BTUVEX1RZUEUoQXJyYXlUeXBlLCBpc0FycmF5VHlwZSgpKQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEJhc2VTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQmFzZVNlbWFudGljLmgKaW5kZXggNjU3MzM3MmYxMzcuLmM2YTJkMzlhMGMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNl
U2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCYXNlU2VtYW50aWMuaApAQCAtMzQsOCArMzQsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBuYW1lc3BhY2UgV0hMU0wgewogCitjbGFzcyBJbnRyaW5zaWNzOworCiBuYW1lc3BhY2Ug
QVNUIHsKIAorY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworY2xhc3MgVW5uYW1lZFR5cGU7CisK
IGNsYXNzIEJhc2VTZW1hbnRpYyA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKICAgICBCYXNlU2Vt
YW50aWMoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQpAQCAtNDgsNiArNTMsMTQgQEAgcHVibGljOgog
ICAgIEJhc2VTZW1hbnRpYyhjb25zdCBCYXNlU2VtYW50aWMmKSA9IGRlbGV0ZTsKICAgICBCYXNl
U2VtYW50aWMoQmFzZVNlbWFudGljJiYpID0gZGVmYXVsdDsKIAorICAgIHZpcnR1YWwgYm9vbCBp
c0FjY2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNz
JikgY29uc3QgPSAwOworCisgICAgZW51bSBjbGFzcyBTaGFkZXJJdGVtRGlyZWN0aW9uIHsKKyAg
ICAgICAgSW5wdXQsCisgICAgICAgIE91dHB1dAorICAgIH07CisgICAgdmlydHVhbCBib29sIGlz
QWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29u
c3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3QgPSAwOworCiBwcml2YXRlOgogICAgIExleGVy
OjpUb2tlbiBtX29yaWdpbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCb29sZWFuTGl0ZXJhbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaAppbmRleCAyMDBm
MzY0OTMyYi4uMTEwZDY1NWM0OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEJvb2xlYW5MaXRlcmFsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaApAQCAtNDYs
MTMgKzQ2LDIxIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkJvb2xlYW5MaXRlcmFsKCkgPSBk
ZWZhdWx0OwogCi0gICAgZXhwbGljaXQgQm9vbGVhbkxpdGVyYWwoY29uc3QgQm9vbGVhbkxpdGVy
YWwmKSA9IGRlZmF1bHQ7CisgICAgQm9vbGVhbkxpdGVyYWwoY29uc3QgQm9vbGVhbkxpdGVyYWwm
KSA9IGRlbGV0ZTsKICAgICBCb29sZWFuTGl0ZXJhbChCb29sZWFuTGl0ZXJhbCYmKSA9IGRlZmF1
bHQ7CiAKKyAgICBCb29sZWFuTGl0ZXJhbCYgb3BlcmF0b3I9KGNvbnN0IEJvb2xlYW5MaXRlcmFs
JikgPSBkZWxldGU7CisgICAgQm9vbGVhbkxpdGVyYWwmIG9wZXJhdG9yPShCb29sZWFuTGl0ZXJh
bCYmKSA9IGRlZmF1bHQ7CisKICAgICBib29sIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQogCiAgICAgYm9vbCBpc0Jvb2xlYW5MaXRlcmFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCisgICAgQm9vbGVhbkxpdGVyYWwgY2xvbmUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEJvb2xlYW5MaXRlcmFsKExleGVyOjpUb2tlbihvcmlnaW4oKSksIG1fdmFs
dWUpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBib29sIG1fdmFsdWU7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNl
bWFudGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEJ1aWx0SW5TZW1hbnRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjIxMjUzMjZmYjJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcApAQCAtMCwwICsxLDE0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKKworI2luY2x1ZGUgIldITFNM
RnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5j
bHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNl
IEFTVCB7CisKK2Jvb2wgQnVpbHRJblNlbWFudGljOjppc0FjY2VwdGFibGVUeXBlKGNvbnN0IEFT
VDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNz
KSBjb25zdAoreworICAgIHN3aXRjaCAobV92YXJpYWJsZSkgeworICAgIGNhc2UgVmFyaWFibGU6
OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJp
bnNpY3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZWZXJ0ZXhJRDoKKyAgICAg
ICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWludFR5cGUoKSk7Cisg
ICAgY2FzZSBWYXJpYWJsZTo6UFNpemU6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRU
eXBlLCBpbnRyaW5zaWNzLmZsb2F0VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVlBvc2l0
aW9uOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9h
dDRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAgICAgIHJl
dHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOworICAgIGNh
c2UgVmFyaWFibGU6OlNWU2FtcGxlSW5kZXg6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFt
ZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWSW5u
ZXJDb3ZlcmFnZToKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNp
Y3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAgICAgIHJl
dHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0NFR5cGUoKSk7CisgICAg
Y2FzZSBWYXJpYWJsZTo6U1ZEZXB0aDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5
cGUsIGludHJpbnNpY3MuZmxvYXRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWQ292ZXJh
Z2U6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRU
eXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoKKyAgICAgICAg
cmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQzVHlwZSgpKTsKKyAg
ICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwSUQ6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFt
ZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZH
cm91cEluZGV4OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2lj
cy51aW50VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwVGhyZWFkSUQ6CisgICAg
ICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7
CisgICAgfQorfQorCitib29sIEJ1aWx0SW5TZW1hbnRpYzo6aXNBY2NlcHRhYmxlRm9yU2hhZGVy
SXRlbURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIGNvbnN0Cit7CisgICAgc3dpdGNoICgq
ZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9u
RGVjbGFyYXRpb246OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgIHN3aXRjaCAoZGly
ZWN0aW9uKSB7CisgICAgICAgIGNhc2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6
OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWVmVydGV4SUQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBTaGFk
ZXJJdGVtRGlyZWN0aW9uOjpPdXRwdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUp
IHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlBTaXplOgorICAgICAgICAgICAgY2FzZSBW
YXJpYWJsZTo6U1ZQb3NpdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50
VHlwZTo6RnJhZ21lbnQ6CisgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNh
c2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFy
aWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAg
ICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVlBvc2l0aW9uOgorICAgICAgICAgICAgY2FzZSBWYXJp
YWJsZTo6U1ZTYW1wbGVJbmRleDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSW5uZXJD
b3ZlcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICBjYXNlIFNoYWRlckl0ZW1EaXJlY3Rpb246Ok91dHB1dDoKKyAgICAgICAgICAgIHN3aXRjaCAo
bV92YXJpYWJsZSkgeworICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAg
ICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkRlcHRoOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZDb3ZlcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6
Q29tcHV0ZToKKyAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBTaGFk
ZXJJdGVtRGlyZWN0aW9uOjpJbnB1dDoKKyAgICAgICAgICAgIHN3aXRjaCAobV92YXJpYWJsZSkg
eworICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZEaXNwYXRjaFRocmVhZElEOgorICAgICAg
ICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cElEOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZHcm91cEluZGV4OgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cFRocmVh
ZElEOgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIGNh
c2UgU2hhZGVySXRlbURpcmVjdGlvbjo6T3V0cHV0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorfQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5T
ZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QnVpbHRJblNlbWFudGljLmgKaW5kZXggNzA0NmRmMzJjZmEuLjhlNzA0MzAwMTU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdElu
U2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCdWlsdEluU2VtYW50aWMuaApAQCAtNzAsNiArNzAsMTkgQEAgcHVibGljOgogCiAgICAg
VmFyaWFibGUgdmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlOyB9CiAKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQnVpbHRJblNlbWFudGljJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IG90aGVyLm1fdmFyaWFibGUgJiYgbV90YXJn
ZXRJbmRleCA9PSBvdGhlci5tX3RhcmdldEluZGV4OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBCdWlsdEluU2VtYW50aWMmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJvb2wgaXNBY2NlcHRhYmxl
VHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgSW50cmluc2ljcyYpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFk
ZXJJdGVtRGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSBjb25zdCBvdmVycmlk
ZTsKKwogcHJpdmF0ZToKICAgICBWYXJpYWJsZSBtX3ZhcmlhYmxlOwogICAgIE9wdGlvbmFsPHVu
c2lnbmVkPiBtX3RhcmdldEluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKaW5kZXggNjRh
ZjcxMzI5OWMuLjhiMmJkYWY0YmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKQEAgLTI4
LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAi
V0hMU0xMZXhlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01NCw5ICs1NSwzMSBAQCBw
dWJsaWM6CiAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+PiYgYXJndW1l
bnRzKCkgeyByZXR1cm4gbV9hcmd1bWVudHM7IH0KIAorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0
dXJuIG1fbmFtZTsgfQorCisgICAgdm9pZCBzZXRDYXN0RGF0YSgpCisgICAgeworICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICB9CisKKyAgICBib29sIGhhc092ZXJsb2Fkcygp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fb3ZlcmxvYWRzKTsgfQorICAgIHZv
aWQgc2V0T3ZlcmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0
aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRzKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KCFo
YXNPdmVybG9hZHMoKSk7CisgICAgICAgIG1fb3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAgIH0K
KworICAgIHZvaWQgc2V0RnVuY3Rpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNs
YXJhdGlvbikKKyAgICB7CisgICAgICAgIGFzc2VydCghbV9mdW5jdGlvbik7CisgICAgICAgIG1f
ZnVuY3Rpb24gPSAmZnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
U3RyaW5nIG1fbmFtZTsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+PiBt
X2FyZ3VtZW50czsKKyAgICBPcHRpb25hbDxWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4+IG1fb3ZlcmxvYWRzOworICAgIEZ1bmN0aW9uRGVjbGFy
YXRpb24qIG1fZnVuY3Rpb24geyBudWxscHRyIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Np
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0
YW50RXhwcmVzc2lvbi5oCmluZGV4IGEzOGIwZDViM2ExLi43MGNhMTI4ZDU1ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRF
eHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgKQEAgLTc2LDExICs3Niw5MiBAQCBwdWJsaWM6CiAg
ICAgewogICAgIH0KIAorICAgIENvbnN0YW50RXhwcmVzc2lvbihjb25zdCBDb25zdGFudEV4cHJl
c3Npb24mKSA9IGRlbGV0ZTsKKyAgICBDb25zdGFudEV4cHJlc3Npb24oQ29uc3RhbnRFeHByZXNz
aW9uJiYpID0gZGVmYXVsdDsKKworICAgIENvbnN0YW50RXhwcmVzc2lvbiYgb3BlcmF0b3I9KGNv
bnN0IENvbnN0YW50RXhwcmVzc2lvbiYpID0gZGVsZXRlOworICAgIENvbnN0YW50RXhwcmVzc2lv
biYgb3BlcmF0b3I9KENvbnN0YW50RXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CisKKyAgICBJbnRl
Z2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8SW50ZWdlckxpdGVyYWw+KG1fdmFyaWFudCkpOworICAgICAgICBy
ZXR1cm4gV1RGOjpnZXQ8SW50ZWdlckxpdGVyYWw+KG1fdmFyaWFudCk7CisgICAgfQorCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCB2aXNpdChUJiYgdCkKICAgICB7CiAgICAgICAgIFdU
Rjo6dmlzaXQoV1RGTW92ZSh0KSwgbV92YXJpYW50KTsKICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiB2b2lkIHZpc2l0KFQmJiB0KSBjb25zdAorICAgIHsKKyAgICAgICAgV1RGOjp2
aXNpdChXVEZNb3ZlKHQpLCBtX3ZhcmlhbnQpOworICAgIH0KKworICAgIENvbnN0YW50RXhwcmVz
c2lvbiBjbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShjb25zdCBJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIC0+
IENvbnN0YW50RXhwcmVzc2lvbiB7CisgICAgICAgICAgICByZXR1cm4gaW50ZWdlckxpdGVyYWwu
Y2xvbmUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVu
c2lnbmVkSW50ZWdlckxpdGVyYWwpIC0+IENvbnN0YW50RXhwcmVzc2lvbiB7CisgICAgICAgICAg
ICByZXR1cm4gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jbG9uZSgpOworICAgICAgICB9LCBbJl0o
Y29uc3QgRmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIC0+IENvbnN0YW50RXhwcmVzc2lvbiB7
CisgICAgICAgICAgICByZXR1cm4gZmxvYXRMaXRlcmFsLmNsb25lKCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIC0+IENvbnN0YW50RXhwcmVzc2lvbiB7
CisgICAgICAgICAgICByZXR1cm4gbnVsbExpdGVyYWwuY2xvbmUoKTsKKyAgICAgICAgfSwgWyZd
KGNvbnN0IEJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNz
aW9uIHsKKyAgICAgICAgICAgIHJldHVybiBib29sZWFuTGl0ZXJhbC5jbG9uZSgpOworICAgICAg
ICB9LCBbJl0oY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSAtPiBDb25z
dGFudEV4cHJlc3Npb24geworICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50RXhwcmVzc2lvbkVu
dW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmNsb25lKCk7CisgICAgICAgIH0pLCBtX3ZhcmlhbnQp
OworICAgIH0KKworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBDb25zdGFudEV4cHJlc3Npb24mIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgT3B0aW9uYWw8Ym9vbD4gcmVzdWx0OworICAgICAg
ICBkb3VibGUgdmFsdWU7CisgICAgICAgIHZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0
IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgdmFsdWUgPSBp
bnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgVW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgdmFsdWUg
PSB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0sIFsmXShjb25zdCBG
bG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgeworICAgICAgICAgICAgdmFsdWUgPSBmbG9hdExp
dGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IE51bGxMaXRlcmFsJikgeworICAg
ICAgICAgICAgcmVzdWx0ID0gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxOdWxsTGl0ZXJhbD4ob3Ro
ZXIubV92YXJpYW50KTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEJvb2xlYW5MaXRlcmFsJiBib29s
ZWFuTGl0ZXJhbCkgeworICAgICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Qm9v
bGVhbkxpdGVyYWw+KG90aGVyLm1fdmFyaWFudCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBh
dXRvJiBvdGhlckJvb2xlYW5MaXRlcmFsID0gV1RGOjpnZXQ8Qm9vbGVhbkxpdGVyYWw+KG90aGVy
Lm1fdmFyaWFudCk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gYm9vbGVhbkxpdGVyYWwudmFs
dWUoKSA9PSBvdGhlckJvb2xlYW5MaXRlcmFsLnZhbHVlKCk7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IENv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkgeworICAgICAgICAgICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2U+KG90aGVyLm1fdmFyaWFudCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBv
dGhlck1lbWJlclJlZmVyZW5jZSA9IFdURjo6Z2V0PENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0
aW9uTWVtYmVyUmVmZXJlbmNlPihvdGhlci5tX3ZhcmlhbnQpOworICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmVudW1l
cmF0aW9uTWVtYmVyKCkgPT0gb3RoZXJNZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIo
KTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwor
ICAgICAgICB9KSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAq
cmVzdWx0OworCisgICAgICAgIG90aGVyLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0
IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0g
dmFsdWUgPT0gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFVu
c2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHZhbHVlID09IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAg
ICAgICAgfSwgWyZdKGNvbnN0IEZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAg
ICAgICByZXN1bHQgPSB2YWx1ZSA9PSBmbG9hdExpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwg
WyZdKGNvbnN0IE51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Cisg
ICAgICAgIH0sIFsmXShjb25zdCBCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IGZhbHNlOworICAgICAgICB9LCBbJl0oY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7CisgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAg
ICAgICAgfSkpOworCisgICAgICAgIEFTU0VSVChyZXN1bHQpOworICAgICAgICByZXR1cm4gKnJl
c3VsdDsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgVmFyaWFudDwKICAgICAgICAgSW50ZWdlckxp
dGVyYWwsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuaAppbmRleCAyYzI0YTk4YjJjYS4uNmM1
M2MxNDdmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuaApAQCAtMzYsMTAgKzM2LDEz
IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSA6IHB1YmxpYyBOb2RlIHsKK2Ns
YXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIEVudW1lcmF0aW9uTWVtYmVyOworCitj
bGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSA6IHB1Ymxp
YyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKICAgICBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGxlZnQsIFN0
cmluZyYmIHJpZ2h0KQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICAg
ICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2xlZnQoV1RGTW92
ZShsZWZ0KSkKICAgICAgICAgLCBtX3JpZ2h0KFdURk1vdmUocmlnaHQpKQogICAgIHsKQEAgLTUw
LDEwICs1Myw1MCBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UmKSA9IGRlZmF1bHQ7CiAgICAgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UmJikgPSBkZWZhdWx0OwogCisgICAgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpID0gZGVsZXRlOworICAgIENvbnN0YW50RXhwcmVz
c2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBvcGVyYXRvcj0oQ29uc3RhbnRFeHByZXNz
aW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmJikgPSBkZWZhdWx0OworCisgICAgY29uc3Qg
U3RyaW5nJiBsZWZ0KCkgY29uc3QgeyByZXR1cm4gbV9sZWZ0OyB9CisgICAgY29uc3QgU3RyaW5n
JiByaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHQ7IH0KKworICAgIENvbnN0YW50RXhwcmVz
c2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlIGNsb25lKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UoTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgU3RyaW5nKG1fbGVmdCksIFN0cmluZyhtX3Jp
Z2h0KSk7CisgICAgICAgIHJlc3VsdC5tX2VudW1lcmF0aW9uTWVtYmVyID0gbV9lbnVtZXJhdGlv
bk1lbWJlcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbiogZW51bWVyYXRpb25EZWZpbml0aW9uKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbjsKKyAgICB9CisKKyAgICBBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbiogZW51bWVyYXRpb25EZWZpbml0aW9uKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbjsKKyAgICB9CisKKyAgICBBU1Q6
OkVudW1lcmF0aW9uTWVtYmVyKiBlbnVtZXJhdGlvbk1lbWJlcigpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9lbnVtZXJhdGlvbk1lbWJlcjsKKyAgICB9CisKKyAgICBBU1Q6OkVudW1lcmF0aW9u
TWVtYmVyKiBlbnVtZXJhdGlvbk1lbWJlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9lbnVtZXJhdGlvbk1lbWJlcjsKKyAgICB9CisKKyAgICB2b2lkIHNldEVudW1lcmF0aW9uTWVt
YmVyKEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24sIEFT
VDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQorICAgIHsKKyAgICAgICAg
bV9lbnVtZXJhdGlvbkRlZmluaXRpb24gPSAmZW51bWVyYXRpb25EZWZpbml0aW9uOworICAgICAg
ICBtX2VudW1lcmF0aW9uTWVtYmVyID0gJmVudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKwogcHJp
dmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3RyaW5nIG1fbGVmdDsKICAg
ICBTdHJpbmcgbV9yaWdodDsKKyAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiogbV9lbnVt
ZXJhdGlvbkRlZmluaXRpb24geyBudWxscHRyIH07CisgICAgQVNUOjpFbnVtZXJhdGlvbk1lbWJl
ciogbV9lbnVtZXJhdGlvbk1lbWJlciB7IG51bGxwdHIgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Np
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4
cHJlc3Npb24uaAppbmRleCBjNDNjNjllZTU0MS4uZWJmNzIzMjZjZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb3RF
eHByZXNzaW9uLmgKQEAgLTQ5LDYgKzQ5LDI1IEBAIHB1YmxpYzoKICAgICBEb3RFeHByZXNzaW9u
KGNvbnN0IERvdEV4cHJlc3Npb24mKSA9IGRlbGV0ZTsKICAgICBEb3RFeHByZXNzaW9uKERvdEV4
cHJlc3Npb24mJikgPSBkZWZhdWx0OwogCisgICAgYm9vbCBpc0RvdEV4cHJlc3Npb24oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBTdHJpbmcgZ2V0RnVuY3Rpb25OYW1l
KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgi
b3BlcmF0b3IuJXMiLCBtX2ZpZWxkTmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBT
dHJpbmcgc2V0RnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJl
dHVybiBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3IuJXM9IiwgbV9maWVsZE5hbWUudXRmOCgpLmRh
dGEoKSk7CisgICAgfQorCisgICAgU3RyaW5nIGFuZEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIm9wZXJhdG9yJi4lcyIs
IG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIFN0cmluZyYgZmllbGRO
YW1lKCkgeyByZXR1cm4gbV9maWVsZE5hbWU7IH0KKwogcHJpdmF0ZToKICAgICBTdHJpbmcgbV9m
aWVsZE5hbWU7CiB9OwpAQCAtNTksNCArNzgsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfV0hMU0xfRVhQUkVTU0lPTihEb3RFeHByZXNzaW9uLCBpc0RvdEV4cHJl
c3Npb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5o
CmluZGV4IDc5NzBiNTllNTRhLi4yNGE4ZDU5ZGIzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVy
YXRpb25EZWZpbml0aW9uLmgKQEAgLTI5LDggKzI5LDExIEBACiAKICNpbmNsdWRlICJXSExTTEVu
dW1lcmF0aW9uTWVtYmVyLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1ZGUgIldI
TFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xV
bm5hbWVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksMTMgKzQyLDEx
IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBFbnVtZXJh
dGlvbkRlZmluaXRpb24gOiBwdWJsaWMgTm9kZSB7CitjbGFzcyBFbnVtZXJhdGlvbkRlZmluaXRp
b24gOiBwdWJsaWMgTmFtZWRUeXBlIHsKIHB1YmxpYzoKLSAgICBFbnVtZXJhdGlvbkRlZmluaXRp
b24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8
VHlwZT4mJiB0eXBlLCBFbnVtZXJhdGlvbk1lbWJlcnMmJiBtZW1iZXJzKQotICAgICAgICA6IG1f
b3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkK
KyAgICBFbnVtZXJhdGlvbkRlZmluaXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcm
JiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+JiYgdHlwZSkKKyAgICAgICAgOiBO
YW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKG5hbWUpKQogICAgICAgICAsIG1fdHlw
ZShXVEZNb3ZlKHR5cGUpKQotICAgICAgICAsIG1fbWVtYmVycyhXVEZNb3ZlKG1lbWJlcnMpKQog
ICAgIHsKICAgICB9CiAKQEAgLTU0LDE0ICs1NSwzNSBAQCBwdWJsaWM6CiAgICAgRW51bWVyYXRp
b25EZWZpbml0aW9uKGNvbnN0IEVudW1lcmF0aW9uRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAg
IEVudW1lcmF0aW9uRGVmaW5pdGlvbihFbnVtZXJhdGlvbkRlZmluaXRpb24mJikgPSBkZWZhdWx0
OwogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KLSAgICBFbnVtZXJhdGlv
bk1lbWJlcnMmIGVudW1lcmF0aW9uTWVtYmVycygpIHsgcmV0dXJuIG1fbWVtYmVyczsgfQorICAg
IGJvb2wgaXNFbnVtZXJhdGlvbkRlZmluaXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CisKKyAgICBVbm5hbWVkVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KKwor
ICAgIGJvb2wgYWRkKEVudW1lcmF0aW9uTWVtYmVyJiYgbWVtYmVyKQorICAgIHsKKyAgICAgICAg
YXV0byByZXN1bHQgPSBtX21lbWJlcnMuYWRkKG1lbWJlci5uYW1lKCksIHN0ZDo6bWFrZV91bmlx
dWU8RW51bWVyYXRpb25NZW1iZXI+KFdURk1vdmUobWVtYmVyKSkpOworICAgICAgICByZXR1cm4g
IXJlc3VsdC5pc05ld0VudHJ5OworICAgIH0KKworICAgIEVudW1lcmF0aW9uTWVtYmVyKiBtZW1i
ZXJCeU5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQorICAgIHsKKyAgICAgICAgYXV0byBpdGVyYXRv
ciA9IG1fbWVtYmVycy5maW5kKG5hbWUpOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbV9tZW1i
ZXJzLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBp
dGVyYXRvci0+dmFsdWUuZ2V0KCk7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8RW51bWVyYXRpb25NZW1iZXI+PiBlbnVtZXJhdGlvbk1lbWJlcnMoKQorICAgIHsK
KyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RW51bWVyYXRpb25NZW1iZXI+
PiByZXN1bHQ7CisgICAgICAgIGZvciAoYXV0byYgcGFpciA6IG1fbWVtYmVycykKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoKnBhaXIudmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgU3RyaW5n
IG1fbmFtZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gbV90eXBlOwotICAgIEVudW1lcmF0
aW9uTWVtYmVycyBtX21lbWJlcnM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBt
X3R5cGU7CisgICAgSGFzaE1hcDxTdHJpbmcsIHN0ZDo6dW5pcXVlX3B0cjxFbnVtZXJhdGlvbk1l
bWJlcj4+IG1fbWVtYmVyczsKIH07CiAKIH0KQEAgLTcwLDQgKzkyLDYgQEAgcHJpdmF0ZToKIAog
fQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoRW51bWVyYXRpb25E
ZWZpbml0aW9uLCBpc0VudW1lcmF0aW9uRGVmaW5pdGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0
aW9uTWVtYmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xFbnVtZXJhdGlvbk1lbWJlci5oCmluZGV4IDlkOWQ4NTQ4ODNlLi5kZWZmMTRiNTg1MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51
bWVyYXRpb25NZW1iZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCkBAIC01NCwxNSArNTQsMjMgQEAgcHVibGlj
OgogICAgIEVudW1lcmF0aW9uTWVtYmVyKGNvbnN0IEVudW1lcmF0aW9uTWVtYmVyJikgPSBkZWxl
dGU7CiAgICAgRW51bWVyYXRpb25NZW1iZXIoRW51bWVyYXRpb25NZW1iZXImJikgPSBkZWZhdWx0
OwogCisgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29y
aWdpbjsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIE9wdGlv
bmFsPENvbnN0YW50RXhwcmVzc2lvbj4mIHZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZTsgfQogCisg
ICAgdm9pZCBzZXRWYWx1ZShDb25zdGFudEV4cHJlc3Npb24mJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghbV92YWx1ZSk7CisgICAgICAgIG1fdmFsdWUgPSBXVEZNb3ZlKHZhbHVlKTsK
KyAgICB9CisKIHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIFN0cmlu
ZyBtX25hbWU7CiAgICAgT3B0aW9uYWw8Q29uc3RhbnRFeHByZXNzaW9uPiBtX3ZhbHVlOwogfTsK
IAotdHlwZWRlZiBWZWN0b3I8RW51bWVyYXRpb25NZW1iZXI+IEVudW1lcmF0aW9uTWVtYmVyczsK
K3VzaW5nIEVudW1lcmF0aW9uTWVtYmVycyA9IFZlY3RvcjxFbnVtZXJhdGlvbk1lbWJlcj47CiAK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzRiYzIwZmU4ZWUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJh
dGlvbk1lbWJlci5oIgorI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsIDogcHVi
bGljIEV4cHJlc3Npb24geworcHVibGljOgorICAgIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChM
ZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJl
cikKKyAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgLCBtX2Vu
dW1lcmF0aW9uTWVtYmVyKGVudW1lcmF0aW9uTWVtYmVyKQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIH5FbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoKSA9IGRlZmF1bHQ7CisKKyAgICBFbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwoY29uc3QgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJikgPSBk
ZWxldGU7CisgICAgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKEVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzRW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgRW51bWVyYXRpb25NZW1i
ZXImIGVudW1lcmF0aW9uTWVtYmVyKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbk1lbWJlcjsgfQor
Citwcml2YXRlOgorICAgIEVudW1lcmF0aW9uTWVtYmVyJiBtX2VudW1lcmF0aW9uTWVtYmVyOwor
fTsKKworfQorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9FWFBSRVNT
SU9OKEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCwgaXNFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwo
KSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKaW5kZXggZTM2ODM4MzY0NmQuLmZlYjZjYTZi
MWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRXhwcmVzc2lvbi5oCkBAIC00OCwxNCArNDgsMTkgQEAgcHVibGljOgogICAg
IGV4cGxpY2l0IEV4cHJlc3Npb24oY29uc3QgRXhwcmVzc2lvbiYpID0gZGVmYXVsdDsKICAgICBF
eHByZXNzaW9uKEV4cHJlc3Npb24mJikgPSBkZWZhdWx0OwogCi0gICAgTGV4ZXI6OlRva2VuIG9y
aWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgRXhwcmVzc2lvbiYgb3BlcmF0
b3I9KGNvbnN0IEV4cHJlc3Npb24mKSA9IGRlZmF1bHQ7CisgICAgRXhwcmVzc2lvbiYgb3BlcmF0
b3I9KEV4cHJlc3Npb24mJikgPSBkZWZhdWx0OworCisgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBv
cmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQogCiAgICAgdmlydHVhbCBib29sIGlz
QXNzaWdubWVudEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1
YWwgYm9vbCBpc0Jvb2xlYW5MaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNDYWxsRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzQ29tbWFFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNEZXJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0RvdEV4cHJlc3Npb24oKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0Zsb2F0TGl0ZXJhbCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzSW5kZXhFeHByZXNzaW9uKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbnRlZ2VyTGl0ZXJh
bCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9naWNhbEV4
cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0xv
Z2ljYWxOb3RFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY3LDYgKzcy
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc1Rlcm5hcnlFeHByZXNzaW9uKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZEludGVnZXJM
aXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNWYXJp
YWJsZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29s
IGlzRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAog
cHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbC5o
CmluZGV4IGNiZjU0NjlkYmZhLi4yN2Q4OGJjMDUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsLmgK
QEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xF
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgiCiAjaW5jbHVk
ZSAiV0hMU0xMZXhlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwyMSArNDAsMzUg
QEAgbmFtZXNwYWNlIEFTVCB7CiBjbGFzcyBGbG9hdExpdGVyYWwgOiBwdWJsaWMgRXhwcmVzc2lv
biB7CiBwdWJsaWM6CiAgICAgRmxvYXRMaXRlcmFsKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgZmxv
YXQgdmFsdWUpCi0gICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAg
IDogRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4ob3JpZ2luKSkKKyAgICAgICAgLCBtX3R5cGUoV1RG
TW92ZShvcmlnaW4pLCB2YWx1ZSkKICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAg
ICB9CiAKICAgICB2aXJ0dWFsIH5GbG9hdExpdGVyYWwoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBs
aWNpdCBGbG9hdExpdGVyYWwoY29uc3QgRmxvYXRMaXRlcmFsJikgPSBkZWZhdWx0OworICAgIEZs
b2F0TGl0ZXJhbChjb25zdCBGbG9hdExpdGVyYWwmKSA9IGRlbGV0ZTsKICAgICBGbG9hdExpdGVy
YWwoRmxvYXRMaXRlcmFsJiYpID0gZGVmYXVsdDsKIAorICAgIEZsb2F0TGl0ZXJhbCYgb3BlcmF0
b3I9KGNvbnN0IEZsb2F0TGl0ZXJhbCYpID0gZGVsZXRlOworICAgIEZsb2F0TGl0ZXJhbCYgb3Bl
cmF0b3I9KEZsb2F0TGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBGbG9hdExpdGVyYWxUeXBl
JiB0eXBlKCkgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CiAKICAgICBib29sIGlzRmxvYXRMaXRlcmFsKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgRmxvYXRMaXRlcmFsIGNsb25lKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEZsb2F0TGl0ZXJhbCByZXN1bHQoTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwg
bV92YWx1ZSk7CisgICAgICAgIGlmIChyZXN1bHQubV90eXBlLnJlc29sdmVkVHlwZSgpKQorICAg
ICAgICAgICAgcmVzdWx0Lm1fdHlwZS5yZXNvbHZlKHJlc3VsdC5tX3R5cGUucmVzb2x2ZWRUeXBl
KCktPmNsb25lKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogcHJpdmF0ZToK
KyAgICBGbG9hdExpdGVyYWxUeXBlIG1fdHlwZTsKICAgICBmbG9hdCBtX3ZhbHVlOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RmxvYXRMaXRlcmFsVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uYzg3NTQ2YTFmMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcApA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCIKKworI2lu
Y2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitGbG9hdExpdGVyYWxUeXBlOjpG
bG9hdExpdGVyYWxUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgZmxvYXQgdmFsdWUpCisgICAg
OiBtX3ZhbHVlKHZhbHVlKQorICAgICwgbV9wcmVmZXJyZWRUeXBlKHN0ZDo6bWFrZV91bmlxdWU8
VHlwZVJlZmVyZW5jZT4oV1RGTW92ZShvcmlnaW4pLCBTdHJpbmcoImZsb2F0IiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFR5cGVBcmd1bWVudHMoKSkpCit7Cit9CisKK0Zsb2F0TGl0
ZXJhbFR5cGU6On5GbG9hdExpdGVyYWxUeXBlKCkgPSBkZWZhdWx0OworCitib29sIEZsb2F0TGl0
ZXJhbFR5cGU6OmNhblJlc29sdmUoY29uc3QgVHlwZSYgdHlwZSkgY29uc3QKK3sKKyAgICBpZiAo
IWlzPE5hbWVkVHlwZT4odHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBu
YW1lZFR5cGUgPSBkb3duY2FzdDxOYW1lZFR5cGU+KHR5cGUpOworICAgIGlmICghaXM8TmF0aXZl
VHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
YXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0
aW9uPihuYW1lZFR5cGUpOworICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzRmxvYXRp
bmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0
aW9uLmNhblJlcHJlc2VudEZsb2F0KCkobV92YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVy
YWxUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
bG9hdExpdGVyYWxUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjkxMzA3M2E2OGUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5oCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJXSExTTFJlc29sdmFibGVUeXBlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNw
YWNlIEFTVCB7CisKK2NsYXNzIFR5cGVSZWZlcmVuY2U7CisKK2NsYXNzIEZsb2F0TGl0ZXJhbFR5
cGUgOiBwdWJsaWMgUmVzb2x2YWJsZVR5cGUgeworcHVibGljOgorICAgIEZsb2F0TGl0ZXJhbFR5
cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBmbG9hdCB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIH5G
bG9hdExpdGVyYWxUeXBlKCk7CisKKyAgICBGbG9hdExpdGVyYWxUeXBlKGNvbnN0IEZsb2F0TGl0
ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBGbG9hdExpdGVyYWxUeXBlKEZsb2F0TGl0ZXJhbFR5
cGUmJikgPSBkZWZhdWx0OworCisgICAgRmxvYXRMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KGNvbnN0
IEZsb2F0TGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBGbG9hdExpdGVyYWxUeXBlJiBvcGVy
YXRvcj0oRmxvYXRMaXRlcmFsVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzRmxvYXRM
aXRlcmFsVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFR5cGVS
ZWZlcmVuY2UmIHByZWZlcnJlZFR5cGUoKSB7IHJldHVybiAqbV9wcmVmZXJyZWRUeXBlOyB9CisK
KyAgICBib29sIGNhblJlc29sdmUoY29uc3QgVHlwZSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIGZsb2F0IG1fdmFsdWU7CisgICAgLy8gVGhpcyBpcyBhIHVuaXF1ZV9wdHIgdG8g
cmVzb2x2ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbgorICAgIC8vIENvbnN0YW50RXhw
cmVzc2lvbiAtPiBMaXRlcmFsVHlwZSAtPiBUeXBlUmVmZXJlbmNlIC0+IFR5cGVBcmd1bWVudHMg
LT4gQ29uc3RhbnRFeHByZXNzaW9uCisgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVSZWZlcmVuY2U+
IG1fcHJlZmVycmVkVHlwZTsKK307CisKK30KKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfUkVTT0xWQUJMRV9UWVBFKEZsb2F0TGl0ZXJhbFR5cGUsIGlzRmxvYXRMaXRl
cmFsVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uQXR0cmlidXRlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oCmluZGV4
IGNiZDcyZDRhOTBjLi42YWI2NThlMGY2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkF0dHJpYnV0
ZS5oCkBAIC0zNyw4ICszNyw4IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1Qg
ewogCi10eXBlZGVmIFZhcmlhbnQ8TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlPiBGdW5jdGlv
bkF0dHJpYnV0ZTsKLXR5cGVkZWYgVmVjdG9yPEZ1bmN0aW9uQXR0cmlidXRlPiBBdHRyaWJ1dGVC
bG9jazsKK3VzaW5nIEZ1bmN0aW9uQXR0cmlidXRlID0gVmFyaWFudDxOdW1UaHJlYWRzRnVuY3Rp
b25BdHRyaWJ1dGU+OwordXNpbmcgQXR0cmlidXRlQmxvY2sgPSBWZWN0b3I8RnVuY3Rpb25BdHRy
aWJ1dGU+OwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaAppbmRleCA3
YTdlMGEwNjU2Yy4uNjc2NDhmNDkzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0
aW9uLmgKQEAgLTMwLDkgKzMwLDkgQEAKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uQXR0cmlidXRl
LmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMTm9kZS5oIgotI2lu
Y2x1ZGUgIldITFNMUGFyYW1ldGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgotI2lu
Y2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKKyNpbmNs
dWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYsMTAgKzQ2LDExIEBAIHB1Ymxp
YzoKICAgICBlbnVtIGNsYXNzIEVudHJ5UG9pbnRUeXBlIHsKICAgICAgICAgVmVydGV4LAogICAg
ICAgICBGcmFnbWVudCwKLSAgICAgICAgQ29tcHV0ZQorICAgICAgICBDb21wdXRlLAorICAgICAg
ICAvLyBGSVhNRTogQWRkIGFuIGVudHJ5IHBvaW50IHR5cGUgZm9yIHRlc3RpbmcKICAgICB9Owog
Ci0gICAgRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0
ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBv
aW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1l
LCBQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1h
bnRpYykKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQXR0
cmlidXRlQmxvY2smJiBhdHRyaWJ1dGVCbG9jaywgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IGVu
dHJ5UG9pbnRUeXBlLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiB0eXBlLCBT
dHJpbmcmJiBuYW1lLCBWYXJpYWJsZURlY2xhcmF0aW9ucyYmIHBhcmFtZXRlcnMsIE9wdGlvbmFs
PEFTVDo6U2VtYW50aWM+JiYgc2VtYW50aWMsIGJvb2wgaXNPcGVyYXRvcikKICAgICAgICAgOiBt
X29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9hdHRyaWJ1dGVCbG9jayhXVEZN
b3ZlKGF0dHJpYnV0ZUJsb2NrKSkKICAgICAgICAgLCBtX2VudHJ5UG9pbnRUeXBlKGVudHJ5UG9p
bnRUeXBlKQpAQCAtNTcsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9uYW1lKFdURk1v
dmUobmFtZSkpCiAgICAgICAgICwgbV9wYXJhbWV0ZXJzKFdURk1vdmUocGFyYW1ldGVycykpCiAg
ICAgICAgICwgbV9zZW1hbnRpYyhXVEZNb3ZlKHNlbWFudGljKSkKKyAgICAgICAgLCBtX2lzT3Bl
cmF0b3IoV1RGTW92ZShpc09wZXJhdG9yKSkKICAgICB7CiAgICAgfQogCkBAIC02NSwyNyArNjcs
MjggQEAgcHVibGljOgogICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oY29uc3QgRnVuY3Rpb25EZWNs
YXJhdGlvbiYpID0gZGVsZXRlOwogICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNs
YXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbkRlZmlu
aXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgQXR0
cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJsb2NrKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVCbG9jazsg
fQotICAgIEFTVDo6VHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KLSAgICBQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgY29uc3QgT3B0
aW9uYWw8RW50cnlQb2ludFR5cGU+JiBlbnRyeVBvaW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZW50cnlQb2ludFR5cGU7IH0KKyAgICBBU1Q6OlVubmFtZWRUeXBlJiB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gKm1fdHlwZTsgfQorICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbmFtZTsgfQorICAgIGJvb2wgaXNDYXN0KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lID09ICJv
cGVyYXRvciBjYXN0IjsgfQorICAgIGNvbnN0IFZhcmlhYmxlRGVjbGFyYXRpb25zJiBwYXJhbWV0
ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgVmFyaWFibGVEZWNsYXJh
dGlvbnMmIHBhcmFtZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KICAgICBPcHRpb25h
bDxBU1Q6OlNlbWFudGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9Ci0KLSAg
ICBMZXhlcjo6VG9rZW4mJiB0YWtlT3JpZ2luKCkgeyByZXR1cm4gV1RGTW92ZShtX29yaWdpbik7
IH0KLSAgICBBdHRyaWJ1dGVCbG9jayYmIHRha2VBdHRyaWJ1dGVCbG9jaygpIHsgcmV0dXJuIFdU
Rk1vdmUobV9hdHRyaWJ1dGVCbG9jayk7IH0KLSAgICBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4m
JiB0YWtlRW50cnlQb2ludFR5cGUoKSB7IHJldHVybiBXVEZNb3ZlKG1fZW50cnlQb2ludFR5cGUp
OyB9Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0YWtlVHlwZSgpIHsgcmV0dXJu
IFdURk1vdmUobV90eXBlKTsgfQotICAgIFN0cmluZyYmIHRha2VOYW1lKCkgeyByZXR1cm4gV1RG
TW92ZShtX25hbWUpOyB9Ci0gICAgUGFyYW1ldGVycyYmIHRha2VQYXJhbWV0ZXJzKCkgeyByZXR1
cm4gV1RGTW92ZShtX3BhcmFtZXRlcnMpOyB9Ci0gICAgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4m
JiB0YWtlU2VtYW50aWMoKSB7IHJldHVybiBXVEZNb3ZlKG1fc2VtYW50aWMpOyB9CisgICAgYm9v
bCBpc09wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc09wZXJhdG9yOyB9CiAKIHByaXZhdGU6
CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIEF0dHJpYnV0ZUJsb2NrIG1fYXR0cmli
dXRlQmxvY2s7CiAgICAgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IG1fZW50cnlQb2ludFR5cGU7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gbV90eXBlOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxVbm5hbWVkVHlwZT4gbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgUGFyYW1l
dGVycyBtX3BhcmFtZXRlcnM7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbnMgbV9wYXJhbWV0ZXJz
OwogICAgIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+IG1fc2VtYW50aWM7CisgICAgYm9vbCBtX2lz
T3BlcmF0b3I7CiB9OwogCiB9CkBAIC05NCw0ICs5Nyw5IEBAIHByaXZhdGU6CiAKIH0KIAorI2Rl
ZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OKFRv
VmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdlYkNvcmU6OldITFNMOjpBU1Q6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpXSExTTDo6QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiB0
eXBlKSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaAppbmRleCBh
NDkwN2IwZDI5OC4uYjZiN2JhMDc3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlv
bi5oCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICBGdW5jdGlvbkRlZmluaXRpb24oY29u
c3QgRnVuY3Rpb25EZWZpbml0aW9uJikgPSBkZWxldGU7CiAgICAgRnVuY3Rpb25EZWZpbml0aW9u
KEZ1bmN0aW9uRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRnVuY3Rpb25E
ZWZpbml0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCiAgICAgQmxvY2sm
IGJsb2NrKCkgeyByZXR1cm4gbV9ibG9jazsgfQogICAgIGJvb2wgcmVzdHJpY3RlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzdHJpY3RlZDsgfQogCkBAIC02NCw0ICs2Niw2IEBAIHByaXZhdGU6CiAK
IH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9GVU5DVElPTl9ERUNMQVJBVElPTihG
dW5jdGlvbkRlZmluaXRpb24sIGlzRnVuY3Rpb25EZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5k
ZXhFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xJbmRleEV4cHJlc3Npb24uaAppbmRleCA2YmI2YTBmMGRhYi4uNDNlNjBhMTA0OTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTElu
ZGV4RXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCkBAIC00OSw2ICs0OSwyNSBAQCBwdWJsaWM6CiAg
ICAgSW5kZXhFeHByZXNzaW9uKGNvbnN0IEluZGV4RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAg
IEluZGV4RXhwcmVzc2lvbihJbmRleEV4cHJlc3Npb24mJikgPSBkZWZhdWx0OwogCisgICAgYm9v
bCBpc0luZGV4RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygib3BlcmF0b3JbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpOworICAgIH0KKworICAgIFN0cmluZyBzZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZygib3BlcmF0b3ImW10iLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICB9CisKKyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1l
KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcoIm9wZXJhdG9y
W109IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgfQorCisgICAgRXhwcmVz
c2lvbiYgaW5kZXhFeHByZXNzaW9uKCkgeyByZXR1cm4gKm1faW5kZXg7IH0KKwogcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9pbmRleDsKIH07CkBAIC01OSw0ICs3
OCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9FWFBS
RVNTSU9OKEluZGV4RXhwcmVzc2lvbiwgaXNJbmRleEV4cHJlc3Npb24oKSkKKwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJ
bnRlZ2VyTGl0ZXJhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmI5MTFkM2Y3ZjJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuY3BwCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWwuaCIKKworI2luY2x1ZGUgIldI
TFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNw
YWNlIEFTVCB7CisKK2ludDY0X3QgSW50ZWdlckxpdGVyYWw6OnZhbHVlRm9yU2VsZWN0ZWRUeXBl
KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV90eXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRv
JiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4oKm1fdHlwZS5yZXNvbHZl
ZFR5cGUoKSk7CisgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAg
IGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgIHJldHVybiBuYXRpdmVU
eXBlRGVjbGFyYXRpb24uZm9ybWF0VmFsdWVGcm9tSW50ZWdlcigpKG1fdmFsdWUpOworfQorCit9
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCmluZGV4IDY4NTRk
ZDI3ZjBjLi5jYjEyZDVkN2Q3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lv
bi5oIgorI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWxUeXBlLmgiCiAjaW5jbHVkZSAiV0hM
U0xMZXhlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwyMSArNDAsMzcgQEAgbmFt
ZXNwYWNlIEFTVCB7CiBjbGFzcyBJbnRlZ2VyTGl0ZXJhbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsK
IHB1YmxpYzoKICAgICBJbnRlZ2VyTGl0ZXJhbChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIGludCB2
YWx1ZSkKLSAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgOiBF
eHByZXNzaW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQorICAgICAgICAsIG1fdHlwZShXVEZNb3Zl
KG9yaWdpbiksIHZhbHVlKQogICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgewogICAgIH0K
IAogICAgIHZpcnR1YWwgfkludGVnZXJMaXRlcmFsKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGlj
aXQgSW50ZWdlckxpdGVyYWwoY29uc3QgSW50ZWdlckxpdGVyYWwmKSA9IGRlZmF1bHQ7CisgICAg
SW50ZWdlckxpdGVyYWwoY29uc3QgSW50ZWdlckxpdGVyYWwmKSA9IGRlbGV0ZTsKICAgICBJbnRl
Z2VyTGl0ZXJhbChJbnRlZ2VyTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CiAKKyAgICBJbnRlZ2VyTGl0
ZXJhbCYgb3BlcmF0b3I9KGNvbnN0IEludGVnZXJMaXRlcmFsJikgPSBkZWxldGU7CisgICAgSW50
ZWdlckxpdGVyYWwmIG9wZXJhdG9yPShJbnRlZ2VyTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CisKKyAg
ICBJbnRlZ2VyTGl0ZXJhbFR5cGUmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KICAgICBpbnQg
dmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAKICAgICBib29sIGlzSW50ZWdlckxp
dGVyYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBJbnRlZ2VyTGl0
ZXJhbCBjbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICBJbnRlZ2VyTGl0ZXJhbCByZXN1bHQo
TGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgbV92YWx1ZSk7CisgICAgICAgIGlmIChyZXN1bHQubV90
eXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICAgICAgcmVzdWx0Lm1fdHlwZS5yZXNvbHZlKHJl
c3VsdC5tX3R5cGUucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIGludDY0X3QgdmFsdWVGb3JTZWxlY3RlZFR5cGUoKSBjb25zdDsK
KwogcHJpdmF0ZToKKyAgICBJbnRlZ2VyTGl0ZXJhbFR5cGUgbV90eXBlOwogICAgIGludCBtX3Zh
bHVlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjYyMTk3Yzk0OGMyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdl
ckxpdGVyYWxUeXBlLmNwcApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJM
RShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEludGVnZXJM
aXRlcmFsVHlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7
CisKK25hbWVzcGFjZSBBU1QgeworCitJbnRlZ2VyTGl0ZXJhbFR5cGU6OkludGVnZXJMaXRlcmFs
VHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIGludCB2YWx1ZSkKKyAgICA6IG1fdmFsdWUodmFs
dWUpCisgICAgLCBtX3ByZWZlcnJlZFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNl
PihXVEZNb3ZlKG9yaWdpbiksIFN0cmluZygiaW50IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksIFR5cGVBcmd1bWVudHMoKSkpCit7Cit9CisKK0ludGVnZXJMaXRlcmFsVHlwZTo6fklu
dGVnZXJMaXRlcmFsVHlwZSgpID0gZGVmYXVsdDsKKworYm9vbCBJbnRlZ2VyTGl0ZXJhbFR5cGU6
OmNhblJlc29sdmUoY29uc3QgVHlwZSYgdHlwZSkgY29uc3QKK3sKKyAgICBpZiAoIWlzPE5hbWVk
VHlwZT4odHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYW1lZFR5cGUg
PSBkb3duY2FzdDxOYW1lZFR5cGU+KHR5cGUpOworICAgIGlmICghaXM8TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgbmF0
aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1l
ZFR5cGUpOworICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzTnVtYmVyKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5jYW5SZXBy
ZXNlbnRJbnRlZ2VyKCkobV92YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJM
aXRlcmFsVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kOGQx
YzZiYjRkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJXSExTTFJlc29sdmFibGVUeXBlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNl
IEFTVCB7CisKK2NsYXNzIFR5cGVSZWZlcmVuY2U7CisKK2NsYXNzIEludGVnZXJMaXRlcmFsVHlw
ZSA6IHB1YmxpYyBSZXNvbHZhYmxlVHlwZSB7CitwdWJsaWM6CisgICAgSW50ZWdlckxpdGVyYWxU
eXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgaW50IHZhbHVlKTsKKworICAgIHZpcnR1YWwgfklu
dGVnZXJMaXRlcmFsVHlwZSgpOworCisgICAgSW50ZWdlckxpdGVyYWxUeXBlKGNvbnN0IEludGVn
ZXJMaXRlcmFsVHlwZSYpID0gZGVsZXRlOworICAgIEludGVnZXJMaXRlcmFsVHlwZShJbnRlZ2Vy
TGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgSW50ZWdlckxpdGVyYWxUeXBlJiBvcGVy
YXRvcj0oY29uc3QgSW50ZWdlckxpdGVyYWxUeXBlJikgPSBkZWxldGU7CisgICAgSW50ZWdlckxp
dGVyYWxUeXBlJiBvcGVyYXRvcj0oSW50ZWdlckxpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKwor
ICAgIGJvb2wgaXNJbnRlZ2VyTGl0ZXJhbFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CisKKyAgICBUeXBlUmVmZXJlbmNlJiBwcmVmZXJyZWRUeXBlKCkgeyByZXR1cm4gKm1f
cHJlZmVycmVkVHlwZTsgfQorCisgICAgYm9vbCBjYW5SZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25z
dCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBpbnQgbV92YWx1ZTsKKyAgICAvLyBUaGlzIGlz
IGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCisg
ICAgLy8gQ29uc3RhbnRFeHByZXNzaW9uIC0+IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2Ug
LT4gVHlwZUFyZ3VtZW50cyAtPiBDb25zdGFudEV4cHJlc3Npb24KKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBlOworfTsKKworfQorCit9CisKK30KKwor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9SRVNPTFZBQkxFX1RZUEUoSW50ZWdlckxpdGVy
YWxUeXBlLCBpc0ludGVnZXJMaXRlcmFsVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY3ZGIwMDAxNmEwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMTmFtZWRUeXBlLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNs
dWRlICJXSExTTE5vZGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hM
U0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgTmFtZWRUeXBlIDogcHVibGljIFR5cGUg
eworcHVibGljOgorICAgIE5hbWVkVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYm
IG5hbWUpCisgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1f
bmFtZShXVEZNb3ZlKG5hbWUpKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5OYW1lZFR5
cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBOYW1lZFR5cGUoY29uc3QgTmFtZWRUeXBlJikgPSBkZWxl
dGU7CisgICAgTmFtZWRUeXBlKE5hbWVkVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBjb25zdCBM
ZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgU3Ry
aW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICBib29sIGlzTmFtZWRUeXBlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1R5cGVE
ZWZpbml0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNT
dHJ1Y3R1cmVEZWZpbml0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNFbnVtZXJhdGlvbkRlZmluaXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2ZVR5cGVEZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNvbnN0IHsg
cmV0dXJuICp0aGlzOyB9CisgICAgdmlydHVhbCBUeXBlJiB1bmlmeU5vZGUoKSB7IHJldHVybiAq
dGhpczsgfQorCitwcml2YXRlOgorICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKKyAgICBTdHJp
bmcgbV9uYW1lOworfTsKKworfQorCit9CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1dITFNMX05BTUVEX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5
cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpB
U1Q6Ok5hbWVkVHlwZSYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZ
UEUoTmFtZWRUeXBlLCBpc05hbWVkVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaAppbmRleCAwMTBlNmViYTcwMC4uYTgxNGJlNjhl
MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgKQEAg
LTM3LDggKzM3LDggQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIE5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24gOiBwdWJsaWMgRnVuY3Rpb25EZWNsYXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgTmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0ZUJs
b2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBvaW50
VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBQ
YXJhbWV0ZXJzJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1hbnRp
YywgYm9vbCByZXN0cmljdGVkKQotICAgICAgICA6IEZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92
ZShvcmlnaW4pLCBXVEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSwgV1RGTW92ZShlbnRyeVBvaW50VHlw
ZSksIFdURk1vdmUodHlwZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUocGFyYW1ldGVycyksIFdU
Rk1vdmUoc2VtYW50aWMpKQorICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25E
ZWNsYXJhdGlvbiYmIGZ1bmN0aW9uRGVjbGFyYXRpb24sIGJvb2wgcmVzdHJpY3RlZCkKKyAgICAg
ICAgOiBGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoZnVuY3Rpb25EZWNsYXJhdGlvbikpCiAg
ICAgICAgICwgbV9yZXN0cmljdGVkKHJlc3RyaWN0ZWQpCiAgICAgewogICAgIH0KQEAgLTQ4LDYg
KzQ4LDggQEAgcHVibGljOgogICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oY29uc3QgTmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBi
b29sIGlzTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KKwogICAgIGJvb2wgcmVzdHJpY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJp
Y3RlZDsgfQogCiBwcml2YXRlOgpAQCAtNjAsNCArNjIsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRlVOQ1RJT05fREVDTEFSQVRJT04oTmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiwgaXNOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkpCisKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaAppbmRleCAzMjBhYmMzYzQ3
NS4uMmI4OTQ2MWYzODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5o
CkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNM
TGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVkVHlw
ZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKQEAgLTM4LDExICszOCwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBu
YW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHVibGljIFR5
cGUgeworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHVibGljIE5hbWVkVHlwZSB7CiBw
dWJsaWM6CiAgICAgTmF0aXZlVHlwZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwg
U3RyaW5nJiYgbmFtZSwgVHlwZUFyZ3VtZW50cyYmIHR5cGVBcmd1bWVudHMpCi0gICAgICAgIDog
bV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUp
KQorICAgICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAg
ICAgICAgICwgbV90eXBlQXJndW1lbnRzKFdURk1vdmUodHlwZUFyZ3VtZW50cykpCiAgICAgewog
ICAgIH0KQEAgLTUyLDE4ICs1MSw1NiBAQCBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURlY2xhcmF0
aW9uKGNvbnN0IE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5hdGl2ZVR5
cGVEZWNsYXJhdGlvbihOYXRpdmVUeXBlRGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OwogCisgICAg
Ym9vbCBpc05hdGl2ZVR5cGVEZWNsYXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KKworICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIFR5cGVBcmd1bWVu
dHMmIHR5cGVBcmd1bWVudHMoKSB7IHJldHVybiBtX3R5cGVBcmd1bWVudHM7IH0KIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQor
ICAgIGJvb2wgaXNJbnQoKSBjb25zdCB7IHJldHVybiBtX2lzSW50OyB9CisgICAgYm9vbCBpc051
bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1faXNOdW1iZXI7IH0KKyAgICBib29sIGlzRmxvYXRpbmco
KSBjb25zdCB7IHJldHVybiBtX2lzRmxvYXRpbmc7IH0KKyAgICBib29sIGlzVmVjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9pc1ZlY3RvcjsgfQorICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJl
dHVybiBtX2lzTWF0cml4OyB9CisgICAgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBt
X2lzVGV4dHVyZTsgfQorICAgIGJvb2wgaXNTaWduZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2ln
bmVkOyB9CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGludCk+JiBjYW5SZXByZXNlbnRJ
bnRlZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9jYW5SZXByZXNlbnRJbnRlZ2VyOyB9CisgICAgY29u
c3Qgc3RkOjpmdW5jdGlvbjxib29sKHVuc2lnbmVkKT4mIGNhblJlcHJlc2VudFVuc2lnbmVkSW50
ZWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fY2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyOyB9Cisg
ICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGZsb2F0KT4mIGNhblJlcHJlc2VudEZsb2F0KCkg
Y29uc3QgeyByZXR1cm4gbV9jYW5SZXByZXNlbnRGbG9hdDsgfQorICAgIGNvbnN0IHN0ZDo6ZnVu
Y3Rpb248aW50NjRfdChpbnQ2NF90KT4mIHN1Y2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Vj
Y2Vzc29yOyB9CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxpbnQ2NF90KGludCk+JiBmb3JtYXRW
YWx1ZUZyb21JbnRlZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXRWYWx1ZUZyb21JbnRlZ2Vy
OyB9CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxpbnQ2NF90KHVuc2lnbmVkKT4mIGZvcm1hdFZh
bHVlRnJvbVVuc2lnbmVkSW50ZWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0VmFsdWVGcm9t
VW5zaWduZWRJbnRlZ2VyOyB9CisKKyAgICB2b2lkIHNldElzSW50KCkgeyBtX2lzSW50ID0gdHJ1
ZTsgfQorICAgIHZvaWQgc2V0SXNOdW1iZXIoKSB7IG1faXNOdW1iZXIgPSB0cnVlOyB9CisgICAg
dm9pZCBzZXRJc0Zsb2F0aW5nKCkgeyBtX2lzRmxvYXRpbmcgPSB0cnVlOyB9CisgICAgdm9pZCBz
ZXRJc1ZlY3RvcigpIHsgbV9pc1ZlY3RvciA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzTWF0cml4
KCkgeyBtX2lzTWF0cml4ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0SXNUZXh0dXJlKCkgeyBtX2lz
VGV4dHVyZSA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzU2lnbmVkKCkgeyBtX2lzU2lnbmVkID0g
dHJ1ZTsgfQorICAgIHZvaWQgc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihzdGQ6OmZ1bmN0aW9uPGJv
b2woaW50KT4mJiBjYW5SZXByZXNlbnQpIHsgbV9jYW5SZXByZXNlbnRJbnRlZ2VyID0gV1RGTW92
ZShjYW5SZXByZXNlbnQpOyB9CisgICAgdm9pZCBzZXRDYW5SZXByZXNlbnRVbnNpZ25lZEludGVn
ZXIoc3RkOjpmdW5jdGlvbjxib29sKHVuc2lnbmVkKT4mJiBjYW5SZXByZXNlbnQpIHsgbV9jYW5S
ZXByZXNlbnRVbnNpZ25lZEludGVnZXIgPSBXVEZNb3ZlKGNhblJlcHJlc2VudCk7IH0KKyAgICB2
b2lkIHNldENhblJlcHJlc2VudEZsb2F0KHN0ZDo6ZnVuY3Rpb248Ym9vbChmbG9hdCk+JiYgY2Fu
UmVwcmVzZW50KSB7IG1fY2FuUmVwcmVzZW50RmxvYXQgPSBXVEZNb3ZlKGNhblJlcHJlc2VudCk7
IH0KKyAgICB2b2lkIHNldFN1Y2Nlc3NvcihzdGQ6OmZ1bmN0aW9uPGludDY0X3QoaW50NjRfdCk+
JiYgc3VjY2Vzc29yKSB7IG1fc3VjY2Vzc29yID0gV1RGTW92ZShzdWNjZXNzb3IpOyB9CisgICAg
dm9pZCBzZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKHN0ZDo6ZnVuY3Rpb248aW50NjRfdChpbnQp
PiYmIGZvcm1hdFZhbHVlKSB7IG1fZm9ybWF0VmFsdWVGcm9tSW50ZWdlciA9IFdURk1vdmUoZm9y
bWF0VmFsdWUpOyB9CisgICAgdm9pZCBzZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIo
c3RkOjpmdW5jdGlvbjxpbnQ2NF90KHVuc2lnbmVkKT4mJiBmb3JtYXRWYWx1ZSkgeyBtX2Zvcm1h
dFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlciA9IFdURk1vdmUoZm9ybWF0VmFsdWUpOyB9CiAKIHBy
aXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIFN0cmluZyBtX25hbWU7CiAg
ICAgVHlwZUFyZ3VtZW50cyBtX3R5cGVBcmd1bWVudHM7CisgICAgc3RkOjpmdW5jdGlvbjxib29s
KGludCk+IG1fY2FuUmVwcmVzZW50SW50ZWdlcjsKKyAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wodW5z
aWduZWQpPiBtX2NhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcjsKKyAgICBzdGQ6OmZ1bmN0aW9u
PGJvb2woZmxvYXQpPiBtX2NhblJlcHJlc2VudEZsb2F0OworICAgIHN0ZDo6ZnVuY3Rpb248aW50
NjRfdChpbnQ2NF90KT4gbV9zdWNjZXNzb3I7CisgICAgc3RkOjpmdW5jdGlvbjxpbnQ2NF90KGlu
dCk+IG1fZm9ybWF0VmFsdWVGcm9tSW50ZWdlcjsKKyAgICBzdGQ6OmZ1bmN0aW9uPGludDY0X3Qo
dW5zaWduZWQpPiBtX2Zvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcjsKKyAgICBib29sIG1f
aXNJbnQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc051bWJlciB7IGZhbHNlIH07CisgICAgYm9v
bCBtX2lzRmxvYXRpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1ZlY3RvciB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2lzTWF0cml4IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNUZXh0dXJlIHsg
ZmFsc2UgfTsKKyAgICBib29sIG1faXNTaWduZWQgeyBmYWxzZSB9OwogfTsKIAogfQpAQCAtNzIs
NCArMTA5LDYgQEAgcHJpdmF0ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNM
X05BTUVEX1RZUEUoTmF0aXZlVHlwZURlY2xhcmF0aW9uLCBpc05hdGl2ZVR5cGVEZWNsYXJhdGlv
bigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE5vZGUuaAppbmRleCBmNmM0ZjAwNjBjMC4uYzhmZGMxMzg2OGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5vZGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOb2Rl
LmgKQEAgLTQyLDYgKzQyLDkgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IE5vZGUoY29uc3QgTm9k
ZSYpID0gZGVmYXVsdDsKICAgICBOb2RlKE5vZGUmJikgPSBkZWZhdWx0OwogCisgICAgTm9kZSYg
b3BlcmF0b3I9KGNvbnN0IE5vZGUmKSA9IGRlZmF1bHQ7CisgICAgTm9kZSYgb3BlcmF0b3I9KE5v
ZGUmJikgPSBkZWZhdWx0OworCiBwcml2YXRlOgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgKaW5k
ZXggZWU2NDdjZjlkMzkuLjU0YWY4YWZhOGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgKQEAgLTI5
LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFsVHlwZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQ1LDEyICs0NiwyNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IH5OdWxsTGl0ZXJhbCgpID0gZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0IE51bGxMaXRlcmFsKGNv
bnN0IE51bGxMaXRlcmFsJikgPSBkZWZhdWx0OworICAgIE51bGxMaXRlcmFsKGNvbnN0IE51bGxM
aXRlcmFsJikgPSBkZWxldGU7CiAgICAgTnVsbExpdGVyYWwoTnVsbExpdGVyYWwmJikgPSBkZWZh
dWx0OwogCisgICAgTnVsbExpdGVyYWwmIG9wZXJhdG9yPShjb25zdCBOdWxsTGl0ZXJhbCYpID0g
ZGVsZXRlOworICAgIE51bGxMaXRlcmFsJiBvcGVyYXRvcj0oTnVsbExpdGVyYWwmJikgPSBkZWZh
dWx0OworCisgICAgTnVsbExpdGVyYWxUeXBlJiB0eXBlKCkgeyByZXR1cm4gbV90eXBlOyB9CisK
ICAgICBib29sIGlzTnVsbExpdGVyYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CiAKKyAgICBOdWxsTGl0ZXJhbCBjbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIHJl
c3VsdCA9IE51bGxMaXRlcmFsKExleGVyOjpUb2tlbihvcmlnaW4oKSkpOworICAgICAgICBpZiAo
cmVzdWx0Lm1fdHlwZS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUu
cmVzb2x2ZShyZXN1bHQubV90eXBlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKIHByaXZhdGU6CisgICAgTnVsbExpdGVyYWxUeXBlIG1f
dHlwZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NzBjMTAyODMyYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRl
cmFsVHlwZS5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbFR5
cGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1l
c3BhY2UgQVNUIHsKKworYm9vbCBOdWxsTGl0ZXJhbFR5cGU6OmNhblJlc29sdmUoY29uc3QgVHlw
ZSYgdHlwZSkgY29uc3QKK3sKKyAgICBpZiAoIWlzPFVubmFtZWRUeXBlPih0eXBlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8VW5uYW1l
ZFR5cGU+KHR5cGUpOworICAgIGlmICghaXM8UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTnVsbExpdGVyYWxUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uZDE3ZGU1MzgwN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbFR5cGUu
aApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitj
bGFzcyBOdWxsTGl0ZXJhbFR5cGUgOiBwdWJsaWMgUmVzb2x2YWJsZVR5cGUgeworcHVibGljOgor
ICAgIE51bGxMaXRlcmFsVHlwZSgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgfk51bGxMaXRl
cmFsVHlwZSgpID0gZGVmYXVsdDsKKworICAgIE51bGxMaXRlcmFsVHlwZShjb25zdCBOdWxsTGl0
ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBOdWxsTGl0ZXJhbFR5cGUoTnVsbExpdGVyYWxUeXBl
JiYpID0gZGVmYXVsdDsKKworICAgIE51bGxMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KGNvbnN0IE51
bGxMaXRlcmFsVHlwZSYpID0gZGVsZXRlOworICAgIE51bGxMaXRlcmFsVHlwZSYgb3BlcmF0b3I9
KE51bGxMaXRlcmFsVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzTnVsbExpdGVyYWxU
eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBjYW5SZXNv
bHZlKGNvbnN0IFR5cGUmKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKK307CisKK30KKwor
fQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfUkVTT0xWQUJMRV9UWVBFKE51
bGxMaXRlcmFsVHlwZSwgaXNOdWxsTGl0ZXJhbFR5cGUoKSkKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlw
ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRl
clR5cGUuaAppbmRleCAxNTI5NDI2YTJlZC4uNjNjMjA5M2M1MGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5
cGUuaApAQCAtMzksOCArMzksOCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgUG9pbnRlclR5
cGUgOiBwdWJsaWMgUmVmZXJlbmNlVHlwZSB7CiBwdWJsaWM6Ci0gICAgUG9pbnRlclR5cGUoTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBhZGRyZXNzU3BhY2UsIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlPiBlbGVtZW50VHlwZSkKLSAgICAgICAgOiBSZWZlcmVuY2VUeXBlKFdURk1vdmUob3Jp
Z2luKSwgV1RGTW92ZShhZGRyZXNzU3BhY2UpLCBXVEZNb3ZlKGVsZW1lbnRUeXBlKSkKKyAgICBQ
b2ludGVyVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEFkZHJlc3NTcGFjZSBhZGRyZXNzU3Bh
Y2UsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4gZWxlbWVudFR5cGUpCisgICAgICAgIDog
UmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdpbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShlbGVt
ZW50VHlwZSkpCiAgICAgewogICAgIH0KIApAQCAtNDksMTEgKzQ5LDExIEBAIHB1YmxpYzoKICAg
ICBQb2ludGVyVHlwZShjb25zdCBQb2ludGVyVHlwZSYpID0gZGVsZXRlOwogICAgIFBvaW50ZXJU
eXBlKFBvaW50ZXJUeXBlJiYpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgaXNQb2ludGVyVHlwZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1BvaW50ZXJUeXBl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRy
PFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1l
ZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPFBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBTdHJpbmco
YWRkcmVzc1NwYWNlKCkpLCBlbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgYWRk
cmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2YXRlOgpA
QCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
V0hMU0xfVFlQRShQb2ludGVyVHlwZSwgaXNQb2ludGVyVHlwZSgpKQorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoUG9pbnRlclR5cGUsIGlzUG9pbnRlclR5cGUoKSkK
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oCmlu
ZGV4IGJhMzhhNWMwMWVhLi5kMDVhNzJjMWZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLmgKQEAgLTUxLDEwICs1MSwzMCBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQogCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0RnVuY3Rpb25OYW1lKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgU3RyaW5nIHNldEZ1bmN0aW9uTmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFN0cmluZyBhbmRGdW5jdGlvbk5hbWUoKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIHNl
dFBvc3NpYmxlR2V0T3ZlcmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRzKQorICAgIHsKKyAgICAgICAgbV9w
b3NzaWJsZUdldE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKKyAgICB9CisgICAgdm9pZCBzZXRQb3Nz
aWJsZVNldE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5j
dGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykKKyAgICB7CisgICAgICAgIG1fcG9zc2li
bGVTZXRPdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAgfQorICAgIHZvaWQgc2V0UG9zc2libGVB
bmRPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25E
ZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMpCisgICAgeworICAgICAgICBtX3Bvc3NpYmxlQW5k
T3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAgIH0KKwogICAgIEV4cHJlc3Npb24mIGJhc2UoKSB7
IHJldHVybiAqbV9iYXNlOyB9CiAKIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJl
c3Npb24+IG1fYmFzZTsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlv
bkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZUdldE92ZXJsb2FkczsKKyAgICBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZVNl
dE92ZXJsb2FkczsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRl
Y2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZUFuZE92ZXJsb2FkczsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFF1YWxpZmll
ci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUXVhbGlm
aWVyLmgKaW5kZXggMzMzZjA1MjI0NDEuLmY3Y2QyZmRmZmEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xRdWFsaWZpZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xRdWFsaWZpZXIuaApA
QCAtNDYsNyArNDYsNyBAQCBlbnVtIGNsYXNzIFF1YWxpZmllciB7CiAgICAgU2FtcGxlCiB9Owog
Ci10eXBlZGVmIFZlY3RvcjxRdWFsaWZpZXI+IFF1YWxpZmllcnM7Cit1c2luZyBRdWFsaWZpZXJz
ID0gVmVjdG9yPFF1YWxpZmllcj47CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5oCmluZGV4IGE0YzE0Y2UxY2YzLi5jZDU1NjMyMGRiMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaApAQCAtMjcsNyArMjcs
NyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMQW5vbnltb3VzVmFy
aWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5o
IgogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIK
ICNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCkBAIC01Miw4ICs1Miw4IEBAIHB1
YmxpYzoKICAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdp
biwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IGxWYWx1ZSkKICAgICAgICAgOiBFeHByZXNz
aW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQogICAgICAgICAsIG1fbFZhbHVlKFdURk1vdmUobFZh
bHVlKSkKLSAgICAgICAgLCBtX29sZFZhbHVlKExleGVyOjpUb2tlbihvcmlnaW4pKQotICAgICAg
ICAsIG1fbmV3VmFsdWUoV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fb2xkVmFsdWUoTGV4
ZXI6OlRva2VuKG9yaWdpbiksIFF1YWxpZmllcnMoKSwgbnVsbHB0ciwgU3RyaW5nKCksIFdURjo6
bnVsbG9wdCwgbnVsbHB0cikKKyAgICAgICAgLCBtX25ld1ZhbHVlKFdURk1vdmUob3JpZ2luKSwg
UXVhbGlmaWVycygpLCBudWxscHRyLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKQog
ICAgIHsKICAgICB9CiAKQEAgLTg3LDE1ICs4NywxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1Jl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CiAKICAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJldHVybiAqbV9sVmFsdWU7IH0KLSAgICBB
bm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJiBvbGRWYWx1ZSgpIHsgcmV0dXJuIG1fb2xkVmFs
dWU7IH0KLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJiBuZXdWYWx1ZSgpIHsgcmV0
dXJuIG1fbmV3VmFsdWU7IH0KKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uJiBvbGRWYWx1ZSgpIHsg
cmV0dXJuIG1fb2xkVmFsdWU7IH0KKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uJiBuZXdWYWx1ZSgp
IHsgcmV0dXJuIG1fbmV3VmFsdWU7IH0KICAgICBFeHByZXNzaW9uJiBuZXdWYWx1ZUV4cHJlc3Np
b24oKSB7IHJldHVybiAqbV9uZXdWYWx1ZUV4cHJlc3Npb247IH0KICAgICBFeHByZXNzaW9uJiBy
ZXN1bHRFeHByZXNzaW9uKCkgeyByZXR1cm4gKm1fcmVzdWx0RXhwcmVzc2lvbjsgfQogCiBwcml2
YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2xWYWx1ZTsKLSAgICBBbm9u
eW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uIG1fb2xkVmFsdWU7Ci0gICAgQW5vbnltb3VzVmFyaWFi
bGVEZWNsYXJhdGlvbiBtX25ld1ZhbHVlOworICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbV9vbGRW
YWx1ZTsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG1fbmV3VmFsdWU7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEV4cHJlc3Npb24+IG1fbmV3VmFsdWVFeHByZXNzaW9uOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxFeHByZXNzaW9uPiBtX3Jlc3VsdEV4cHJlc3Npb247CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNl
VHlwZS5oCmluZGV4IDIyNTdmOWJlMjQwLi41ZDI5ZmZkNWI3YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlZmVyZW5j
ZVR5cGUuaApAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRl
ICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xV
bm5hbWVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0zNywxMSArMzcsMTggQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFt
ZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFJlZmVyZW5jZVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFz
cyBSZWZlcmVuY2VUeXBlIDogcHVibGljIFVubmFtZWRUeXBlIHsKIHB1YmxpYzoKLSAgICBSZWZl
cmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgYWRkcmVzc1NwYWNlLCBz
dGQ6OnVuaXF1ZV9wdHI8VHlwZT4mJiBlbGVtZW50VHlwZSkKLSAgICAgICAgOiBtX29yaWdpbihX
VEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9hZGRyZXNzU3BhY2UoV1RGTW92ZShhZGRyZXNz
U3BhY2UpKQorICAgIGVudW0gY2xhc3MgQWRkcmVzc1NwYWNlIHsKKyAgICAgICAgQ29uc3RhbnQs
CisgICAgICAgIERldmljZSwKKyAgICAgICAgVGhyZWFkZ3JvdXAsCisgICAgICAgIFRocmVhZAor
ICAgIH07CisKKyAgICBSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVz
c1NwYWNlIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1l
bnRUeXBlKQorICAgICAgICA6IFVubmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAg
LCBtX2FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICB7CiAgICAgfQpAQCAtNTAsMTggKzU3LDE1IEBAIHB1
YmxpYzoKIAogICAgIFJlZmVyZW5jZVR5cGUoY29uc3QgUmVmZXJlbmNlVHlwZSYpID0gZGVsZXRl
OwogICAgIFJlZmVyZW5jZVR5cGUoUmVmZXJlbmNlVHlwZSYmKSA9IGRlZmF1bHQ7Ci0gICAgCi0g
ICAgVHlwZSYgZWxlbWVudFR5cGUoKSB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQogCi1wcm90
ZWN0ZWQ6Ci0gICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBt
X29yaWdpbjsgfQotICAgIGNvbnN0IFN0cmluZyYgYWRkcmVzc1NwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9hZGRyZXNzU3BhY2U7IH0KLSAgICBjb25zdCBUeXBlJiBlbGVtZW50VHlwZSgpIGNvbnN0
IHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9CisgICAgYm9vbCBpc1JlZmVyZW5jZVR5cGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9CisgICAgVW5uYW1lZFR5
cGUmIGVsZW1lbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gKm1fZWxlbWVudFR5cGU7IH0KIAogcHJp
dmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgU3RyaW5nIG1fYWRkcmVzc1Nw
YWNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX2VsZW1lbnRUeXBlOworICAgIEFkZHJl
c3NTcGFjZSBtX2FkZHJlc3NTcGFjZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+
IG1fZWxlbWVudFR5cGU7CiB9OwogCiB9CkBAIC03MCw0ICs3NCw2IEBAIHByaXZhdGU6CiAKIH0K
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoUmVmZXJlbmNlVHlw
ZSwgaXNSZWZlcmVuY2VUeXBlKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb2x2YWJsZVR5cGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc29sdmFibGVUeXBlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjUyZDE0YjkxNmU5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMUmVzb2x2YWJsZVR5cGUuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisj
aW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKwor
Y2xhc3MgUmVzb2x2YWJsZVR5cGUgOiBwdWJsaWMgVHlwZSB7CitwdWJsaWM6CisgICAgUmVzb2x2
YWJsZVR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5SZXNvbHZhYmxlVHlwZSgpID0g
ZGVmYXVsdDsKKworICAgIFJlc29sdmFibGVUeXBlKGNvbnN0IFJlc29sdmFibGVUeXBlJikgPSBk
ZWxldGU7CisgICAgUmVzb2x2YWJsZVR5cGUoUmVzb2x2YWJsZVR5cGUmJikgPSBkZWZhdWx0Owor
CisgICAgUmVzb2x2YWJsZVR5cGUmIG9wZXJhdG9yPShjb25zdCBSZXNvbHZhYmxlVHlwZSYpID0g
ZGVsZXRlOworICAgIFJlc29sdmFibGVUeXBlJiBvcGVyYXRvcj0oUmVzb2x2YWJsZVR5cGUmJikg
PSBkZWZhdWx0OworCisgICAgdmlydHVhbCBib29sIGlzRmxvYXRMaXRlcmFsVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzSW50ZWdlckxpdGVyYWxUeXBl
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNOdWxsTGl0ZXJh
bFR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZp
cnR1YWwgYm9vbCBjYW5SZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25zdCA9IDA7CisKKyAgICBVbm5h
bWVkVHlwZSogcmVzb2x2ZWRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZFR5cGUuZ2V0
KCk7IH0KKyAgICBVbm5hbWVkVHlwZSogcmVzb2x2ZWRUeXBlKCkgeyByZXR1cm4gbV9yZXNvbHZl
ZFR5cGUuZ2V0KCk7IH0KKworICAgIHZvaWQgcmVzb2x2ZShzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1l
ZFR5cGU+JiYgdHlwZSkKKyAgICB7CisgICAgICAgIG1fcmVzb2x2ZWRUeXBlID0gV1RGTW92ZSh0
eXBlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBl
PiBtX3Jlc29sdmVkVHlwZTsKK307CisKK30KKworfQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19XSExTTF9SRVNPTFZBQkxFX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVk
aWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFT
VDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNv
cmU6OldITFNMOjpBU1Q6OlJlc29sdmFibGVUeXBlJiB0eXBlKSB7IHJldHVybiB0eXBlLnByZWRp
Y2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3Vy
Y2VTZW1hbnRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uZWE4ZThhMWRmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcApAQCAtMCww
ICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKKworI2luY2x1ZGUg
IldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVk
ZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgiCisj
aW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2Jvb2wgUmVzb3VyY2VTZW1h
bnRpYzo6aXNBY2NlcHRhYmxlVHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlw
ZSwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1f
bW9kZSkgeworICAgIGNhc2UgTW9kZTo6VW5vcmRlcmVkQWNjZXNzVmlldzoKKyAgICAgICAgaWYg
KGlzPFJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkgeworICAgICAgICAgICAgYXV0byYgcmVm
ZXJlbmNlVHlwZSA9IGRvd25jYXN0PFJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICAg
ICAgICAgIHJldHVybiByZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFjZSgpID09IFJlZmVyZW5jZVR5
cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQgfHwgcmVmZXJlbmNlVHlwZS5hZGRyZXNzU3BhY2Uo
KSA9PSBSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmljZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoaXM8QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgaWYgKGlzPFR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkgeworICAg
ICAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PFR5cGVSZWZlcmVuY2U+KHVu
bmFtZWRUeXBlKTsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlw
ZSgpKTsKKyAgICAgICAgICAgIGlmIChpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVm
ZXJlbmNlLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8
TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkuaXNU
ZXh0dXJlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgTW9k
ZTo6VGV4dHVyZToKKyAgICAgICAgaWYgKGlzPFJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkK
KyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSku
YWRkcmVzc1NwYWNlKCkgPT0gUmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpDb25zdGFudDsK
KyAgICAgICAgaWYgKGlzPEFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmIChpczxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpIHsK
KyAgICAgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxUeXBlUmVmZXJlbmNl
Pih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZl
ZFR5cGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25j
YXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkp
LmlzVGV4dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNl
IE1vZGU6OkJ1ZmZlcjoKKyAgICAgICAgaWYgKGlzPFJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBl
KSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlw
ZSkuYWRkcmVzc1NwYWNlKCkgPT0gUmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpDb25zdGFu
dDsKKyAgICAgICAgcmV0dXJuIGlzPEFycmF5VHlwZT4odW5uYW1lZFR5cGUpOworICAgIGNhc2Ug
TW9kZTo6U2FtcGxlcjoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJp
bnNpY3Muc2FtcGxlclR5cGUoKSk7CisgICAgfQorfQorCitib29sIFJlc291cmNlU2VtYW50aWM6
OmlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiBk
aXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGRpcmVjdGlvbiA9PSBTaGFkZXJJdGVtRGlyZWN0aW9uOjpJbnB1dDsKK30KKworfQorCit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmgKaW5kZXggYWIzYjQzMGY0
NDIuLjZhZTMxN2EzNTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5oCkBAIC02Miw2
ICs2MiwxOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4OyB9CiAgICAgdW5zaWduZWQgc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlOyB9
CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVzb3VyY2VTZW1hbnRpYyYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tb2RlID09IG90aGVyLm1fbW9kZSAmJiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXggJiYgbV9zcGFjZSA9PSBvdGhlci5tX3NwYWNlOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZXNvdXJjZVNlbWFudGljJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAg
ICBib29sIGlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNvbnN0IElu
dHJpbnNpY3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQWNjZXB0YWJsZUZvclNoYWRl
ckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29uc3QgRnVuY3Rpb25EZWZpbml0
aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisKIHByaXZhdGU6CiAgICAgTW9kZSBtX21vZGU7CiAgICAg
dW5zaWduZWQgbV9pbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFJldHVybi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKaW5kZXggYzViZmM5ZTQyODYuLmFjOTMyM2QyNDE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xSZXR1cm4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xSZXR1cm4uaApAQCAtNTQsOCArNTQsMTEgQEAgcHVibGljOgogCiAgICAgRXhwcmVzc2lv
biogdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CiAKKyAgICB2b2lkIHNldEZ1bmN0
aW9uKEZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25EZWZpbml0aW9uKSB7IG1fZnVuY3Rpb24g
PSBmdW5jdGlvbkRlZmluaXRpb247IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
RXhwcmVzc2lvbj4gbV92YWx1ZTsgLy8gbnVsbGFibGUKKyAgICBGdW5jdGlvbkRlZmluaXRpb24q
IG1fZnVuY3Rpb247CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU2VtYW50aWMuaAppbmRleCBiMDUyYjkyZWEyNi4uYjJj
MDkwYmYxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFNlbWFudGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMU2VtYW50aWMuaApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV0hM
U0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotdHlwZWRlZiBWYXJpYW50PEJ1aWx0SW5TZW1hbnRp
YywgUmVzb3VyY2VTZW1hbnRpYywgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLCBTdGFn
ZUluT3V0U2VtYW50aWM+IFNlbWFudGljOwordXNpbmcgU2VtYW50aWMgPSBWYXJpYW50PEJ1aWx0
SW5TZW1hbnRpYywgUmVzb3VyY2VTZW1hbnRpYywgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFu
dGljLCBTdGFnZUluT3V0U2VtYW50aWM+OwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRT
ZW1hbnRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5mMjRiYWVjYzA0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29u
c3RhbnRTZW1hbnRpYy5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTcGVjaWFs
aXphdGlvbkNvbnN0YW50U2VtYW50aWMuaCIKKworI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5o
IgorI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVy
ZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25h
bWVzcGFjZSBBU1QgeworCitib29sIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYzo6aXNB
Y2NlcHRhYmxlVHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3Qg
SW50cmluc2ljcyYpIGNvbnN0Cit7CisgICAgaWYgKCFpczxUeXBlUmVmZXJlbmNlPih1bm5hbWVk
VHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0g
ZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpOworICAgIEFTU0VSVCh0eXBlUmVm
ZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBpZiAoIWlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVu
Y2UucmVzb2x2ZWRUeXBlKCkpLmlzTnVtYmVyKCk7Cit9CisKK2Jvb2wgU3BlY2lhbGl6YXRpb25D
b25zdGFudFNlbWFudGljOjppc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKFNoYWRl
ckl0ZW1EaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSBjb25z
dAoreworICAgIHJldHVybiBkaXJlY3Rpb24gPT0gU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ7
Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFu
dGljLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVj
aWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaAppbmRleCA5YTdjNTNmZDRiNi4uOWE4NGFiOWNm
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1h
bnRpYy5oCkBAIC00OCw2ICs0OCwxOSBAQCBwdWJsaWM6CiAgICAgU3BlY2lhbGl6YXRpb25Db25z
dGFudFNlbWFudGljKGNvbnN0IFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpID0gZGVs
ZXRlOwogICAgIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyhTcGVjaWFsaXphdGlvbkNv
bnN0YW50U2VtYW50aWMmJikgPSBkZWZhdWx0OwogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3BlY2lhbGl6
YXRpb25Db25zdGFudFNlbWFudGljJikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBib29sIGlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVk
VHlwZSYsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQWNj
ZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29uc3Qg
RnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisKIHByaXZhdGU6CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xT
dGFnZUluT3V0U2VtYW50aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uMjAzYzQ2MDg4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMu
Y3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3RhZ2VJbk91dFNlbWFudGljLmgi
CisKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRp
b25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNp
bmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIK
KyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworYm9vbCBTdGFnZUluT3V0
U2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1l
ZFR5cGUsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdAoreworICAgIGlmIChpczxBcnJheVR5cGU+
KHVubmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFpczxUeXBlUmVm
ZXJlbmNlPih1bm5hbWVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiB0
eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpOworICAg
IEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvJiByZXNvbHZl
ZFR5cGUgPSAqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKTsKKyAgICBpZiAoaXM8RW51bWVy
YXRpb25EZWZpbml0aW9uPihyZXNvbHZlZFR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAoIWlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocmVzb2x2ZWRUeXBlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0
PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwor
ICAgIHJldHVybiBuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNOdW1iZXIoKQorICAgICAgICB8fCBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uaXNWZWN0b3IoKQorICAgICAgICB8fCBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uaXNNYXRyaXgoKTsKK30KKworYm9vbCBTdGFnZUluT3V0U2VtYW50aWM6OmlzQWNj
ZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiBkaXJlY3Rp
b24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKSBjb25zdAor
eworICAgIHN3aXRjaCAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7Cisg
ICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6VmVydGV4OgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEZ1bmN0aW9uRGVjbGFyYXRpb246OkVudHJ5UG9p
bnRUeXBlOjpGcmFnbWVudDoKKyAgICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBTaGFkZXJJdGVt
RGlyZWN0aW9uOjpJbnB1dDsKKyAgICBjYXNlIEZ1bmN0aW9uRGVjbGFyYXRpb246OkVudHJ5UG9p
bnRUeXBlOjpDb21wdXRlOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit9CisK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmgKaW5kZXgg
YTM5OTI3ODFlM2EuLjI5OWI5MWJkOTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50
aWMuaApAQCAtNTEsNiArNTEsMTkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3Rh
Z2VJbk91dFNlbWFudGljJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFN0YWdlSW5PdXRTZW1hbnRpYyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBpc0FjY2VwdGFibGVUeXBlKGNv
bnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNzJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCBpc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKFNoYWRlckl0ZW1E
aXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpIGNvbnN0IG92ZXJyaWRlOworCiBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kZXg7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1lbnQuaAppbmRleCA0
MzRkMjFhMDQzMi4uZmVkZDA2OGY4YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5oCkBAIC02Nyw3ICs2Nyw3
IEBAIHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogfTsKIAotdHlwZWRlZiBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YXRlbWVudD4+IFN0YXRlbWVudHM7Cit1c2luZyBTdGF0
ZW1lbnRzID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGF0ZW1lbnQ+PjsKIAogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1
Y3R1cmVEZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKaW5kZXggODdjYzYyZjIzNTYuLmE4Yzk4ZTk5
YjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCkBAIC0yOSw3ICsyOSw3
IEBACiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVF
bGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5
cGUuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKQEAgLTM5LDExICszOSwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3Bh
Y2UgQVNUIHsKIAotY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlvbiA6IHB1YmxpYyBUeXBlIHsKK2Ns
YXNzIFN0cnVjdHVyZURlZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsKIHB1YmxpYzoKICAg
ICBTdHJ1Y3R1cmVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFt
ZSwgU3RydWN0dXJlRWxlbWVudHMmJiBzdHJ1Y3R1cmVFbGVtZW50cykKLSAgICAgICAgOiBtX29y
aWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisg
ICAgICAgIDogTmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAg
ICAgLCBtX3N0cnVjdHVyZUVsZW1lbnRzKFdURk1vdmUoc3RydWN0dXJlRWxlbWVudHMpKQogICAg
IHsKICAgICB9CkBAIC01MywxNyArNTIsMTEgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZURlZmlu
aXRpb24oY29uc3QgU3RydWN0dXJlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFN0cnVjdHVy
ZURlZmluaXRpb24oU3RydWN0dXJlRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBTdHJ1
Y3R1cmVFbGVtZW50cyYgc3RydWN0dXJlRWxlbWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVs
ZW1lbnRzOyB9CisgICAgYm9vbCBpc1N0cnVjdHVyZURlZmluaXRpb24oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBj
b25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBTdHJ1Y3R1cmVFbGVtZW50cyYgc3RydWN0
dXJlRWxlbWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9CiAKIHByaXZhdGU6
Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX25hbWU7CiAgICAgU3Ry
dWN0dXJlRWxlbWVudHMgbV9zdHJ1Y3R1cmVFbGVtZW50czsKIH07CiAKQEAgLTczLDQgKzY2LDYg
QEAgcHJpdmF0ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZ
UEUoU3RydWN0dXJlRGVmaW5pdGlvbiwgaXNTdHJ1Y3R1cmVEZWZpbml0aW9uKCkpCisKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMU3RydWN0dXJlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oCmluZGV4IDE0YmU0MWM3Mjk4Li42YTY0YjA5
YzA0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMU3RydWN0dXJlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaApAQCAtNDEsNyArNDEsNyBAQCBu
YW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgU3RydWN0dXJlRWxlbWVudCA6IHB1YmxpYyBOb2RlIHsK
IHB1YmxpYzoKLSAgICBTdHJ1Y3R1cmVFbGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVh
bGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIHR5cGUsIFN0cmlu
ZyYmIG5hbWUsIE9wdGlvbmFsPFNlbWFudGljPiBzZW1hbnRpYykKKyAgICBTdHJ1Y3R1cmVFbGVt
ZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6
dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxT
ZW1hbnRpYz4gc2VtYW50aWMpCiAgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQog
ICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1f
dHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAtNTUsMTggKzU1LDIwIEBAIHB1YmxpYzoKICAgICBTdHJ1
Y3R1cmVFbGVtZW50KGNvbnN0IFN0cnVjdHVyZUVsZW1lbnQmKSA9IGRlbGV0ZTsKICAgICBTdHJ1
Y3R1cmVFbGVtZW50KFN0cnVjdHVyZUVsZW1lbnQmJikgPSBkZWZhdWx0OwogCi0gICAgVHlwZSYg
dHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7
IHJldHVybiAqbV90eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9u
YW1lOyB9CiAgICAgT3B0aW9uYWw8U2VtYW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2Vt
YW50aWM7IH0KIAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgUXVh
bGlmaWVycyBtX3F1YWxpZmllcnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IG1fdHlwZTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAgICBTdHJpbmcgbV9u
YW1lOwogICAgIE9wdGlvbmFsPFNlbWFudGljPiBtX3NlbWFudGljOwogfTsKIAotdHlwZWRlZiBW
ZWN0b3I8U3RydWN0dXJlRWxlbWVudD4gU3RydWN0dXJlRWxlbWVudHM7Cit1c2luZyBTdHJ1Y3R1
cmVFbGVtZW50cyA9IFZlY3RvcjxTdHJ1Y3R1cmVFbGVtZW50PjsKIAogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgKaW5kZXgg
Y2Y0Y2JjODg3OTAuLjhlMGQ4YzVjNTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZS5oCkBAIC00MiwxNSArNDIsMTQgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB+VHlwZSgpID0gZGVmYXVsdDsKIAotICAgIFR5cGUoY29uc3Qg
VHlwZSYpID0gZGVsZXRlOworICAgIGV4cGxpY2l0IFR5cGUoY29uc3QgVHlwZSYpID0gZGVsZXRl
OwogICAgIFR5cGUoVHlwZSYmKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNUeXBl
UmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQ
b2ludGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlz
QXJyYXlSZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIFR5cGUmIG9w
ZXJhdG9yPShjb25zdCBUeXBlJikgPSBkZWxldGU7CisgICAgVHlwZSYgb3BlcmF0b3I9KFR5cGUm
JikgPSBkZWZhdWx0OwogCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzTmFtZWRUeXBlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNVbm5hbWVkVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAKIHByaXZhdGU6CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKaW5k
ZXggN2U1ODAxZTNiNTYuLjk4MDg2NjRkMWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAK
QEAgLTIzLDE0ICsyMywxNCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLSNwcmFnbWEgb25jZQotCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1
bWVudC5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSAiV0hMU0xDb25z
dGFudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNs
dWRlIDx3dGYvVmFyaWFudC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ5LDcgKzQ5
LDcgQEAgVHlwZUFyZ3VtZW50cyBjbG9uZShjb25zdCBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1l
bnRzKQogVHlwZUFyZ3VtZW50IGNsb25lKGNvbnN0IFR5cGVBcmd1bWVudCYgdHlwZUFyZ3VtZW50
KQogewogICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oY29uc3QgQ29u
c3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pIC0+IFR5cGVBcmd1bWVudCB7Ci0g
ICAgICAgIHJldHVybiBjb25zdGFudEV4cHJlc3Npb247CisgICAgICAgIHJldHVybiBjb25zdGFu
dEV4cHJlc3Npb24uY2xvbmUoKTsKICAgICB9LCBbXShjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZVJlZmVyZW5jZT4mIHR5cGVSZWZlcmVuY2UpIC0+IFR5cGVBcmd1bWVudCB7CiAgICAgICAgIHJl
dHVybiB0eXBlUmVmZXJlbmNlLT5jbG9uZVR5cGVSZWZlcmVuY2UoKTsKICAgICB9KSwgdHlwZUFy
Z3VtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVBcmd1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmgKaW5kZXggZTM4NWQ1MGQ1ZWYuLjNiMDM3YmEz
NTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xUeXBlQXJndW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaApAQCAtNDAsOCArNDAsOCBAQCBuYW1lc3BhY2Ug
QVNUIHsKIAogY2xhc3MgVHlwZVJlZmVyZW5jZTsKIAotdHlwZWRlZiBWYXJpYW50PENvbnN0YW50
RXhwcmVzc2lvbiwgc3RkOjp1bmlxdWVfcHRyPFR5cGVSZWZlcmVuY2U+PiBUeXBlQXJndW1lbnQ7
Ci10eXBlZGVmIFZlY3RvcjxUeXBlQXJndW1lbnQ+IFR5cGVBcmd1bWVudHM7Cit1c2luZyBUeXBl
QXJndW1lbnQgPSBWYXJpYW50PENvbnN0YW50RXhwcmVzc2lvbiwgc3RkOjp1bmlxdWVfcHRyPFR5
cGVSZWZlcmVuY2U+PjsKK3VzaW5nIFR5cGVBcmd1bWVudHMgPSBWZWN0b3I8VHlwZUFyZ3VtZW50
PjsKIAogVHlwZUFyZ3VtZW50IGNsb25lKGNvbnN0IFR5cGVBcmd1bWVudCYpOwogVHlwZUFyZ3Vt
ZW50cyBjbG9uZShjb25zdCBUeXBlQXJndW1lbnRzJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24u
aAppbmRleCBmNzM2MjllMjliMS4uZWQxYzQ3NWE4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRp
b24uaApAQCAtMjksNyArMjksOCBAQAogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1
ZGUgIldITFNMTm9kZS5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNM
TmFtZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMSArMzks
MTAgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFR5cGVE
ZWZpbml0aW9uIDogcHVibGljIFR5cGUgeworY2xhc3MgVHlwZURlZmluaXRpb24gOiBwdWJsaWMg
TmFtZWRUeXBlIHsKIHB1YmxpYzoKLSAgICBUeXBlRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBv
cmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSkK
LSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdU
Rk1vdmUobmFtZSkpCisgICAgVHlwZURlZmluaXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBT
dHJpbmcmJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiB0eXBlKQor
ICAgICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAg
ICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCiAgICAgewogICAgIH0KQEAgLTUyLDE4ICs1Miwy
NCBAQCBwdWJsaWM6CiAgICAgVHlwZURlZmluaXRpb24oY29uc3QgVHlwZURlZmluaXRpb24mKSA9
IGRlbGV0ZTsKICAgICBUeXBlRGVmaW5pdGlvbihUeXBlRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7
CiAKLSAgICBBU1Q6OlR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CisgICAgYm9vbCBp
c1R5cGVEZWZpbml0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAg
c3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBBU1Q6OlVu
bmFtZWRUeXBlKiB0eXBlKCkgeyByZXR1cm4gbV90eXBlLmdldCgpOyB9CisKKyAgICBjb25zdCBU
eXBlJiB1bmlmeU5vZGUoKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBBU1NFUlQobV90
eXBlKTsKKyAgICAgICAgcmV0dXJuIG1fdHlwZS0+dW5pZnlOb2RlKCk7CisgICAgfQorCisgICAg
VHlwZSYgdW5pZnlOb2RlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3R5cGUp
OworICAgICAgICByZXR1cm4gbV90eXBlLT51bmlmeU5vZGUoKTsKICAgICB9CiAKIHByaXZhdGU6
Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gbV90eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlVubmFtZWRUeXBlPiBtX3R5cGU7CiB9OwogCiB9CkBAIC03Miw0ICs3OCw2IEBAIHByaXZhdGU6
CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9OQU1FRF9UWVBFKFR5cGVEZWZp
bml0aW9uLCBpc1R5cGVEZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJl
bmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTY4OWI0YTc3
ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
SExTTFR5cGVSZWZlcmVuY2UuaCIKKworI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0
aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFt
ZXNwYWNlIEFTVCB7CisKK3N0ZDo6dW5pcXVlX3B0cjxUeXBlUmVmZXJlbmNlPiBUeXBlUmVmZXJl
bmNlOjp3cmFwKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgTmFtZWRUeXBlJiByZXNvbHZlZFR5cGUp
Cit7CisgICAgVHlwZUFyZ3VtZW50cyB0eXBlQXJndW1lbnRzOworICAgIGlmIChpczxOYXRpdmVU
eXBlRGVjbGFyYXRpb24+KHJlc29sdmVkVHlwZSkpCisgICAgICAgIHR5cGVBcmd1bWVudHMgPSBB
U1Q6OmNsb25lKGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocmVzb2x2ZWRUeXBlKS50
eXBlQXJndW1lbnRzKCkpOworICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxUeXBl
UmVmZXJlbmNlPihXVEZNb3ZlKG9yaWdpbiksIFN0cmluZyhyZXNvbHZlZFR5cGUubmFtZSgpKSwg
V1RGTW92ZSh0eXBlQXJndW1lbnRzKSk7CisgICAgcmVzdWx0LT5zZXRSZXNvbHZlZFR5cGUocmVz
b2x2ZWRUeXBlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9CisKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFR5cGVSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAppbmRleCA0OTQ0MWQ4YjVjNy4uMDI4NDJmNmY5ZDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFR5cGVSZWZlcmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKQEAgLTI4LDggKzI4LDggQEAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5o
IgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVk
VHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0zOCwxMCArMzgsMTIgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNl
IEFTVCB7CiAKLWNsYXNzIFR5cGVSZWZlcmVuY2UgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBOYW1l
ZFR5cGU7CisKK2NsYXNzIFR5cGVSZWZlcmVuY2UgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVi
bGljOgogICAgIFR5cGVSZWZlcmVuY2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBu
YW1lLCBUeXBlQXJndW1lbnRzJiYgdHlwZUFyZ3VtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihX
VEZNb3ZlKG9yaWdpbikpCisgICAgICAgIDogVW5uYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pKQog
ICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQogICAgICAgICAsIG1fdHlwZUFyZ3VtZW50
cyhXVEZNb3ZlKHR5cGVBcmd1bWVudHMpKQogICAgIHsKQEAgLTUyLDI0ICs1NCw0NSBAQCBwdWJs
aWM6CiAgICAgVHlwZVJlZmVyZW5jZShjb25zdCBUeXBlUmVmZXJlbmNlJikgPSBkZWxldGU7CiAg
ICAgVHlwZVJlZmVyZW5jZShUeXBlUmVmZXJlbmNlJiYpID0gZGVmYXVsdDsKIAorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gd3JhcChMZXhlcjo6VG9rZW4mJiBvcmln
aW4sIE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBlKTsKKwogICAgIGJvb2wgaXNUeXBlUmVmZXJlbmNl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgU3RyaW5nJiBuYW1lKCkg
eyByZXR1cm4gbV9uYW1lOyB9CiAgICAgVHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cygpIHsg
cmV0dXJuIG1fdHlwZUFyZ3VtZW50czsgfQorICAgIE5hbWVkVHlwZSogcmVzb2x2ZWRUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZFR5cGU7IH0KKworICAgIGNvbnN0IFR5cGUmIHVuaWZ5
Tm9kZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV9yZXNvbHZlZFR5
cGUpOworICAgICAgICByZXR1cm4gbV9yZXNvbHZlZFR5cGUtPnVuaWZ5Tm9kZSgpOworICAgIH0K
KworICAgIFR5cGUmIHVuaWZ5Tm9kZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQo
bV9yZXNvbHZlZFR5cGUpOworICAgICAgICByZXR1cm4gbV9yZXNvbHZlZFR5cGUtPnVuaWZ5Tm9k
ZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlc29sdmVkVHlwZShOYW1lZFR5cGUmIHJl
c29sdmVkVHlwZSkKKyAgICB7CisgICAgICAgIG1fcmVzb2x2ZWRUeXBlID0gJnJlc29sdmVkVHlw
ZTsKKyAgICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gY2xvbmVUeXBl
UmVmZXJlbmNlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PFR5cGVSZWZlcmVuY2U+KExleGVyOjpUb2tlbihtX29yaWdpbiksIFN0cmluZyhtX25hbWUpLCBB
U1Q6OmNsb25lKG1fdHlwZUFyZ3VtZW50cykpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxUeXBlUmVmZXJlbmNlPihMZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBTdHJpbmcobV9uYW1l
KSwgQVNUOjpjbG9uZShtX3R5cGVBcmd1bWVudHMpKTsKICAgICB9CiAKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQorICAgIHN0ZDo6dW5pcXVlX3B0cjxV
bm5hbWVkVHlwZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJu
IGNsb25lVHlwZVJlZmVyZW5jZSgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9r
ZW4gbV9vcmlnaW47CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBUeXBlQXJndW1lbnRzIG1fdHlw
ZUFyZ3VtZW50czsKKyAgICBOYW1lZFR5cGUqIG1fcmVzb2x2ZWRUeXBlIHsgbnVsbHB0ciB9Owog
fTsKIAogfQpAQCAtNzgsNiArMTAxLDYgQEAgcHJpdmF0ZToKIAogfQogCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dITFNMX1RZUEUoVHlwZVJlZmVyZW5jZSwgaXNUeXBlUmVmZXJlbmNlKCkpCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShUeXBlUmVmZXJlbmNlLCBp
c1R5cGVSZWZlcmVuY2UoKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTllMzI5ZjEyMzUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVk
VHlwZS5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hM
U0xOb2RlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
bmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIFVubmFtZWRUeXBlIDogcHVibGljIFR5cGUgeworcHVi
bGljOgorICAgIFVubmFtZWRUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbikKKyAgICAgICAgOiBt
X29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgflVu
bmFtZWRUeXBlKCkgPSBkZWZhdWx0OworCisgICAgVW5uYW1lZFR5cGUoY29uc3QgVW5uYW1lZFR5
cGUmKSA9IGRlbGV0ZTsKKyAgICBVbm5hbWVkVHlwZShVbm5hbWVkVHlwZSYmKSA9IGRlZmF1bHQ7
CisKKyAgICBib29sIGlzVW5uYW1lZFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisgICAgdmlydHVhbCBib29sIGlzVHlwZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQXJyYXlUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZWZlcmVuY2VUeXBlKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgY29uc3QgVHlwZSYgdW5pZnlOb2RlKCkg
Y29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB2aXJ0dWFsIFR5cGUmIHVuaWZ5Tm9kZSgpIHsg
cmV0dXJuICp0aGlzOyB9CisKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlw
ZT4gY2xvbmUoKSBjb25zdCA9IDA7CisKKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisKK3ByaXZhdGU6CisgICAgTGV4ZXI6OlRva2Vu
IG1fb3JpZ2luOworfTsKKworfQorCit9CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXSExTTDo6QVNUOjpUb1ZhbHVl
VHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6V0hMU0w6
OkFTVDo6VW5uYW1lZFR5cGUmIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGljYXRlOyB9IFwKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExT
TF9UWVBFKFVubmFtZWRUeXBlLCBpc1VubmFtZWRUeXBlKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uYjFjYTk2MmY3NzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRl
cmFsLmNwcApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUp
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxp
dGVyYWwuaCIKKworI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2ludDY0X3QgVW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbDo6dmFsdWVGb3JTZWxlY3RlZFR5cGUoKSBjb25zdAoreworICAgIEFTU0VSVCht
X3R5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2Fz
dDxUeXBlUmVmZXJlbmNlPigqbV90eXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBBU1NFUlQodHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0
aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNv
bHZlZFR5cGUoKSk7CisgICAgcmV0dXJuIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5mb3JtYXRWYWx1
ZUZyb21VbnNpZ25lZEludGVnZXIoKShtX3ZhbHVlKTsKK30KKworfQorCit9CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgKaW5kZXggNThkNmUy
MzA3NWUuLjFhNmMxZTNlODgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbC5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIK
ICNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJM
aXRlcmFsVHlwZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDIxICs0MCwzNyBA
QCBuYW1lc3BhY2UgQVNUIHsKIGNsYXNzIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwgOiBwdWJsaWMg
RXhwcmVzc2lvbiB7CiBwdWJsaWM6CiAgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbChMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIHVuc2lnbmVkIHZhbHVlKQotICAgICAgICA6IEV4cHJlc3Npb24oV1RG
TW92ZShvcmlnaW4pKQorICAgICAgICA6IEV4cHJlc3Npb24oTGV4ZXI6OlRva2VuKG9yaWdpbikp
CisgICAgICAgICwgbV90eXBlKFdURk1vdmUob3JpZ2luKSwgdmFsdWUpCiAgICAgICAgICwgbV92
YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQogCiAgICAgdmlydHVhbCB+VW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbCgpID0gZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0IFVuc2lnbmVkSW50ZWdlckxpdGVy
YWwoY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpID0gZGVmYXVsdDsKKyAgICBVbnNpZ25l
ZEludGVnZXJMaXRlcmFsKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKSA9IGRlbGV0ZTsK
ICAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsKFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmJikgPSBk
ZWZhdWx0OwogCisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgb3BlcmF0b3I9KGNvbnN0IFVu
c2lnbmVkSW50ZWdlckxpdGVyYWwmKSA9IGRlbGV0ZTsKKyAgICBVbnNpZ25lZEludGVnZXJMaXRl
cmFsJiBvcGVyYXRvcj0oVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CisKKyAg
ICBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYgdHlwZSgpIHsgcmV0dXJuIG1fdHlwZTsgfQog
ICAgIHVuc2lnbmVkIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogCiAgICAgYm9v
bCBpc1Vuc2lnbmVkSW50ZWdlckxpdGVyYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CiAKKyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsIGNsb25lKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwgcmVzdWx0KExleGVyOjpUb2tlbihvcmlnaW4o
KSksIG1fdmFsdWUpOworICAgICAgICBpZiAocmVzdWx0Lm1fdHlwZS5yZXNvbHZlZFR5cGUoKSkK
KyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUucmVzb2x2ZShyZXN1bHQubV90eXBlLnJlc29sdmVk
VHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBp
bnQ2NF90IHZhbHVlRm9yU2VsZWN0ZWRUeXBlKCkgY29uc3Q7CisKIHByaXZhdGU6CisgICAgVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUgbV90eXBlOwogICAgIHVuc2lnbmVkIG1fdmFsdWU7CiB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI0Y2NmNTlkNTE1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCkBAIC0wLDAgKzEsNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbFR5cGU6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKExleGVyOjpUb2tl
biYmIG9yaWdpbiwgdW5zaWduZWQgdmFsdWUpCisgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICwg
bV9wcmVmZXJyZWRUeXBlKHN0ZDo6bWFrZV91bmlxdWU8VHlwZVJlZmVyZW5jZT4oV1RGTW92ZShv
cmlnaW4pLCBTdHJpbmcoInVpbnQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgVHlw
ZUFyZ3VtZW50cygpKSkKK3sKK30KKworVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6On5VbnNp
Z25lZEludGVnZXJMaXRlcmFsVHlwZSgpID0gZGVmYXVsdDsKKworYm9vbCBVbnNpZ25lZEludGVn
ZXJMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShjb25zdCBUeXBlJiB0eXBlKSBjb25zdAoreworICAg
IGlmICghaXM8TmFtZWRUeXBlPih0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1
dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PE5hbWVkVHlwZT4odHlwZSk7CisgICAgaWYgKCFpczxO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNJ
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0
aW9uLmlzU2lnbmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5jYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoKShtX3ZhbHVlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit9CisKK30KKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42ZDI0MjVlYmRmZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMUmVzb2x2YWJsZVR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNU
IHsKKworY2xhc3MgVHlwZVJlZmVyZW5jZTsKKworY2xhc3MgVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bFR5cGUgOiBwdWJsaWMgUmVzb2x2YWJsZVR5cGUgeworcHVibGljOgorICAgIFVuc2lnbmVkSW50
ZWdlckxpdGVyYWxUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgdW5zaWduZWQgdmFsdWUpOwor
CisgICAgdmlydHVhbCB+VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoKTsKKworICAgIFVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJikg
PSBkZWxldGU7CisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGUmIG9wZXJhdG9yPShjb25zdCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYpID0gZGVsZXRl
OworICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJiBvcGVyYXRvcj0oVW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc1Vuc2lnbmVkSW50ZWdl
ckxpdGVyYWxUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgVHlw
ZVJlZmVyZW5jZSYgcHJlZmVycmVkVHlwZSgpIHsgcmV0dXJuICptX3ByZWZlcnJlZFR5cGU7IH0K
KworICAgIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisKK3By
aXZhdGU6CisgICAgdW5zaWduZWQgbV92YWx1ZTsKKyAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0
ciB0byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCisgICAgLy8gQ29uc3Rh
bnRFeHByZXNzaW9uIC0+IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2UgLT4gVHlwZUFyZ3Vt
ZW50cyAtPiBDb25zdGFudEV4cHJlc3Npb24KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVy
ZW5jZT4gbV9wcmVmZXJyZWRUeXBlOworfTsKKworfQorCit9CisKK30KKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19XSExTTF9SRVNPTFZBQkxFX1RZUEUoVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGUsIGlzVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoKSkKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYWx1ZS5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFsdWUuaAppbmRl
eCA2ZTBlYTkxZmMxZC4uYWYyOWM4MTE4ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFsdWUuaApAQCAtNDYsNiArNDYsOSBAQCBw
dWJsaWM6CiAgICAgZXhwbGljaXQgVmFsdWUoY29uc3QgVmFsdWUmKSA9IGRlZmF1bHQ7CiAgICAg
VmFsdWUoVmFsdWUmJikgPSBkZWZhdWx0OwogCisgICAgVmFsdWUmIG9wZXJhdG9yPShjb25zdCBW
YWx1ZSYpID0gZGVmYXVsdDsKKyAgICBWYWx1ZSYgb3BlcmF0b3I9KFZhbHVlJiYpID0gZGVmYXVs
dDsKKwogcHJpdmF0ZToKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaApp
bmRleCBmZjAzNjgxOTNiZC4uN2Y0YTM1YjYwYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURl
Y2xhcmF0aW9uLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFZh
cmlhYmxlRGVjbGFyYXRpb24gOiBwdWJsaWMgVmFsdWUgewogcHVibGljOgotICAgIFZhcmlhYmxl
RGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVy
cywgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRp
b25hbDxTZW1hbnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYg
aW5pdGlhbGl6ZXIpCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmln
aW4sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVk
VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4mJiBzZW1hbnRp
Yywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5pdGlhbGl6ZXIpCiAgICAgICAgIDog
bV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZNb3Zl
KHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAtNTksMjEg
KzU5LDI0IEBAIHB1YmxpYzoKICAgICBWYXJpYWJsZURlY2xhcmF0aW9uKGNvbnN0IFZhcmlhYmxl
RGVjbGFyYXRpb24mKSA9IGRlbGV0ZTsKICAgICBWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxl
RGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OwogCi0gICAgTGV4ZXI6OlRva2VuIG9yaWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4o
KSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJu
IG1fbmFtZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBV
bm5hbWVkVHlwZSYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX3R5cGU7IH0KICAgICBPcHRpb25h
bDxTZW1hbnRpYz4mIHNlbWFudGljKCkgeyByZXR1cm4gbV9zZW1hbnRpYzsgfQogICAgIEV4cHJl
c3Npb24qIGluaXRpYWxpemVyKCkgeyByZXR1cm4gbV9pbml0aWFsaXplci5nZXQoKTsgfQogCiBw
cml2YXRlOgogICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBRdWFsaWZpZXJzIG1fcXVh
bGlmaWVyczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiBtX3R5cGU7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAgICBTdHJpbmcgbV9uYW1l
OwogICAgIE9wdGlvbmFsPFNlbWFudGljPiBtX3NlbWFudGljOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxFeHByZXNzaW9uPiBtX2luaXRpYWxpemVyOwogfTsKIAordXNpbmcgVmFyaWFibGVEZWNsYXJh
dGlvbnMgPSBWZWN0b3I8VmFyaWFibGVEZWNsYXJhdGlvbj47CisKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVS
ZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFZhcmlhYmxlUmVmZXJlbmNlLmgKaW5kZXggMmFlODI4ZDUyOTUuLmUzOWVjZjVjNTlmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJp
YWJsZVJlZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2lmIEVO
QUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRp
b24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJX
SExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCkBAIC01NSwxOSArNTUsMjEgQEAgcHVibGljOgogICAg
IHN0YXRpYyBWYXJpYWJsZVJlZmVyZW5jZSB3cmFwKFZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlh
YmxlRGVjbGFyYXRpb24pCiAgICAgewogICAgICAgICBWYXJpYWJsZVJlZmVyZW5jZSByZXN1bHQo
TGV4ZXI6OlRva2VuKHZhcmlhYmxlRGVjbGFyYXRpb24ub3JpZ2luKCkpKTsKLSAgICAgICAgcmVz
dWx0Lm1fdmFyaWFibGUgPSB7ICZ2YXJpYWJsZURlY2xhcmF0aW9uIH07CisgICAgICAgIHJlc3Vs
dC5tX3ZhcmlhYmxlID0gJnZhcmlhYmxlRGVjbGFyYXRpb247CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCi0gICAgc3RhdGljIFZhcmlhYmxlUmVmZXJlbmNlIHdyYXAoQW5vbnltb3Vz
VmFyaWFibGVEZWNsYXJhdGlvbiYgYW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbikKKyAgICBi
b29sIGlzVmFyaWFibGVSZWZlcmVuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CisKKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KKworICAgIFZhcmlhYmxl
RGVjbGFyYXRpb24qIHZhcmlhYmxlKCkgeyByZXR1cm4gbV92YXJpYWJsZTsgfQorCisgICAgdm9p
ZCBzZXRWYXJpYWJsZShWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQog
ICAgIHsKLSAgICAgICAgVmFyaWFibGVSZWZlcmVuY2UgcmVzdWx0KExleGVyOjpUb2tlbihhbm9u
eW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLm9yaWdpbigpKSk7Ci0gICAgICAgIHJlc3VsdC5tX3Zh
cmlhYmxlID0geyAmYW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiB9OwotICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICBtX3ZhcmlhYmxlID0gJnZhcmlhYmxlRGVjbGFyYXRpb247CiAg
ICAgfQogCi0gICAgYm9vbCBpc1ZhcmlhYmxlUmVmZXJlbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQotCiBwcml2YXRlOgogICAgIFZhcmlhYmxlUmVmZXJlbmNlKExleGVyOjpU
b2tlbiYmIG9yaWdpbikKICAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKQEAg
LTc1LDcgKzc3LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBTdHJpbmcgbV9uYW1lOwotICAg
IE9wdGlvbmFsPFZhcmlhbnQ8VmFyaWFibGVEZWNsYXJhdGlvbiosIEFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24qPj4gbV92YXJpYWJsZTsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uKiBtX3Zh
cmlhYmxlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmQ1ZWYzNzU2NzUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENo
ZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hM
U0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgorCisjaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVy
ZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNM
SW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2Jvb2wgY2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+PiBmdW5jdGlvbnM7CisgICAg
Zm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlv
bnMoKSkKKyAgICAgICAgZnVuY3Rpb25zLmFwcGVuZCgqZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAg
ICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zKCkpCisgICAgICAgIGZ1bmN0aW9ucy5hcHBlbmQoKm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24pOworCisgICAgc3RkOjpzb3J0KGZ1bmN0aW9ucy5iZWdpbigpLCBm
dW5jdGlvbnMuZW5kKCksIFtdKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgYSwgY29u
c3QgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBiKSAtPiBib29sIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN0ZDo6bWluKGEubmFtZSgpLmxlbmd0aCgpLCBiLm5hbWUoKS5s
ZW5ndGgoKSk7ICsraSkgeworICAgICAgICAgICAgaWYgKGEubmFtZSgpW2ldIDwgYi5uYW1lKClb
aV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBpZiAoYS5uYW1l
KClbaV0gPiBiLm5hbWUoKVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGEubmFtZSgpLmxlbmd0aCgpIDwgYi5uYW1lKCkubGVuZ3Ro
KCk7CisgICAgfSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgZnVuY3Rpb25zLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSAh
PSBmdW5jdGlvbnNbal0uZ2V0KCkubmFtZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgaWYgKGlzPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oZnVuY3Rpb25z
W2ldLmdldCgpKSAmJiBpczxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KGZ1bmN0aW9u
c1tqXS5nZXQoKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAo
ZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gZnVuY3Rpb25zW2pdLmdl
dCgpLnBhcmFtZXRlcnMoKS5zaXplKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLmlzQ2FzdCgpKSB7CisgICAgICAgICAgICAg
ICAgYm9vbCBzYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rp
b25zW2ldLmdldCgpLnR5cGUoKSwgZnVuY3Rpb25zW2pdLmdldCgpLnR5cGUoKSkpCisgICAgICAg
ICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBmdW5jdGlvbnNbaV0uZ2V0KCku
cGFyYW1ldGVycygpLnNpemUoKTsgKytrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IW1hdGNoZXMoZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50eXBlKCksIGZ1bmN0
aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgpKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2FtZSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBib29sIHNhbWUgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGsgPSAw
OyBrIDwgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraykgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRl
cnMoKVtrXS50eXBlKCksIGZ1bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgp
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYgKHNhbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yJltdIiAmJiBmdW5jdGlvbnNb
aV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCisgICAgICAgICAgICAmJiBpczxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50
eXBlKCkpKSB7CisgICAgICAgICAgICBhdXRvJiB0eXBlID0gZnVuY3Rpb25zW2ldLmdldCgpLnBh
cmFtZXRlcnMoKVsxXS50eXBlKCk7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJl
bmNlPih0eXBlKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiByZXNvbHZlZFR5cGUgPSBk
b3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpLnJlc29sdmVkVHlwZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnJlc29s
dmVkVHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqcmVzb2x2ZWRU
eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24u
bmFtZSgpID09ICJ1aW50IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3Bl
cmF0b3IubGVuZ3RoIiAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9
PSAxCisgICAgICAgICAgICAmJiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KGZ1bmN0aW9u
c1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKQorICAgICAgICAgICAgfHwgaXM8QVNU
OjpBcnJheVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVsc2UgaWYgKGZ1bmN0aW9uc1tp
XS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iCisgICAgICAgICAgICAmJiBmdW5jdGlvbnNb
aV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCisgICAgICAgICAgICAmJiBpczxBU1Q6
OlJlZmVyZW5jZVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgp
KQorICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpWzFdLnR5cGUoKSkKKyAgICAgICAgICAgICYmIG1hdGNoZXMoZnVuY3Rp
b25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCksIGZ1bmN0aW9uc1tpXS5nZXQoKS5w
YXJhbWV0ZXJzKClbMV0udHlwZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5j
dGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tE
dXBsaWNhdGVGdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uN2VjZWU3ODJjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgKQEAgLTAsMCArMSw0
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
I2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK2Jvb2wgY2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3Jh
bSYpOworCit9CisKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi43MWEzNDYxMjY1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKQEAgLTAsMCArMSw2
MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldITFNMQ2hlY2tlci5oIgorCisjaW5jbHVkZSAiV0hMU0xBcnJheVJl
ZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldI
TFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgi
CisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5o
IgorI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0
b3IuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFBPRENo
ZWNrZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgUE9EQ2hlY2tlcigpID0gZGVm
YXVsdDsKKworICAgIHZpcnR1YWwgflBPRENoZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lk
IHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24p
IG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdChlbnVtZXJhdGlvbkRlZmlu
aXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICgh
bmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzTnVtYmVyKCkKKyAgICAgICAgICAgICYmICFuYXRpdmVU
eXBlRGVjbGFyYXRpb24uaXNWZWN0b3IoKQorICAgICAgICAgICAgJiYgIW5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5pc01hdHJpeCgpKQorICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlv
bikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHN0cnVjdHVyZURlZmlu
aXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlw
ZURlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdCh0eXBl
RGVmaW5pdGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJy
YXlUeXBlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoYXJyYXlUeXBl
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHNldEVycm9yKCk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVu
Y2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZl
ZFR5cGUoKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdE5hbWVkVHlwZSgqdHlwZVJlZmVy
ZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgfQorfTsKKworY2xhc3MgQ2hlY2tlciA6IHB1Ymxp
YyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBDaGVja2VyKGNvbnN0IEludHJpbnNpY3MmIGludHJp
bnNpY3MpCisgICAgICAgIDogbV9pbnRyaW5zaWNzKGludHJpbnNpY3MpCisgICAgeworICAgIH0K
KworICAgIH5DaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChQcm9ncmFtJiBw
cm9ncmFtKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlv
biA6IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoKnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZp
bml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKQorICAgICAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KCpzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgZm9yIChhdXRv
JiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMo
KSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZW51bWVyYXRpb25EZWZpbml0aW9u
KTsKKyAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5h
dGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgq
bmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKworICAgICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVm
aW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KCpmdW5jdGlvbkRlZmluaXRpb24pOworICAgICAgICBmb3IgKGF1dG8m
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb25zKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGNoZWNrU2hhZGVyVHlw
ZShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQorICAg
IHsKKyAgICAgICAgc3dpdGNoICgqZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkp
IHsKKyAgICAgICAgY2FzZSBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbjo6RW50cnlQb2ludFR5cGU6
OlZlcnRleDoKKyAgICAgICAgICAgIHJldHVybiAhbV92ZXJ0ZXhFbnRyeVBvaW50cy5hZGQoZnVu
Y3Rpb25EZWZpbml0aW9uLm5hbWUoKSkuaXNOZXdFbnRyeTsKKyAgICAgICAgY2FzZSBBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbjo6RW50cnlQb2ludFR5cGU6OkZyYWdtZW50OgorICAgICAgICAgICAg
cmV0dXJuICFtX2ZyYWdtZW50RW50cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1l
KCkpLmlzTmV3RW50cnk7CisgICAgICAgIGNhc2UgQVNUOjpGdW5jdGlvbkRlZmluaXRpb246OkVu
dHJ5UG9pbnRUeXBlOjpDb21wdXRlOgorICAgICAgICAgICAgcmV0dXJuICFtX2NvbXB1dGVFbnRy
eVBvaW50cy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkuaXNOZXdFbnRyeTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGJvb2wgY2hlY2tTZW1hbnRpY3MoQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIGF1dG8gZW50cnlQb2lu
dEl0ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKG1faW50cmluc2ljcywgZnVuY3Rpb25EZWZp
bml0aW9uKTsKKyAgICAgICAgaWYgKCFlbnRyeVBvaW50SXRlbXMpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGF1dG8gaW5wdXRJdGVtcyA9IFdURk1vdmUoZW50cnlQb2ludEl0
ZW1zLT5pbnB1dHMpOworICAgICAgICBhdXRvIG91dHB1dEl0ZW1zID0gV1RGTW92ZShlbnRyeVBv
aW50SXRlbXMtPm91dHB1dHMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gY2hlY2tE
dXBsaWNhdGVTZW1hbnRpY3MgPSBbJl0oY29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRl
bXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgZmFzdGVy
IHRoYW4gTyhuXjIpLgorICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRl
bXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkg
KyAxOyBqIDwgaXRlbXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpdGVtc1tpXS5zZW1hbnRpYyA9PSBpdGVtc1tqXS5zZW1hbnRpYykKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgaWYgKCFjaGVja0R1cGxpY2F0ZVNlbWFudGljcyhpbnB1dEl0ZW1zKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWNoZWNrRHVw
bGljYXRlU2VtYW50aWNzKG91dHB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGNoZWNrU2VtYW50
aWNUeXBlcyA9IFsmXShjb25zdCBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpdGVtcykgLT4gYm9v
bCB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBhY2NlcHRhYmxlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShjb25zdCBBU1Q6OkJhc2VTZW1hbnRpYyYgc2VtYW50aWMpIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljLmlzQWNjZXB0YWJsZVR5cGUoaXRlbS51
bm5hbWVkVHlwZSwgbV9pbnRyaW5zaWNzKTsKKyAgICAgICAgICAgICAgICAgICAgfSksIGl0ZW0u
c2VtYW50aWMpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2VwdGFibGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICgh
Y2hlY2tTZW1hbnRpY1R5cGVzKGlucHV0SXRlbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY1R5cGVzKG91dHB1dEl0ZW1zKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB7Cisg
ICAgICAgICAgICBhdXRvIGNoZWNrU2VtYW50aWNGb3JTaGFkZXJUeXBlID0gWyZdKGNvbnN0IFZl
Y3RvcjxFbnRyeVBvaW50SXRlbT4mIGl0ZW1zLCBBU1Q6OkJhc2VTZW1hbnRpYzo6U2hhZGVySXRl
bURpcmVjdGlvbiBkaXJlY3Rpb24pIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGZvciAoYXV0
byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWNjZXB0YWJsZSA9
IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgQVNUOjpCYXNlU2VtYW50aWMm
IHNlbWFudGljKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZW1h
bnRpYy5pc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKGRpcmVjdGlvbiwgZnVuY3Rp
b25EZWZpbml0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfSksIGl0ZW0uc2VtYW50aWMpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2VwdGFibGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICghY2hlY2tTZW1hbnRp
Y0ZvclNoYWRlclR5cGUoaW5wdXRJdGVtcywgQVNUOjpCYXNlU2VtYW50aWM6OlNoYWRlckl0ZW1E
aXJlY3Rpb246OklucHV0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBpZiAoIWNoZWNrU2VtYW50aWNGb3JTaGFkZXJUeXBlKG91dHB1dEl0ZW1zLCBBU1Q6OkJh
c2VTZW1hbnRpYzo6U2hhZGVySXRlbURpcmVjdGlvbjo6T3V0cHV0KSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBhdXRv
IGNoZWNrUE9ERGF0YSA9IFsmXShjb25zdCBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpdGVtcykg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgUE9EQ2hlY2tlciBwb2RDaGVja2VyOworICAgICAgICAgICAgICAg
ICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4oaXRlbS51bm5hbWVkVHlwZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBl
KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBl
KCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZT4oaXRlbS51bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBwb2RDaGVj
a2VyLmNoZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBlKGRvd25jYXN0PEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlPihpdGVtLnVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXRVbm5h
bWVkVHlwZShkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4oaXRlbS51bm5hbWVkVHlwZSkudHlwZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb2RDaGVja2VyLmVycm9yKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlm
ICghY2hlY2tQT0REYXRhKGlucHV0SXRlbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGlmICghY2hlY2tQT0REYXRhKG91dHB1dEl0ZW1zKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgZW51bSBj
bGFzcyBDaGVja0tpbmQgeworICAgICAgICAgICAgSW5kZXgsCisgICAgICAgICAgICBEb3QKKyAg
ICAgICAgfTsKKworICAgICAgICBhdXRvIGNoZWNrR2V0dGVyID0gWyZdKENoZWNrS2luZCBraW5k
KSAtPiBib29sIHsKKyAgICAgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBr
aW5kID09IENoZWNrS2luZDo6SW5kZXggPyAyIDogMTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlv
bkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byYgdW5pZnlO
b2RlID0gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkudW5pZnlOb2Rl
KCk7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkgewor
ICAgICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVk
VHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlw
ZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAg
ICBhdXRvIGNoZWNrU2V0dGVyID0gWyZdKENoZWNrS2luZCBraW5kKSAtPiBib29sIHsKKyAgICAg
ICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6
SW5kZXggPyAzIDogMjsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpLnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSA9
IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLnVuaWZ5Tm9kZSgpOwor
ICAgICAgICAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0QXJndW1lbnRVbmlmeU5v
ZGUpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6
OlVubmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMo
ZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSwgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KVswXS50eXBlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBBZGQgZnVuY3Rpb24gcmVzb2x1dGlvbiBjb2RlLgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBjaGVja0FuZGVyID0gWyZdKENo
ZWNrS2luZCBraW5kKSAtPiBib29sIHsKKyAgICAgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBh
cmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6SW5kZXggPyAyIDogMTsKKyAgICAgICAgICAg
IGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSBudW1FeHBlY3Rl
ZFBhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi50
eXBlKCkudW5pZnlOb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlVubmFtZWRU
eXBlPih1bmlmeU5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBl
Pih1bmlmeU5vZGUpOworICAgICAgICAgICAgICAgIGlmICghaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0g
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkudW5pZnlOb2RlKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYXV0byYgdW5u
YW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAg
ICAgICAgICAgIGlmICghaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpICYmICFpczxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAgIGlmICghZnVuY3Rpb25EZWZpbml0
aW9uLmlzT3BlcmF0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
ZnVuY3Rpb25EZWZpbml0aW9uLmlzQ2FzdCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcisrIgorICAg
ICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ItLSIpIHsK
KyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAh
PSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghbWF0
Y2hlcyhmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgZnVuY3Rpb25E
ZWZpbml0aW9uLnR5cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yKyIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLSIpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRl
ZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSAxCisgICAgICAgICAgICAgICAgJiYgZnVu
Y3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IqIgorICAgICAg
ICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IvIgorICAgICAg
ICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IlIgorICAgICAg
ICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ImIgorICAgICAg
ICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3J8IgorICAgICAg
ICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JeIgorICAgICAg
ICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I8PCIKKyAgICAg
ICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wcmVhdG9yPj4iKSB7Cisg
ICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0g
MikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3J+IikgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpICE9IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmlu
aXRpb24ubmFtZSgpID09ICJvcGVyYXRvcjwiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmlu
aXRpb24ubmFtZSgpID09ICJvcGVyYXRvcjw9IgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZp
bml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I+IgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZp
bml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I+PSIpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlv
bkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSAyKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbkRlZmluaXRpb24u
dHlwZSgpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW10iKSB7CisgICAgICAgICAg
ICBpZiAoIWNoZWNrR2V0dGVyKENoZWNrS2luZDo6SW5kZXgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdPSIpIHsKKyAgICAg
ICAgICAgIGlmICghY2hlY2tTZXR0ZXIoQ2hlY2tLaW5kOjpJbmRleCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yJltdIikgewor
ICAgICAgICAgICAgaWYgKCFjaGVja0FuZGVyKENoZWNrS2luZDo6SW5kZXgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLnN0YXJ0c1dpdGgoIm9wZXJh
dG9yLiIpKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5lbmRz
V2l0aCgiPSIpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVja1NldHRlcihDaGVja0tpbmQ6
OkRvdCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVja0dldHRlcihDaGVja0tpbmQ6OkRvdCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmlu
aXRpb24ubmFtZSgpLnN0YXJ0c1dpdGgoIm9wZXJhdG9yJi4iKSkgeworICAgICAgICAgICAgaWYg
KCFjaGVja0FuZGVyKENoZWNrS2luZDo6RG90KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYg
ZnVuY3Rpb25EZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGZ1bmN0aW9u
RGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrU2hh
ZGVyVHlwZShmdW5jdGlvbkRlZmluaXRpb24pKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAoIWNoZWNrU2VtYW50aWNzKGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKKyAgICAgICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWNoZWNrT3BlcmF0b3JPdmVybG9hZChmdW5jdGlvbkRlZmlu
aXRpb24pKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlv
bik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYg
ZW51bWVyYXRpb25EZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0VW5uYW1lZFR5cGUoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSk7CisKKyAg
ICAgICAgYXV0byYgYmFzZVR5cGUgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpLnVuaWZ5
Tm9kZSgpOworCisgICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4oYmFzZVR5cGUpKSB7
CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGF1dG8mIHVubmFtZWRCYXNlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4o
YmFzZVR5cGUpOworICAgICAgICBpZiAoIWlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZEJh
c2UpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2VCYXNlID0gZG93bmNhc3Q8QVNUOjpU
eXBlUmVmZXJlbmNlPih1bm5hbWVkQmFzZSk7CisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNl
QmFzZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGlmICghaXM8QVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUoKSkpIHsKKyAgICAgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
YXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGlm
ICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzSW50KCkpIHsKKyAgICAgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGVudW1l
cmF0aW9uTWVtYmVycyA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1lbWJlcnMo
KTsKKworICAgICAgICBmb3IgKGF1dG8mIG1lbWJlciA6IGVudW1lcmF0aW9uTWVtYmVycykgewor
ICAgICAgICAgICAgaWYgKCFtZW1iZXIuZ2V0KCkudmFsdWUoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgYm9vbCBzdWNjZXNzOworICAgICAgICAgICAgbWVtYmVy
LmdldCgpLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGF1dG8mIHZhbHVlKSB7
CisgICAgICAgICAgICAgICAgdmlzaXQodmFsdWUpOworICAgICAgICAgICAgICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmdmFsdWUpOworICAgICAgICAgICAgICAgIEFTU0VSVChp
dGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBX
VEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFt
ZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2hlcygqdW5uYW1lZFR5cGUsIGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAg
ICAgICAgICAgfSwgWyZdKFJlc29sdmFibGVUeXBlUmVmZXJlbmNlJiByZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxib29sPihtYXRjaEFuZENvbW1pdChlbnVtZXJhdGlvbkRlZmluaXRpb24sIHJlc29sdmFibGVU
eXBlUmVmZXJlbmNlLnJlc29sdmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9KSwgaXRl
cmF0b3ItPnZhbHVlKTsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIGlmICghc3VjY2Vz
cykgeworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50NjRfdCBuZXh0VmFsdWUg
PSAwOworICAgICAgICBmb3IgKGF1dG8mIG1lbWJlciA6IGVudW1lcmF0aW9uTWVtYmVycykgewor
ICAgICAgICAgICAgaWYgKG1lbWJlci5nZXQoKS52YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAg
aW50NjRfdCB2YWx1ZTsKKyAgICAgICAgICAgICAgICBtZW1iZXIuZ2V0KCkudmFsdWUoKS0+dmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVy
YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZUZv
clNlbGVjdGVkVHlwZSgpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50
ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCk7
CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0o
QVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
IH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
JikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAgbmV4dFZhbHVlID0gbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnN1Y2Nlc3NvcigpKHZhbHVlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgbWVtYmVyLmdldCgpLnNldFZhbHVlKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKEFT
VDo6SW50ZWdlckxpdGVyYWwoTGV4ZXI6OlRva2VuKG1lbWJlci5nZXQoKS5vcmlnaW4oKSksIG5l
eHRWYWx1ZSkpKTsKKyAgICAgICAgICAgICAgICBuZXh0VmFsdWUgPSBuYXRpdmVUeXBlRGVjbGFy
YXRpb24uc3VjY2Vzc29yKCkobmV4dFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW51bWVyYXRpb25NZW1iZXJzLnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICBhdXRvJiBtZW1iZXIgPSBlbnVtZXJhdGlvbk1lbWJlcnNb
aV0uZ2V0KCk7CisgICAgICAgICAgICBBU1NFUlQobWVtYmVyLnZhbHVlKCkpOworICAgICAgICAg
ICAgaW50NjRfdCB2YWx1ZTsKKyAgICAgICAgICAgIG1lbWJlci52YWx1ZSgpLT52aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgewor
ICAgICAgICAgICAgICAgIHZhbHVlID0gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAg
ICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxp
dGVyYWwpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwu
dmFsdWUoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYpIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6
Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGVudW1lcmF0aW9uTWVtYmVycy5zaXplKCk7ICsraikg
eworICAgICAgICAgICAgICAgIGF1dG8mIG90aGVyTWVtYmVyID0gZW51bWVyYXRpb25NZW1iZXJz
W2pdLmdldCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChvdGhlck1lbWJlci52YWx1ZSgpKTsK
KyAgICAgICAgICAgICAgICBib29sIGZhaWwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBvdGhl
ck1lbWJlci52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJM
aXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICBmYWlsID0gdmFs
dWUgPT0gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNU
OjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZhaWwgPSB2YWx1ZSA9PSB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZh
bHVlKCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9
LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwm
KSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVm
ZXJlbmNlJikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAgaWYgKGZhaWwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
Zm91bmRaZXJvID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgbWVtYmVyIDogZW51bWVyYXRp
b25NZW1iZXJzKSB7CisgICAgICAgICAgICBBU1NFUlQobWVtYmVyLmdldCgpLnZhbHVlKCkpOwor
ICAgICAgICAgICAgbWVtYmVyLmdldCgpLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGludGVnZXJMaXRlcmFsLnZhbHVlKCkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAg
Zm91bmRaZXJvID0gdHJ1ZTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpID09IDApCisgICAgICAgICAgICAgICAgICAg
IGZvdW5kWmVybyA9IHRydWU7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwm
KSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9
LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJikgeworICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSwgWyZdKEFT
VDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9KSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFmb3VuZFplcm8pIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6UG9pbnRlclR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gRm9sbG93aW5n
IHBvaW50ZXIgdHlwZXMgY2FuIGNhdXNlIGluZmluaXRlIGxvb3BzIGJlY2F1c2Ugb2YgZGF0YSBz
dHJ1Y3R1cmVzCisgICAgICAgIC8vIGxpa2UgbGlua2VkIGxpc3RzLgorICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgLy8gRm9sbG93aW5nIGFycmF5IHJlZmVyZW5jZSB0eXBlcyBjYW4gY2F1c2UgaW5maW5pdGUg
bG9vcHMgYmVjYXVzZSBvZiBkYXRhCisgICAgICAgIC8vIHN0cnVjdHVyZXMgbGlrZSBsaW5rZWQg
bGlzdHMuCisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRl
Z2VyTGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gcmVmID0gYWRvcHRSZWYo
Km5ldyBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShpbnRlZ2VyTGl0ZXJhbC50eXBlKCkpKTsKKyAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZpbnRlZ2VyTGl0ZXJhbCwgV1RG
TW92ZShyZWYpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGF1dG8gcmVmID0gYWRvcHRSZWYoKm5ldyBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSh1bnNpZ25l
ZEludGVnZXJMaXRlcmFsLnR5cGUoKSkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlw
ZU1hcC5hZGQoJnVuc2lnbmVkSW50ZWdlckxpdGVyYWwsIFdURk1vdmUocmVmKSk7CisgICAgICAg
IEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgYXV0byByZWYgPSBhZG9wdFJlZigqbmV3IFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlKGZsb2F0TGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX3R5cGVNYXAuYWRkKCZmbG9hdExpdGVyYWwsIFdURk1vdmUocmVmKSk7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGF1dG8gcmVmID0gYWRvcHRSZWYoKm5ldyBSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZShudWxsTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5
cGVNYXAuYWRkKCZudWxsTGl0ZXJhbCwgV1RGTW92ZShyZWYpKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lk
IHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZib29sZWFuTGl0ZXJh
bCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihib29sZWFuTGl0ZXJhbC5v
cmlnaW4oKSksIG1faW50cmluc2ljcy5ib29sVHlwZSgpKSk7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2
aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBj
b25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIEFTU0VSVChjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJl
ZmVyZW5jZS5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgIGF1dG8mIGVudW1lcmF0
aW9uRGVmaW5pdGlvbiA9ICpjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZS5lbnVtZXJhdGlvbkRlZmluaXRpb24oKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X3R5cGVNYXAuYWRkKCZjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5j
ZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihjb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5p
dGlvbikpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3
RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBl
UmVmZXJlbmNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2Uu
cmVzb2x2ZWRUeXBlKCkpOworCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlUmVmZXJl
bmNlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY2xhc3MgUmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4geworICAgIHB1
YmxpYzoKKyAgICAgICAgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UoQVNUOjpSZXNvbHZhYmxlVHlw
ZSYgcmVzb2x2YWJsZVR5cGUpCisgICAgICAgICAgICA6IG1fcmVzb2x2YWJsZVR5cGUoJnJlc29s
dmFibGVUeXBlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZShjb25zdCBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYpID0gZGVsZXRlOworICAg
ICAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYmKSA9
IGRlbGV0ZTsKKworICAgICAgICBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSgp
IHsgcmV0dXJuICptX3Jlc29sdmFibGVUeXBlOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBB
U1Q6OlJlc29sdmFibGVUeXBlKiBtX3Jlc29sdmFibGVUeXBlOworICAgIH07CisKKyAgICB1c2lu
ZyBSZXNvbHZpbmdUeXBlID0gVmFyaWFudDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlw
ZT4sIFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4+OworCisgICAgLypjbGFzcyBSZXNvbHZp
bmdUeXBlSGFzaFRyYWl0cyA6IHB1YmxpYyBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8UmVzb2x2aW5n
VHlwZT4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUmVzb2x2aW5nVHlwZSYg
ZW1wdHlWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlc29sdmluZ1R5cGU+IGVtcHR5
VmFsdWU7CisgICAgICAgICAgICByZXR1cm4gZW1wdHlWYWx1ZS5nZXQoKTsKKyAgICAgICAgfQor
CisgICAgICAgIHR5cGVkZWYgUmVzb2x2aW5nVHlwZSYgUGVla1R5cGU7CisgICAgICAgIHN0YXRp
YyBQZWVrVHlwZSBwZWVrKFJlc29sdmluZ1R5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfQor
ICAgICAgICB0eXBlZGVmIFJlc29sdmluZ1R5cGUmJiBUYWtlVHlwZTsKKyAgICAgICAgc3RhdGlj
IFRha2VUeXBlIHRha2UoUmVzb2x2aW5nVHlwZSYmIHZhbHVlKSB7IHJldHVybiBXVEZNb3ZlKHZh
bHVlKTsgfQorICAgIH07Ki8KKworICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgUmVzb2x2
aW5nVHlwZSAvKiwgV1RGOjpQdHJIYXNoPEFTVDo6RXhwcmVzc2lvbio+LCBXVEY6Okhhc2hUcmFp
dHM8QVNUOjpFeHByZXNzaW9uKj4sIFJlc29sdmluZ1R5cGVIYXNoVHJhaXRzKi8+IG1fdHlwZU1h
cDsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV92ZXJ0ZXhFbnRyeVBvaW50czsKKyAgICBIYXNoU2V0
PFN0cmluZz4gbV9mcmFnbWVudEVudHJ5UG9pbnRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2Nv
bXB1dGVFbnRyeVBvaW50czsKKyAgICBjb25zdCBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7Cit9
OworCitib29sIGNoZWNrKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgQ2hlY2tlciBjaGVja2Vy
KHByb2dyYW0uaW50cmluc2ljcygpKTsKKyAgICBjaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChw
cm9ncmFtKTsKKyAgICByZXR1cm4gIWNoZWNrZXIuZXJyb3IoKTsKK30KKworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENo
ZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWQyNjhkNzM0
MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTENoZWNrZXIuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK2Jvb2wgY2hlY2soUHJvZ3JhbSYpOwor
Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEwOGM2NWZmMmY1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRo
ZXJFbnRyeVBvaW50SXRlbXMuY3BwCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
IEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEdh
dGhlckVudHJ5UG9pbnRJdGVtcy5oIgorCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgor
I2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEdhdGhlcmVy
IDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIEdhdGhlcmVyKGNvbnN0IEludHJpbnNp
Y3MmIGludHJpbnNpY3MsIEFTVDo6U2VtYW50aWMqIHNlbWFudGljID0gbnVsbHB0cikKKyAgICAg
ICAgOiBtX2ludHJpbnNpY3MoaW50cmluc2ljcykKKyAgICAgICAgLCBtX2N1cnJlbnRTZW1hbnRp
YyhzZW1hbnRpYykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+R2F0aGVyZXIoKSA9IGRl
ZmF1bHQ7CisKKyAgICB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIG1fY3VycmVudFNlbWFu
dGljID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiYgdGFr
ZUVudHJ5UG9pbnRJdGVtcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX2VudHJ5
UG9pbnRJdGVtcyk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbiYpCisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShtX3R5cGVSZWZlcmVu
Y2VzLmxhc3QoKS5nZXQoKSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9p
ZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9u
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAo
bWF0Y2hlcyhuYXRpdmVUeXBlRGVjbGFyYXRpb24sIG1faW50cmluc2ljcy52b2lkVHlwZSgpKSkg
eworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShtX3R5
cGVSZWZlcmVuY2VzLmxhc3QoKS5nZXQoKSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmlu
aXRpb24pCisgICAgeworICAgICAgICBpZiAobV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVj
dHVyZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVFbGVtZW50LnNlbWFu
dGljKCkpCisgICAgICAgICAgICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSAmKnN0cnVjdHVyZUVs
ZW1lbnQuc2VtYW50aWMoKTsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1
cmVFbGVtZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBl
RGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQodHlwZURl
ZmluaXRpb24udHlwZSgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUo
KnR5cGVEZWZpbml0aW9uLnR5cGUoKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5
cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZVJl
ZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIG1fdHlwZVJlZmVyZW5jZXMuYXBwZW5k
KHR5cGVSZWZlcmVuY2UpOworICAgICAgICBhdXRvIGRlcHRoID0gbV90eXBlUmVmZXJlbmNlcy5z
aXplKCk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdE5hbWVkVHlwZSgqdHlwZVJlZmVyZW5j
ZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZGVwdGgsIG1fdHlwZVJl
ZmVyZW5jZXMuc2l6ZSgpID09IGRlcHRoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRT
ZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0
ZW0ocG9pbnRlclR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlwZSkKKyAgICB7
CisgICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRyeVBvaW50
SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5UmVmZXJlbmNlVHlwZSwgKm1fY3VycmVu
dFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJy
YXlUeXBlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRTZW1hbnRpYykgeworICAgICAg
ICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0oYXJyYXlUeXBlLCAqbV9j
dXJyZW50U2VtYW50aWMpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
bV9jdXJyZW50U2VtYW50aWMpOworICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5zZW1h
bnRpYygpKQorICAgICAgICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSAmKnZhcmlhYmxlRGVjbGFy
YXRpb24uc2VtYW50aWMoKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUo
dmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25z
dCBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CisgICAgQVNUOjpTZW1hbnRpYyogbV9jdXJyZW50
U2VtYW50aWMgeyBudWxscHRyIH07CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpUeXBlUmVmZXJlbmNlPj4gbV90eXBlUmVmZXJlbmNlczsKKyAgICBWZWN0b3I8RW50cnlQ
b2ludEl0ZW0+IG1fZW50cnlQb2ludEl0ZW1zOworfTsKKworT3B0aW9uYWw8RW50cnlQb2ludEl0
ZW1zPiBnYXRoZXJFbnRyeVBvaW50SXRlbXMoY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcywg
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBBU1NF
UlQoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpOworICAgIEdhdGhlcmVyIGlu
cHV0R2F0aGVyZXIoaW50cmluc2ljcyk7CisgICAgZm9yIChhdXRvJiBwYXJhbWV0ZXIgOiBmdW5j
dGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpKSB7CisgICAgICAgIGlucHV0R2F0aGVyZXIucmVz
ZXQoKTsKKyAgICAgICAgaW5wdXRHYXRoZXJlci5jaGVja0Vycm9yQW5kVmlzaXQocGFyYW1ldGVy
KTsKKyAgICAgICAgaWYgKGlucHV0R2F0aGVyZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgfQorICAgIEdhdGhlcmVyIG91dHB1dEdhdGhlcmVyKGludHJp
bnNpY3MsIGZ1bmN0aW9uRGVmaW5pdGlvbi5zZW1hbnRpYygpID8gJipmdW5jdGlvbkRlZmluaXRp
b24uc2VtYW50aWMoKSA6IG51bGxwdHIpOworICAgIG91dHB1dEdhdGhlcmVyLmNoZWNrRXJyb3JB
bmRWaXNpdFVubmFtZWRUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgIGlmIChv
dXRwdXRHYXRoZXJlci5lcnJvcigpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisg
ICAgcmV0dXJuIHt7IGlucHV0R2F0aGVyZXIudGFrZUVudHJ5UG9pbnRJdGVtcygpLCBvdXRwdXRH
YXRoZXJlci50YWtlRW50cnlQb2ludEl0ZW1zKCkgfX07Cit9CisKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFBhcmFtZXRlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xH
YXRoZXJFbnRyeVBvaW50SXRlbXMuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQYXJhbWV0ZXIuaApy
ZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJF
bnRyeVBvaW50SXRlbXMuaAppbmRleCA5MjU4NmY4NjkxZi4uZTFlYjgyOTIxYTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBhcmFtZXRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVy
RW50cnlQb2ludEl0ZW1zLmgKQEAgLTI3LDEzICsyNyw5IEBACiAKICNpZiBFTkFCTEUoV0VCR1BV
KQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgi
CiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgotI2lu
Y2x1ZGUgIldITFNMVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsMzYgKzM3LDMwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAK
IG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBQYXJhbWV0ZXIgOiBwdWJsaWMgVmFsdWUgewotcHVi
bGljOgotICAgIFBhcmFtZXRlcihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFF1YWxpZmllcnMmJiBx
dWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5cGUsIE9wdGlvbmFsPFN0
cmluZz4mJiBuYW1lLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFudGljKQotICAgICAg
ICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX3F1YWxpZmllcnMoV1RG
TW92ZShxdWFsaWZpZXJzKSkKLSAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkKLSAgICAg
ICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBtX3NlbWFudGljKFdURk1vdmUo
c2VtYW50aWMpKQotICAgIHsKLSAgICB9CitjbGFzcyBGdW5jdGlvbkRlZmluaXRpb247CiAKLSAg
ICB2aXJ0dWFsIH5QYXJhbWV0ZXIoKSA9IGRlZmF1bHQ7Cit9CiAKLSAgICBQYXJhbWV0ZXIoY29u
c3QgUGFyYW1ldGVyJikgPSBkZWxldGU7Ci0gICAgUGFyYW1ldGVyKFBhcmFtZXRlciYmKSA9IGRl
ZmF1bHQ7CitjbGFzcyBJbnRyaW5zaWNzOworY2xhc3MgVW5uYW1lZFR5cGU7CiAKLSAgICBUeXBl
JiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQotICAgIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+
JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KK3N0cnVjdCBFbnRyeVBvaW50SXRl
bSB7CisgICAgRW50cnlQb2ludEl0ZW0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIEFT
VDo6U2VtYW50aWMmIHNlbWFudGljKQorICAgICAgICA6IHVubmFtZWRUeXBlKHVubmFtZWRUeXBl
KQorICAgICAgICAsIHNlbWFudGljKHNlbWFudGljKQorICAgIHsKKyAgICB9CiAKLXByaXZhdGU6
Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFF1YWxpZmllcnMgbV9xdWFsaWZpZXJz
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKLSAgICBPcHRpb25hbDxT
dHJpbmc+IG1fbmFtZTsKLSAgICBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiBtX3NlbWFudGljOwor
ICAgIEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlOworICAgIEFTVDo6U2VtYW50aWMmIHNl
bWFudGljOwogfTsKIAotdHlwZWRlZiBWZWN0b3I8UGFyYW1ldGVyPiBQYXJhbWV0ZXJzOworc3Ry
dWN0IEVudHJ5UG9pbnRJdGVtcyB7CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBpbnB1dHM7
CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBvdXRwdXRzOworfTsKIAotfQorT3B0aW9uYWw8
RW50cnlQb2ludEl0ZW1zPiBnYXRoZXJFbnRyeVBvaW50SXRlbXMoY29uc3QgSW50cmluc2ljcyYs
IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEzYjZkYTczZWRkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVz
LmNwcApAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisKKyNp
bmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlw
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK3N0YXRp
YyBib29sIG1hdGNoZXMoY29uc3QgQVNUOjpUeXBlJiB1bmlmeVRoaXMsIGNvbnN0IEFTVDo6VHlw
ZSYgdW5pZnlPdGhlcikKK3sKKyAgICBpZiAoJnVuaWZ5VGhpcyA9PSAmdW5pZnlPdGhlcikKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5VGhp
cykgJiYgaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5T3RoZXIpKSB7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgICAgICBhdXRvJiBuYW1lZFRoaXMgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4o
dW5pZnlUaGlzKTsKKyAgICAgICAgYXV0byYgbmFtZWRPdGhlciA9IGRvd25jYXN0PEFTVDo6TmFt
ZWRUeXBlPih1bmlmeU90aGVyKTsKKyAgICAgICAgQVNTRVJUKCFpczxBU1Q6OlR5cGVEZWZpbml0
aW9uPihuYW1lZFRoaXMpICYmICFpczxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZE90aGVyKSk7
CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpV
bm5hbWVkVHlwZT4odW5pZnlUaGlzKSAmJiBpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU90aGVy
KSkgeworICAgICAgICBhdXRvJiB1bm5hbWVkVGhpcyA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5
cGU+KHVuaWZ5VGhpcyk7CisgICAgICAgIGF1dG8mIHVubmFtZWRPdGhlciA9IGRvd25jYXN0PEFT
VDo6VW5uYW1lZFR5cGU+KHVuaWZ5T3RoZXIpOworICAgICAgICBBU1NFUlQoIWlzPEFTVDo6VHlw
ZVJlZmVyZW5jZT4odW5uYW1lZFRoaXMpICYmICFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFt
ZWRPdGhlcikpOworICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFRoaXMp
ICYmIGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRPdGhlcikpIHsKKyAgICAgICAgICAgIGF1
dG8mIHBvaW50ZXJUaGlzID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFRoaXMp
OworICAgICAgICAgICAgYXV0byYgcG9pbnRlck90aGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVy
VHlwZT4odW5uYW1lZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChwb2ludGVyVGhpcy5hZGRyZXNz
U3BhY2UoKSAhPSBwb2ludGVyT3RoZXIuYWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMocG9pbnRlclRoaXMuZWxl
bWVudFR5cGUoKSwgcG9pbnRlck90aGVyLmVsZW1lbnRUeXBlKCkpOworICAgICAgICB9CisgICAg
ICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFRoaXMpICYmIGlzPEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkT3RoZXIpKXsKKyAgICAgICAgICAgIGF1dG8m
IGFycmF5UmVmZXJlbmNlVGhpcyA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1
bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZU90aGVyID0gZG93
bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhlcik7CisgICAgICAgICAg
ICBpZiAoYXJyYXlSZWZlcmVuY2VUaGlzLmFkZHJlc3NTcGFjZSgpICE9IGFycmF5UmVmZXJlbmNl
T3RoZXIuYWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlSZWZlcmVuY2VUaGlzLmVsZW1lbnRUeXBlKCks
IGFycmF5UmVmZXJlbmNlT3RoZXIuZWxlbWVudFR5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJheVR5cGU+
KHVubmFtZWRPdGhlcikpIHsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5VGhpcyA9IGRvd25jYXN0
PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRvJiBhcnJheU90
aGVyID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRPdGhlcik7CisgICAgICAgICAg
ICBpZiAoYXJyYXlUaGlzLm51bUVsZW1lbnRzKCkgIT0gYXJyYXlPdGhlci5udW1FbGVtZW50cygp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtYXRj
aGVzKGFycmF5VGhpcy50eXBlKCksIGFycmF5T3RoZXIudHlwZSgpKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBt
YXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBBU1Q6OlVu
bmFtZWRUeXBlJiBvdGhlcikKK3sKKyAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZS51bmlm
eU5vZGUoKSwgb3RoZXIudW5pZnlOb2RlKCkpOworfQorCitib29sIG1hdGNoZXMoY29uc3QgQVNU
OjpOYW1lZFR5cGUmIG5hbWVkVHlwZSwgY29uc3QgQVNUOjpOYW1lZFR5cGUmIG90aGVyKQorewor
ICAgIHJldHVybiBtYXRjaGVzKG5hbWVkVHlwZS51bmlmeU5vZGUoKSwgb3RoZXIudW5pZnlOb2Rl
KCkpOworfQorCitib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5
cGUsIGNvbnN0IEFTVDo6TmFtZWRUeXBlJiBvdGhlcikKK3sKKyAgICByZXR1cm4gbWF0Y2hlcyh1
bm5hbWVkVHlwZS51bmlmeU5vZGUoKSwgb3RoZXIudW5pZnlOb2RlKCkpOworfQorCitzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6VHlw
ZSYgdW5pZnlOb2RlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKK3sKKyAg
ICBpZiAoIXJlc29sdmFibGVUeXBlLmNhblJlc29sdmUodW5pZnlOb2RlKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHJlc3Vs
dDsKKyAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgYXV0
byYgbmFtZWRVbmlmeU5vZGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsK
KyAgICAgICAgcmVzdWx0ID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihu
YW1lZFVuaWZ5Tm9kZS5vcmlnaW4oKSksIG5hbWVkVW5pZnlOb2RlKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgcmVzdWx0ID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKS5jbG9u
ZSgpOworICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUocmVzdWx0LT5jbG9uZSgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0
Y2hBbmRDb21taXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIEFTVDo6UmVzb2x2YWJs
ZVR5cGUmIHJlc29sdmFibGVUeXBlKQoreworICAgIHJldHVybiBtYXRjaEFuZENvbW1pdCh1bm5h
bWVkVHlwZS51bmlmeU5vZGUoKSwgcmVzb2x2YWJsZVR5cGUpOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVk
VHlwZSwgQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCit7CisgICAgcmV0dXJu
IG1hdGNoQW5kQ29tbWl0KG5hbWVkVHlwZS51bmlmeU5vZGUoKSwgcmVzb2x2YWJsZVR5cGUpOwor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNU
OjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUxLCBBU1Q6OlJlc29sdmFibGVUeXBlJiBy
ZXNvbHZhYmxlVHlwZTIpCit7CisgICAgaWYgKGlzPEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVz
b2x2YWJsZVR5cGUxKSAmJiBpczxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBl
MikpIHsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUxLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpGbG9h
dExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsK
KyAgICAgICAgcmVzb2x2YWJsZVR5cGUyLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVy
YWxUeXBlPihyZXNvbHZhYmxlVHlwZTIpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUx
KS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6SW50ZWdl
ckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpICYmIGlzPEFTVDo6SW50ZWdlckxpdGVyYWxU
eXBlPihyZXNvbHZhYmxlVHlwZTIpKSB7CisgICAgICAgIHJlc29sdmFibGVUeXBlMS5yZXNvbHZl
KGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZl
cnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUyLnJlc29sdmUoZG93
bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikucHJlZmVycmVk
VHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0
ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCk7CisgICAg
fQorICAgIGlmIChpczxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxl
VHlwZTEpICYmIGlzPEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVU
eXBlMikpIHsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUxLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpV
bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBl
KCkuY2xvbmUoKSk7CisgICAgICAgIHJlc29sdmFibGVUeXBlMi5yZXNvbHZlKGRvd25jYXN0PEFT
VDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikucHJlZmVycmVk
VHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUo
KTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlw
ZTEpICYmIGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTIpKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBUcnlpbmcgdG8gbWF0Y2ggbnVsbHB0ciBhbmQgbnVsbHB0ciBmYWlscy4K
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQor
Citib29sIGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFTVDo6TmFtZWRUeXBlJiBwb3NzaWJs
ZVR5cGUsIEFTVDo6VHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cykKK3sKKyAgICBpZiAoaXM8
QVNUOjpUeXBlRGVmaW5pdGlvbj4ocG9zc2libGVUeXBlKQorICAgICAgICB8fCBpczxBU1Q6OlN0
cnVjdHVyZURlZmluaXRpb24+KHBvc3NpYmxlVHlwZSkKKyAgICAgICAgfHwgaXM8QVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24+KHBvc3NpYmxlVHlwZSkpIHsKKyAgICAgICAgcmV0dXJuIHR5cGVB
cmd1bWVudHMuaXNFbXB0eSgpOworICAgIH0KKworICAgIEFTU0VSVChpczxBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbj4ocG9zc2libGVUeXBlKSk7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xh
cmF0aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHBvc3NpYmxlVHlw
ZSk7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgp
ICE9IHR5cGVBcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygp
LnNpemUoKTsgKytpKSB7CisgICAgICAgIEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKiB0eXBlQXJn
dW1lbnRFeHByZXNzaW9uID0gbnVsbHB0cjsKKyAgICAgICAgQVNUOjpUeXBlUmVmZXJlbmNlKiB0
eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlID0gbnVsbHB0cjsKKyAgICAgICAgQVNUOjpDb25zdGFu
dEV4cHJlc3Npb24qIG5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24gPSBudWxscHRyOworICAg
ICAgICBBU1Q6OlR5cGVSZWZlcmVuY2UqIG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2Ug
PSBudWxscHRyOworCisgICAgICAgIGF1dG8gYXNzaWduID0gWyZdKEFTVDo6VHlwZUFyZ3VtZW50
JiB0eXBlQXJndW1lbnQsIEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKiYgZXhwcmVzc2lvbiwgQVNU
OjpUeXBlUmVmZXJlbmNlKiYgdHlwZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgV1RGOjp2aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRF
eHByZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9ICZjb25zdGFudEV4cHJl
c3Npb247CisgICAgICAgICAgICB9LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVy
ZW5jZT4mIHRoZVR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICB0eXBlUmVmZXJlbmNl
ID0gdGhlVHlwZVJlZmVyZW5jZS5nZXQoKTsKKyAgICAgICAgICAgIH0pLCB0eXBlQXJndW1lbnQp
OworICAgICAgICB9OworCisgICAgICAgIGFzc2lnbih0eXBlQXJndW1lbnRzW2ldLCB0eXBlQXJn
dW1lbnRFeHByZXNzaW9uLCB0eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlKTsKKyAgICAgICAgYXNz
aWduKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbaV0sIG5hdGl2ZVR5cGVB
cmd1bWVudEV4cHJlc3Npb24sIG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpOworCisg
ICAgICAgIGlmICh0eXBlQXJndW1lbnRFeHByZXNzaW9uICYmIG5hdGl2ZVR5cGVBcmd1bWVudEV4
cHJlc3Npb24pIHsKKyAgICAgICAgICAgIGlmICghdHlwZUFyZ3VtZW50RXhwcmVzc2lvbi0+bWF0
Y2hlcygqbmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVzc2lvbikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKHR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2Ug
JiYgbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgaWYgKCFt
YXRjaGVzKCp0eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlLCAqbmF0aXZlVHlwZUFyZ3VtZW50VHlw
ZVJlZmVyZW5jZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIxZGI2Y2M3MjgxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJ
bmZlclR5cGVzLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisj
aW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExT
TCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBVbm5hbWVkVHlwZTsKK2NsYXNzIE5hbWVk
VHlwZTsKK2NsYXNzIFJlc29sdmFibGVUeXBlOworCit9CisKK2Jvb2wgbWF0Y2hlcyhjb25zdCBB
U1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYpOworYm9vbCBtYXRjaGVz
KGNvbnN0IEFTVDo6TmFtZWRUeXBlJiwgY29uc3QgQVNUOjpOYW1lZFR5cGUmKTsKK2Jvb2wgbWF0
Y2hlcyhjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgQVNUOjpOYW1lZFR5cGUmKTsKK3N0
ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENvbW1pdChBU1Q6OlVubmFt
ZWRUeXBlJiwgQVNUOjpSZXNvbHZhYmxlVHlwZSYpOworc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5u
YW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6TmFtZWRUeXBlJiwgQVNUOjpSZXNvbHZhYmxl
VHlwZSYpOworc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0
KEFTVDo6UmVzb2x2YWJsZVR5cGUmLCBBU1Q6OlJlc29sdmFibGVUeXBlJik7Citib29sIGluZmVy
VHlwZXNGb3JUeXBlQXJndW1lbnRzKEFTVDo6TmFtZWRUeXBlJiBwb3NzaWJsZVR5cGUsIEFTVDo6
VHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cyk7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2lj
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNp
Y3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hNWMwMmI0MWE4
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMSW50cmluc2ljcy5jcHAKQEAgLTAsMCArMSw0MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYg
RU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMSW50
cmluc2ljcy5oIgorCisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKKyNpbmNs
dWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5o
IgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCitJbnRyaW5zaWNzOjpJbnRyaW5zaWNzKCkKKyAgICA6IG1fdGV4dHVyZVR5
cGVOYW1lcyB7IFN0cmluZygiVGV4dHVyZTFEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTFEIiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUxREFycmF5IiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTFE
QXJyYXkiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmlu
ZygiVGV4dHVyZTJEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAg
ICBTdHJpbmcoIlJXVGV4dHVyZTJEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisg
ICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUyREFycmF5IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTJEQXJyYXkiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiVGV4dHVyZTNEIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4
dHVyZTNEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJp
bmcoIlRleHR1cmVDdWJlIiwgIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0KKyAgICAs
IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzIHsgU3RyaW5nKCJ1Y2hhciIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJ1c2hvcnQiLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygidWludCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJjaGFyIiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoInNob3J0IiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoImludCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJoYWxmIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoImZsb2F0
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgfQorICAgICwgbV9kZXB0aFRleHR1cmVJ
bm5lclR5cGVzIHsgU3RyaW5nKCJoYWxmIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCks
CisgICAgICAgICAgICBTdHJpbmcoImZsb2F0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkgfQoreworICAgIEFTU0VSVChtX3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgpID09IDExKTsgLy8g
ZnVsbFRleHR1cmVzIGhhcmRjb2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkuCisgICAgQVNT
RVJUKG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKSA9PSA4KTsgLy8gZnVsbFRleHR1cmVz
IGhhcmRjb2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkuCisgICAgQVNTRVJUKG1fZGVwdGhU
ZXh0dXJlSW5uZXJUeXBlcy5zaXplKCkgPT0gMik7IC8vIHRleHR1cmVEZXB0aDJEICYgZnJpZW5k
cyBoYXJkY29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorfQorCit2b2lkIEludHJpbnNp
Y3M6OmFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKQoreworICAgIC8vIEZJWE1F
OiBQb3B1bGF0ZSB0aGlzLgorfQorCitib29sIEludHJpbnNpY3M6OmFkZFByaW1pdGl2ZShBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlm
IChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSAhPSAwKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUo
KSA9PSAidm9pZCIpCisgICAgICAgIG1fdm9pZFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9u
OworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImJvb2wiKQor
ICAgICAgICBtX2Jvb2xUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlm
IChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1Y2hhciIpIHsKKyAgICAgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldElzSW50KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRJc051bWJlcigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2Fu
UmVwcmVzZW50SW50ZWdlcihbXShpbnQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPj0gMCAm
JiB4IDw9IDB4RkY7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24u
c2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB4IDw9IDB4RkY7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQgeCkgeworICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDx1aW50OF90Pih4KSkgPT0geDsK
KyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3Io
W10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50OF90Pih4ICsgMSk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFy
YXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tSW50ZWdlcihbXShpbnQgeCkgLT4gaW50NjRfdCB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oeCk7CisgICAgICAgIH0pOwor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJ
bnRlZ2VyKFtdKHVuc2lnbmVkIHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbV91Y2hhclR5cGUg
PSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIH0gZWxzZSBpZiAobmF0aXZlVHlwZURlY2xh
cmF0aW9uLm5hbWUoKSA9PSAidXNob3J0IikgeworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uc2V0SXNJbnQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzTnVtYmVy
KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2Vy
KFtdKGludCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA+PSAwICYmIHggPD0gMHhGRkZGOwor
ICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2Vu
dFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA8
PSAweEZGRkY7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0
Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDx1aW50MTZfdD4oeCkpID09IHg7CisgICAgICAgIH0p
OworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0U3VjY2Vzc29yKFtdKGludDY0X3Qg
eCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+
KHggKyAxKTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRG
b3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTZfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtd
KHVuc2lnbmVkIHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVpbnQxNl90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fdXNob3J0VHlwZSA9ICZuYXRp
dmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24u
bmFtZSgpID09ICJ1aW50IikgeworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJ
bnQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAg
ICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCB4
KSB7CisgICAgICAgICAgICByZXR1cm4geCA+PSAwOworICAgICAgICB9KTsKKyAgICAgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNp
Z25lZCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQgeCkgewor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDx1aW50MzJf
dD4oeCkpID09IHg7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24u
c2V0U3VjY2Vzc29yKFtdKGludDY0X3QgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHggKyAxKTsKKyAgICAgICAgfSk7CisgICAgICAgIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAt
PiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oeCk7
CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFs
dWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIC0+IGludDY0X3QgeworICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pih4KTsKKyAgICAgICAgfSk7CisgICAg
ICAgIG1fdWludFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIH0gZWxzZSBpZiAo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiY2hhciIpIHsKKyAgICAgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldElzSW50KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRJc051bWJlcigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNTaWdu
ZWQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVn
ZXIoW10oaW50IHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4ID49IC0xMjggJiYgeCA8PSAxMjc7
CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVz
ZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4
IDw9IDEyNzsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRD
YW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PGludDhfdD4oeCkpID09IHg7CisgICAgICAgIH0pOwor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0U3VjY2Vzc29yKFtdKGludDY0X3QgeCkg
LT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50OF90Pih4ICsg
MSk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0
VmFsdWVGcm9tSW50ZWdlcihbXShpbnQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50OF90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIoW10odW5zaWdu
ZWQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50OF90
Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fY2hhclR5cGUgPSAmbmF0aXZlVHlwZURlY2xh
cmF0aW9uOworICAgIH0gZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
c2hvcnQiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAg
ICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldElzU2lnbmVkKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCB4KSB7CisgICAgICAgICAgICByZXR1
cm4geCA+PSAtMzI3NjggJiYgeCA8PSAzMjc2NzsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWdu
ZWQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPD0gMzI3Njc7CisgICAgICAgIH0pOworICAg
ICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQg
eCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxp
bnQxNl90Pih4KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRTdWNjZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQxNl90Pih4ICsgMSk7CisgICAgICAgIH0pOworICAgICAg
ICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tSW50ZWdlcihbXShpbnQg
eCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MTZfdD4o
eCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0
VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIC0+IGludDY0X3QgeworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDE2X3Q+KHgpOworICAgICAgICB9KTsKKyAg
ICAgICAgbV9zaG9ydFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIH0gZWxzZSBp
ZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiaW50IikgeworICAgICAgICBuYXRp
dmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc1Np
Z25lZCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50
ZWdlcihbXShpbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAg
ICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdl
cihbXSh1bnNpZ25lZCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA8PSAyMTQ3NDgzNjQ3Owor
ICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2Vu
dEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9h
dD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4oeCkpID09IHg7CisgICAgICAgIH0pOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0U3VjY2Vzc29yKFtdKGludDY0X3QgeCkgLT4gaW50NjRf
dCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4oeCArIDEpOworICAg
ICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJv
bUludGVnZXIoW10oaW50IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludDMyX3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4KSAt
PiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih4KTsK
KyAgICAgICAgfSk7CisgICAgICAgIG1faW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247
CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJoYWxmIikg
eworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAg
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzRmxvYXRpbmcoKTsKKyAgICAgICAgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50KSB7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRDYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0KSB7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG1faGFsZlR5cGUgPSAmbmF0aXZlVHlwZURlY2xh
cmF0aW9uOworICAgIH0gZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
ZmxvYXQiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOwor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNGbG9hdGluZygpOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQpIHsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbV9mbG9hdFR5cGUgPSAmbmF0aXZl
VHlwZURlY2xhcmF0aW9uOworICAgIH0KKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRp
b24ubmFtZSgpID09ICJhdG9taWNfaW50IikKKyAgICAgICAgbV9hdG9taWNJbnRUeXBlID0gJm5h
dGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24u
bmFtZSgpID09ICJhdG9taWNfdWludCIpCisgICAgICAgIG1fYXRvbWljVWludFR5cGUgPSAmbmF0
aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5u
YW1lKCkgPT0gInNhbXBsZXIiKQorICAgICAgICBtX3NhbXBsZXJUeXBlID0gJm5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbjsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6OmFkZFZlY3RvcihBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpICE9ICJ2ZWN0b3IiKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5z
aXplKCkgPT0gMik7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKClbMF0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNv
bnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsx
XSkpOworICAgIGF1dG8mIGlubmVyVHlwZVBvaW50ZXIgPSBXVEY6OmdldDxzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVu
dHMoKVswXSk7CisgICAgYXV0byYgbGVuZ3RoRXhwcmVzc2lvbiA9IFdURjo6Z2V0PEFTVDo6Q29u
c3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFd
KTsKKyAgICBBU1NFUlQoaW5uZXJUeXBlUG9pbnRlcik7CisgICAgYXV0byYgaW5uZXJUeXBlID0g
KmlubmVyVHlwZVBvaW50ZXI7CisgICAgQVNTRVJUKGlubmVyVHlwZS50eXBlQXJndW1lbnRzKCku
c2l6ZSgpID09IDApOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiogYXJyYXk7Cisg
ICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImJvb2wiKQorICAgICAgICBhcnJheSA9IG1fdmVj
dG9yQm9vbDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJ1Y2hhciIpCisgICAg
ICAgIGFycmF5ID0gbV92ZWN0b3JVY2hhcjsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgp
ID09ICJ1c2hvcnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yVXNob3J0OworICAgIGVsc2Ug
aWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gInVpbnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9y
VWludDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJjaGFyIikKKyAgICAgICAg
YXJyYXkgPSBtX3ZlY3RvckNoYXI7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAi
c2hvcnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yU2hvcnQ7CisgICAgZWxzZSBpZiAoaW5u
ZXJUeXBlLm5hbWUoKSA9PSAiaW50IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvckludDsKKyAg
ICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJoYWxmIikKKyAgICAgICAgYXJyYXkgPSBt
X3ZlY3RvckhhbGY7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiZmxvYXQiKQor
ICAgICAgICBhcnJheSA9IG1fdmVjdG9yRmxvYXQ7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICBpbnQgbGVuZ3RoID0gbGVuZ3RoRXhwcmVzc2lvbi5pbnRlZ2Vy
TGl0ZXJhbCgpLnZhbHVlKCk7CisgICAgQVNTRVJUKGxlbmd0aCA+PSAyICYmIGxlbmd0aCA8PSA0
KTsKKyAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNWZWN0b3IoKTsKKyAgICBhcnJheVts
ZW5ndGggLSAyXSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgSW50cmluc2ljczo6YWRkTWF0cml4KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
JiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5uYW1lKCkgIT0gIm1hdHJpeCIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VS
VChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAzKTsKKyAg
ICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBl
UmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOwor
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgQVNTRVJU
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMl0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGVQ
b2ludGVyID0gV1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgIGF1dG8mIHJvd0V4
cHJlc3Npb24gPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSk7CisgICAgYXV0byYgY29sdW1uRXhwcmVzc2lv
biA9IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRp
b24udHlwZUFyZ3VtZW50cygpWzJdKTsKKyAgICBBU1NFUlQoaW5uZXJUeXBlUG9pbnRlcik7Cisg
ICAgYXV0byYgaW5uZXJUeXBlID0gKmlubmVyVHlwZVBvaW50ZXI7CisgICAgQVNTRVJUKGlubmVy
VHlwZS50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDApOworICAgIEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uKiAoKmFycmF5KVszXTsKKyAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiaGFs
ZiIpCisgICAgICAgIGFycmF5ID0gbV9tYXRyaXhIYWxmOworICAgIGlmIChpbm5lclR5cGUubmFt
ZSgpID09ICJmbG9hdCIpCisgICAgICAgIGFycmF5ID0gbV9tYXRyaXhGbG9hdDsKKyAgICBpbnQg
cm93ID0gcm93RXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgpLnZhbHVlKCk7CisgICAgQVNTRVJU
KHJvdyA+PSAyICYmIHJvdyA8PSA0KTsKKyAgICBpbnQgY29sdW1uID0gY29sdW1uRXhwcmVzc2lv
bi5pbnRlZ2VyTGl0ZXJhbCgpLnZhbHVlKCk7CisgICAgQVNTRVJUKGNvbHVtbiA+PSAyICYmIGNv
bHVtbiA8PSA0KTsKKyAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNNYXRyaXgoKTsKKyAg
ICBhcnJheVtyb3cgLSAyXVtjb2x1bW4gLSAyXSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50cmluc2ljczo6YWRkRnVsbFRleHR1cmUoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgQVNUOjpUeXBl
UmVmZXJlbmNlJiBpbm5lclR5cGUpCit7CisgICAgdW5zaWduZWQgdGV4dHVyZVR5cGVJbmRleCA9
IG1fdGV4dHVyZVR5cGVOYW1lcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fdGV4dHVyZVR5cGVOYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLm5hbWUoKSA9PSBtX3RleHR1cmVUeXBlTmFtZXNbaV0pCisgICAgICAgICAg
ICB0ZXh0dXJlVHlwZUluZGV4ID0gaTsKKyAgICB9CisgICAgaWYgKHRleHR1cmVUeXBlSW5kZXgg
PT0gbV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgdW5zaWduZWQgaW5uZXJUeXBlSW5kZXggPSBtX3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXpl
KCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
aW5uZXJUeXBlLm5hbWUoKS5zdGFydHNXaXRoKG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzW2ldKSkg
eworICAgICAgICAgICAgdGV4dHVyZVR5cGVJbmRleCA9IGk7CisgICAgICAgICAgICBpZiAoaW5u
ZXJUeXBlLm5hbWUoKSA9PSBtX3RleHR1cmVJbm5lclR5cGVOYW1lc1tpXSkKKyAgICAgICAgICAg
ICAgICB2ZWN0b3JMZW5ndGggPSAxOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGlubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgPT0gbV90ZXh0dXJlSW5uZXJUeXBl
TmFtZXNbaV0ubGVuZ3RoKCkgKyAxKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5uZXJUeXBl
Lm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0gPT0gJzInCisgICAgICAgICAg
ICAgICAgICAgIHx8IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAt
IDFdID09ICczJworICAgICAgICAgICAgICAgICAgICB8fCBpbm5lclR5cGUubmFtZSgpW2lubmVy
VHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSA9PSAnNCcpOworICAgICAgICAgICAgICAgIHZlY3Rv
ckxlbmd0aCA9IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAtIDFd
IC0gJzAnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChpbm5l
clR5cGVJbmRleCAhPSBtX3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCkpOworICAgIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc1RleHR1cmUoKTsKKyAgICBtX2Z1bGxUZXh0dXJlc1t0ZXh0
dXJlVHlwZUluZGV4XVtpbm5lclR5cGVJbmRleF1bdmVjdG9yTGVuZ3RoIC0gMV0gPSAmbmF0aXZl
VHlwZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6
OmFkZERlcHRoVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2UmIGlubmVyVHlwZSkKK3sKKyAgICBBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbioqIHRleHR1cmU7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIlRleHR1cmVEZXB0aDJEIikKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4
dHVyZURlcHRoMkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiUldUZXh0dXJlRGVwdGgyRCIpCisgICAgICAgIHRleHR1cmUgPSBtX3J3VGV4dHVyZURlcHRo
MkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVy
ZURlcHRoMkRBcnJheSIpCisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVEZXB0aDJEQXJyYXk7
CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJl
RGVwdGgyREFycmF5IikKKyAgICAgICAgdGV4dHVyZSA9IG1fcndUZXh0dXJlRGVwdGgyREFycmF5
OworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVE
ZXB0aEN1YmUiKQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlRGVwdGhDdWJlOworICAgIGVs
c2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgdW5zaWduZWQgaW5uZXJUeXBl
SW5kZXggPSBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzW2ld
KQorICAgICAgICAgICAgaW5uZXJUeXBlSW5kZXggPSBpOworICAgIH0KKyAgICBBU1NFUlQoaW5u
ZXJUeXBlSW5kZXggIT0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKSk7CisgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldElzVGV4dHVyZSgpOworICAgIHRleHR1cmVbaW5uZXJUeXBl
SW5kZXhdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBJbnRyaW5zaWNzOjphZGRUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBu
YXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDEpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBl
RGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlUG9p
bnRlciA9IFdURjo6Z2V0PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBBU1NFUlQoaW5uZXJU
eXBlUG9pbnRlcik7CisgICAgYXV0byYgaW5uZXJUeXBlID0gKmlubmVyVHlwZVBvaW50ZXI7Cisg
ICAgQVNTRVJUKGlubmVyVHlwZS50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDApOworICAgIGlm
IChhZGRGdWxsVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlubmVyVHlwZSkpIHsKKyAg
ICAgICAgbV90ZXh0dXJlU2V0LmFkZCgmbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoYWRkRGVwdGhUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiwgaW5uZXJUeXBlKSkKKyAgICAgICAgbV90ZXh0dXJlU2V0LmFkZCgmbmF0aXZlVHlwZURl
Y2xhcmF0aW9uKTsKK30KKwordm9pZCBJbnRyaW5zaWNzOjphZGQoQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoYWRkUHJpbWl0aXZl
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoYWRkVmVj
dG9yKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoYWRk
TWF0cml4KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBhZGRU
ZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmlu
c2ljcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5z
aWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk5MDIxZjk0Njgx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xJbnRyaW5zaWNzLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5o
IgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK2NsYXNzIEludHJpbnNpY3MgeworcHVibGljOgorICAgIEludHJpbnNpY3Mo
KTsKKworICAgIHZvaWQgYWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAg
IHZvaWQgYWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisKKyAgICBBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYgdm9pZFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fdm9pZFR5cGUpOworICAgICAgICByZXR1cm4gKm1fdm9pZFR5cGU7CisgICAgfQorCisgICAg
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIGJvb2xUeXBlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2Jvb2xUeXBlKTsKKyAgICAgICAgcmV0dXJuICptX2Jvb2xUeXBlOworICAg
IH0KKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiB1aW50VHlwZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQobV91aW50VHlwZSk7CisgICAgICAgIHJldHVybiAqbV91aW50
VHlwZTsKKyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgc2FtcGxlclR5
cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2FtcGxlclR5cGUpOworICAgICAg
ICByZXR1cm4gKm1fc2FtcGxlclR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24mIGZsb2F0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9mbG9h
dFR5cGUpOworICAgICAgICByZXR1cm4gKm1fZmxvYXRUeXBlOworICAgIH0KKworICAgIEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBmbG9hdDNUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX3ZlY3RvckZsb2F0WzFdKTsKKyAgICAgICAgcmV0dXJuICptX3ZlY3RvckZsb2F0
WzFdOworICAgIH0KKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBmbG9hdDRUeXBl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZlY3RvckZsb2F0WzJdKTsKKyAgICAg
ICAgcmV0dXJuICptX3ZlY3RvckZsb2F0WzJdOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29s
IGFkZFByaW1pdGl2ZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRk
VmVjdG9yKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGRNYXRyaXgo
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBib29sIGFkZEZ1bGxUZXh0dXJlKEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiwgQVNUOjpUeXBlUmVmZXJlbmNlJik7CisgICAgYm9v
bCBhZGREZXB0aFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mLCBBU1Q6OlR5cGVS
ZWZlcmVuY2UmKTsKKyAgICB2b2lkIGFkZFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mKTsKKworICAgIEhhc2hTZXQ8Y29uc3QgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qPiBt
X3RleHR1cmVTZXQ7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92b2lkVHlw
ZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9ib29sVHlwZTsKKyAgICBBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV91Y2hhclR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qIG1fdXNob3J0VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biogbV91aW50VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9jaGFyVHlw
ZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9zaG9ydFR5cGU7CisgICAgQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1faW50VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV9oYWxmVHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiog
bV9mbG9hdFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fYXRvbWljSW50
VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9hdG9taWNVaW50VHlwZTsK
KyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9zYW1wbGVyVHlwZTsKKworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckJvb2xbM107CisgICAgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yVWNoYXJbM107CisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qIG1fdmVjdG9yVXNob3J0WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiBtX3ZlY3RvclVpbnRbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24q
IG1fdmVjdG9yQ2hhclszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0
b3JTaG9ydFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JJbnRb
M107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9ySGFsZlszXTsKKyAg
ICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JGbG9hdFszXTsKKworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX21hdHJpeEhhbGZbM11bM107CisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fbWF0cml4RmxvYXRbM11bM107CisKKyAgICBWZWN0b3I8
U3RyaW5nPiBtX3RleHR1cmVUeXBlTmFtZXM7CisgICAgVmVjdG9yPFN0cmluZz4gbV90ZXh0dXJl
SW5uZXJUeXBlTmFtZXM7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9mdWxs
VGV4dHVyZXNbMTFdWzhdWzRdOworCisgICAgVmVjdG9yPFN0cmluZz4gbV9kZXB0aFRleHR1cmVJ
bm5lclR5cGVzOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3RleHR1cmVEZXB0
aDJEWzJdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3J3VGV4dHVyZURlcHRo
MkRbMl07CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdGV4dHVyZURlcHRoMkRB
cnJheVsyXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9yd1RleHR1cmVEZXB0
aDJEQXJyYXlbMl07CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdGV4dHVyZURl
cHRoQ3ViZVsyXTsKK307CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKaW5kZXggM2IxOTM0ZTkzMTYu
LmU5YWVhZTdiNTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTExleGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTExleGVyLmNwcApAQCAtMjMsOCArMjMsNiBAQAogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNwcmFnbWEgb25jZQotCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZTg2YmI5ODA0YQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQu
Y3BwCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisKKyNp
bmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVu
Y3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRl
ICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworTmFtZUNvbnRleHQ6Ok5hbWVDb250
ZXh0KE5hbWVDb250ZXh0KiBwYXJlbnQpCisgICAgOiBtX3BhcmVudChwYXJlbnQpCit7Cit9CisK
K2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlv
bikKK3sKKyAgICBpZiAoZXhpc3RzKHR5cGVEZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKHR5cGVEZWZpbml0aW9u
Lm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAx
PigpKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQodHlwZURlZmluaXRpb24pOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpTdHJ1Y3R1cmVE
ZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQoreworICAgIGlmIChleGlzdHMoc3RydWN0
dXJlRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byBy
ZXN1bHQgPSBtX3R5cGVzLmFkZChzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYg
ZW51bWVyYXRpb25EZWZpbml0aW9uKQoreworICAgIGlmIChleGlzdHMoZW51bWVyYXRpb25EZWZp
bml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9
IG1fdHlwZXMuYWRkKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgaWYgKCFyZXN1bHQu
aXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUuYXBwZW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rp
b25EZWZpbml0aW9uKQoreworICAgIGlmIChtX3R5cGVzLmZpbmQoZnVuY3Rpb25EZWZpbml0aW9u
Lm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQorICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9ucy5hZGQoZnVuY3Rpb25E
ZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uPiwgMT4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBl
bmQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1l
Q29udGV4dDo6YWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobV90eXBlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAgIHx8IG1fdmFyaWFibGVz
LmZpbmQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVu
ZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9u
cy5hZGQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkpOworICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobV9mdW5jdGlv
bnMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX2Z1bmN0aW9ucy5lbmQo
KQorICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0
byByZXN1bHQgPSBtX3R5cGVzLmFkZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKGV4aXN0cyh2YXJpYWJs
ZURlY2xhcmF0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJl
c3VsdCA9IG1fdmFyaWFibGVzLmFkZChTdHJpbmcodmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lKCkp
LCAmdmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgcmV0dXJuIHJlc3VsdC5pc05ld0VudHJ5Owor
fQorCitWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KiBO
YW1lQ29udGV4dDo6Z2V0VHlwZXMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3R5cGVzLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fdHlwZXMu
ZW5kKCkpIHsKKyAgICAgICAgaWYgKG1fcGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIG1fcGFy
ZW50LT5nZXRUeXBlcyhuYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAg
IHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOworfQorCitWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiogTmFtZUNvbnRleHQ6OmdldEZ1bmN0
aW9ucyhjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fZnVuY3Rp
b25zLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZnVuY3Rpb25zLmVuZCgpKSB7
CisgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudC0+Z2V0
RnVuY3Rpb25zKG5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0
dXJuICZpdGVyYXRvci0+dmFsdWU7Cit9CisKK0FTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogTmFt
ZUNvbnRleHQ6OmdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIGl0
ZXJhdG9yID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV92
YXJpYWJsZXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKG1fcGFyZW50KQorICAgICAgICAgICAgcmV0
dXJuIG1fcGFyZW50LT5nZXRWYXJpYWJsZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRl
eHQ6OmV4aXN0cyhTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIG1fdHlwZXMuZmluZChuYW1l
KSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAgIHx8IG1fZnVuY3Rpb25zLmZpbmQobmFtZSkgIT0g
bV9mdW5jdGlvbnMuZW5kKCkKKyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChuYW1lKSAhPSBt
X3ZhcmlhYmxlcy5lbmQoKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kM2RmODAwMTRhZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNv
bnRleHQuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgTmFtZWRUeXBlOworY2xhc3MgRnVuY3Rpb25EZWNs
YXJhdGlvbjsKK2NsYXNzIFR5cGVEZWZpbml0aW9uOworY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlv
bjsKK2NsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIEZ1bmN0aW9uRGVmaW5pdGlv
bjsKK2NsYXNzIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBOYXRpdmVUeXBlRGVj
bGFyYXRpb247CitjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uOworCit9CisKK2NsYXNzIE5hbWVD
b250ZXh0IHsKK3B1YmxpYzoKKyAgICBOYW1lQ29udGV4dChOYW1lQ29udGV4dCogcGFyZW50ID0g
bnVsbHB0cik7CisKKyAgICBib29sIGFkZChBU1Q6OlR5cGVEZWZpbml0aW9uJik7CisgICAgYm9v
bCBhZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biYpOworICAgIGJvb2wgYWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAg
IGJvb2wgYWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGQoQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uJik7CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KiBnZXRUeXBlcyhjb25zdCBTdHJpbmcmKTsKKyAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
PiogZ2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYpOworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiogZ2V0VmFyaWFibGUoY29uc3QgU3RyaW5nJik7CisKK3ByaXZhdGU6CisgICAgYm9vbCBl
eGlzdHMoU3RyaW5nJik7CisKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPj4gbV90eXBlczsKKyAgICBIYXNoTWFwPFN0
cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uPiwgMT4+IG1fZnVuY3Rpb25zOworICAgIEhhc2hNYXA8U3RyaW5nLCBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24qPiBtX3ZhcmlhYmxlczsKKyAgICBOYW1lQ29udGV4dCogbV9wYXJlbnQ7Cit9
OworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKaW5kZXggNzgwZDVjNTQyNWEu
LjIzYWJjZmU2ZWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCkBAIC0yOCwxOSArMjgsMjQ1IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2ZXIuaCIKIAotI2lu
Y2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorI2luY2x1ZGUgIldITFNM
UmVzb2x2ZU92ZXJsb2FkSW1wbC5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgor
I2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJZlN0
YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xE
b1doaWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgorI2luY2x1ZGUgIldITFNM
VmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2Uu
aCIKKyNpbmNsdWRlICJXSExTTFJldHVybi5oIgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb3RFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTENhbGxFeHBy
ZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAotY2xhc3MgTmFtZVJlc29sdmVyIDogcHVibGljIFZp
c2l0b3IgewotICAgIH5OYW1lUmVzb2x2ZXIoKSA9IGRlZmF1bHQ7Ci19OworTmFtZVJlc29sdmVy
OjpOYW1lUmVzb2x2ZXIoTmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KQorICAgIDogbV9uYW1lQ29u
dGV4dChuYW1lQ29udGV4dCkKK3sKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6
VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQo
dHlwZVJlZmVyZW5jZSk7CisgICAgaWYgKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGNhbmRpZGF0ZXMgPSBtX25hbWVDb250ZXh0Lmdl
dFR5cGVzKHR5cGVSZWZlcmVuY2UubmFtZSgpKTsKKyAgICBpZiAoY2FuZGlkYXRlcyA9PSBudWxs
cHRyKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKGF1dG8gcmVzdWx0ID0gcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoKmNhbmRpZGF0ZXMsIHR5
cGVSZWZlcmVuY2UudHlwZUFyZ3VtZW50cygpKSkKKyAgICAgICAgdHlwZVJlZmVyZW5jZS5zZXRS
ZXNvbHZlZFR5cGUoKnJlc3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIE5hbWVDb250
ZXh0IG5ld05hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIgbmV3
TmFtZVJlc29sdmVyKG5ld05hbWVDb250ZXh0KTsKKyAgICB2aXNpdFVubmFtZWRUeXBlKGZ1bmN0
aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rp
b25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkgeworICAgICAgICBuZXdOYW1lUmVzb2x2ZXIuY2hl
Y2tFcnJvckFuZFZpc2l0KHBhcmFtZXRlcik7CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IG5ld05h
bWVDb250ZXh0LmFkZChwYXJhbWV0ZXIpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRp
b24uYmxvY2soKSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkJsb2NrJiBi
bG9jaykKK3sKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7Cisg
ICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQoYmxvY2spOwor
fQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1l
bnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkp
OworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICBOYW1l
UmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5ib2R5
KCkpOworICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgpKSB7CisgICAgICAgIE5hbWVDb250
ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICAgICAgTmFtZVJlc29sdmVyKG5h
bWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpOwor
ICAgIH0KK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGls
ZUxvb3ApCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgp
KTsKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFt
ZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHko
KSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiB3aGls
ZUxvb3ApCit7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOwor
ICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9v
cC5ib2R5KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0aW9uYWwo
KSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3Ap
Cit7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5h
bWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3ApOworfQor
Cit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJp
YWJsZURlY2xhcmF0aW9uKQoreworICAgIG1fbmFtZUNvbnRleHQuYWRkKHZhcmlhYmxlRGVjbGFy
YXRpb24pOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uKTsKK30K
IAotdm9pZCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mKQordm9pZCBOYW1lUmVzb2x2ZXI6
OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKQogeworICAg
IGlmICh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoYXV0byogdmFyaWFibGUgPSBtX25hbWVDb250ZXh0LmdldFZhcmlhYmxlKHZhcmlhYmxl
UmVmZXJlbmNlLm5hbWUoKSkpCisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLnNldFZhcmlhYmxl
KCp2YXJpYWJsZSk7CisgICAgZWxzZSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlJldHVybiYg
cmV0dXJuTm9kZSkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50RnVuY3Rpb24pOworICAgIHJldHVy
bk5vZGUuc2V0RnVuY3Rpb24obV9jdXJyZW50RnVuY3Rpb24pOworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChyZXR1cm5Ob2RlKTsKK30KIAordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6UHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCit7CisgICAg
aWYgKGF1dG8qIGdldEZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5nZXRGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgIHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZUdldE92ZXJsb2FkcygqZ2V0RnVuY3Rpb25zKTsK
KyAgICBpZiAoYXV0byogc2V0RnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMo
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgcHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldFBvc3NpYmxlU2V0T3ZlcmxvYWRzKCpzZXRGdW5jdGlv
bnMpOworICAgIGlmIChhdXRvKiBhbmRGdW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0
aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kRnVuY3Rpb25OYW1lKCkpKQorICAgICAg
ICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9zc2libGVBbmRPdmVybG9hZHMoKmFuZEZ1
bmN0aW9ucyk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRv
dEV4cHJlc3Npb24pCit7CisgICAgaWYgKGlzPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGRvdEV4
cHJlc3Npb24uYmFzZSgpKSkgeworICAgICAgICBpZiAoYXV0byBlbnVtZXJhdGlvblR5cGVzID0g
bV9uYW1lQ29udGV4dC5nZXRUeXBlcyhkb3duY2FzdDxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihk
b3RFeHByZXNzaW9uLmJhc2UoKSkubmFtZSgpKSkgeworICAgICAgICAgICAgQVNTRVJUKGVudW1l
cmF0aW9uVHlwZXMtPnNpemUoKSA9PSAxKTsKKyAgICAgICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0
eXBlID0gKCplbnVtZXJhdGlvblR5cGVzKVswXTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OkVu
dW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSkpIHsKKyAgICAgICAgICAgICAgICBBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpF
bnVtZXJhdGlvbkRlZmluaXRpb24+KHR5cGUpOworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBt
ZW1iZXIgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24ubWVtYmVyQnlOYW1lKGRvdEV4cHJlc3Npb24u
ZmllbGROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSA8PSBzaXplb2YoQVNUOjpEb3RFeHByZXNz
aW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFibGUgdG8gYmVjb21lIEVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbHMgd2l0aG91dCB1cGRhdGluZyBiYWNrcmVmZXJlbmNlcyIpOworICAg
ICAgICAgICAgICAgICAgICBMZXhlcjo6VG9rZW4gb3JpZ2luID0gZG90RXhwcmVzc2lvbi5vcmln
aW4oKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFBlcmhhcHMgZG8gdGhpcyB3aXRo
IHZhcmlhbnRzIG9yIGEgUmV3cml0ZXIgaW5zdGVhZC4KKyAgICAgICAgICAgICAgICAgICAgZG90
RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgICAgICBuZXcgKCZk
b3RFeHByZXNzaW9uKSBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChXVEZNb3ZlKG9yaWdp
biksICptZW1iZXIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3RFeHByZXNzaW9uKTsKK30K
Kwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHBy
ZXNzaW9uKQoreworICAgIGlmICghY2FsbEV4cHJlc3Npb24uaGFzT3ZlcmxvYWRzKCkpIHsKKyAg
ICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGNh
bGxFeHByZXNzaW9uLm5hbWUoKSkpCisgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi5zZXRPdmVy
bG9hZHMoKmZ1bmN0aW9ucyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY2FsbEV4cHJl
c3Npb24uc2V0Q2FzdERhdGEoKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbnMgPSBt
X25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhjYWxsRXhwcmVzc2lvbi5uYW1lKCkpKQorICAgICAg
ICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChjYWxsRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNp
dChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25z
dGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkKK3sKKyAgICBpZiAoYXV0
byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhjb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5sZWZ0KCkpKSB7CisgICAgICAgIEFTU0VS
VChlbnVtZXJhdGlvblR5cGVzLT5zaXplKCkgPT0gMSk7CisgICAgICAgIEFTVDo6TmFtZWRUeXBl
JiB0eXBlID0gKCplbnVtZXJhdGlvblR5cGVzKVswXTsKKyAgICAgICAgaWYgKGlzPEFTVDo6RW51
bWVyYXRpb25EZWZpbml0aW9uPih0eXBlKSkgeworICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uPih0eXBlKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBtZW1iZXIgPSBl
bnVtZXJhdGlvbkRlZmluaXRpb24ubWVtYmVyQnlOYW1lKGNvbnN0YW50RXhwcmVzc2lvbkVudW1l
cmF0aW9uTWVtYmVyUmVmZXJlbmNlLnJpZ2h0KCkpKSB7CisgICAgICAgICAgICAgICAgY29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Uuc2V0RW51bWVyYXRpb25NZW1i
ZXIoZW51bWVyYXRpb25EZWZpbml0aW9uLCAqbWVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc2V0RXJyb3Io
KTsKK30KKworLy8gRklYTUU6IE1ha2Ugc3VyZSBhbGwgdGhlIG5hbWVzIGhhdmUgYmVlbiByZXNv
bHZlZC4KKworYm9vbCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYW0sIE5hbWVS
ZXNvbHZlciYgbmFtZVJlc29sdmVyKQoreworICAgIGZvciAoYXV0byYgdHlwZURlZmluaXRpb24g
OiBwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVj
a0Vycm9yQW5kVmlzaXQoKnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZl
ci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1
dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkp
IHsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCgqc3RydWN0dXJlRGVm
aW5pdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRp
b24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVz
b2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KCplbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgICAg
ICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGZvciAoYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRp
dmVUeXBlRGVjbGFyYXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JB
bmRWaXNpdCgqbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZl
ci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFt
LCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9u
RGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5h
bWVSZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKGZ1bmN0aW9uRGVmaW5pdGlv
bi5nZXQoKSk7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoKmZ1bmN0
aW9uRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnRG
dW5jdGlvbkRlZmluaXRpb24obnVsbHB0cik7CisgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKSB7Cisg
ICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoKm5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24pOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZl
ci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2
ZXIuaAppbmRleCA0N2Q0ZDZhNTc5My4uZTQwOGU4YzE4Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaApAQCAt
MjcsMTMgKzI3LDQ5IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xQ
cm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorI2luY2x1ZGUgIldITFNM
VmlzaXRvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAK
LXZvaWQgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtKTsKK2NsYXNzIFByb2dy
YW07CisKK2NsYXNzIE5hbWVSZXNvbHZlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAg
ICBOYW1lUmVzb2x2ZXIoTmFtZUNvbnRleHQmKTsKKworICAgIHZpcnR1YWwgfk5hbWVSZXNvbHZl
cigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24m
IGZ1bmN0aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldEN1cnJlbnRGdW5j
dGlvbkRlZmluaXRpb24oQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIGZ1bmN0aW9uRGVmaW5pdGlv
bikKKyAgICB7CisgICAgICAgIG1fY3VycmVudEZ1bmN0aW9uID0gZnVuY3Rpb25EZWZpbml0aW9u
OworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYg
dHlwZVJlZmVyZW5jZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJiBibG9j
aykgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVu
dCkgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKSBv
dmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIHdoaWxlTG9vcCkgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApIG92ZXJyaWRlOwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0
aW9uKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZh
cmlhYmxlUmVmZXJlbmNlKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJiBy
ZXR1cm5Ob2RlKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKSBvdmVycmlkZTsKKyAgICB2
b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBvdmVycmlkZTsK
KyAgICB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJS
ZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSBv
dmVycmlkZTsKKworICAgIE5hbWVDb250ZXh0IG1fbmFtZUNvbnRleHQ7CisgICAgQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24qIG1fY3VycmVudEZ1bmN0aW9uIHsgbnVsbHB0ciB9OworfTsKKworYm9v
bCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mLCBOYW1lUmVzb2x2ZXImKTsKK2Jvb2wgcmVz
b2x2ZU5hbWVzSW5GdW5jdGlvbnMoUHJvZ3JhbSYsIE5hbWVSZXNvbHZlciYpOwogCiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2Vy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNw
cAppbmRleCBiYzZlNzNlNmExZi4uYTdkYjVlNTM0N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKQEAgLTM4LDcgKzM4LDgg
QEAgUGFyc2VyOjpQYXJzZXIoKQogewogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYg
cmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYWw8RXJy
b3I+CisvLyBGSVhNRTogUmV0dXJuIGEgYmV0dGVyIGVycm9yIGNvZGUgZnJvbSB0aGlzLCBhbmQg
cmVwb3J0IGl0IHRvIEphdmFTY3JpcHQuCithdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcHJv
Z3JhbSwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmFsPEVycm9y
PgogewogICAgIG1fbGV4ZXIgPSBMZXhlcihzdHJpbmdWaWV3KTsKICAgICBtX21vZGUgPSBtb2Rl
OwpAQCAtNTQsNyArNTUsMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwg
U3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmEKICAgICAgICAgICAg
ICAgICByZXR1cm4gcGFyc2VUeXBlRGVmaW5pdGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICBpZiAodHlwZURlZmluaXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKFdURk1vdmUoKnR5cGVEZWZpbml0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBzdWNj
ZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqdHlwZURlZmluaXRpb24pKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlz
KCJOYW1lIEVycm9yISAlcyIsIHR5cGVEZWZpbml0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC02NCw3ICs2OSwxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBT
dHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAg
ICAgIHJldHVybiBwYXJzZVN0cnVjdHVyZURlZmluaXRpb24oKTsKICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgaWYgKHN0cnVjdHVyZURlZmluaXRpb24pIHsKLSAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKFdURk1vdmUoKnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpzdHJ1Y3R1cmVEZWZp
bml0aW9uKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAg
ICAgICAgIFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCBzdHJ1Y3R1cmVEZWZpbml0aW9u
LT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC03NCw3ICs4MywxMSBAQCBhdXRvIFBhcnNlcjo6
cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkg
LT4gT3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUVudW1lcmF0aW9uRGVmaW5p
dGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoZW51bWVyYXRpb25EZWZp
bml0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCplbnVtZXJh
dGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFt
LmFwcGVuZChXVEZNb3ZlKCplbnVtZXJhdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1l
IEVycm9yISAlcyIsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtODUsNyArOTgsMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwg
U3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmEKICAgICAgICAgICAg
ICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oKTsKICAgICAgICAgICAgIH0pOwog
ICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbikgewotICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoV1RGTW92ZSgqZnVuY3Rpb25EZWZpbml0aW9uKSk7CisgICAgICAgICAgICAg
ICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqZnVuY3Rpb25EZWZpbml0
aW9uKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAg
ICAgIFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCBmdW5jdGlvbkRlZmluaXRpb24tPm5h
bWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBlcnJvciA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5lcnJvcigp
OwpAQCAtOTYsNyArMTEzLDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQs
IFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbigpOwogICAgICAgICAg
ICAgfSk7CiAgICAgICAgICAgICBpZiAobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikgewotICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdU
Rk1vdmUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9y
ISAlcyIsIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTEwNiw3ICsxMjcsMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwg
U3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmEKICAgICAgICAgICAg
ICAgICByZXR1cm4gcGFyc2VOYXRpdmVUeXBlRGVjbGFyYXRpb24oKTsKICAgICAgICAgICAgIH0p
OwogICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikgewotICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlVHlwZURlY2xhcmF0aW9uKSk7CisgICAg
ICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZl
VHlwZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAg
ICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCBuYXRpdmVUeXBl
RGVjbGFyYXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQ1NCwxNiArNDc5LDUyIEBA
IGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCgpIC0+IEV4cGVjdGVk
PFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxF
cnJvcj4ocmlnaHRTcXVhcmVCcmFja2V0LmVycm9yKCkpOwogICAgICAgICByZXR1cm4ge3sgKnRv
a2VuLCBXVEY6Om51bGxvcHQsICpudW1FbGVtZW50cyB9fTsKICAgICB9Ci0gICAgYXV0byBhZGRy
ZXNzU3BhY2UgPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0YW50LCBM
ZXhlcjo6VG9rZW46OlR5cGU6OkRldmljZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91
cCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWR9KTsKLSAgICBpZiAoIWFkZHJlc3NTcGFjZSkK
LSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZS5lcnJvcigpKTsK
LSAgICByZXR1cm4ge3sgKnRva2VuLCB7ICphZGRyZXNzU3BhY2UgfSwgV1RGOjpudWxsb3B0IH19
OworICAgIGF1dG8gYWRkcmVzc1NwYWNlVG9rZW4gPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9r
ZW46OlR5cGU6OkNvbnN0YW50LCBMZXhlcjo6VG9rZW46OlR5cGU6OkRldmljZSwgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpUaHJlYWRncm91cCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWR9KTsKKyAg
ICBpZiAoIWFkZHJlc3NTcGFjZVRva2VuKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4oYWRkcmVzc1NwYWNlVG9rZW4uZXJyb3IoKSk7CisgICAgQVNUOjpSZWZlcmVuY2VUeXBlOjpB
ZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlOworICAgIHN3aXRjaCAoYWRkcmVzc1NwYWNlVG9rZW4t
PnR5cGUpIHsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQ6CisgICAgICAg
IGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpDb25zdGFu
dDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkRldmljZToK
KyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6
OkRldmljZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRo
cmVhZGdyb3VwOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFk
ZHJlc3NTcGFjZTo6VGhyZWFkZ3JvdXA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGV4ZXI6
OlRva2VuOjpUeXBlOjpUaHJlYWQ6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJl
bmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4oRXJyb3IoU3RyaW5nKCJTb21ldGhpbmcgcmVhbGx5IGJhZCBoYXBwZW5lZCIs
IFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKSk7CisgICAgfQorICAgIHJldHVybiB7eyAq
dG9rZW4sIHsgYWRkcmVzc1NwYWNlIH0sIFdURjo6bnVsbG9wdCB9fTsKIH0KIAotYXV0byBQYXJz
ZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlR5cGU+LCBFcnJvcj4gewotICAgIGF1dG8gYWRkcmVzc1NwYWNlID0gY29uc3VtZVR5cGVz
KHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZp
Y2UsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExleGVyOjpUb2tlbjo6VHlwZTo6
VGhyZWFkfSk7Ci0gICAgaWYgKCFhZGRyZXNzU3BhY2UpCi0gICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihhZGRyZXNzU3BhY2UuZXJyb3IoKSk7CithdXRvIFBhcnNlcjo6cGFyc2VBZGRy
ZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5
cGU+LCBFcnJvcj4geworICAgIGF1dG8gYWRkcmVzc1NwYWNlVG9rZW4gPSBjb25zdW1lVHlwZXMo
eyBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0YW50LCBMZXhlcjo6VG9rZW46OlR5cGU6OkRldmlj
ZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpU
aHJlYWR9KTsKKyAgICBpZiAoIWFkZHJlc3NTcGFjZVRva2VuKQorICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxFcnJvcj4oYWRkcmVzc1NwYWNlVG9rZW4uZXJyb3IoKSk7CisgICAgQVNUOjpSZWZl
cmVuY2VUeXBlOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlOworICAgIHN3aXRjaCAoYWRkcmVz
c1NwYWNlVG9rZW4tPnR5cGUpIHsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3Rh
bnQ6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1Nw
YWNlOjpDb25zdGFudDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5
cGU6OkRldmljZToKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpB
ZGRyZXNzU3BhY2U6OkRldmljZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9r
ZW46OlR5cGU6OlRocmVhZGdyb3VwOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVy
ZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkZ3JvdXA7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWQ6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9
IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWQ7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oRXJyb3IoU3RyaW5nKCJTb21ldGhpbmcgcmVhbGx5IGJh
ZCBoYXBwZW5lZCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKSk7CisgICAgfQogICAg
IGF1dG8gbmFtZSA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7
CiAgICAgaWYgKCFuYW1lKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmFtZS5l
cnJvcigpKTsKQEAgLTQ3MSwxMiArNTMyLDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NT
cGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyCiAg
ICAgaWYgKCF0eXBlQXJndW1lbnRzKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
dHlwZUFyZ3VtZW50cy5lcnJvcigpKTsKIAotICAgIGF1dG8gY29uc3RydWN0VHlwZUZyb21TdWZm
aXhBYmJyZXZpYXRlZCA9IFsmXShjb25zdCBUeXBlU3VmZml4QWJicmV2aWF0ZWQmIHR5cGVTdWZm
aXhBYmJyZXZpYXRlZCwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiBwcmV2aW91cykgLT4g
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4geworICAgIGF1dG8gY29uc3RydWN0VHlwZUZyb21T
dWZmaXhBYmJyZXZpYXRlZCA9IFsmXShjb25zdCBUeXBlU3VmZml4QWJicmV2aWF0ZWQmIHR5cGVT
dWZmaXhBYmJyZXZpYXRlZCwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYgcHJl
dmlvdXMpIC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CiAgICAgICAgIHN3
aXRjaCAodHlwZVN1ZmZpeEFiYnJldmlhdGVkLnRva2VuLnR5cGUpIHsKICAgICAgICAgY2FzZSBM
ZXhlcjo6VG9rZW46OlR5cGU6OlN0YXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeEFiYnJldmlhdGVk
LnRva2VuKSwgYWRkcmVzc1NwYWNlLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUocHJl
dmlvdXMpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRl
clR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4QWJicmV2aWF0ZWQudG9rZW4pLCBhZGRyZXNz
U3BhY2UsIFdURk1vdmUocHJldmlvdXMpKTsKICAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5
cGU6OlNxdWFyZUJyYWNrZXRQYWlyOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4QWJicmV2
aWF0ZWQudG9rZW4pLCBhZGRyZXNzU3BhY2UtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92
ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4QWJicmV2aWF0ZWQudG9r
ZW4pLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUocHJldmlvdXMpKTsKICAgICAgICAgY2FzZSBMZXhl
cjo6VG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0OgogICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4QWJi
cmV2aWF0ZWQudG9rZW4pLCBXVEZNb3ZlKHByZXZpb3VzKSwgKnR5cGVTdWZmaXhBYmJyZXZpYXRl
ZC5udW1FbGVtZW50cyk7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC00ODgsNyArNTQ5LDcgQEAgYXV0
byBQYXJzZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+LCBFcnIKICAgICBhdXRvIGZpcnN0VHlwZVN1ZmZpeEFiYnJldmlhdGVk
ID0gcGFyc2VUeXBlU3VmZml4QWJicmV2aWF0ZWQoKTsKICAgICBpZiAoIWZpcnN0VHlwZVN1ZmZp
eEFiYnJldmlhdGVkKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZmlyc3RUeXBl
U3VmZml4QWJicmV2aWF0ZWQuZXJyb3IoKSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlw
ZT4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlR5cGVSZWZlcmVuY2U+KExleGVyOjpU
b2tlbigqYWRkcmVzc1NwYWNlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3Zl
KCp0eXBlQXJndW1lbnRzKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
IHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKCph
ZGRyZXNzU3BhY2VUb2tlbiksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgq
dHlwZUFyZ3VtZW50cykpOwogICAgIHJlc3VsdCA9IGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4QWJi
cmV2aWF0ZWQoKmZpcnN0VHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBXVEZNb3ZlKHJlc3VsdCkpOwog
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGF1dG8gdHlwZVN1ZmZpeEFiYnJldmlhdGVkID0g
YmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8VHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBFcnJvcj4+
KFsmXSgpIHsKQEAgLTUwMyw3ICs1NjQsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3Bh
Y2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycgogICAg
IHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJl
c3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJy
b3I+IHsKK2F1dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiB7CiAgICAgYXV0byBv
cmlnaW4gPSBwZWVrKCk7CiAgICAgaWYgKCFvcmlnaW4pCiAgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CkBAIC01MTQsMTIgKzU3NSwxMiBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEFTVDo6VHlwZT4sCiAgICAgaWYgKCF0eXBlQXJndW1lbnRzKQogICAgICAgICByZXR1cm4g
VW5leHBlY3RlZDxFcnJvcj4odHlwZUFyZ3VtZW50cy5lcnJvcigpKTsKIAotICAgIGF1dG8gY29u
c3RydWN0VHlwZUZyb21TdWZmaXhOb25BYmJyZXZpYXRlZCA9IFsmXShjb25zdCBUeXBlU3VmZml4
Tm9uQWJicmV2aWF0ZWQmIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCwgc3RkOjp1bmlxdWVfcHRy
PEFTVDo6VHlwZT4mJiBwcmV2aW91cykgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gewor
ICAgIGF1dG8gY29uc3RydWN0VHlwZUZyb21TdWZmaXhOb25BYmJyZXZpYXRlZCA9IFsmXShjb25z
dCBUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQmIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCwgc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYgcHJldmlvdXMpIC0+IHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CiAgICAgICAgIHN3aXRjaCAodHlwZVN1ZmZpeE5vbkFi
YnJldmlhdGVkLnRva2VuLnR5cGUpIHsKICAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6
OlN0YXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlBvaW50ZXJU
eXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLnRva2VuKSwgdHlwZVN1
ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NTcGFjZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBX
VEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxB
U1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLnRv
a2VuKSwgKnR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2UsIFdURk1vdmUocHJl
dmlvdXMpKTsKICAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlNxdWFyZUJyYWNrZXRQ
YWlyOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCB0
eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNlLT5zdHJpbmdWaWV3LnRvU3RyaW5n
KCksIFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeE5vbkFi
YnJldmlhdGVkLnRva2VuKSwgKnR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2Us
IFdURk1vdmUocHJldmlvdXMpKTsKICAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6Okxl
ZnRTcXVhcmVCcmFja2V0OgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNU
OjpBcnJheVR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4p
LCBXVEZNb3ZlKHByZXZpb3VzKSwgKnR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5udW1FbGVtZW50
cyk7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC01MjgsNyArNTg5LDcgQEAgYXV0byBQYXJzZXI6OnBh
cnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlR5cGU+LAogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5
cGU+IHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBlUmVmZXJlbmNlPihXVEZNb3Zl
KCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1
bWVudHMpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gcmVzdWx0ID0g
c3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlR5cGVSZWZlcmVuY2U+KFdURk1vdmUoKm9yaWdpbiksIG5h
bWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOwogICAg
IHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGF1dG8gdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkID0g
YmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBFcnJv
cj4+KFsmXSgpIHsKICAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZp
YXRlZCgpOwpAQCAtNTQyLDE0ICs2MDMsMTQgQEAgYXV0byBQYXJzZXI6OnBhcnNlTm9uQWRkcmVz
c1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LAogICAg
IHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVR5cGUoKSAt
PiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+IHsKLSAgICBhdXRv
IHR5cGUgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpU
eXBlPiwgRXJyb3I+PihbJl0oKSB7CithdXRvIFBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4geworICAgIGF1dG8g
dHlwZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVu
bmFtZWRUeXBlPiwgRXJyb3I+PihbJl0oKSB7CiAgICAgICAgIHJldHVybiBwYXJzZUFkZHJlc3NT
cGFjZVR5cGUoKTsKICAgICB9KTsKICAgICBpZiAodHlwZSkKICAgICAgICAgcmV0dXJuIHR5cGU7
CiAKLSAgICB0eXBlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6VHlwZT4sIEVycm9yPj4oWyZdKCkgeworICAgIHR5cGUgPSBiYWNrdHJhY2tpbmdTY29w
ZTxFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPj4oWyZd
KCkgewogICAgICAgICByZXR1cm4gcGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCk7CiAgICAgfSk7
CiAgICAgaWYgKHR5cGUpCkBAIC04NDcsNyArOTA4LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRW51
bWVyYXRpb25EZWZpbml0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24KICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1l
LmVycm9yKCkpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gdHlwZTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gdHlwZTsKICAgICBpZiAodHJ5VHlwZShM
ZXhlcjo6VG9rZW46OlR5cGU6OkNvbG9uKSkgewogICAgICAgICBhdXRvIHBhcnNlZFR5cGUgPSBw
YXJzZVR5cGUoKTsKICAgICAgICAgaWYgKCFwYXJzZWRUeXBlKQpAQCAtODYzLDIxICs5MjQsMjUg
QEAgYXV0byBQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25EZWZpbml0aW9uKCkgLT4gRXhwZWN0ZWQ8
QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24KICAgICBpZiAoIWZpcnN0RW51bWVyYXRpb25NZW1i
ZXIpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihmaXJzdEVudW1lcmF0aW9uTWVt
YmVyLmVycm9yKCkpOwogCi0gICAgQVNUOjpFbnVtZXJhdGlvbk1lbWJlcnMgbWVtYmVyczsKLSAg
ICBtZW1iZXJzLmFwcGVuZChXVEZNb3ZlKCpmaXJzdEVudW1lcmF0aW9uTWVtYmVyKSk7CisgICAg
QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24gcmVzdWx0KFdURk1vdmUoKm9yaWdpbiksIG5hbWUt
PnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSh0eXBlKSk7CisgICAgYXV0byBzdWNjZXNz
ID0gcmVzdWx0LmFkZChXVEZNb3ZlKCpmaXJzdEVudW1lcmF0aW9uTWVtYmVyKSk7CisgICAgaWYg
KCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gZmFpbChTdHJpbmcoIkNhbm5vdCBhZGQgZW51bWVy
YXRpb24gbWVtYmVyIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogCiAgICAgd2hp
bGUgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb21tYSkpIHsKICAgICAgICAgYXV0byBt
ZW1iZXIgPSBwYXJzZUVudW1lcmF0aW9uTWVtYmVyKCk7CiAgICAgICAgIGlmICghbWVtYmVyKQog
ICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG1lbWJlci5lcnJvcigpKTsKLSAg
ICAgICAgbWVtYmVycy5hcHBlbmQoV1RGTW92ZSgqbWVtYmVyKSk7CisgICAgICAgIHN1Y2Nlc3Mg
PSByZXN1bHQuYWRkKFdURk1vdmUoKm1lbWJlcikpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisg
ICAgICAgICAgICByZXR1cm4gZmFpbChTdHJpbmcoIkNhbm5vdCBhZGQgZW51bWVyYXRpb24gbWVt
YmVyIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogICAgIH0KIAogICAgIGF1dG8g
cmlnaHRDdXJseUJyYWNrZXQgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0
Q3VybHlCcmFja2V0KTsKICAgICBpZiAoIXJpZ2h0Q3VybHlCcmFja2V0KQogICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4ocmlnaHRDdXJseUJyYWNrZXQuZXJyb3IoKSk7CiAKLSAgICBy
ZXR1cm4gQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+
c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHR5cGUpLCBXVEZNb3ZlKG1lbWJlcnMpKTsK
KyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VFbnVt
ZXJhdGlvbk1lbWJlcigpIC0+IEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25NZW1iZXIsIEVycm9y
PiB7CkBAIC05ODEsNyArMTA0Niw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUF0dHJpYnV0ZUJsb2Nr
KCkgLT4gRXhwZWN0ZWQ8QVNUOjpBdHRyaWJ1dGVCbG9jaywgRXJyb3I+IHsKICAgICByZXR1cm4g
V1RGTW92ZShyZXN1bHQpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBF
eHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHsKK2F1dG8gUGFyc2VyOjpwYXJzZVBhcmFt
ZXRlcigpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+IHsKICAg
ICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKICAgICBpZiAoIW9yaWdpbikKICAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKQEAgLTk5Miw3ICsxMDU3LDcgQEAg
YXV0byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXIs
IEVycm9yPiB7CiAgICAgaWYgKCF0eXBlKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4odHlwZS5lcnJvcigpKTsKIAotICAgIE9wdGlvbmFsPFN0cmluZz4gbmFtZTsKKyAgICBTdHJp
bmcgbmFtZTsKICAgICBpZiAoYXV0byB0b2tlbiA9IHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBl
OjpJZGVudGlmaWVyKSkKICAgICAgICAgbmFtZSA9IHRva2VuLT5zdHJpbmdWaWV3LnRvU3RyaW5n
KCk7CiAKQEAgLTEwMDAsMTggKzEwNjUsMTggQEAgYXV0byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVy
KCkgLT4gRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXIsIEVycm9yPiB7CiAgICAgICAgIGF1dG8gc2Vt
YW50aWMgPSBwYXJzZVNlbWFudGljKCk7CiAgICAgICAgIGlmICghc2VtYW50aWMpCiAgICAgICAg
ICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oc2VtYW50aWMuZXJyb3IoKSk7Ci0gICAgICAg
IHJldHVybiBBU1Q6OlBhcmFtZXRlcihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmll
cnMpLCBXVEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsK
KyAgICAgICAgcmV0dXJuIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4p
LCBXVEZNb3ZlKHF1YWxpZmllcnMpLCBXVEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShuYW1lKSwgV1RG
TW92ZSgqc2VtYW50aWMpLCBudWxscHRyKTsKICAgICB9CiAKLSAgICByZXR1cm4gQVNUOjpQYXJh
bWV0ZXIoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSgqdHlw
ZSksIFdURk1vdmUobmFtZSksIFdURjo6bnVsbG9wdCk7CisgICAgcmV0dXJuIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmllcnMpLCBXVEZN
b3ZlKCp0eXBlKSwgV1RGTW92ZShuYW1lKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKIH0KIAot
YXV0byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVycygpIC0+IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVy
cywgRXJyb3I+IHsKK2F1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcnMoKSAtPiBFeHBlY3RlZDxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zLCBFcnJvcj4gewogICAgIGF1dG8gbGVmdFBhcmVudGhl
c2lzID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0UGFyZW50aGVzaXMpOwog
ICAgIGlmICghbGVmdFBhcmVudGhlc2lzKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4obGVmdFBhcmVudGhlc2lzLmVycm9yKCkpOwogCi0gICAgQVNUOjpQYXJhbWV0ZXJzIHBhcmFt
ZXRlcnM7CisgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwogICAgIGlm
ICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRQYXJlbnRoZXNpcykpCiAgICAgICAg
IHJldHVybiBXVEZNb3ZlKHBhcmFtZXRlcnMpOwogCkBAIC0xMDk1LDE0ICsxMTYwLDE2IEBAIGF1
dG8gUGFyc2VyOjpwYXJzZUVudHJ5UG9pbnRGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0
ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhCiAgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4ocGFyYW1ldGVycy5lcnJvcigpKTsKIAorICAgIGJvb2wgaXNP
cGVyYXRvciA9IGZhbHNlOworCiAgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpD
b2xvbikpIHsKICAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAg
ICAgaWYgKCFzZW1hbnRpYykKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihz
ZW1hbnRpYy5lcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSwgZW50cnlQb2ludFR5
cGUsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUo
KnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYykpOworICAgICAgICByZXR1cm4gQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoYXR0cmlidXRlQmxv
Y2spLCBlbnRyeVBvaW50VHlwZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9T
dHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVy
YXRvcik7CiAgICAgfQogCi0gICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZN
b3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSwgZW50cnlQb2ludFR5cGUsIFdU
Rk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFt
ZXRlcnMpLCBXVEY6Om51bGxvcHQpOworICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShhdHRyaWJ1dGVCbG9jayksIGVudHJ5UG9pbnRU
eXBlLCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3Zl
KCpwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKTsKIH0KIAogYXV0byBQYXJz
ZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiB7CkBAIC0xMTE3LDYgKzExODQsNyBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6
RnVuY3Rpb25EZWNsYXJhdAogICAgIGF1dG8gbmFtZSA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpU
b2tlbjo6VHlwZTo6SWRlbnRpZmllciwgTGV4ZXI6OlRva2VuOjpUeXBlOjpPcGVyYXRvck5hbWUg
fSk7CiAgICAgaWYgKCFuYW1lKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmFt
ZS5lcnJvcigpKTsKKyAgICBhdXRvIGlzT3BlcmF0b3IgPSBuYW1lLT50eXBlID09IExleGVyOjpU
b2tlbjo6VHlwZTo6T3BlcmF0b3JOYW1lOwogCiAgICAgYXV0byBwYXJhbWV0ZXJzID0gcGFyc2VQ
YXJhbWV0ZXJzKCk7CiAgICAgaWYgKCFwYXJhbWV0ZXJzKQpAQCAtMTEyNiwxMCArMTE5NCwxMCBA
QCBhdXRvIFBhcnNlcjo6cGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVj
dGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdAogICAgICAgICBhdXRvIHNlbWFudGljID0gcGFyc2VT
ZW1hbnRpYygpOwogICAgICAgICBpZiAoIXNlbWFudGljKQogICAgICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KHNlbWFudGljLmVycm9yKCkpOwotICAgICAgICByZXR1cm4gQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpudWxsb3B0LCBX
VEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJh
bWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsKKyAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92
ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVy
cyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvcik7CiAgICAgfQogCi0gICAgcmV0dXJu
IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVs
bG9wdCwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92
ZSgqcGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCk7CisgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgq
dHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyks
IFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcik7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZU9wZXJh
dG9yRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiwgRXJyb3I+IHsKQEAgLTExNDUsMTQgKzEyMTMsMTYgQEAgYXV0byBQYXJzZXI6OnBhcnNl
T3BlcmF0b3JGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRl
Y2xhcmEKICAgICBpZiAoIXBhcmFtZXRlcnMpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVy
cm9yPihwYXJhbWV0ZXJzLmVycm9yKCkpOwogCisgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsK
KwogICAgIGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29sb24pKSB7CiAgICAgICAg
IGF1dG8gc2VtYW50aWMgPSBwYXJzZVNlbWFudGljKCk7CiAgICAgICAgIGlmICghc2VtYW50aWMp
CiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oc2VtYW50aWMuZXJyb3IoKSk7
Ci0gICAgICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2lu
KSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBTdHJpbmcoIk9wZXJhdG9yIENh
c3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZSgqcGFyYW1ldGVycyks
IFdURk1vdmUoKnNlbWFudGljKSk7CisgICAgICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUp
LCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwg
V1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvcik7CiAg
ICAgfQogCi0gICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmln
aW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIFN0cmluZygiT3BlcmF0b3Ig
Q2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJz
KSwgV1RGOjpudWxsb3B0KTsKKyAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdU
Rk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgU3RyaW5n
KCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUo
KnBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpOwogfQogCiBhdXRvIFBhcnNl
cjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uLCBFcnJvcj4gewpAQCAtMTIwMCw3ICsxMjcwLDcgQEAgYXV0byBQYXJzZXI6OnBh
cnNlTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWMKICAgICBpZiAoIXNlbWljb2xvbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KHNlbWljb2xvbi5lcnJvcigpKTsKIAotICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24oZnVuY3Rpb25EZWNsYXJhdGlvbi0+dGFrZU9yaWdpbigpLCBmdW5jdGlv
bkRlY2xhcmF0aW9uLT50YWtlQXR0cmlidXRlQmxvY2soKSwgZnVuY3Rpb25EZWNsYXJhdGlvbi0+
dGFrZUVudHJ5UG9pbnRUeXBlKCksIGZ1bmN0aW9uRGVjbGFyYXRpb24tPnRha2VUeXBlKCksIGZ1
bmN0aW9uRGVjbGFyYXRpb24tPnRha2VOYW1lKCksIGZ1bmN0aW9uRGVjbGFyYXRpb24tPnRha2VQ
YXJhbWV0ZXJzKCksIGZ1bmN0aW9uRGVjbGFyYXRpb24tPnRha2VTZW1hbnRpYygpLCByZXN0cmlj
dGVkKTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUo
KmZ1bmN0aW9uRGVjbGFyYXRpb24pLCByZXN0cmljdGVkKTsKIH0KIAogYXV0byBQYXJzZXI6OnBh
cnNlQmxvY2soKSAtPiBFeHBlY3RlZDxBU1Q6OkJsb2NrLCBFcnJvcj4gewpAQCAtMTI2MSw3ICsx
MzMxLDEwIEBAIGF1dG8gUGFyc2VyOjpwYXJzZUlmU3RhdGVtZW50KCkgLT4gRXhwZWN0ZWQ8QVNU
OjpJZlN0YXRlbWVudCwgRXJyb3I+IHsKICAgICAgICAgZWxzZUJvZHkgPSBXVEZNb3ZlKCpwYXJz
ZWRFbHNlQm9keSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEFTVDo6SWZTdGF0ZW1lbnQoV1RGTW92
ZSgqb3JpZ2luKSwgV1RGTW92ZSgqY29uZGl0aW9uYWwpLCBXVEZNb3ZlKCpib2R5KSwgV1RGTW92
ZShlbHNlQm9keSkpOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9u
Pj4gY2FzdEFyZ3VtZW50czsKKyAgICBjYXN0QXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpjb25k
aXRpb25hbCkpOworICAgIGF1dG8gYm9vbENhc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6Q2Fs
bEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqb3JpZ2luKSwgU3RyaW5nKCJib29sIiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FzdEFyZ3VtZW50cykpOworICAgIHJl
dHVybiBBU1Q6OklmU3RhdGVtZW50KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoYm9vbENhc3Qp
LCBXVEZNb3ZlKCpib2R5KSwgV1RGTW92ZShlbHNlQm9keSkpOwogfQogCiBhdXRvIFBhcnNlcjo6
cGFyc2VTd2l0Y2hTdGF0ZW1lbnQoKSAtPiBFeHBlY3RlZDxBU1Q6OlN3aXRjaFN0YXRlbWVudCwg
RXJyb3I+IHsKQEAgLTE0NDMsNyArMTUxNiw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZURvV2hpbGVM
b29wKCkgLT4gRXhwZWN0ZWQ8QVNUOjpEb1doaWxlTG9vcCwgRXJyb3I+IHsKICAgICByZXR1cm4g
QVNUOjpEb1doaWxlTG9vcChXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKCpib2R5KSwgV1RGTW92
ZSgqY29uZGl0aW9uYWwpKTsKIH0KIAotYXV0byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJh
dGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5cGUpIC0+IEV4cGVjdGVkPEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+IHsKK2F1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxl
RGVjbGFyYXRpb24oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlwZSkgLT4g
RXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4gewogICAgIGF1dG8gb3Jp
Z2luID0gcGVlaygpOwogICAgIGlmICghb3JpZ2luKQogICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwpAQCAtMTQ4OCw3ICsxNTYxLDcgQEAgYXV0byBQYXJz
ZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb25zU3QKICAgICBpZiAoIXR5cGUpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPih0eXBlLmVycm9yKCkpOwogCi0gICAgYXV0byBmaXJzdFZhcmlhYmxlRGVjbGFyYXRp
b24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4o
KCp0eXBlKS0+Y2xvbmUoKSkpOworICAgIGF1dG8gZmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uID0g
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKCgqdHlwZSktPmNsb25lKCkpOwogICAgIGlmICghZmly
c3RWYXJpYWJsZURlY2xhcmF0aW9uKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
Zmlyc3RWYXJpYWJsZURlY2xhcmF0aW9uLmVycm9yKCkpOwogCkBAIC0xNDk2LDcgKzE1NjksNyBA
QCBhdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpIC0+IEV4cGVjdGVkPEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdAogICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqZmly
c3RWYXJpYWJsZURlY2xhcmF0aW9uKSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9r
ZW46OlR5cGU6OkNvbW1hKSkgewotICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBw
YXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4oKCp0eXBl
KS0+Y2xvbmUoKSkpOworICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb24gPSBwYXJzZVZh
cmlhYmxlRGVjbGFyYXRpb24oKCp0eXBlKS0+Y2xvbmUoKSk7CiAgICAgICAgIGlmICghdmFyaWFi
bGVEZWNsYXJhdGlvbikKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih2YXJp
YWJsZURlY2xhcmF0aW9uLmVycm9yKCkpOwogICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUo
KnZhcmlhYmxlRGVjbGFyYXRpb24pKTsKQEAgLTE5NTksOCArMjAzMiwxMCBAQCBhdXRvIFBhcnNl
cjo6cGFyc2VUZXJuYXJ5Q29uZGl0aW9uYWwoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpFeHByZXNzaQogICAgIGlmICghZWxzZUV4cHJlc3Npb24pCiAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihlbHNlRXhwcmVzc2lvbi5lcnJvcigpKTsKIAotICAgIC8vIEZJWE1F
OiBDYXN0IHRoZSBwcmVkaWNhdGUgdG8gYSBib29sLgotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VGVybmFyeUV4cHJlc3Np
b24+KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoKnByZWRpY2F0ZSksIFdURk1vdmUoKmJvZHlF
eHByZXNzaW9uKSwgV1RGTW92ZSgqZWxzZUV4cHJlc3Npb24pKSk7CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+PiBjYXN0QXJndW1lbnRzOworICAgIGNhc3RBcmd1
bWVudHMuYXBwZW5kKFdURk1vdmUoKnByZWRpY2F0ZSkpOworICAgIGF1dG8gYm9vbENhc3QgPSBz
dGQ6Om1ha2VfdW5pcXVlPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqb3JpZ2lu
KSwgU3RyaW5nKCJib29sIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUo
Y2FzdEFyZ3VtZW50cykpOworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNz
aW9uPihzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VGVybmFyeUV4cHJlc3Npb24+KFdURk1vdmUoKm9y
aWdpbiksIFdURk1vdmUoYm9vbENhc3QpLCBXVEZNb3ZlKCpib2R5RXhwcmVzc2lvbiksIFdURk1v
dmUoKmVsc2VFeHByZXNzaW9uKSkpOwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VBc3NpZ25tZW50
KCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiB7
CkBAIC0yMTc4LDcgKzIyNTMsNiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQb3NzaWJsZVJlbGF0aW9u
YWxCaW5hcnlPcGVyYXRpb24oKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdAogICAgICAgICAg
ICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICAgICAg
Y2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSgqbmV4dCkpOwogICAgICAgICAgICAgcHJldmlv
dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigq
cmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbiksIFN0cmluZygib3BlcmF0b3I9PSIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhbGxBcmd1bWVudHMpKTsKLSAgICAgICAg
ICAgIC8vIEZJWE1FOiBDYXN0IHRoZSBhcmd1bWVudCB0byBhIGJvb2wKICAgICAgICAgICAgIHBy
ZXZpb3VzID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uPihXVEZN
b3ZlKCpyZWxhdGlvbmFsQmluYXJ5T3BlcmF0aW9uKSwgV1RGTW92ZShwcmV2aW91cykpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIzNjQsOCArMjQzOCwxMiBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VQb3NzaWJsZVByZWZpeCgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OkV4cHJlc3Npb24+LAogICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92
ZSgqbmV4dCkpOwogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJl
c3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2Vu
KCpwcmVmaXgpLCBTdHJpbmcoIm9wZXJhdG9yfiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLCBXVEZNb3ZlKGNhbGxBcmd1bWVudHMpKSk7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBM
ZXhlcjo6VG9rZW46OlR5cGU6OkV4Y2xhbWF0aW9uUG9pbnQ6Ci0gICAgICAgICAgICByZXR1cm4g
c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Okxv
Z2ljYWxOb3RFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKnByZWZpeCksIFdURk1vdmUoKm5leHQp
KSk7CisgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpFeGNsYW1hdGlvblBvaW50OiB7
CisgICAgICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4+IGNh
c3RBcmd1bWVudHM7CisgICAgICAgICAgICBjYXN0QXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpu
ZXh0KSk7CisgICAgICAgICAgICBhdXRvIGJvb2xDYXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6
OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKnByZWZpeCksIFN0cmluZygiYm9vbCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhc3RBcmd1bWVudHMpKTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1h
a2VfdW5pcXVlPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4
KSwgV1RGTW92ZShib29sQ2FzdCkpKTsKKyAgICAgICAgfQogICAgICAgICBjYXNlIExleGVyOjpU
b2tlbjo6VHlwZTo6QW5kOgogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OkV4cHJlc3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+
KExleGVyOjpUb2tlbigqcHJlZml4KSwgV1RGTW92ZSgqbmV4dCkpKTsKICAgICAgICAgY2FzZSBM
ZXhlcjo6VG9rZW46OlR5cGU6OkF0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUGFyc2VyLmgKaW5kZXggZGEzZTA2YjAxZTQuLjgwMTM5MTQ5ODA0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2Vy
LmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJX
SExTTEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTEFycmF5
UmVmZXJlbmNlVHlwZS5oIgogI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAi
V0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIgpAQCAtNjgsNyArNjcsNiBAQAogI2luY2x1ZGUg
IldITFNMTm9kZS5oIgogI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKICNpbmNsdWRlICJX
SExTTE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMUGFyYW1l
dGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgogI2luY2x1ZGUgIldITFNMUHJv
Z3JhbS5oIgogI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgiCkBAIC0x
NTQsMTMgKzE1MiwxMyBAQCBwcml2YXRlOgogICAgIEV4cGVjdGVkPFR5cGVTdWZmaXhBYmJyZXZp
YXRlZCwgRXJyb3I+IHBhcnNlVHlwZVN1ZmZpeEFiYnJldmlhdGVkKCk7CiAgICAgc3RydWN0IFR5
cGVTdWZmaXhOb25BYmJyZXZpYXRlZCB7CiAgICAgICAgIExleGVyOjpUb2tlbiB0b2tlbjsKLSAg
ICAgICAgT3B0aW9uYWw8TGV4ZXI6OlRva2VuPiBhZGRyZXNzU3BhY2U7CisgICAgICAgIE9wdGlv
bmFsPEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2U7CiAgICAg
ICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBudW1FbGVtZW50czsKICAgICB9OwogICAgIEV4cGVjdGVk
PFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCwgRXJyb3I+IHBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJl
dmlhdGVkKCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9y
PiBwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKTsKLSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPiwgRXJyb3I+IHBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpOwotICAgIEV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4gcGFyc2VUeXBlKCk7CisgICAg
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4gcGFyc2VB
ZGRyZXNzU3BhY2VUeXBlKCk7CisgICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5u
YW1lZFR5cGU+LCBFcnJvcj4gcGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCk7CisgICAgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4gcGFyc2VUeXBlKCk7
CiAgICAgRXhwZWN0ZWQ8QVNUOjpUeXBlRGVmaW5pdGlvbiwgRXJyb3I+IHBhcnNlVHlwZURlZmlu
aXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYywgRXJyb3I+IHBhcnNl
QnVpbHRJblNlbWFudGljKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpSZXNvdXJjZVNlbWFudGljLCBF
cnJvcj4gcGFyc2VSZXNvdXJjZVNlbWFudGljKCk7CkBAIC0xNzUsOCArMTczLDggQEAgcHJpdmF0
ZToKICAgICBFeHBlY3RlZDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNl
TmF0aXZlVHlwZURlY2xhcmF0aW9uKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpOdW1UaHJlYWRzRnVu
Y3Rpb25BdHRyaWJ1dGUsIEVycm9yPiBwYXJzZU51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSgp
OwogICAgIEV4cGVjdGVkPEFTVDo6QXR0cmlidXRlQmxvY2ssIEVycm9yPiBwYXJzZUF0dHJpYnV0
ZUJsb2NrKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXIsIEVycm9yPiBwYXJzZVBhcmFt
ZXRlcigpOwotICAgIEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVycywgRXJyb3I+IHBhcnNlUGFyYW1l
dGVycygpOworICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+IHBh
cnNlUGFyYW1ldGVyKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucywg
RXJyb3I+IHBhcnNlUGFyYW1ldGVycygpOwogICAgIEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiwgRXJyb3I+IHBhcnNlRW50cnlQb2ludEZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKICAg
ICBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZVJlZ3VsYXJG
dW5jdGlvbkRlY2xhcmF0aW9uKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uLCBFcnJvcj4gcGFyc2VPcGVyYXRvckZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKQEAgLTE5Miw3
ICsxOTAsNyBAQCBwcml2YXRlOgogICAgIEV4cGVjdGVkPEFTVDo6Rm9yTG9vcCwgRXJyb3I+IHBh
cnNlRm9yTG9vcCgpOwogICAgIEV4cGVjdGVkPEFTVDo6V2hpbGVMb29wLCBFcnJvcj4gcGFyc2VX
aGlsZUxvb3AoKTsKICAgICBFeHBlY3RlZDxBU1Q6OkRvV2hpbGVMb29wLCBFcnJvcj4gcGFyc2VE
b1doaWxlTG9vcCgpOwotICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJy
b3I+IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYm
KTsKKyAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZVZh
cmlhYmxlRGVjbGFyYXRpb24oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYpOwog
ICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQsIEVycm9yPiBw
YXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCk7CiAgICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6U3RhdGVtZW50PiwgRXJyb3I+IHBhcnNlU3RhdGVtZW50KCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCmluZGV4
IDBlYjY0ZGVjZDRkLi40NjBlOTQ2ZmRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCkBAIC0yOCwxMCArMjgsMTcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXSExTTFByZXBhcmUuaCIKIAorI2luY2x1
ZGUgIldITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJXSExTTENoZWNr
ZXIuaCIKICNpbmNsdWRlICJXSExTTE5hbWVSZXNvbHZlci5oIgogI2luY2x1ZGUgIldITFNMUGFy
c2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZWN1cnNp
dmVUeXBlQ2hlY2tlci5oIgogI2luY2x1ZGUgIldITFNMU3RhbmRhcmRMaWJyYXJ5LmgiCisjaW5j
bHVkZSAiV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oIgorI2luY2x1ZGUgIldI
TFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUVu
dW1lcmF0aW9uRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplU3RydWN0dXJl
QWNjZXNzb3JzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsOCArNTcsMjMgQEAg
T3B0aW9uYWw8UHJlcGFyYXRpb25SZXN1bHQ+IHByZXBhcmUoU3RyaW5nVmlldyBzb3VyY2UpCiAg
ICAgaWYgKCFzdWNjZXNzKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgcmVz
b2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtKTsKKyAgICBOYW1lUmVzb2x2ZXIgbmFtZVJlc29sdmVy
KHByb2dyYW0ubmFtZUNvbnRleHQoKSk7CisgICAgaWYgKCFyZXNvbHZlTmFtZXNJblR5cGVzKHBy
b2dyYW0sIG5hbWVSZXNvbHZlcikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
aWYgKCFjaGVja1JlY3Vyc2l2ZVR5cGVzKHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMocHJvZ3JhbSk7CisgICAg
c3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKHByb2dyYW0pOworICAgIHN5bnRoZXNpemVB
cnJheU9wZXJhdG9yTGVuZ3RoKHByb2dyYW0pOworICAgIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMo
cHJvZ3JhbSk7CisgICAgaWYgKCFjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhwcm9ncmFtKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBpZiAoIXJlc29sdmVOYW1lc0luRnVuY3Rp
b25zKHByb2dyYW0sIG5hbWVSZXNvbHZlcikpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKIAorICAgIGlmIChjaGVjayhwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICByZXR1cm4gUHJlcGFyYXRpb25SZXN1bHQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaAppbmRleCA1NjMwZmU2
OWVlNC4uNjBlZTQ3OTAxNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUHJvZ3JhbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUHJvZ3JhbS5oCkBAIC0yOSw2ICsyOSw4IEBACiAKICNpbmNsdWRlICJX
SExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZp
bml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xO
YW1lQ29udGV4dC5oIgogI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5o
IgogI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hM
U0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCkBAIC00NCw0NSArNDYsNjQgQEAgcHVibGljOgogICAg
IFByb2dyYW0oKSA9IGRlZmF1bHQ7CiAgICAgUHJvZ3JhbShQcm9ncmFtJiYpID0gZGVmYXVsdDsK
IAotICAgIHZvaWQgYXBwZW5kKEFTVDo6VHlwZURlZmluaXRpb24mJiB0eXBlRGVmaW5pdGlvbikK
KyAgICBib29sIGFwcGVuZChBU1Q6OlR5cGVEZWZpbml0aW9uJiYgdHlwZURlZmluaXRpb24pCiAg
ICAgewotICAgICAgICBtX3R5cGVEZWZpbml0aW9ucy5hcHBlbmQoV1RGTW92ZSh0eXBlRGVmaW5p
dGlvbikpOworICAgICAgICBtX3R5cGVEZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1
ZTxBU1Q6OlR5cGVEZWZpbml0aW9uPihXVEZNb3ZlKHR5cGVEZWZpbml0aW9uKSkpOworICAgICAg
ICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fdHlwZURlZmluaXRpb25zLmxhc3QoKSk7CiAg
ICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYmIHN0cnVjdHVy
ZURlZmluaXRpb24pCisKKyAgICBib29sIGFwcGVuZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24m
JiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQogICAgIHsKLSAgICAgICAgbV9zdHJ1Y3R1cmVEZWZpbml0
aW9ucy5hcHBlbmQoV1RGTW92ZShzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CisgICAgICAgIG1fc3Ry
dWN0dXJlRGVmaW5pdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpTdHJ1Y3R1cmVE
ZWZpbml0aW9uPihXVEZNb3ZlKHN0cnVjdHVyZURlZmluaXRpb24pKSk7CisgICAgICAgIHJldHVy
biBtX25hbWVDb250ZXh0LmFkZCgqbV9zdHJ1Y3R1cmVEZWZpbml0aW9ucy5sYXN0KCkpOwogICAg
IH0KLSAgICB2b2lkIGFwcGVuZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYmIGVudW1lcmF0
aW9uRGVmaW5pdGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uJiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQogICAgIHsKLSAgICAgICAgbV9lbnVtZXJhdGlv
bkRlZmluaXRpb25zLmFwcGVuZChXVEZNb3ZlKGVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAg
ICAgICBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNU
OjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KFdURk1vdmUoZW51bWVyYXRpb25EZWZpbml0aW9uKSkp
OworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fZW51bWVyYXRpb25EZWZpbml0
aW9ucy5sYXN0KCkpOwogICAgIH0KLSAgICB2b2lkIGFwcGVuZChBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbiYmIGZ1bmN0aW9uRGVmaW5pdGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiYgZnVuY3Rpb25EZWZpbml0aW9uKQogICAgIHsKLSAgICAgICAgbV9mdW5j
dGlvbkRlZmluaXRpb25zLmFwcGVuZChXVEZNb3ZlKGZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAg
ICAgICBtX2Z1bmN0aW9uRGVmaW5pdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpG
dW5jdGlvbkRlZmluaXRpb24+KFdURk1vdmUoZnVuY3Rpb25EZWZpbml0aW9uKSkpOworICAgICAg
ICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fZnVuY3Rpb25EZWZpbml0aW9ucy5sYXN0KCkp
OwogICAgIH0KLSAgICB2b2lkIGFwcGVuZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uJiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKICAgICB7
Ci0gICAgICAgIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbj4oV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSkpOworICAgICAgICBtX2lu
dHJpbnNpY3MuYWRkKCptX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmxhc3QoKSk7CisgICAg
ICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
cy5sYXN0KCkpOwogICAgIH0KLSAgICB2b2lkIGFwcGVuZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiYmIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uJiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQogICAgIHsKLSAgICAg
ICAgbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbikpOworICAgICAgICBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMuYXBwZW5kKHN0ZDo6
bWFrZV91bmlxdWU8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KFdURk1vdmUobmF0aXZlVHlw
ZURlY2xhcmF0aW9uKSkpOworICAgICAgICBtX2ludHJpbnNpY3MuYWRkKCptX25hdGl2ZVR5cGVE
ZWNsYXJhdGlvbnMubGFzdCgpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCpt
X25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMubGFzdCgpKTsKICAgICB9CiAKLSAgICBWZWN0b3I8QVNU
OjpUeXBlRGVmaW5pdGlvbj4mIHR5cGVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fdHlwZURlZmlu
aXRpb25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4mIHN0cnVjdHVy
ZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsgfQotICAgIFZl
Y3RvcjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4mIGVudW1lcmF0aW9uRGVmaW5pdGlvbnMo
KSB7IHJldHVybiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpG
dW5jdGlvbkRlZmluaXRpb24+JiBmdW5jdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9mdW5j
dGlvbkRlZmluaXRpb25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbj4mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX25hdGl2ZVR5cGVEZWNsYXJh
dGlvbnM7IH0KKyAgICBOYW1lQ29udGV4dCYgbmFtZUNvbnRleHQoKSB7IHJldHVybiBtX25hbWVD
b250ZXh0OyB9CisgICAgSW50cmluc2ljcyYgaW50cmluc2ljcygpIHsgcmV0dXJuIG1faW50cmlu
c2ljczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlRGVmaW5pdGlvbj4+
JiB0eXBlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3R5cGVEZWZpbml0aW9uczsgfQorICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPj4mIHN0cnVjdHVy
ZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsgfQorICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+PiYgZW51bWVy
YXRpb25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uczsgfQor
ICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+
PiYgZnVuY3Rpb25EZWZpbml0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25EZWZpbml0
aW9uczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpGdW5jdGlvbkRlZmluaXRp
b24+PiYgZnVuY3Rpb25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWZpbml0aW9u
czsgfQorICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uPj4mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgY29uc3QgeyByZXR1
cm4gbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uczsgfQorICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPj4mIG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uczsgfQorICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+PiYgbmF0
aXZlVHlwZURlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsg
fQogCiBwcml2YXRlOgotICAgIFZlY3RvcjxBU1Q6OlR5cGVEZWZpbml0aW9uPiBtX3R5cGVEZWZp
bml0aW9uczsKLSAgICBWZWN0b3I8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPiBtX3N0cnVjdHVy
ZURlZmluaXRpb25zOwotICAgIFZlY3RvcjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4gbV9l
bnVtZXJhdGlvbkRlZmluaXRpb25zOwotICAgIFZlY3RvcjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
bj4gbV9mdW5jdGlvbkRlZmluaXRpb25zOwotICAgIFZlY3RvcjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24+IG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7Ci0gICAgVmVjdG9yPEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPiBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnM7CisgICAg
TmFtZUNvbnRleHQgbV9uYW1lQ29udGV4dDsKKyAgICBJbnRyaW5zaWNzIG1faW50cmluc2ljczsK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZURlZmluaXRpb24+PiBtX3R5cGVE
ZWZpbml0aW9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbj4+IG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4+IG1fZW51bWVyYXRpb25EZWZpbml0aW9u
czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPj4g
bV9mdW5jdGlvbkRlZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPj4gbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uczsK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPj4g
bV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVD
aGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzc1ZWNh
YmIyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcApAQCAtMCwwICsxLDEwNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oIgorCisjaW5jbHVkZSAiV0hMU0xWaXNp
dG9yLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBSZWN1cnNpdmVUeXBlQ2hlY2tlciA6IHB1Ymxp
YyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB+UmVjdXJzaXZlVHlwZUNoZWNrZXIoKSA9IGRlZmF1
bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9u
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVzLmFkZCgm
dHlwZURlZmluaXRpb24pOworICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAg
ICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZURlZmluaXRpb24pOworCisgICAgICAgIGF1
dG8gc3VjY2VzcyA9IG1fdHlwZXMucmVtb3ZlKCZ0eXBlRGVmaW5pdGlvbik7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZXMuYWRkKCZzdHJ1Y3R1cmVEZWZp
bml0aW9uKTsKKyAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOworCisgICAgICAgIGF1dG8g
c3VjY2VzcyA9IG1fdHlwZXMucmVtb3ZlKCZzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlcy5hZGQoJnR5cGVSZWZlcmVuY2UpOworICAgICAg
ICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8mIHR5cGVB
cmd1bWVudCA6IHR5cGVSZWZlcmVuY2UudHlwZUFyZ3VtZW50cygpKQorICAgICAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHR5cGVBcmd1bWVudCk7CisgICAgICAgIHZpc2l0TmFtZWRUeXBlKCp0
eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBt
X3R5cGVzLnJlbW92ZSgmdHlwZVJlZmVyZW5jZSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc3Vj
Y2Vzcywgc3VjY2Vzcyk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlJlZmVyZW5jZVR5
cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSGFzaFNldDxBU1Q6
OlR5cGUqPiBtX3R5cGVzOworfTsKKworYm9vbCBjaGVja1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0m
IHByb2dyYW0pCit7CisgICAgUmVjdXJzaXZlVHlwZUNoZWNrZXIgcmVjdXJzaXZlVHlwZUNoZWNr
ZXI7CisgICAgcmVjdXJzaXZlVHlwZUNoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0p
OworICAgIHJldHVybiByZWN1cnNpdmVUeXBlQ2hlY2tlci5lcnJvcigpOworfQorCit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlhM2ExOWRjZTIwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tl
ci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJHUFUpCisKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wg
eworCitjbGFzcyBQcm9ncmFtOworCitib29sIGNoZWNrUmVjdXJzaXZlVHlwZXMoUHJvZ3JhbSYp
OworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTIyODM1ZjFlNjQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29s
dmVPdmVybG9hZEltcGwuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2
ZU92ZXJsb2FkSW1wbC5oIgorCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworQVNUOjpOYW1lZFR5cGUqIHJl
c29sdmVUeXBlT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
TmFtZWRUeXBlPiwgMT4mIHBvc3NpYmxlVHlwZXMsIEFTVDo6VHlwZUFyZ3VtZW50cyYgdHlwZUFy
Z3VtZW50cykKK3sKKyAgICBBU1Q6Ok5hbWVkVHlwZSogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBm
b3IgKGF1dG8mIHBvc3NpYmxlVHlwZSA6IHBvc3NpYmxlVHlwZXMpIHsKKyAgICAgICAgaWYgKGlu
ZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKHBvc3NpYmxlVHlwZSwgdHlwZUFyZ3VtZW50cykpIHsK
KyAgICAgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgICAgICByZXN1bHQgPSAmc3RhdGljX2Nhc3Q8QVNUOjpOYW1lZFR5cGUmPihwb3Nz
aWJsZVR5cGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgK
c2ltaWxhcml0eSBpbmRleCA3MyUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oCnJlbmFt
ZSB0byBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVy
bG9hZEltcGwuaAppbmRleCBlZjYxZWQxMjYxOS4uYzNmNjBlYTlkNjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFub255bW91c1Zhcmlh
YmxlRGVjbGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuaApAQCAtMjcsOCArMjcsOSBAQAogCiAjaWYgRU5B
QkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFZh
bHVlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlIDxmdW5jdGlv
bmFsPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0zNiwyNiArMzcsMTIgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAK
LWNsYXNzIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24gOiBwdWJsaWMgVmFsdWUgewotcHVi
bGljOgotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB+QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbigpID0gZGVmYXVsdDsK
LQotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oY29uc3QgQW5vbnltb3VzVmFyaWFi
bGVEZWNsYXJhdGlvbiYpID0gZGVsZXRlOwotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRp
b24oQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7Ci0KLSAgICBMZXhl
cjo6VG9rZW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KLQotcHJpdmF0ZToK
LSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci19OworY2xhc3MgTmFtZWRUeXBlOwogCiB9CiAK
K0FTVDo6TmFtZWRUeXBlKiByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+JiwgQVNUOjpUeXBlQXJndW1lbnRzJik7
CisKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3Ro
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODY5Y2UyNTQxNmEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcApAQCAtMCwwICsxLDc2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgRmluZEFycmF5VHlwZXMg
OiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgfkZpbmRBcnJheVR5cGVzKCkgPSBkZWZh
dWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgbV9hcnJheVR5cGVzLmFwcGVuZChhcnJheVR5cGUpOworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlUeXBlKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkFycmF5VHlwZT4+JiYgdGFrZUFycmF5VHlwZXMoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9hcnJheVR5cGVzKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpBcnJheVR5cGU+
PiBtX2FycmF5VHlwZXM7Cit9OworCit2b2lkIHN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3Ro
KFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgRmluZEFycmF5VHlwZXMgZmluZEFycmF5VHlwZXM7
CisgICAgZmluZEFycmF5VHlwZXMuY2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0pOworICAgIGF1
dG8gYXJyYXlUeXBlcyA9IGZpbmRBcnJheVR5cGVzLnRha2VBcnJheVR5cGVzKCk7CisKKyAgICBi
b29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisK
KyAgICBmb3IgKGF1dG8mIGFycmF5VHlwZSA6IGFycmF5VHlwZXMpIHsKKyAgICAgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGFycmF5
VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBhcnJheVR5cGUuZ2V0KCku
Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgcGFyYW1ldGVycy5hcHBl
bmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpB
dHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChM
ZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgcHJvZ3JhbS5pbnRyaW5zaWNz
KCkudWludFR5cGUoKSksIFN0cmluZygib3BlcmF0b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVy
YXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgIH0KK30KKworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50
aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lOWE5YTExNGYyNwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFy
cmF5T3BlcmF0b3JMZW5ndGguaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhlc2l6ZUFycmF5
T3BlcmF0b3JMZW5ndGgoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25z
dHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplQ29uc3RydWN0b3JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uNDIyMWZhMDIyZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCkBAIC0w
LDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBGaW5kQWxs
VHlwZXMgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgfkZpbmRBbGxUeXBlcygpID0g
ZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRlclR5cGUp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQocG9pbnRlclR5
cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQocG9pbnRlclR5cGUpOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlw
ZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChhcnJheVJl
ZmVyZW5jZVR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlSZWZlcmVuY2VU
eXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQoYXJyYXlUeXBl
KTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFycmF5VHlwZSk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0
aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9uYW1lZFR5cGVzLmFwcGVuZChlbnVtZXJh
dGlvbkRlZmluaXRpb24pOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZW51bWVyYXRpb25E
ZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5p
dGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fbmFt
ZWRUeXBlcy5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pIG92ZXJyaWRl
CisgICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOwor
ICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5
cGU+PiYmIHRha2VVbm5hbWVkVHlwZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUo
bV91bm5hbWVkVHlwZXMpOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6TmFtZWRUeXBlPj4mJiB0YWtlTmFtZWRUeXBlcygpCisgICAgeworICAgICAgICBy
ZXR1cm4gV1RGTW92ZShtX25hbWVkVHlwZXMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4gbV91bm5hbWVkVHlw
ZXM7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiBt
X25hbWVkVHlwZXM7Cit9OworCit2b2lkIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYg
cHJvZ3JhbSkKK3sKKyAgICBGaW5kQWxsVHlwZXMgZmluZEFsbFR5cGVzOworICAgIGZpbmRBbGxU
eXBlcy5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAgYXV0byBtX3VubmFtZWRUeXBl
cyA9IGZpbmRBbGxUeXBlcy50YWtlVW5uYW1lZFR5cGVzKCk7CisgICAgYXV0byBtX25hbWVkVHlw
ZXMgPSBmaW5kQWxsVHlwZXMudGFrZU5hbWVkVHlwZXMoKTsKKworICAgIGJvb2wgaXNPcGVyYXRv
ciA9IHRydWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKworICAgIGZvciAoYXV0
byYgdW5uYW1lZFR5cGUgOiBtX3VubmFtZWRUeXBlcykgeworICAgICAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUu
Z2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xv
bmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQo
V1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExl
eGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxv
Y2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJpbmcoIm9w
ZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJh
bWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAg
ICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShjb3B5Q29uc3RydWN0b3IpKTsKKworICAgICAgICBB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVmYXVsdENvbnN0cnVjdG9yKEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkp
LCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUuZ2V0KCku
Y2xvbmUoKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMoKSwgV1RGOjpudWxsb3B0LCBpc09wZXJh
dG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShkZWZh
dWx0Q29uc3RydWN0b3IpKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIG5hbWVkVHlwZSA6IG1f
bmFtZWRUeXBlcykgeworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVE
ZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRU
eXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgU3RyaW5nKCksIFdURjo6bnVs
bG9wdCwgbnVsbHB0cik7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1l
dGVyczsKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0
aW9uKSk7CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3Ry
dWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0
KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkp
LCBuYW1lZFR5cGUuZ2V0KCkpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09w
ZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShj
b3B5Q29uc3RydWN0b3IpKTsKKworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gZGVmYXVsdENvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9r
ZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6
Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBl
LmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bnMoKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAg
cHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShkZWZhdWx0Q29uc3RydWN0b3IpKTsKKyAgICB9Cit9CisK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgwMDIwZGQ3YzcwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVz
aXplQ29uc3RydWN0b3JzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCit2b2lkIHN5bnRoZXNpemVDb25zdHJ1
Y3RvcnMoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1
bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5
bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjBiYTkwNTYyYmRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5j
dGlvbnMuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUVudW1l
cmF0aW9uRnVuY3Rpb25zLmgiCisKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRl
ICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCit2b2lkIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFt
JiBwcm9ncmFtKQoreworICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CisgICAgYm9vbCBpc1Jl
c3RyaWN0ZWQgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6
IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6
VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygp
LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+b3JpZ2luKCkpLCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6
bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24g
dmFyaWFibGVEZWNsYXJhdGlvbjIoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgKmVudW1lcmF0aW9u
RGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgcGFy
YW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMSkpOworICAgICAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMikpOworICAg
ICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlv
bkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxv
cHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIHByb2dyYW0uaW50cmluc2ljcygpLmJvb2xUeXBlKCkpLCBTdHJp
bmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAg
ICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVm
aW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgKmVu
dW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOwor
ICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAg
ICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7Cisg
ICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0
aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVs
bG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCJvcGVy
YXRvci52YWx1ZSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAg
ICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7
CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0
aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCAqZW51bWVy
YXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAg
ICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAg
ICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25E
ZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0
LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoIm9wZXJhdG9y
IGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJz
KSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgICAg
IHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAg
ICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
IHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBl
KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAg
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0
aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6
OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
b3JpZ2luKCkpLCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdU
Rjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAgICBwcm9n
cmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlv
bnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmFjMTA3ODcyZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaApA
QCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2Ns
YXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dy
YW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVj
dHVyZUFjY2Vzc29ycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmZlODEzZGIzODE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcApAQCAtMCww
ICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCIK
KworI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb2dyYW0u
aCIKKyNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVS
ZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCit2b2lkIHN5bnRoZXNpemVT
dHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBib29sIGlzT3BlcmF0
b3IgPSB0cnVlOworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisgICAgZm9yIChhdXRv
JiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKSB7
CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRp
b24tPnN0cnVjdHVyZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAorICAgICAgICAgICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1
cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksICpzdHJ1Y3R1
cmVEZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwor
ICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3Ry
dWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxs
b3B0LCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBTdHJpbmc6OmZvcm1hdCgib3Bl
cmF0b3IuJXMiLCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsK
KyAgICAgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9yLmZpZWxkPQorICAgICAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oc3Ry
dWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZl
cmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCAqc3Ry
dWN0dXJlRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAg
ICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9u
MihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVy
cygpLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
IHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2
YXJpYWJsZURlY2xhcmF0aW9uMSkpOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5k
KFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjIpKTsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkp
LCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgKnN0cnVjdHVy
ZURlZmluaXRpb24pLCBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3IuJXM9Iiwgc3RydWN0dXJlRWxl
bWVudC5uYW1lKCkudXRmOCgpLmRhdGEoKSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVs
bG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAgICAgICAgcHJvZ3Jh
bS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCisgICAgICAg
ICAgICBhdXRvIGNyZWF0ZUFuZGVyID0gWyZdKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1Nw
YWNlIGFkZHJlc3NTcGFjZSkgLT4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQ
b2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBhZGRy
ZXNzU3BhY2UsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJl
RWxlbWVudC5vcmlnaW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CisgICAgICAgICAgICAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgV1RGTW92
ZShhcmd1bWVudFR5cGUpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAg
ICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
CisgICAgICAgICAgICAgICAgYXV0byByZXR1cm5UeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6
OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIGFk
ZHJlc3NTcGFjZSwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAg
ICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVt
ZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1v
dmUocmV0dXJuVHlwZSksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvciYuJXMiLCBzdHJ1Y3R1cmVF
bGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpu
dWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICBwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NT
cGFjZTo6Q29uc3RhbnQpKTsKKyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVy
KEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2UpKTsKKyAgICAgICAgICAg
IHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1Nw
YWNlOjpUaHJlYWRncm91cCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5k
ZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZCkpOworICAgICAgICB9
CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0
cnVjdHVyZUFjY2Vzc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li40ZTliOWZmNzBjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCkBAIC0wLDAg
KzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUp
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJv
Z3JhbTsKKwordm9pZCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0mKTsKKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMVmlzaXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmIwNDU2Mzg5MDAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcApAQCAtMCwwICsxLDEwMjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldITFNMVmlzaXRvci5oIgorCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5j
bHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5VHlw
ZS5oIgorI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJX
SExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIldITFNMQmFzZVNlbWFudGlj
LmgiCisjaW5jbHVkZSAiV0hMU0xCbG9jay5oIgorI2luY2x1ZGUgIldITFNMQm9vbGVhbkxpdGVy
YWwuaCIKKyNpbmNsdWRlICJXSExTTEJyZWFrLmgiCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2Vt
YW50aWMuaCIKKyNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xDb21tYUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTENvbnRpbnVlLmgiCisjaW5jbHVkZSAiV0hMU0xEZXJl
ZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCisjaW5j
bHVkZSAiV0hMU0xEb3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFZmZlY3RmdWxFeHBy
ZXNzaW9uU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24u
aCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyLmgiCisjaW5jbHVkZSAiV0hMU0xF
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGYWxsdGhyb3VnaC5oIgorI2luY2x1ZGUgIldI
TFNMRmxvYXRMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCisjaW5jbHVkZSAi
V0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJh
dGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xJZlN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMSW5kZXhFeHByZXNzaW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbEV4
cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgor
I2luY2x1ZGUgIldITFNMTm9kZS5oIgorI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKKyNp
bmNsdWRlICJXSExTTE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIldI
TFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5oIgorI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgiCisjaW5jbHVkZSAiV0hMU0xSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgiCisj
aW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xSZXR1cm4u
aCIKKyNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFN0YWdlSW5PdXRTZW1hbnRp
Yy5oIgorI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1
cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgiCisjaW5j
bHVkZSAiV0hMU0xTd2l0Y2hDYXNlLmgiCisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hTdGF0ZW1lbnQu
aCIKKyNpbmNsdWRlICJXSExTTFRlcm5hcnlFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xU
cmFwLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1l
bnQuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xU
eXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgi
CisjaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJh
dGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCIK
KyNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xXaGls
ZUxvb3AuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCit2
b2lkIFZpc2l0b3I6OnZpc2l0KFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgZm9yIChhdXRvJiB0
eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCgqdHlwZURlZmluaXRpb24pOworICAgIGZvciAoYXV0byYgc3RydWN0dXJl
RGVmaW5pdGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KCpzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICBmb3IgKGF1dG8mIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAg
Zm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlv
bnMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmdW5jdGlvbkRlZmluaXRpb24pOwor
ICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiA6IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoKm5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
dmlzaXRVbm5hbWVkVHlwZShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkKK3sKKyAgICBp
ZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSk7Cisg
ICAgZWxzZSBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUp
KTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxBU1Q6
OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRv
d25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgIH0KK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdE5hbWVkVHlwZShBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKQoreworICAg
IGlmIChpczxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSk7Cisg
ICAgZWxzZSBpZiAoaXM8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihuYW1lZFR5cGUpKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9u
PihuYW1lZFR5cGUpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlv
bj4obmFtZWRUeXBlKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uPihuYW1lZFR5cGUpKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
QVNTRVJUKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKTsKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
PihuYW1lZFR5cGUpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpUeXBl
RGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pCit7CisgICAgaWYgKHR5cGVEZWZpbml0aW9uLnR5
cGUoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUoKnR5cGVEZWZpbml0
aW9uLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZp
bml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQoreworICAgIGZvciAoYXV0byYgc3RydWN0dXJl
RWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0cnVjdHVyZUVsZW1lbnQpOworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRp
b24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUoZW51bWVyYXRpb25EZWZp
bml0aW9uLnR5cGUoKSk7CisgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGVudW1l
cmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1lbWJlcnMoKSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGVudW1lcmF0aW9uTWVtYmVyKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mPihmdW5j
dGlvbkRlZmluaXRpb24pKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0
aW9uLmJsb2NrKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKK3sKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4obmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbikpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgZm9yIChh
dXRvJiB0eXBlQXJndW1lbnQgOiBuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZUFyZ3VtZW50KTsKK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCit7CisgICAg
Zm9yIChhdXRvJiB0eXBlQXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVBcmd1bWVudCk7CisgICAgaWYgKHR5cGVS
ZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkgJiYgaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4oKnR5cGVS
ZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpKSB7CisgICAgICAgIGF1dG8mIHR5cGVEZWZpbml0aW9u
ID0gZG93bmNhc3Q8QVNUOjpUeXBlRGVmaW5pdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRU
eXBlKCkpOworICAgICAgICBpZiAodHlwZURlZmluaXRpb24udHlwZSgpKQorICAgICAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUoKnR5cGVEZWZpbml0aW9uLnR5cGUoKSk7Cisg
ICAgfQorfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJU
eXBlKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OlJlZmVyZW5j
ZVR5cGUmPihwb2ludGVyVHlwZSkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QXJy
YXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpCit7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZSY+KGFycmF5UmVmZXJlbmNlVHlw
ZSkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUp
Cit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUoYXJyYXlUeXBlLnR5cGUoKSk7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1
cmVFbGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBlKHN0cnVjdHVy
ZUVsZW1lbnQudHlwZSgpKTsKKyAgICBpZiAoc3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygpKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSk7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVy
YXRpb25NZW1iZXIpCit7CisgICAgaWYgKGVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZW51bWVyYXRpb25NZW1iZXIudmFsdWUoKSk7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRl
Y2xhcmF0aW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlY2xhcmF0aW9u
LmF0dHJpYnV0ZUJsb2NrKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBlKGZ1
bmN0aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1
bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQocGFyYW1ldGVyKTsKKyAgICBpZiAoZnVuY3Rpb25EZWNsYXJhdGlvbi5zZW1hbnRpYygpKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZ1bmN0aW9uRGVjbGFyYXRpb24uc2VtYW50aWMo
KSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpUeXBlQXJndW1lbnQmIHR5cGVBcmd1
bWVudCkKK3sKKyAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6Q29uc3Rh
bnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pIHsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGNvbnN0YW50RXhwcmVzc2lvbik7CisgICAgfSwgWyZdKHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlR5cGVSZWZlcmVuY2U+JiB0eXBlUmVmZXJlbmNlKSB7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqdHlwZVJlZmVyZW5jZSk7CisgICAgfSksIHR5cGVBcmd1bWVudCk7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJiByZWZlcmVuY2VUeXBlKQorewor
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBlKHJlZmVyZW5jZVR5cGUuZWxlbWVudFR5
cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMp
Cit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkJ1aWx0SW5TZW1h
bnRpYyYgYnVpbHRJblNlbWFudGljKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChidWls
dEluU2VtYW50aWMpOworICAgIH0sIFsmXShBU1Q6OlJlc291cmNlU2VtYW50aWMmIHJlc291cmNl
U2VtYW50aWMpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlc291cmNlU2VtYW50aWMp
OworICAgIH0sIFsmXShBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYgc3BlY2lh
bGl6YXRpb25Db25zdGFudFNlbWFudGljKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChz
cGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMpOworICAgIH0sIFsmXShBU1Q6OlN0YWdlSW5P
dXRTZW1hbnRpYyYgc3RhZ2VJbk91dFNlbWFudGljKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChzdGFnZUluT3V0U2VtYW50aWMpOworICAgIH0pLCBzZW1hbnRpYyk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lv
bikKK3sKKyAgICBjb25zdGFudEV4cHJlc3Npb24udmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
QVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGludGVnZXJMaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVn
ZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpGbG9hdExp
dGVyYWwmIGZsb2F0TGl0ZXJhbCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZmxvYXRM
aXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIHsKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG51bGxMaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpC
b29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGJvb2xlYW5MaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25N
ZW1iZXJSZWZlcmVuY2UpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGNvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKTsKKyAgICB9KSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRlQmxvY2spCit7Cisg
ICAgZm9yIChhdXRvJiBmdW5jdGlvbkF0dHJpYnV0ZSA6IGF0dHJpYnV0ZUJsb2NrKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25BdHRyaWJ1dGUpOworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6QnVpbHRJblNlbWFudGljJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJikKK3sKK30KKwordm9pZCBWaXNp
dG9yOjp2aXNpdChBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYpCit7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpCit7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGludGVnZXJMaXRlcmFsLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRl
cmFsKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnR5
cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0
TGl0ZXJhbCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZmxvYXRMaXRlcmFsLnR5cGUoKSk7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwp
Cit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG51bGxMaXRlcmFsLnR5cGUoKSk7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYpCit7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGUmIGludGVnZXJMaXRlcmFsVHlwZSkK
K3sKKyAgICBpZiAoaW50ZWdlckxpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICB2
aXNpdFVubmFtZWRUeXBlKCppbnRlZ2VyTGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAg
IHZpc2l0KGludGVnZXJMaXRlcmFsVHlwZS5wcmVmZXJyZWRUeXBlKCkpOworfQorCit2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmIHVuc2lnbmVkSW50
ZWdlckxpdGVyYWxUeXBlKQoreworICAgIGlmICh1bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5y
ZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgdmlzaXRVbm5hbWVkVHlwZSgqdW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIHZpc2l0KHVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpGbG9hdExpdGVyYWxUeXBlJiBmbG9hdExpdGVyYWxUeXBlKQoreworICAgIGlmIChmbG9hdExp
dGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICB2aXNpdFVubmFtZWRUeXBlKCpmbG9h
dExpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICB2aXNpdChmbG9hdExpdGVyYWxUeXBl
LnByZWZlcnJlZFR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpOdWxsTGl0
ZXJhbFR5cGUmIG51bGxMaXRlcmFsVHlwZSkKK3sKKyAgICBpZiAobnVsbExpdGVyYWxUeXBlLnJl
c29sdmVkVHlwZSgpKQorICAgICAgICB2aXNpdFVubmFtZWRUeXBlKCpudWxsTGl0ZXJhbFR5cGUu
cmVzb2x2ZWRUeXBlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6Q29uc3RhbnRF
eHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKQoreworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6RnVuY3Rpb25BdHRyaWJ1dGUmIGZ1bmN0aW9uQXR0cmlidXRlKQorewor
ICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpOdW1UaHJlYWRzRnVuY3Rp
b25BdHRyaWJ1dGUmIG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkgeworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQobnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKTsKKyAgICB9KSwgZnVu
Y3Rpb25BdHRyaWJ1dGUpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TnVtVGhyZWFk
c0Z1bmN0aW9uQXR0cmlidXRlJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkJs
b2NrJiBibG9jaykKK3sKKyAgICBmb3IgKGF1dG8mIHN0YXRlbWVudCA6IGJsb2NrLnN0YXRlbWVu
dHMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpzdGF0ZW1lbnQpOworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6U3RhdGVtZW50JiBzdGF0ZW1lbnQpCit7CisgICAgaWYgKGlz
PEFTVDo6QmxvY2s+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3du
Y2FzdDxBU1Q6OkJsb2NrPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkJyZWFr
PihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpC
cmVhaz4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpDb250aW51ZT4oc3RhdGVt
ZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Q29udGludWU+
KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RG9XaGlsZUxvb3A+KHN0YXRlbWVu
dCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkRvV2hpbGVMb29w
PihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25T
dGF0ZW1lbnQ+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2Fz
dDxBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOworICAgIGVs
c2UgaWYgKGlzPEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkZhbGx0aHJvdWdoPihzdGF0ZW1lbnQpKTsKKyAgICBl
bHNlIGlmIChpczxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChkb3duY2FzdDxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYg
KGlzPEFTVDo6SWZTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChkb3duY2FzdDxBU1Q6OklmU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlm
IChpczxBU1Q6OlJldHVybj4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGRvd25jYXN0PEFTVDo6UmV0dXJuPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6
OlN3aXRjaENhc2U+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3du
Y2FzdDxBU1Q6OlN3aXRjaENhc2U+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6
U3dpdGNoU3RhdGVtZW50PihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZG93bmNhc3Q8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYg
KGlzPEFTVDo6VHJhcD4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRv
d25jYXN0PEFTVDo6VHJhcD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0
YXRlbWVudCkpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoaXM8QVNUOjpXaGlsZUxvb3A+
KHN0YXRlbWVudCkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpX
aGlsZUxvb3A+KHN0YXRlbWVudCkpOworICAgIH0KK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OkJyZWFrJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNvbnRpbnVlJikK
K3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9v
cCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKKyAgICBj
aGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIGlmIChp
czxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGV4cHJlc3Np
b24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkJvb2xlYW5MaXRlcmFsPihleHByZXNzaW9uKSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Qm9vbGVhbkxpdGVyYWw+
KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkNhbGxFeHByZXNzaW9uPihleHBy
ZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Q2FsbEV4
cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkNvbW1hRXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxB
U1Q6OkNvbW1hRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6
RGVyZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGRvd25jYXN0PEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSk7
CisgICAgZWxzZSBpZiAoaXM8QVNUOjpGbG9hdExpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWw+KGV4cHJlc3Np
b24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWw+
KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uPihl
eHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6TG9n
aWNhbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkxvZ2lj
YWxOb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGRvd25jYXN0PEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBl
bHNlIGlmIChpczxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24p
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpNYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpNYWtl
UG9pbnRlckV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoZG93bmNhc3Q8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAg
ICBlbHNlIGlmIChpczxBU1Q6Ok51bGxMaXRlcmFsPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKTsK
KyAgICBlbHNlIGlmIChpczxBU1Q6OkRvdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihleHByZXNz
aW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KGV4cHJlc3Npb24p
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNh
c3Q8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxz
ZSBpZiAoaXM8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlRlcm5hcnlFeHByZXNzaW9uPihleHByZXNz
aW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihleHBy
ZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgeworICAgICAgICBBU1NF
UlQoaXM8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZXhwcmVzc2lvbikpOworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZXhwcmVzc2lv
bikpOworICAgIH0KK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24m
IGRvdEV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFT
VDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJj4oZG90RXhwcmVzc2lvbikpOworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24pCit7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGluZGV4RXhwcmVzc2lvbi5pbmRleEV4cHJlc3Npb24o
KSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uJj4oaW5kZXhFeHByZXNzaW9uKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIGV4cHJlc3Npb24pCit7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24uYmFzZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Np
b25TdGF0ZW1lbnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Np
b25TdGF0ZW1lbnQuZWZmZWN0ZnVsRXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OkZhbGx0aHJvdWdoJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OkZvckxvb3AmIGZvckxvb3ApCit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJh
dGlvbnNTdGF0ZW1lbnQpOworICAgIH0sIFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNz
aW9uPiYgZXhwcmVzc2lvbikgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmV4cHJlc3Np
b24pOworICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkpOworICAgIGlmIChmb3JMb29w
LmNvbmRpdGlvbigpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZvckxvb3AuY29uZGl0
aW9uKCkpOworICAgIGlmIChmb3JMb29wLmluY3JlbWVudCgpKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKmZvckxvb3AuaW5jcmVtZW50KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChm
b3JMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVu
dCYgaWZTdGF0ZW1lbnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmNv
bmRpdGlvbmFsKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5ib2R5KCkp
OworICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgpKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpCit7CisgICAgaWYgKHJldHVyblN0YXRlbWVu
dC52YWx1ZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnJldHVyblN0YXRlbWVudC52
YWx1ZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN3aXRjaENhc2UmIHN3aXRj
aENhc2UpCit7CisgICAgaWYgKHN3aXRjaENhc2UudmFsdWUoKSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KCpzd2l0Y2hDYXNlLnZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChz
d2l0Y2hDYXNlLmJsb2NrKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3dpdGNo
U3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3
aXRjaFN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHN3aXRjaENhc2UgOiBzd2l0
Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3
aXRjaENhc2UpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VHJhcCYpCit7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYg
dmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpCit7CisgICAgZm9yIChhdXRvJiB2YXJpYWJs
ZURlY2xhcmF0aW9uIDogdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQudmFyaWFibGVEZWNs
YXJhdGlvbnMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVjbGFyYXRp
b24pOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3Ap
Cit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQor
eworICAgIGNoZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24u
dHlwZSgpKTsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSk7Cisg
ICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpOworfQorCit2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRF
eHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lv
bi5sZWZ0KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5y
aWdodCgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBj
YWxsRXhwcmVzc2lvbikKK3sKKyAgICBmb3IgKGF1dG8mIGFyZ3VtZW50IDogY2FsbEV4cHJlc3Np
b24uYXJndW1lbnRzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqYXJndW1lbnQpOwor
fQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJl
c3Npb24pCit7CisgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogY29tbWFFeHByZXNzaW9uLmxp
c3QoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpleHByZXNzaW9uKTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VF
eHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkZXJlZmVyZW5jZUV4cHJlc3Np
b24ucG9pbnRlcigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkxvZ2ljYWxFeHBy
ZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9n
aWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4
cHJlc3Npb24ucmlnaHQoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpMb2dpY2Fs
Tm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQoKSk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQoreworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworfQorCit2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHByZXNzaW9uKCkpOwor
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnJlc3VsdEV4
cHJlc3Npb24oKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVz
c2lvbiYgdGVybmFyeUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5h
cnlFeHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFy
eUV4cHJlc3Npb24uYm9keUV4cHJlc3Npb24oKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRl
cm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZp
c2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKQoreworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIGlmICghZXJyb3IoKSkKKyAg
ICAgICAgdmlzaXQocHJvZ3JhbSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZp
c2l0VW5uYW1lZFR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdFVubmFtZWRUeXBlKHVubmFtZWRUeXBlKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXROYW1lZFR5cGUoQVNUOjpOYW1lZFR5cGUm
IG5hbWVkVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0TmFtZWRUeXBl
KG5hbWVkVHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAg
ICAgICAgdmlzaXQodHlwZURlZmluaXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24p
Cit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9u
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkp
CisgICAgICAgIHZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRl
ZmluaXRpb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChmdW5jdGlvbkRl
ZmluaXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCit7Cisg
ICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkp
CisgICAgICAgIHZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkK
K3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHR5cGVSZWZlcmVuY2UpOworfQor
Cit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2lu
dGVyVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHBvaW50ZXJUeXBl
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KGFycmF5UmVmZXJlbmNlVHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCit7CisgICAgaWYgKCFlcnJv
cigpKQorICAgICAgICB2aXNpdChhcnJheVR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKK30K
Kwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJl
ciYgZW51bWVyYXRpb25NZW1iZXIpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNp
dChlbnVtZXJhdGlvbk1lbWJlcik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNsYXJhdGlvbikKK3sKKyAg
ICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVjbGFyYXRpb24pOworfQor
Cit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5cGVBcmd1bWVudCYgdHlw
ZUFyZ3VtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodHlwZUFyZ3Vt
ZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpSZWZlcmVu
Y2VUeXBlJiByZWZlcmVuY2VUeXBlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQocmVmZXJlbmNlVHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6U2VtYW50aWMmIHNlbWFudGljKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAg
dmlzaXQoc2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKQoreworICAgIGlmICgh
ZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY29uc3RhbnRFeHByZXNzaW9uKTsKK30KKwordm9pZCBW
aXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRl
QmxvY2spCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChhdHRyaWJ1dGVCbG9j
ayk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QnVpbHRJblNl
bWFudGljJiBidWlsdEluU2VtYW50aWMpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2
aXNpdChidWlsdEluU2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmIHJlc291cmNlU2VtYW50aWMpCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdChyZXNvdXJjZVNlbWFudGljKTsKK30KKwordm9pZCBW
aXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2Vt
YW50aWMmIHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYykKK3sKKyAgICBpZiAoIWVycm9y
KCkpCisgICAgICAgIHZpc2l0KHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyk7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFudGlj
JiBzdGFnZUluT3V0U2VtYW50aWMpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNp
dChzdGFnZUluT3V0U2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkKK3sKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHZpc2l0KGludGVnZXJMaXRlcmFsKTsKK30KKwordm9pZCBWaXNpdG9y
OjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25l
ZEludGVnZXJMaXRlcmFsKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdChmbG9hdExpdGVyYWwpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkKK3sKKyAgICBpZiAo
IWVycm9yKCkpCisgICAgICAgIHZpc2l0KG51bGxMaXRlcmFsKTsKK30KKwordm9pZCBWaXNpdG9y
OjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwp
Cit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChib29sZWFuTGl0ZXJhbCk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWxU
eXBlJiBpbnRlZ2VyTGl0ZXJhbFR5cGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2
aXNpdChpbnRlZ2VyTGl0ZXJhbFR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJiB1bnNpZ25lZEludGVnZXJM
aXRlcmFsVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHVuc2lnbmVk
SW50ZWdlckxpdGVyYWxUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpGbG9hdExpdGVyYWxUeXBlJiBmbG9hdExpdGVyYWxUeXBlKQoreworICAgIGlmICgh
ZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZmxvYXRMaXRlcmFsVHlwZSk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TnVsbExpdGVyYWxUeXBlJiBudWxsTGl0ZXJh
bFR5cGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChudWxsTGl0ZXJhbFR5
cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAg
IHZpc2l0KGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKTsKK30K
Kwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGdW5jdGlvbkF0dHJpYnV0
ZSYgZnVuY3Rpb25BdHRyaWJ1dGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNp
dChmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJiBudW1UaHJlYWRzRnVuY3Rpb25B
dHRyaWJ1dGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChudW1UaHJlYWRz
RnVuY3Rpb25BdHRyaWJ1dGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OkJsb2NrJiBibG9jaykKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0
KGJsb2NrKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTdGF0
ZW1lbnQmIHN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHN0
YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QnJl
YWsmIGJyZWFrU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQo
YnJlYWtTdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OkNvbnRpbnVlJiBjb250aW51ZVN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisg
ICAgICAgIHZpc2l0KGNvbnRpbnVlU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVj
a0Vycm9yQW5kVmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdChkb1doaWxlTG9vcCk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikKK3sKKyAg
ICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGV4cHJlc3Npb24pOworfQorCit2b2lkIFZp
c2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Np
b24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChkb3RFeHByZXNzaW9uKTsK
K30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpJbmRleEV4cHJlc3Np
b24mIGluZGV4RXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0
KGluZGV4RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24p
Cit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkVmZmVj
dGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChlZmZlY3RmdWxFeHByZXNzaW9uU3Rh
dGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGYWxs
dGhyb3VnaCYgZmFsbHRocm91Z2hTdGF0ZW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAg
ICAgICB2aXNpdChmYWxsdGhyb3VnaFN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKK3sKKyAgICBpZiAoIWVycm9y
KCkpCisgICAgICAgIHZpc2l0KGZvckxvb3ApOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHZpc2l0KGlmU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKK3sKKyAgICBp
ZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHJldHVyblN0YXRlbWVudCk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkK
K3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHN3aXRjaENhc2UpOworfQorCit2
b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYgc3dp
dGNoU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoc3dpdGNo
U3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpU
cmFwJiB0cmFwKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodHJhcCk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQoreworICAgIGlm
ICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQp
OworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OldoaWxlTG9vcCYg
d2hpbGVMb29wKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQod2hpbGVMb29w
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAg
ICAgICAgdmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHBy
ZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYXNzaWdubWVudEV4
cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNh
bGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KGNhbGxFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikKK3sKKyAgICBp
ZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGNvbW1hRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBk
ZXJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNp
dChkZXJlZmVyZW5jZUV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikKK3sKKyAg
ICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lv
biYgbG9naWNhbE5vdEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2
aXNpdChsb2dpY2FsTm90RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KG1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNz
aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobWFrZVBvaW50ZXJFeHBy
ZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQoreworICAg
IGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbik7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VGVybmFyeUV4cHJl
c3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAg
dmlzaXQodGVybmFyeUV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkKK3sKKyAg
ICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHZhcmlhYmxlUmVmZXJlbmNlKTsKK30KKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xWaXNpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFZpc2l0b3IuaAppbmRleCA1MTY4NTZlNDFkMC4uYWZiNDY0Y2Y0ZmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5o
CkBAIC0yNyw1NDMgKzI3LDIzNSBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUg
IldITFNMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJh
dGlvbi5oIgotI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCi0jaW5jbHVkZSAi
V0hMU0xBcnJheVR5cGUuaCIKLSNpbmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgi
Ci0jaW5jbHVkZSAiV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExT
TEJhc2VTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMQmxvY2suaCIKLSNpbmNsdWRlICJXSExT
TEJvb2xlYW5MaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xCcmVhay5oIgotI2luY2x1ZGUgIldI
TFNMQnVpbHRJblNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgot
I2luY2x1ZGUgIldITFNMQ29tbWFFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xDb25zdGFu
dEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0
aW9uTWVtYmVyUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiV0hMU0xDb250aW51ZS5oIgotI2luY2x1
ZGUgIldITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xEb1doaWxl
TG9vcC5oIgotI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNM
RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMRW51bWVyYXRp
b25EZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIgotI2lu
Y2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIK
LSNpbmNsdWRlICJXSExTTEZsb2F0TGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMRm9yTG9vcC5o
IgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTEZ1
bmN0aW9uRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5o
IgotI2luY2x1ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTEluZGV4RXhw
cmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWwuaCIKLSNpbmNsdWRlICJX
SExTTExvZ2ljYWxFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xMb2dpY2FsTm90RXhwcmVz
c2lvbi5oIgotI2luY2x1ZGUgIldITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oIgot
I2luY2x1ZGUgIldITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVj
bGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTE5vZGUuaCIKLSNpbmNsdWRlICJXSExTTE51bGxM
aXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCIK
LSNpbmNsdWRlICJXSExTTFBhcmFtZXRlci5oIgotI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUu
aCIKLSNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUg
IldITFNMUXVhbGlmaWVyLmgiCi0jaW5jbHVkZSAiV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xS
ZXNvdXJjZVNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xSZXR1cm4uaCIKICNpbmNsdWRlICJX
SExTTFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2Vt
YW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oIgotI2luY2x1ZGUg
IldITFNMU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgi
Ci0jaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xTd2l0
Y2hDYXNlLmgiCi0jaW5jbHVkZSAiV0hMU0xTd2l0Y2hTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJX
SExTTFRlcm5hcnlFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xUcmFwLmgiCi0jaW5jbHVk
ZSAiV0hMU0xUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKLSNpbmNsdWRl
ICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgi
Ci0jaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hM
U0xWYWx1ZS5oIgotI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgotI2luY2x1
ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExT
TFZhcmlhYmxlUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKLQogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKLWNsYXNzIFZpc2l0b3Ig
ewotICAgIH5WaXNpdG9yKCkgPSBkZWZhdWx0OwotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KFBy
b2dyYW0mIHByb2dyYW0pCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9u
IDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KHR5cGVEZWZp
bml0aW9uKTsKLSAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3Jh
bS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQoc3RydWN0dXJlRGVm
aW5pdGlvbik7Ci0gICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJv
Z3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdChlbnVtZXJh
dGlvbkRlZmluaXRpb24pOwotICAgICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6
IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQoZnVuY3Rp
b25EZWZpbml0aW9uKTsKLSAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKQotICAgICAgICAgICAg
dmlzaXQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7Ci0gICAgICAgIGZvciAoYXV0byYgbmF0
aXZlVHlwZURlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkpCi0g
ICAgICAgICAgICB2aXNpdChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOwotICAgIH0KLQotICAgIHZv
aWQgdmlzaXRUeXBlKEFTVDo6VHlwZSYgdHlwZSkKLSAgICB7Ci0gICAgICAgIGlmIChpczxBU1Q6
OlR5cGVSZWZlcmVuY2U+KHR5cGUpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpU
eXBlUmVmZXJlbmNlPih0eXBlKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6UG9pbnRlclR5
cGU+KHR5cGUpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4o
dHlwZSkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odHlw
ZSkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
dHlwZSkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OkFycmF5
VHlwZT4odHlwZSkpOwotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+
KHR5cGUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlw
ZSh0eXBlRGVmaW5pdGlvbi50eXBlKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCi0gICAgewot
ICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9u
LnN0cnVjdHVyZUVsZW1lbnRzKCkpCi0gICAgICAgICAgICB2aXNpdChzdHJ1Y3R1cmVFbGVtZW50
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmlu
aXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShl
bnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBlbnVtZXJh
dGlvbk1lbWJlciA6IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1lbWJlcnMoKSkK
LSAgICAgICAgICAgIHZpc2l0KGVudW1lcmF0aW9uTWVtYmVyKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlv
bikKLSAgICB7Ci0gICAgICAgIHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlvbikpOwotICAgICAgICB2aXNpdChmdW5jdGlvbkRlZmlu
aXRpb24uYmxvY2soKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKLSAgICB7
Ci0gICAgICAgIHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKLSAg
ICB7Ci0gICAgICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnR5cGVBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHZpc2l0KHR5cGVBcmd1bWVudCk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJl
ZmVyZW5jZSkKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZVJl
ZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpCi0gICAgICAgICAgICB2aXNpdCh0eXBlQXJndW1lbnQp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2lu
dGVyVHlwZSkKLSAgICB7Ci0gICAgICAgIHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UmVmZXJlbmNl
VHlwZSY+KHBvaW50ZXJUeXBlKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpCi0gICAgewotICAgICAg
ICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGUmPihhcnJheVJlZmVyZW5jZVR5
cGUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFy
cmF5VHlwZSkKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShhcnJheVR5cGUudHlwZSgpKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1
Y3R1cmVFbGVtZW50KQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHN0cnVjdHVyZUVsZW1lbnQu
dHlwZSgpKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSkKLSAgICAg
ICAgICAgIHZpc2l0KCpzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkpOwotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1l
bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChlbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKQotICAg
ICAgICAgICAgdmlzaXQoKmVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpOwotICAgIH0KLSAgICAK
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlv
bkRlY2xhcmF0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbi5h
dHRyaWJ1dGVCbG9jaygpKTsKLSAgICAgICAgdmlzaXRUeXBlKGZ1bmN0aW9uRGVjbGFyYXRpb24u
dHlwZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBwYXJhbWV0ZXIgOiBmdW5jdGlvbkRlY2xhcmF0
aW9uLnBhcmFtZXRlcnMoKSkKLSAgICAgICAgICAgIHZpc2l0KHBhcmFtZXRlcik7Ci0gICAgICAg
IGlmIChmdW5jdGlvbkRlY2xhcmF0aW9uLnNlbWFudGljKCkpCi0gICAgICAgICAgICB2aXNpdCgq
ZnVuY3Rpb25EZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpUeXBlQXJndW1lbnQmIHR5cGVBcmd1bWVudCkKLSAgICB7Ci0gICAgICAg
IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb24m
IGNvbnN0YW50RXhwcmVzc2lvbikgewotICAgICAgICAgICAgdmlzaXQoY29uc3RhbnRFeHByZXNz
aW9uKTsKLSAgICAgICAgfSwgWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+
JiB0eXBlUmVmZXJlbmNlKSB7Ci0gICAgICAgICAgICB2aXNpdCgqdHlwZVJlZmVyZW5jZSk7Ci0g
ICAgICAgIH0pLCB0eXBlQXJndW1lbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OlJlZmVyZW5jZVR5cGUmIHJlZmVyZW5jZVR5cGUpCi0gICAgewotICAgICAgICB2aXNp
dFR5cGUocmVmZXJlbmNlVHlwZS5lbGVtZW50VHlwZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMpCi0gICAgewotICAgICAgICBXVEY6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6QnVpbHRJblNlbWFudGljJiBidWlsdElu
U2VtYW50aWMpIHsKLSAgICAgICAgICAgIHZpc2l0KGJ1aWx0SW5TZW1hbnRpYyk7Ci0gICAgICAg
IH0sIFsmXShBU1Q6OlJlc291cmNlU2VtYW50aWMmIHJlc291cmNlU2VtYW50aWMpIHsKLSAgICAg
ICAgICAgIHZpc2l0KHJlc291cmNlU2VtYW50aWMpOwotICAgICAgICB9LCBbJl0oQVNUOjpTcGVj
aWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmIHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRp
YykgewotICAgICAgICAgICAgdmlzaXQoc3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljKTsK
LSAgICAgICAgfSwgWyZdKEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJiBzdGFnZUluT3V0U2VtYW50
aWMpIHsKLSAgICAgICAgICAgIHZpc2l0KHN0YWdlSW5PdXRTZW1hbnRpYyk7Ci0gICAgICAgIH0p
LCBzZW1hbnRpYyk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29uc3Rh
bnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pCi0gICAgewotICAgICAgICBjb25zdGFu
dEV4cHJlc3Npb24udmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJh
bCYgaW50ZWdlckxpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KGludGVnZXJMaXRlcmFsKTsK
LSAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbCkgewotICAgICAgICAgICAgdmlzaXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCk7
Ci0gICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7Ci0gICAg
ICAgICAgICB2aXNpdChmbG9hdExpdGVyYWwpOwotICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0
ZXJhbCYgbnVsbExpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KG51bGxMaXRlcmFsKTsKLSAg
ICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSB7Ci0gICAg
ICAgICAgICB2aXNpdChib29sZWFuTGl0ZXJhbCk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkgewotICAgICAgICAgICAgdmlzaXQoY29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpOwotICAgICAgICB9KSk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smIGF0dHJp
YnV0ZUJsb2NrKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkF0dHJpYnV0ZSA6
IGF0dHJpYnV0ZUJsb2NrKQotICAgICAgICAgICAgdmlzaXQoZnVuY3Rpb25BdHRyaWJ1dGUpOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlBhcmFtZXRlciYgcGFyYW1ldGVy
KQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHBhcmFtZXRlci50eXBlKCkpOwotICAgICAgICBp
ZiAocGFyYW1ldGVyLnNlbWFudGljKCkpCi0gICAgICAgICAgICB2aXNpdCgqcGFyYW1ldGVyLnNl
bWFudGljKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJ1aWx0SW5T
ZW1hbnRpYyYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJl
c291cmNlU2VtYW50aWMmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmKQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpCi0gICAg
ewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxp
dGVyYWwmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGbG9h
dExpdGVyYWwmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpO
dWxsTGl0ZXJhbCYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkJvb2xlYW5MaXRlcmFsJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKQotICAg
IHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkF0dHJpYnV0
ZSYgZnVuY3Rpb25BdHRyaWJ1dGUpCi0gICAgewotICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFr
ZVZpc2l0b3IoWyZdKEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJiBudW1UaHJlYWRz
RnVuY3Rpb25BdHRyaWJ1dGUpIHsKLSAgICAgICAgICAgIHZpc2l0KG51bVRocmVhZHNGdW5jdGlv
bkF0dHJpYnV0ZSk7Ci0gICAgICAgIH0pLCBmdW5jdGlvbkF0dHJpYnV0ZSk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJikK
LSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QmxvY2smIGJsb2Nr
KQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBzdGF0ZW1lbnQgOiBibG9jay5zdGF0ZW1lbnRz
KCkpCi0gICAgICAgICAgICB2aXNpdCgqc3RhdGVtZW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkKLSAgICB7Ci0gICAgICAgIGlm
IChpczxBU1Q6OkJsb2NrPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8
QVNUOjpCbG9jaz4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6QnJlYWs+
KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkJyZWFrPihzdGF0
ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSkK
LSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6Q29udGludWU+KHN0YXRlbWVudCkpOwot
ICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkRvV2hpbGVMb29wPihzdGF0ZW1lbnQpKQotICAgICAg
ICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpEb1doaWxlTG9vcD4oc3RhdGVtZW50KSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGlzPEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudD4oc3RhdGVt
ZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lv
blN0YXRlbWVudD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6RmFsbHRo
cm91Z2g+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkZhbGx0
aHJvdWdoPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpGb3JMb29wPihz
dGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpGb3JMb29wPihzdGF0
ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpJZlN0YXRlbWVudD4oc3RhdGVtZW50
KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6SWZTdGF0ZW1lbnQ+KHN0YXRlbWVu
dCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlJldHVybj4oc3RhdGVtZW50KSkKLSAgICAg
ICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6UmV0dXJuPihzdGF0ZW1lbnQpKTsKLSAgICAgICAg
ZWxzZSBpZiAoaXM8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlz
aXQoZG93bmNhc3Q8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXM8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNp
dChkb3duY2FzdDxBU1Q6OlN3aXRjaFN0YXRlbWVudD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVs
c2UgaWYgKGlzPEFTVDo6VHJhcD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25j
YXN0PEFTVDo6VHJhcD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNp
dChkb3duY2FzdDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihzdGF0ZW1lbnQp
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpXaGlsZUxvb3A+
KHN0YXRlbWVudCkpOwotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpXaGlsZUxvb3A+
KHN0YXRlbWVudCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6QnJlYWsmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpDb250aW51ZSYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkKLSAgICB7Ci0gICAgICAgIHZpc2l0KGRvV2hpbGVM
b29wLmJvZHkoKSk7Ci0gICAgICAgIHZpc2l0KGRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Np
b24pCi0gICAgewotICAgICAgICBpZiAoaXM8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oZXhw
cmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkFzc2lnbm1lbnRFeHBy
ZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6Qm9vbGVhbkxp
dGVyYWw+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpCb29s
ZWFuTGl0ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkNhbGxF
eHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6
Q2FsbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpD
b21tYUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8
QVNUOjpDb21tYUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8
QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlz
aXQoZG93bmNhc3Q8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAg
ICAgICAgZWxzZSBpZiAoaXM8QVNUOjpGbG9hdExpdGVyYWw+KGV4cHJlc3Npb24pKQotICAgICAg
ICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWw+KGV4cHJlc3Npb24pKTsKLSAg
ICAgICAgZWxzZSBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpCi0gICAg
ICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSk7
Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6TG9naWNhbEV4cHJlc3Npb24+KGV4cHJlc3Npb24p
KQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsRXhwcmVzc2lvbj4oZXhw
cmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9u
PihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6TG9naWNhbE5v
dEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpNYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0
KGRvd25jYXN0PEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
OwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oZXhwcmVz
c2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6Ok51bGxMaXRlcmFs
PihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6TnVsbExpdGVy
YWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpQcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNU
OjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXM8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAg
ICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhw
cmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlRlcm5hcnlFeHByZXNzaW9uPihl
eHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VGVybmFyeUV4cHJl
c3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFT
VDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihleHByZXNzaW9u
KSk7Ci0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihl
eHByZXNzaW9uKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNzaW9uU3Rh
dGVtZW50KQotICAgIHsKLSAgICAgICAgdmlzaXQoZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVu
dC5lZmZlY3RmdWxFeHByZXNzaW9uKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OkZhbGx0aHJvdWdoJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKLSAgICB7Ci0gICAgICAgIFdURjo6dmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFy
aWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpIHsKLSAgICAgICAgICAgIHZpc2l0KHZhcmlhYmxl
RGVjbGFyYXRpb25zU3RhdGVtZW50KTsKLSAgICAgICAgfSwgWyZdKHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7Ci0gICAgICAgICAgICB2aXNpdCgqZXhwcmVz
c2lvbik7Ci0gICAgICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkpOwotICAgICAgICBp
ZiAoZm9yTG9vcC5jb25kaXRpb24oKSkKLSAgICAgICAgICAgIHZpc2l0KCpmb3JMb29wLmNvbmRp
dGlvbigpKTsKLSAgICAgICAgaWYgKGZvckxvb3AuaW5jcmVtZW50KCkpCi0gICAgICAgICAgICB2
aXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7Ci0gICAgICAgIHZpc2l0KGZvckxvb3AuYm9keSgp
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZT
dGF0ZW1lbnQpCi0gICAgewotICAgICAgICB2aXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgp
KTsKLSAgICAgICAgdmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKLSAgICAgICAgaWYgKGlmU3Rh
dGVtZW50LmVsc2VCb2R5KCkpCi0gICAgICAgICAgICB2aXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJv
ZHkoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJiByZXR1
cm5TdGF0ZW1lbnQpCi0gICAgewotICAgICAgICBpZiAocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkp
Ci0gICAgICAgICAgICB2aXNpdCgqcmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaENhc2UmIHN3aXRjaENhc2UpCi0gICAg
ewotICAgICAgICBpZiAoc3dpdGNoQ2FzZS52YWx1ZSgpKQotICAgICAgICAgICAgdmlzaXQoKnN3
aXRjaENhc2UudmFsdWUoKSk7Ci0gICAgICAgIHZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0
Y2hTdGF0ZW1lbnQpCi0gICAgewotICAgICAgICB2aXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUo
KSk7Ci0gICAgICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0
Y2hDYXNlcygpKQotICAgICAgICAgICAgdmlzaXQoc3dpdGNoQ2FzZSk7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpCi0gICAgewotICAgIH0KK2NsYXNzIFByb2dy
YW07CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBUeXBlRGVmaW5pdGlvbjsKK2NsYXNzIFN0
cnVjdHVyZURlZmluaXRpb247CitjbGFzcyBFbnVtZXJhdGlvbkRlZmluaXRpb247CitjbGFzcyBG
dW5jdGlvbkRlZmluaXRpb247CitjbGFzcyBOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xh
c3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uOworY2xhc3MgVHlwZVJlZmVyZW5jZTsKK2NsYXNzIFBv
aW50ZXJUeXBlOworY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlOworY2xhc3MgQXJyYXlUeXBlOwor
Y2xhc3MgU3RydWN0dXJlRWxlbWVudDsKK2NsYXNzIEVudW1lcmF0aW9uTWVtYmVyOworY2xhc3Mg
RnVuY3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNzIFJlZmVyZW5jZVR5cGU7CitjbGFzcyBDb25zdGFu
dEV4cHJlc3Npb247CitjbGFzcyBCdWlsdEluU2VtYW50aWM7CitjbGFzcyBSZXNvdXJjZVNlbWFu
dGljOworY2xhc3MgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljOworY2xhc3MgU3RhZ2VJ
bk91dFNlbWFudGljOworY2xhc3MgSW50ZWdlckxpdGVyYWw7CitjbGFzcyBVbnNpZ25lZEludGVn
ZXJMaXRlcmFsOworY2xhc3MgRmxvYXRMaXRlcmFsOworY2xhc3MgTnVsbExpdGVyYWw7CitjbGFz
cyBCb29sZWFuTGl0ZXJhbDsKK2NsYXNzIENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVt
YmVyUmVmZXJlbmNlOworY2xhc3MgTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlOworY2xhc3Mg
QmxvY2s7CitjbGFzcyBTdGF0ZW1lbnQ7CitjbGFzcyBCcmVhazsKK2NsYXNzIENvbnRpbnVlOwor
Y2xhc3MgRG9XaGlsZUxvb3A7CitjbGFzcyBFeHByZXNzaW9uOworY2xhc3MgRG90RXhwcmVzc2lv
bjsKK2NsYXNzIEluZGV4RXhwcmVzc2lvbjsKK2NsYXNzIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bjsKK2NsYXNzIEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ7CitjbGFzcyBGYWxsdGhyb3Vn
aDsKK2NsYXNzIEZvckxvb3A7CitjbGFzcyBJZlN0YXRlbWVudDsKK2NsYXNzIFJldHVybjsKK2Ns
YXNzIFN3aXRjaENhc2U7CitjbGFzcyBTd2l0Y2hTdGF0ZW1lbnQ7CitjbGFzcyBUcmFwOworY2xh
c3MgVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ7CitjbGFzcyBXaGlsZUxvb3A7CitjbGFz
cyBWYXJpYWJsZURlY2xhcmF0aW9uOworY2xhc3MgQXNzaWdubWVudEV4cHJlc3Npb247CitjbGFz
cyBDYWxsRXhwcmVzc2lvbjsKK2NsYXNzIENvbW1hRXhwcmVzc2lvbjsKK2NsYXNzIERlcmVmZXJl
bmNlRXhwcmVzc2lvbjsKK2NsYXNzIExvZ2ljYWxFeHByZXNzaW9uOworY2xhc3MgTG9naWNhbE5v
dEV4cHJlc3Npb247CitjbGFzcyBNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uOworY2xhc3Mg
TWFrZVBvaW50ZXJFeHByZXNzaW9uOworY2xhc3MgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjsK
K2NsYXNzIFRlcm5hcnlFeHByZXNzaW9uOworY2xhc3MgVmFyaWFibGVSZWZlcmVuY2U7CitjbGFz
cyBVbm5hbWVkVHlwZTsKK2NsYXNzIE5hbWVkVHlwZTsKIAotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudCkKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlv
biA6IHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LnZhcmlhYmxlRGVjbGFyYXRpb25zKCkp
Ci0gICAgICAgICAgICB2aXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKLSAgICB7Ci0gICAg
ICAgIHZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKLSAgICAgICAgdmlzaXQod2hpbGVM
b29wLmJvZHkoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0
VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7Ci0gICAgICAgIGlmICh2YXJpYWJsZURl
Y2xhcmF0aW9uLnNlbWFudGljKCkpCi0gICAgICAgICAgICB2aXNpdCgqdmFyaWFibGVEZWNsYXJh
dGlvbi5zZW1hbnRpYygpKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlh
bGl6ZXIoKSkKLSAgICAgICAgICAgIHZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxp
emVyKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRF
eHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KGFz
c2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7Ci0gICAgICAgIHZpc2l0KGFzc2lnbm1lbnRFeHBy
ZXNzaW9uLnJpZ2h0KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNh
bGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYg
YXJndW1lbnQgOiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHZpc2l0
KCphcmd1bWVudCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29tbWFF
eHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIGV4
cHJlc3Npb24gOiBjb21tYUV4cHJlc3Npb24ubGlzdCgpKQotICAgICAgICAgICAgdmlzaXQoKmV4
cHJlc3Npb24pOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJl
bmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlz
aXQoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50ZXIoKSk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNzaW9uKQot
ICAgIHsKLSAgICAgICAgdmlzaXQobG9naWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKLSAgICAgICAg
dmlzaXQobG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9u
KQotICAgIHsKLSAgICAgICAgdmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAg
dmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9p
bnRlckV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChtYWtlUG9pbnRlckV4cHJlc3Np
b24ubFZhbHVlKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQotICAgIHsKLSAg
ICAgICAgdmlzaXQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmJhc2UoKSk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ubFZhbHVlKCkpOwotICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLm9sZFZhbHVlKCkpOwotICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLm5ld1ZhbHVlKCkpOwotICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKTsKLSAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi5yZXN1bHRFeHByZXNzaW9uKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikKLSAgICB7
Ci0gICAgICAgIHZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKLSAgICAgICAg
dmlzaXQodGVybmFyeUV4cHJlc3Npb24uYm9keUV4cHJlc3Npb24oKSk7Ci0gICAgICAgIHZpc2l0
KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkpOwotICAgIH0KLQotICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikKLSAgICB7Ci0gICAgfQorfQog
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlv
biYpCi0gICAgewotICAgIH0KK2NsYXNzIFZpc2l0b3IgeworcHVibGljOgorICAgIHZpcnR1YWwg
flZpc2l0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBGSVhNRTogQWRkIGEgd2F5IHRvIHZpc2l0
IGEgY29uc3QgUHJvZ3JhbQorCisgICAgdm9pZCB2aXNpdFVubmFtZWRUeXBlKEFTVDo6VW5uYW1l
ZFR5cGUmIHVubmFtZWRUeXBlKTsKKyAgICB2b2lkIHZpc2l0TmFtZWRUeXBlKEFTVDo6TmFtZWRU
eXBlJiBuYW1lZFR5cGUpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUo
QVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZp
c2l0TmFtZWRUeXBlKEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpOworCisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KFByb2dyYW0mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVm
aW5pdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXJyYXlU
eXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRWxlbWVudCYpOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OlR5cGVBcmd1bWVudCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlJlZmVyZW5jZVR5cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTZW1hbnRp
YyYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYpOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkF0dHJpYnV0ZUJsb2NrJik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6QnVpbHRJblNlbWFudGljJik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkludGVnZXJMaXRlcmFsJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJh
bCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OkZsb2F0TGl0ZXJhbFR5cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpO
dWxsTGl0ZXJhbFR5cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4
cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6QmxvY2smKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdGF0ZW1lbnQmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCcmVhayYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OkNvbnRpbnVlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RG9XaGls
ZUxvb3AmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFeHByZXNzaW9uJik7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpGYWxsdGhyb3VnaCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZvckxv
b3AmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVudCYpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJldHVybiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlN3aXRjaENhc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hTdGF0
ZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUcmFwJik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6QXNzaWdubWVudEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpD
YWxsRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbW1hRXhwcmVz
c2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lv
biYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJik7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKTsKKworICAgIHZvaWQgY2hlY2tF
cnJvckFuZFZpc2l0KFByb2dyYW0mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OlR5cGVEZWZpbml0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpUeXBlUmVmZXJlbmNlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpQ
b2ludGVyVHlwZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBcnJheVR5cGUm
KTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmKTsK
KyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJik7Cisg
ICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJik7Cisg
ICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUeXBlQXJndW1lbnQmKTsKKyAgICB2b2lk
IGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OlNlbWFudGljJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OkF0dHJpYnV0ZUJsb2NrJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpCdWlsdEluU2VtYW50aWMmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJl
c291cmNlU2VtYW50aWMmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlNwZWNp
YWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpJbnRlZ2VyTGl0ZXJhbCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6RmxvYXRMaXRlcmFsJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOdWxs
TGl0ZXJhbCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVy
YWwmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkludGVnZXJMaXRlcmFsVHlw
ZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbFR5cGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZsb2F0TGl0ZXJh
bFR5cGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok51bGxMaXRlcmFsVHlw
ZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkJsb2NrJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpT
dGF0ZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJyZWFrJik7Cisg
ICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDb250aW51ZSYpOworICAgIHZvaWQgY2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OkRvdEV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Oklu
ZGV4RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpF
ZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpGYWxsdGhyb3VnaCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
Rm9yTG9vcCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQm
KTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJldHVybiYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYpOworICAgIHZvaWQgY2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpUcmFwJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6V2hpbGVMb29wJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q2Fs
bEV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbW1hRXhw
cmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RGVyZWZlcmVuY2VF
eHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpMb2dpY2FsRXhw
cmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TG9naWNhbE5vdEV4
cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok1h
a2VQb2ludGVyRXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlJik7CisKKyAgICB2b2lkIHNldEVycm9yKCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghbV9lcnJvcik7CisgICAgICAgIG1fZXJyb3IgPSB0cnVlOworICAgIH0K
KworICAgIGJvb2wgZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9CisKK3ByaXZhdGU6
CisgICAgYm9vbCBtX2Vycm9yIHsgZmFsc2UgfTsgLy8gRklYTUU6IE1pZ3JhdGUgdGhpcyB0byBi
ZSBzb21lIHNvcnQgb2YgZGVzY3JpcHRpdmUgc3RyaW5nLgogfTsKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApp
bmRleCAzYzBlMzY0NzA1NC4uZDQwYzM0ZjA0ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0zMDYsOCAr
MzA2LDMyIEBAIE1vZHVsZXMvd2ViZ3B1L0RPTVdpbmRvd1dlYkdQVS5jcHAKIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNl
ci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKK01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMSW50cmluc2ljcy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
Q2hlY2tlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAorTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVj
dXJzaXZlVHlwZUNoZWNrZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVw
bGljYXRlRnVuY3Rpb25zLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXpl
U3RydWN0dXJlQWNjZXNzb3JzLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVz
aXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5
bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xW
aXNpdG9yLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNw
cAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcAorTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAKK01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAK
K01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5jcHAKK01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwCitNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCitNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3BwCitNb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAKK01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEludGVnZXJMaXRlcmFsLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbC5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVS5jcHAKIE1vZHVsZXMv
d2ViZ3B1L1dlYkdQVUFkYXB0ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXBM
YXlvdXQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggMDdjMTZlZjE3NzUuLjQ1M2NlZDJkMzMyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDAzLDkgKzY0
MDMsMjAgQEAKIAkJMUMyNEVFQTcxQzcyQTdCNDAwODBGOEZDIC8qIEpTRm9udEZhY2VTZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNGb250RmFjZVNldC5oOyBwYXRoID0g
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ZvbnRGYWNlU2V0Lmg7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CiAJCTFDMjY0OTc5MEQ3RTI0OEEwMEJEMTBGMiAvKiBEb2N1bWVu
dExvYWRlck1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1
bWVudExvYWRlck1hYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMzI0OTEw
MUM2RDZBM0IwMDdFREIzMiAvKiBGb250VmFyaWFudEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udFZhcmlhbnRCdWlsZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NkMyMUNFREE0MjAwMERDOUYyIC8qIFdITFNMRW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzZFMjFD
RUZGNzQwMDBEQzlGMiAvKiBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFDMzMyNzZGMjFDRjAxMzEwMDBEQzlGMiAvKiBXSExTTEluZmVyVHlwZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xJbmZlclR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDMzMyNzcxMjFDRjBCRTEwMDBEQzlGMiAvKiBXSExTTE5hbWVkVHlwZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTE5hbWVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMz
Mjc3MjIxQ0YwRDJFMDAwREM5RjIgLyogV0hMU0xVbm5hbWVkVHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTFVubmFtZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMy
Nzc0MjFENUE3MDYwMDBEQzlGMiAvKiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUMzMzI3NzUyMUQ1QjBGODAwMERDOUYyIC8qIFdITFNMQ2hlY2tEdXBsaWNh
dGVGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3NjIxRDVDMDdFMDAwREM5
RjIgLyogV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzMzMjc3NzIxRDVDQTgzMDAwREM5RjIgLyogV0hMU0xTeW50aGVzaXplRW51
bWVyYXRpb25GdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTeW50aGVzaXplRW51bWVy
YXRpb25GdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3Nzgy
MUQ1Q0VENDAwMERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzM5NjlDRjFCNzQyMTFFMDAyQkNGQTcgLyogRm9u
dENhY2hlQ29yZVRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Rm9udENhY2hlQ29yZVRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzY2
MjYwRTFDNkU3Q0E2MDBBQjUyN0MgLyogRm9udEZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRm9udEZhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQzY2MjYwRjFDNkU3Q0E2MDBBQjUyN0MgLyogRm9udEZhY2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udEZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUM3Q0MyMUQyMUNERTE5ODAwQzFGQTJDIC8qIFdITFNMTmFtZUNvbnRleHQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xOYW1lQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQzgxQjk1NjBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JDb250cm9sbGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCOTU3MEU5NzMzMDgwMDI2NkUwNyAvKiBJ
bnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQzgxQjk1ODBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ2xpZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNjQxNSw2ICs2NDI2LDE3IEBACiAJCTFDQUYzNDdFMEE2QzQwNTIw
MEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViU2NyaXB0T2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFD
QUYzNDdGMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3QubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJTY3JpcHRPYmplY3QubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDgwMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3Jp
cHRPYmplY3RQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNj
cmlwdE9iamVjdFByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlC
MkMyMUREOTZFRjAwNkU4NDZBIC8qIFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCMkQyMUREOTZFRjAwNkU4NDZBIC8qIFdITFNMR2F0
aGVyRW50cnlQb2ludEl0ZW1zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMR2F0aGVyRW50cnlQb2lu
dEl0ZW1zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjMyMjFERUQ0MEIw
MDZFODQ2QSAvKiBXSExTTFJlc29sdmFibGVUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUmVz
b2x2YWJsZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCMzQyMURF
RDYzQTAwNkU4NDZBIC8qIFdITFNMRmxvYXRMaXRlcmFsVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTEZsb2F0TGl0ZXJhbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNC
NjlCMzUyMURFRDY0OTAwNkU4NDZBIC8qIFdITFNMSW50ZWdlckxpdGVyYWxUeXBlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMSW50ZWdlckxpdGVyYWxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDQjY5QjM2MjFERUQ2NTcwMDZFODQ2QSAvKiBXSExTTE51bGxMaXRlcmFsVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE51bGxMaXRlcmFsVHlwZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQ0I2OUIzNzIxREVENjZCMDA2RTg0NkEgLyogV0hMU0xVbnNpZ25l
ZEludGVnZXJMaXRlcmFsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjM4MjFE
RjAzRTEwMDZFODQ2QSAvKiBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUNCNjlCMzkyMURGMDNGMzAwNkU4NDZBIC8qIFdITFNMSW50ZWdlckxpdGVyYWxUeXBl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW50ZWdlckxpdGVyYWxUeXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCM0EyMURGMDQwMzAwNkU4NDZBIC8qIFdI
TFNMTnVsbExpdGVyYWxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTnVsbExpdGVy
YWxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCM0IyMURGMDQx
RTAwNkU4NDZBIC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQjZCNEY4MjE3QjgzOTMwMDkzQjlDRCAvKiBUZXh0RGVj
b3JhdGlvblRoaWNrbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0RGVjb3JhdGlvblRoaWNrbmVz
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0I2QjRGQjIxN0I4Mzk0MDA5M0I5
Q0QgLyogVGV4dFVuZGVybGluZU9mZnNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0VW5kZXJsaW5l
T2Zmc2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQ0RGNUJCMTk5MDMzMjQw
MEJDRUJBRCAvKiBTVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTMyMTQsOSArMTMyMzYsMTkgQEAKIAkJQzExQTlFQ0QyMTQw
M0E1QzAwQ0ZCMjBBIC8qIFN3aXRjaGluZ0dQVUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTd2l0
Y2hpbmdHUFVDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzExQTlFRDIy
MTQwNTc4QjAwQ0ZCMjBBIC8qIFN3aXRjaGluZ0dQVUNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTd2l0Y2hpbmdHUFVDbGllbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDMUUxRDIzNTIwM0RGMTU0MDA1ODQ2NjUgLyogU2NyZWVuUHJvcGVydGllcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY3JlZW5Qcm9wZXJ0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMDEzMzQ0MjFEQUMwOTUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNpY3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xJbnRyaW5zaWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MDEzMzQ2MjFEQUVFNkUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNpY3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0hMU0xJbnRyaW5zaWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzIwMTMzNDcyMURCNDM2MzAwQjYwQzI3IC8qIFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9y
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIwMTVDMDkxQkU2RkUyQzAwODIyMzg5IC8qIEZvbnRW
YXJpYW50QnVpbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250VmFyaWFudEJ1aWxkZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwRjRGNjQyMURGQkU1QzAwNzBDNDVBIC8qIFdI
TFNMVHlwZVJlZmVyZW5jZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFR5cGVSZWZlcmVu
Y2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjBGNEY2NjIxREZGMjM2MDA3
MEM0NUEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExT
TEludGVnZXJMaXRlcmFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwRjRG
NjcyMURGRjNBNzAwNzBDNDVBIC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjEwRTkxMTIxQjRCRDEwMDBCN0Y4M0QgLyogV0hMU0xM
ZXhlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTExleGVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMEU5MTIyMUI0QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xMZXhlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMjEzOEExMzIxRERFQ0QzMDBGNTE2QkEgLyogV0hMU0xCdWlsdEluU2VtYW50aWMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xCdWlsdEluU2VtYW50aWMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMjEzOEExNTIxRERFQ0U5MDBGNTE2QkEgLyogV0hMU0xSZXNv
dXJjZVNlbWFudGljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMUmVzb3VyY2VTZW1hbnRp
Yy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMTM4QTE2MjFEREVDRkIwMEY1
MTZCQSAvKiBXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMTM4QTE3MjFEREVEMEQwMEY1MTZCQSAvKiBXSExT
TFN0YWdlSW5PdXRTZW1hbnRpYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN0YWdlSW5P
dXRTZW1hbnRpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNkYzMjFD
RDg5QUQwMDIyNzk3OSAvKiBXSExTTFRyYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xUcmFwLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNkY0MjFDRDg5QjMwMDIyNzk3OSAv
KiBXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEZ1bmN0aW9u
RGVmaW5pdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjZGNTIxQ0Q4
OUI1MDAyMjc5NzkgLyogV0hMU0xDb250aW51ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTENvbnRp
bnVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzI0NSw3ICsxMzI3Nyw2IEBA
CiAJCUMyMUJGNzBDMjFDRDg5Q0MwMDIyNzk3OSAvKiBXSExTTEV4cHJlc3Npb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyMUJGNzBEMjFDRDg5Q0QwMDIyNzk3OSAvKiBXSExTTFJlZmVyZW5jZVR5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xSZWZlcmVuY2VUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyMUJGNzBFMjFDRDg5Q0UwMDIyNzk3OSAvKiBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlDMjFCRjcwRjIxQ0Q4OUNGMDAyMjc5NzkgLyogV0hMU0xBbm9ueW1v
dXNWYXJpYWJsZURlY2xhcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQW5vbnltb3VzVmFy
aWFibGVEZWNsYXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcx
MDIxQ0Q4OUQwMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMjFCRjcxMTIxQ0Q4OUQxMDAyMjc5NzkgLyogV0hMU0xUeXBlQXJndW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0hMU0xUeXBlQXJndW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQzIxQkY3MTIyMUNEODlEMTAwMjI3OTc5IC8qIFdITFNMU3RhdGVtZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMU3RhdGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMzI1Myw3ICsxMzI4NCw2IEBACiAJCUMyMUJGNzE0MjFDRDg5RDMwMDIyNzk3OSAvKiBX
SExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzIxQkY3MTUyMUNEODlENDAwMjI3OTc5IC8qIFdITFNMTG9naWNhbE5vdEV4cHJlc3Np
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxNjIxQ0Q4OUQ1MDAyMjc5NzkgLyogV0hMU0xD
YWxsRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTENhbGxFeHByZXNzaW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyMUJGNzE3MjFDRDg5RDYwMDIyNzk3OSAvKiBX
SExTTFBhcmFtZXRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFBhcmFtZXRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxODIxQ0Q4OUQ3MDAyMjc5NzkgLyogV0hMU0xE
b3RFeHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRG90RXhwcmVzc2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxOTIxQ0Q4OUQ3MDAyMjc5NzkgLyogV0hM
U0xTd2l0Y2hDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3dpdGNoQ2FzZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxQTIxQ0Q4OUQ4MDAyMjc5NzkgLyogV0hMU0xC
cmVhay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEJyZWFrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMzI5OSwxNSArMTMzMjksMjcgQEAKIAkJQzI4MDgzM0QxQzZEQzIyQzAwMTQ1
MUI2IC8qIEpTRm9udEZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gSlNGb250RmFjZS5jcHA7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9udEZh
Y2UuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlDMjgwODMzRTFD
NkRDMjJDMDAxNDUxQjYgLyogSlNGb250RmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBKU0ZvbnRGYWNlLmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9u
dEZhY2UuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJQzI4MEIzRkQx
RUY0NjA4OTAwRDM1MTM1IC8qIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RmFtaWx5U3BlY2lmaWNhdGlvbk51
bGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjg2RUQ5RTIxREI1QUJBMDA3
MTNDNDAgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyODhDNzI3MjFDOEM2RUYwMDJERjVDQSAvKiBXSExTTFZpc2l0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyODhD
NzI5MjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0hMU0xQcmVwYXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3
MkEyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TFByZXBhcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzI4OEM3MkIyMUM4Q0ND
MjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMTmFtZVJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3
MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMTmFtZVJlc29sdmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyODhD
NzJEMjFDOTkxREEwMDJERjVDQSAvKiBXSExTTFR5cGVBcmd1bWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXSExTTFR5cGVBcmd1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyQUIwQUY0MUU2QjNDNkMwMDEzNDhDNSAvKiBGb250U2VsZWN0aW9uQWxnb3JpdGhtLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRTZWxlY3Rpb25BbGdv
cml0aG0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkFCMEFGNTFFNkIzQzZD
MDAxMzQ4QzUgLyogRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGb250U2VsZWN0aW9uQWxnb3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyQUIwQjAzMUU2REU5MkMwMDEzNDhDNSAvKiBGb250U2VsZWN0aW9uVmFs
dWVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRTZWxlY3Rpb25WYWx1ZUlubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzAyMURCNEI0ODAwNEJFMjZFIC8q
IFdITFNMQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTENoZWNrZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3MTIxREI0QjQ4MDA0QkUyNkUgLyog
V0hMU0xDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ2hlY2tlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3MzIxREI0QkJEMDA0QkUyNkUgLyogV0hMU0xOYW1l
UmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lUmVzb2x2ZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3NDIxREI1MTBGMDA0QkUyNkUgLyog
V0hMU0xOYW1lQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTE5hbWVDb250ZXh0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzUyMURCNTI2NjAwNEJF
MjZFIC8qIFdITFNMSW5mZXJUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEluZmVy
VHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3NjIxREI1Mzk0
MDA0QkUyNkUgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzJCNTUxNzcyMURCNTQwRjAwNEJFMjZFIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc4MjFEQjU1NzUw
MDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzkyMURCNTU4RjAwNEJFMjZFIC8qIFdITFNM
U3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzJCNTUxN0EyMURCNTU5RTAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUFy
cmF5T3BlcmF0b3JMZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVzaXpl
QXJyYXlPcGVyYXRvckxlbmd0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
QjU1MTdCMjFEQjU1QUYwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxN0MyMURCNTdFRDAwNEJFMjZFIC8qIFdI
TFNMVmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFZpc2l0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkMyQ0Y1NTFFRjM3NjFBMDA0MjgxQTggLyogRm9u
dEZhbWlseVNwZWNpZmljYXRpb25OdWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMkUzOEVGQjFFODM5NkZEMDBDQTNBREYgLyogQ1NTRm9udFN0eWxlVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRm9udFN0eWxlVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkUzOEVGQzFFODM5NkZEMDBDQTNB
REYgLyogQ1NTRm9udFN0eWxlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ1NTRm9udFN0eWxlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1
MzMyLDExICsyNTM3NCwzNiBAQAogCQkJCUMyMUJGNzM3MjFDRDhBMDIwMDIyNzk3OSAvKiBXSExT
TFBhcnNlci5jcHAgKi8sCiAJCQkJQzIxQkY3MzgyMUNEOEEwMzAwMjI3OTc5IC8qIFdITFNMUGFy
c2VyLmggKi8sCiAJCQkJQzIxQkY3M0EyMUNEOEQ3MDAwMjI3OTc5IC8qIFdITFNMUHJvZ3JhbS5o
ICovLAotIAkJCQlDMjg4QzcyNzIxQzhDNkVGMDAyREY1Q0EgLyogV0hMU0xWaXNpdG9yLmggKi8s
Ci0gCQkJCUMyODhDNzI5MjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuY3BwICovLAot
IAkJCQlDMjg4QzcyQTIxQzhDQTUwMDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmggKi8sCi0gCQkJ
CUMyODhDNzJCMjFDOENDQzIwMDJERjVDQSAvKiBXSExTTE5hbWVSZXNvbHZlci5jcHAgKi8sCi0g
CQkJCUMyODhDNzJDMjFDOENDQzIwMDJERjVDQSAvKiBXSExTTE5hbWVSZXNvbHZlci5oICovLAor
CQkJCUMyODhDNzI3MjFDOEM2RUYwMDJERjVDQSAvKiBXSExTTFZpc2l0b3IuaCAqLywKKwkJCQlD
MkI1NTE3QzIxREI1N0VEMDA0QkUyNkUgLyogV0hMU0xWaXNpdG9yLmNwcCAqLywKKwkJCQlDMjg4
QzcyOTIxQzhDQTUwMDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmNwcCAqLywKKwkJCQlDMjg4Qzcy
QTIxQzhDQTUwMDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmggKi8sCisJCQkJQzI4OEM3MkMyMUM4
Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmggKi8sCisJCQkJQzJCNTUxNzMyMURC
NEJCRDAwNEJFMjZFIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLywKKwkJCQkxQzdDQzIxRDIx
Q0RFMTk4MDBDMUZBMkMgLyogV0hMU0xOYW1lQ29udGV4dC5oICovLAorCQkJCUMyQjU1MTc0MjFE
QjUxMEYwMDRCRTI2RSAvKiBXSExTTE5hbWVDb250ZXh0LmNwcCAqLywKKwkJCQkxQzMzMjc2RTIx
Q0VGRjc0MDAwREM5RjIgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmggKi8sCisJCQkJQzI4
NkVEOUUyMURCNUFCQTAwNzEzQzQwIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAgKi8s
CisJCQkJMUMzMzI3NkYyMUNGMDEzMTAwMERDOUYyIC8qIFdITFNMSW5mZXJUeXBlcy5oICovLAor
CQkJCUMyQjU1MTc1MjFEQjUyNjYwMDRCRTI2RSAvKiBXSExTTEluZmVyVHlwZXMuY3BwICovLAor
CQkJCTFDMzMyNzc0MjFENUE3MDYwMDBEQzlGMiAvKiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2Vy
LmggKi8sCisJCQkJQzJCNTUxNzYyMURCNTM5NDAwNEJFMjZFIC8qIFdITFNMUmVjdXJzaXZlVHlw
ZUNoZWNrZXIuY3BwICovLAorCQkJCTFDMzMyNzc1MjFENUIwRjgwMDBEQzlGMiAvKiBXSExTTENo
ZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggKi8sCisJCQkJQzJCNTUxNzcyMURCNTQwRjAwNEJFMjZF
IC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwICovLAorCQkJCTFDMzMyNzc2MjFE
NUMwN0UwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCAqLywK
KwkJCQlDMkI1NTE3ODIxREI1NTc1MDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplU3RydWN0dXJl
QWNjZXNzb3JzLmNwcCAqLywKKwkJCQkxQzMzMjc3NzIxRDVDQTgzMDAwREM5RjIgLyogV0hMU0xT
eW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCAqLywKKwkJCQlDMkI1NTE3OTIxREI1NThG
MDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwICovLAor
CQkJCTFDMzMyNzc4MjFENUNFRDQwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoLmggKi8sCisJCQkJQzJCNTUxN0EyMURCNTU5RTAwNEJFMjZFIC8qIFdITFNMU3lu
dGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwICovLAorCQkJCUMyMDEzMzQ3MjFEQjQzNjMw
MEI2MEMyNyAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCAqLywKKwkJCQlDMkI1NTE3
QjIxREI1NUFGMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcCAqLywK
KwkJCQlDMjAxMzM0NDIxREFDMDk1MDBCNjBDMjcgLyogV0hMU0xJbnRyaW5zaWNzLmggKi8sCisJ
CQkJQzIwMTMzNDYyMURBRUU2RTAwQjYwQzI3IC8qIFdITFNMSW50cmluc2ljcy5jcHAgKi8sCisJ
CQkJQzJCNTUxNzAyMURCNEI0ODAwNEJFMjZFIC8qIFdITFNMQ2hlY2tlci5jcHAgKi8sCisJCQkJ
QzJCNTUxNzEyMURCNEI0ODAwNEJFMjZFIC8qIFdITFNMQ2hlY2tlci5oICovLAorCQkJCTFDQjY5
QjJDMjFERDk2RUYwMDZFODQ2QSAvKiBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAgKi8s
CisJCQkJMUNCNjlCMkQyMUREOTZFRjAwNkU4NDZBIC8qIFdITFNMR2F0aGVyRW50cnlQb2ludEl0
ZW1zLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IFdITFNMOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTI1MzQ0LDcgKzI1NDExLDYgQEAKIAkJQzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5
IC8qIEFTVCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJ
QzIxQkY3MEYyMUNEODlDRjAwMjI3OTc5IC8qIFdITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJh
dGlvbi5oICovLAogCQkJCUMyMUJGNzI1MjFDRDg5RTIwMDIyNzk3OSAvKiBXSExTTEFycmF5UmVm
ZXJlbmNlVHlwZS5oICovLAogCQkJCUMyMUJGNzA5MjFDRDg5Q0EwMDIyNzk3OSAvKiBXSExTTEFy
cmF5VHlwZS5oICovLAogCQkJCUMyMUJGNzMwMjFDRDg5RUQwMDIyNzk3OSAvKiBXSExTTEFzc2ln
bm1lbnRFeHByZXNzaW9uLmggKi8sCkBAIC0yNTM4NCw3ICsyNTQ1MCw2IEBACiAJCQkJQzIxQkY3
MjQyMUNEODlFMTAwMjI3OTc5IC8qIFdITFNMTm9kZS5oICovLAogCQkJCUMyMUJGNzA3MjFDRDg5
QzgwMDIyNzk3OSAvKiBXSExTTE51bGxMaXRlcmFsLmggKi8sCiAJCQkJQzIxQkY3MjEyMUNEODlE
RTAwMjI3OTc5IC8qIFdITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmggKi8sCi0JCQkJ
QzIxQkY3MTcyMUNEODlENjAwMjI3OTc5IC8qIFdITFNMUGFyYW1ldGVyLmggKi8sCiAJCQkJQzIx
QkY3MkYyMUNEODlFQzAwMjI3OTc5IC8qIFdITFNMUG9pbnRlclR5cGUuaCAqLywKIAkJCQlDMjFC
RjcyRTIxQ0Q4OUVBMDAyMjc5NzkgLyogV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCAq
LywKIAkJCQlDMjFCRjcwQjIxQ0Q4OUNDMDAyMjc5NzkgLyogV0hMU0xRdWFsaWZpZXIuaCAqLywK
QEAgLTI1NDEyLDcgKzI1NDc3LDI2IEBACiAJCQkJQzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8q
IFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLywKIAkJCQlDMjFCRjcxMzIx
Q0Q4OUQyMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oICovLAogCQkJCUMyMUJG
NzA0MjFDRDg5QzYwMDIyNzk3OSAvKiBXSExTTFdoaWxlTG9vcC5oICovLAotIAkJCQlDMjg4Qzcy
RDIxQzk5MURBMDAyREY1Q0EgLyogV0hMU0xUeXBlQXJndW1lbnQuY3BwICovLAorCQkJCUMyODhD
NzJEMjFDOTkxREEwMDJERjVDQSAvKiBXSExTTFR5cGVBcmd1bWVudC5jcHAgKi8sCisJCQkJMUMz
MzI3NkMyMUNFREE0MjAwMERDOUYyIC8qIFdITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmgg
Ki8sCisJCQkJMUMzMzI3NzEyMUNGMEJFMTAwMERDOUYyIC8qIFdITFNMTmFtZWRUeXBlLmggKi8s
CisJCQkJMUMzMzI3NzIyMUNGMEQyRTAwMERDOUYyIC8qIFdITFNMVW5uYW1lZFR5cGUuaCAqLywK
KwkJCQlDMjEzOEExMzIxRERFQ0QzMDBGNTE2QkEgLyogV0hMU0xCdWlsdEluU2VtYW50aWMuY3Bw
ICovLAorCQkJCUMyMTM4QTE1MjFEREVDRTkwMEY1MTZCQSAvKiBXSExTTFJlc291cmNlU2VtYW50
aWMuY3BwICovLAorCQkJCUMyMTM4QTE2MjFEREVDRkIwMEY1MTZCQSAvKiBXSExTTFNwZWNpYWxp
emF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAgKi8sCisJCQkJQzIxMzhBMTcyMURERUQwRDAwRjUx
NkJBIC8qIFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcCAqLywKKwkJCQkxQ0I2OUIzMjIxREVE
NDBCMDA2RTg0NkEgLyogV0hMU0xSZXNvbHZhYmxlVHlwZS5oICovLAorCQkJCTFDQjY5QjM0MjFE
RUQ2M0EwMDZFODQ2QSAvKiBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCAqLywKKwkJCQkxQ0I2OUIz
NTIxREVENjQ5MDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaCAqLywKKwkJCQkx
Q0I2OUIzNjIxREVENjU3MDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCAqLywKKwkJ
CQkxQ0I2OUIzNzIxREVENjZCMDA2RTg0NkEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZS5oICovLAorCQkJCTFDQjY5QjM4MjFERjAzRTEwMDZFODQ2QSAvKiBXSExTTEZsb2F0TGl0
ZXJhbFR5cGUuY3BwICovLAorCQkJCTFDQjY5QjM5MjFERjAzRjMwMDZFODQ2QSAvKiBXSExTTElu
dGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8sCisJCQkJMUNCNjlCM0EyMURGMDQwMzAwNkU4NDZBIC8q
IFdITFNMTnVsbExpdGVyYWxUeXBlLmNwcCAqLywKKwkJCQkxQ0I2OUIzQjIxREYwNDFFMDA2RTg0
NkEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8sCisJCQkJQzIwRjRG
NjQyMURGQkU1QzAwNzBDNDVBIC8qIFdITFNMVHlwZVJlZmVyZW5jZS5jcHAgKi8sCisJCQkJQzIw
RjRGNjYyMURGRjIzNjAwNzBDNDVBIC8qIFdITFNMSW50ZWdlckxpdGVyYWwuY3BwICovLAorCQkJ
CUMyMEY0RjY3MjFERkYzQTcwMDcwQzQ1QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwu
Y3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBBU1Q7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358425</attachid>
            <date>2019-01-04 20:04:28 -0800</date>
            <delta_ts>2019-01-07 00:13:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>396692</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXggMmQ1NjdmMDBlNzAuLmViMzkw
ZTQyZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaApAQCAtMzksOCArMzks
OCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVibGlj
IFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFR5
cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgQXJy
YXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAg
ICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJs
aWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYpID0g
ZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhh
ZGRyZXNzU3BhY2UoKSksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfVFlQRShBcnJheVJlZmVyZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBl
KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShBcnJheVJlZmVy
ZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAppbmRleCA0MGI1ZjhkZjZmZS4uYzQxNzcwNWYzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBBcnJh
eVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIEFycmF5VHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlLCB1
bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgQXJyYXlUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRz
KQogICAgIHsKQEAgLTUyLDIwICs1MiwxOCBAQCBwdWJsaWM6CiAgICAgQXJyYXlUeXBlKGNvbnN0
IEFycmF5VHlwZSYpID0gZGVsZXRlOwogICAgIEFycmF5VHlwZShBcnJheVR5cGUmJikgPSBkZWZh
dWx0OwogCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVs
ZW1lbnRzOyB9Ci0KLSAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsg
fQorICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1FbGVtZW50
czsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZT4oTGV4ZXI6
OlRva2VuKG1fb3JpZ2luKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7
CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZT4oTGV4ZXI6OlRva2Vu
KG9yaWdpbigpKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZT4gbV9lbGVtZW50VHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5
cGU+IG1fZWxlbWVudFR5cGU7CiAgICAgdW5zaWduZWQgbV9udW1FbGVtZW50czsKIH07CiAKQEAg
LTc1LDYgKzczLDYgQEAgcHJpdmF0ZToKIAogfQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dI
TFNMX1RZUEUoQXJyYXlUeXBlLCBpc0FycmF5VHlwZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19XSExTTF9VTk5BTUVEX1RZUEUoQXJyYXlUeXBlLCBpc0FycmF5VHlwZSgpKQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEJhc2VTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQmFzZVNlbWFudGljLmgKaW5kZXggNjU3MzM3MmYxMzcuLmM2YTJkMzlhMGMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNl
U2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCYXNlU2VtYW50aWMuaApAQCAtMzQsOCArMzQsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBuYW1lc3BhY2UgV0hMU0wgewogCitjbGFzcyBJbnRyaW5zaWNzOworCiBuYW1lc3BhY2Ug
QVNUIHsKIAorY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworY2xhc3MgVW5uYW1lZFR5cGU7CisK
IGNsYXNzIEJhc2VTZW1hbnRpYyA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKICAgICBCYXNlU2Vt
YW50aWMoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQpAQCAtNDgsNiArNTMsMTQgQEAgcHVibGljOgog
ICAgIEJhc2VTZW1hbnRpYyhjb25zdCBCYXNlU2VtYW50aWMmKSA9IGRlbGV0ZTsKICAgICBCYXNl
U2VtYW50aWMoQmFzZVNlbWFudGljJiYpID0gZGVmYXVsdDsKIAorICAgIHZpcnR1YWwgYm9vbCBp
c0FjY2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNz
JikgY29uc3QgPSAwOworCisgICAgZW51bSBjbGFzcyBTaGFkZXJJdGVtRGlyZWN0aW9uIHsKKyAg
ICAgICAgSW5wdXQsCisgICAgICAgIE91dHB1dAorICAgIH07CisgICAgdmlydHVhbCBib29sIGlz
QWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29u
c3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3QgPSAwOworCiBwcml2YXRlOgogICAgIExleGVy
OjpUb2tlbiBtX29yaWdpbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCb29sZWFuTGl0ZXJhbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaAppbmRleCAyMDBm
MzY0OTMyYi4uMTEwZDY1NWM0OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEJvb2xlYW5MaXRlcmFsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaApAQCAtNDYs
MTMgKzQ2LDIxIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkJvb2xlYW5MaXRlcmFsKCkgPSBk
ZWZhdWx0OwogCi0gICAgZXhwbGljaXQgQm9vbGVhbkxpdGVyYWwoY29uc3QgQm9vbGVhbkxpdGVy
YWwmKSA9IGRlZmF1bHQ7CisgICAgQm9vbGVhbkxpdGVyYWwoY29uc3QgQm9vbGVhbkxpdGVyYWwm
KSA9IGRlbGV0ZTsKICAgICBCb29sZWFuTGl0ZXJhbChCb29sZWFuTGl0ZXJhbCYmKSA9IGRlZmF1
bHQ7CiAKKyAgICBCb29sZWFuTGl0ZXJhbCYgb3BlcmF0b3I9KGNvbnN0IEJvb2xlYW5MaXRlcmFs
JikgPSBkZWxldGU7CisgICAgQm9vbGVhbkxpdGVyYWwmIG9wZXJhdG9yPShCb29sZWFuTGl0ZXJh
bCYmKSA9IGRlZmF1bHQ7CisKICAgICBib29sIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQogCiAgICAgYm9vbCBpc0Jvb2xlYW5MaXRlcmFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCisgICAgQm9vbGVhbkxpdGVyYWwgY2xvbmUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEJvb2xlYW5MaXRlcmFsKExleGVyOjpUb2tlbihvcmlnaW4oKSksIG1fdmFs
dWUpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBib29sIG1fdmFsdWU7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNl
bWFudGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEJ1aWx0SW5TZW1hbnRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjIxMjUzMjZmYjJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcApAQCAtMCwwICsxLDE0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKKworI2luY2x1ZGUgIldITFNM
RnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5j
bHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNl
IEFTVCB7CisKK2Jvb2wgQnVpbHRJblNlbWFudGljOjppc0FjY2VwdGFibGVUeXBlKGNvbnN0IEFT
VDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNz
KSBjb25zdAoreworICAgIHN3aXRjaCAobV92YXJpYWJsZSkgeworICAgIGNhc2UgVmFyaWFibGU6
OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJp
bnNpY3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZWZXJ0ZXhJRDoKKyAgICAg
ICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWludFR5cGUoKSk7Cisg
ICAgY2FzZSBWYXJpYWJsZTo6UFNpemU6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRU
eXBlLCBpbnRyaW5zaWNzLmZsb2F0VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVlBvc2l0
aW9uOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9h
dDRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAgICAgIHJl
dHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOworICAgIGNh
c2UgVmFyaWFibGU6OlNWU2FtcGxlSW5kZXg6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFt
ZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWSW5u
ZXJDb3ZlcmFnZToKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNp
Y3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAgICAgIHJl
dHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0NFR5cGUoKSk7CisgICAg
Y2FzZSBWYXJpYWJsZTo6U1ZEZXB0aDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5
cGUsIGludHJpbnNpY3MuZmxvYXRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWQ292ZXJh
Z2U6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRU
eXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoKKyAgICAgICAg
cmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQzVHlwZSgpKTsKKyAg
ICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwSUQ6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFt
ZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZH
cm91cEluZGV4OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2lj
cy51aW50VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwVGhyZWFkSUQ6CisgICAg
ICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7
CisgICAgfQorfQorCitib29sIEJ1aWx0SW5TZW1hbnRpYzo6aXNBY2NlcHRhYmxlRm9yU2hhZGVy
SXRlbURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIGNvbnN0Cit7CisgICAgc3dpdGNoICgq
ZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9u
RGVjbGFyYXRpb246OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgIHN3aXRjaCAoZGly
ZWN0aW9uKSB7CisgICAgICAgIGNhc2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6
OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWVmVydGV4SUQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBTaGFk
ZXJJdGVtRGlyZWN0aW9uOjpPdXRwdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUp
IHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlBTaXplOgorICAgICAgICAgICAgY2FzZSBW
YXJpYWJsZTo6U1ZQb3NpdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50
VHlwZTo6RnJhZ21lbnQ6CisgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNh
c2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFy
aWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAg
ICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVlBvc2l0aW9uOgorICAgICAgICAgICAgY2FzZSBWYXJp
YWJsZTo6U1ZTYW1wbGVJbmRleDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSW5uZXJD
b3ZlcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICBjYXNlIFNoYWRlckl0ZW1EaXJlY3Rpb246Ok91dHB1dDoKKyAgICAgICAgICAgIHN3aXRjaCAo
bV92YXJpYWJsZSkgeworICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAg
ICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkRlcHRoOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZDb3ZlcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6
Q29tcHV0ZToKKyAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBTaGFk
ZXJJdGVtRGlyZWN0aW9uOjpJbnB1dDoKKyAgICAgICAgICAgIHN3aXRjaCAobV92YXJpYWJsZSkg
eworICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZEaXNwYXRjaFRocmVhZElEOgorICAgICAg
ICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cElEOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZHcm91cEluZGV4OgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cFRocmVh
ZElEOgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIGNh
c2UgU2hhZGVySXRlbURpcmVjdGlvbjo6T3V0cHV0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorfQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5T
ZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QnVpbHRJblNlbWFudGljLmgKaW5kZXggNzA0NmRmMzJjZmEuLjhlNzA0MzAwMTU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdElu
U2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCdWlsdEluU2VtYW50aWMuaApAQCAtNzAsNiArNzAsMTkgQEAgcHVibGljOgogCiAgICAg
VmFyaWFibGUgdmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlOyB9CiAKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQnVpbHRJblNlbWFudGljJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IG90aGVyLm1fdmFyaWFibGUgJiYgbV90YXJn
ZXRJbmRleCA9PSBvdGhlci5tX3RhcmdldEluZGV4OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBCdWlsdEluU2VtYW50aWMmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJvb2wgaXNBY2NlcHRhYmxl
VHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgSW50cmluc2ljcyYpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFk
ZXJJdGVtRGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSBjb25zdCBvdmVycmlk
ZTsKKwogcHJpdmF0ZToKICAgICBWYXJpYWJsZSBtX3ZhcmlhYmxlOwogICAgIE9wdGlvbmFsPHVu
c2lnbmVkPiBtX3RhcmdldEluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKaW5kZXggNjRh
ZjcxMzI5OWMuLmQxNjc1YTQ0YWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKQEAgLTI4
LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAi
V0hMU0xMZXhlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01NCw5ICs1NSwzMiBAQCBw
dWJsaWM6CiAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+PiYgYXJndW1l
bnRzKCkgeyByZXR1cm4gbV9hcmd1bWVudHM7IH0KIAorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0
dXJuIG1fbmFtZTsgfQorCisgICAgdm9pZCBzZXRDYXN0RGF0YSgpCisgICAgeworICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMKKyAgICB9CisKKyAgICBib29sIGhhc092ZXJsb2Fkcygp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fb3ZlcmxvYWRzKTsgfQorICAgIE9w
dGlvbmFsPFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+
LCAxPj4mIG92ZXJsb2FkcygpIHsgcmV0dXJuIG1fb3ZlcmxvYWRzOyB9CisgICAgdm9pZCBzZXRP
dmVybG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNs
YXJhdGlvbj4sIDE+JiBvdmVybG9hZHMpCisgICAgeworICAgICAgICBhc3NlcnQoIWhhc092ZXJs
b2FkcygpKTsKKyAgICAgICAgbV9vdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAgfQorCisgICAg
dm9pZCBzZXRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9u
KQorICAgIHsKKyAgICAgICAgYXNzZXJ0KCFtX2Z1bmN0aW9uKTsKKyAgICAgICAgbV9mdW5jdGlv
biA9ICZmdW5jdGlvbkRlY2xhcmF0aW9uOworICAgIH0KKwogcHJpdmF0ZToKICAgICBTdHJpbmcg
bV9uYW1lOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+IG1fYXJndW1l
bnRzOworICAgIE9wdGlvbmFsPFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9u
RGVjbGFyYXRpb24+LCAxPj4gbV9vdmVybG9hZHM7CisgICAgRnVuY3Rpb25EZWNsYXJhdGlvbiog
bV9mdW5jdGlvbiB7IG51bGxwdHIgfTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHBy
ZXNzaW9uLmgKaW5kZXggYTM4YjBkNWIzYTEuLjcwY2ExMjhkNTVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Np
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xD
b25zdGFudEV4cHJlc3Npb24uaApAQCAtNzYsMTEgKzc2LDkyIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogCisgICAgQ29uc3RhbnRFeHByZXNzaW9uKGNvbnN0IENvbnN0YW50RXhwcmVzc2lvbiYp
ID0gZGVsZXRlOworICAgIENvbnN0YW50RXhwcmVzc2lvbihDb25zdGFudEV4cHJlc3Npb24mJikg
PSBkZWZhdWx0OworCisgICAgQ29uc3RhbnRFeHByZXNzaW9uJiBvcGVyYXRvcj0oY29uc3QgQ29u
c3RhbnRFeHByZXNzaW9uJikgPSBkZWxldGU7CisgICAgQ29uc3RhbnRFeHByZXNzaW9uJiBvcGVy
YXRvcj0oQ29uc3RhbnRFeHByZXNzaW9uJiYpID0gZGVmYXVsdDsKKworICAgIEludGVnZXJMaXRl
cmFsJiBpbnRlZ2VyTGl0ZXJhbCgpCisgICAgeworICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxJbnRlZ2VyTGl0ZXJhbD4obV92YXJpYW50KSk7CisgICAgICAgIHJldHVybiBX
VEY6OmdldDxJbnRlZ2VyTGl0ZXJhbD4obV92YXJpYW50KTsKKyAgICB9CisKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiB2b2lkIHZpc2l0KFQmJiB0KQogICAgIHsKICAgICAgICAgV1RGOjp2aXNp
dChXVEZNb3ZlKHQpLCBtX3ZhcmlhbnQpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHZvaWQgdmlzaXQoVCYmIHQpIGNvbnN0CisgICAgeworICAgICAgICBXVEY6OnZpc2l0KFdU
Rk1vdmUodCksIG1fdmFyaWFudCk7CisgICAgfQorCisgICAgQ29uc3RhbnRFeHByZXNzaW9uIGNs
b25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKGNvbnN0IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgLT4gQ29uc3Rh
bnRFeHByZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBpbnRlZ2VyTGl0ZXJhbC5jbG9uZSgp
OworICAgICAgICB9LCBbJl0oY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVy
biB1bnNpZ25lZEludGVnZXJMaXRlcmFsLmNsb25lKCk7CisgICAgICAgIH0sIFsmXShjb25zdCBG
bG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9uIHsKKyAgICAg
ICAgICAgIHJldHVybiBmbG9hdExpdGVyYWwuY2xvbmUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0
IE51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9uIHsKKyAgICAg
ICAgICAgIHJldHVybiBudWxsTGl0ZXJhbC5jbG9uZSgpOworICAgICAgICB9LCBbJl0oY29uc3Qg
Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSAtPiBDb25zdGFudEV4cHJlc3Npb24gewor
ICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5MaXRlcmFsLmNsb25lKCk7CisgICAgICAgIH0sIFsm
XShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29u
c3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpIC0+IENvbnN0YW50RXhw
cmVzc2lvbiB7CisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UuY2xvbmUoKTsKKyAgICAgICAgfSksIG1fdmFyaWFudCk7CisgICAg
fQorCisgICAgYm9vbCBtYXRjaGVzKGNvbnN0IENvbnN0YW50RXhwcmVzc2lvbiYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICBPcHRpb25hbDxib29sPiByZXN1bHQ7CisgICAgICAgIGRvdWJs
ZSB2YWx1ZTsKKyAgICAgICAgdmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgSW50ZWdl
ckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICB2YWx1ZSA9IGludGVnZXJM
aXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0sIFsmXShjb25zdCBVbnNpZ25lZEludGVnZXJMaXRl
cmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICB2YWx1ZSA9IHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEZsb2F0TGl0
ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAgICB2YWx1ZSA9IGZsb2F0TGl0ZXJhbC52
YWx1ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgTnVsbExpdGVyYWwmKSB7CisgICAgICAgICAg
ICByZXN1bHQgPSBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPE51bGxMaXRlcmFsPihvdGhlci5tX3Zh
cmlhbnQpOworICAgICAgICB9LCBbJl0oY29uc3QgQm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRl
cmFsKSB7CisgICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxCb29sZWFuTGl0
ZXJhbD4ob3RoZXIubV92YXJpYW50KSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIG90
aGVyQm9vbGVhbkxpdGVyYWwgPSBXVEY6OmdldDxCb29sZWFuTGl0ZXJhbD4ob3RoZXIubV92YXJp
YW50KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBib29sZWFuTGl0ZXJhbC52YWx1ZSgpID09
IG90aGVyQm9vbGVhbkxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9LCBbJl0oY29uc3QgQ29uc3RhbnRF
eHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVu
dW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSB7CisgICAgICAgICAgICBpZiAoV1RGOjpob2xkc19h
bHRlcm5hdGl2ZTxDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZT4o
b3RoZXIubV92YXJpYW50KSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIG90aGVyTWVt
YmVyUmVmZXJlbmNlID0gV1RGOjpnZXQ8Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2U+KG90aGVyLm1fdmFyaWFudCk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
Y29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25N
ZW1iZXIoKSA9PSBvdGhlck1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbk1lbWJlcigpOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAg
IH0pKTsKKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuICpyZXN1bHQ7
CisKKyAgICAgICAgb3RoZXIudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgSW50ZWdl
ckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZSA9
PSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgcmVz
dWx0ID0gdmFsdWUgPT0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9
LCBbJl0oY29uc3QgRmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsKKyAgICAgICAgICAgIHJl
c3VsdCA9IHZhbHVlID09IGZsb2F0TGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oY29u
c3QgTnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAg
fSwgWyZdKGNvbnN0IEJvb2xlYW5MaXRlcmFsJikgeworICAgICAgICAgICAgcmVzdWx0ID0gZmFs
c2U7CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9
KSk7CisKKyAgICAgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgICAgIHJldHVybiAqcmVzdWx0Owor
ICAgIH0KKwogcHJpdmF0ZToKICAgICBWYXJpYW50PAogICAgICAgICBJbnRlZ2VyTGl0ZXJhbCwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oCmluZGV4IDJjMjRhOThiMmNhLi42YzUzYzE0N2Y1
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oCkBAIC0zNiwxMCArMzYsMTMgQEAgbmFt
ZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIENvbnN0YW50RXhwcmVz
c2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlIDogcHVibGljIE5vZGUgeworY2xhc3MgRW51
bWVyYXRpb25EZWZpbml0aW9uOworY2xhc3MgRW51bWVyYXRpb25NZW1iZXI7CisKK2NsYXNzIENv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlIDogcHVibGljIEV4cHJl
c3Npb24gewogcHVibGljOgogICAgIENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVy
UmVmZXJlbmNlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbGVmdCwgU3RyaW5nJiYg
cmlnaHQpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICA6IEV4
cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fbGVmdChXVEZNb3ZlKGxlZnQp
KQogICAgICAgICAsIG1fcmlnaHQoV1RGTW92ZShyaWdodCkpCiAgICAgewpAQCAtNTAsMTAgKzUz
LDUwIEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSYpID0gZGVmYXVsdDsKICAgICBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZShDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZSYmKSA9IGRlZmF1bHQ7CiAKKyAgICBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0
aW9uTWVtYmVyUmVmZXJlbmNlJikgPSBkZWxldGU7CisgICAgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIG9wZXJhdG9yPShDb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBjb25zdCBTdHJpbmcm
IGxlZnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIHJpZ2h0
KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodDsgfQorCisgICAgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UgY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZShM
ZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBTdHJpbmcobV9sZWZ0KSwgU3RyaW5nKG1fcmlnaHQpKTsK
KyAgICAgICAgcmVzdWx0Lm1fZW51bWVyYXRpb25NZW1iZXIgPSBtX2VudW1lcmF0aW9uTWVtYmVy
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uKiBlbnVtZXJhdGlvbkRlZmluaXRpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fZW51bWVyYXRpb25EZWZpbml0aW9uOworICAgIH0KKworICAgIEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uKiBlbnVtZXJhdGlvbkRlZmluaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uOworICAgIH0KKworICAgIEFTVDo6RW51bWVy
YXRpb25NZW1iZXIqIGVudW1lcmF0aW9uTWVtYmVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIEFTVDo6RW51bWVyYXRpb25NZW1iZXIq
IGVudW1lcmF0aW9uTWVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VudW1l
cmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIHZvaWQgc2V0RW51bWVyYXRpb25NZW1iZXIoQVNU
OjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiwgQVNUOjpFbnVt
ZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAgICAgICBtX2VudW1l
cmF0aW9uRGVmaW5pdGlvbiA9ICZlbnVtZXJhdGlvbkRlZmluaXRpb247CisgICAgICAgIG1fZW51
bWVyYXRpb25NZW1iZXIgPSAmZW51bWVyYXRpb25NZW1iZXI7CisgICAgfQorCiBwcml2YXRlOgot
ICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9sZWZ0OwogICAgIFN0cmlu
ZyBtX3JpZ2h0OworICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uKiBtX2VudW1lcmF0aW9u
RGVmaW5pdGlvbiB7IG51bGxwdHIgfTsKKyAgICBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKiBtX2Vu
dW1lcmF0aW9uTWVtYmVyIHsgbnVsbHB0ciB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lv
bi5oCmluZGV4IGM0M2M2OWVlNTQxLi5lYmY3MjMyNmNkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Np
b24uaApAQCAtNDksNiArNDksMjUgQEAgcHVibGljOgogICAgIERvdEV4cHJlc3Npb24oY29uc3Qg
RG90RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAgIERvdEV4cHJlc3Npb24oRG90RXhwcmVzc2lv
biYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRG90RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUoKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRv
ci4lcyIsIG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIFN0cmluZyBz
ZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0
cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0iLCBtX2ZpZWxkTmFtZS51dGY4KCkuZGF0YSgpKTsK
KyAgICB9CisKKyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3ImLiVzIiwgbV9maWVs
ZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgU3RyaW5nJiBmaWVsZE5hbWUoKSB7
IHJldHVybiBtX2ZpZWxkTmFtZTsgfQorCiBwcml2YXRlOgogICAgIFN0cmluZyBtX2ZpZWxkTmFt
ZTsKIH07CkBAIC01OSw0ICs3OCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19XSExTTF9FWFBSRVNTSU9OKERvdEV4cHJlc3Npb24sIGlzRG90RXhwcmVzc2lvbigp
KQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgKaW5kZXgg
Nzk3MGI1OWU1NGEuLjI0YThkNTlkYjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRl
ZmluaXRpb24uaApAQCAtMjksOCArMjksMTEgQEAKIAogI2luY2x1ZGUgIldITFNMRW51bWVyYXRp
b25NZW1iZXIuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBl
LmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRU
eXBlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwxMyArNDIsMTEgQEAgbmFt
ZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIEVudW1lcmF0aW9uRGVm
aW5pdGlvbiA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1
YmxpYyBOYW1lZFR5cGUgewogcHVibGljOgotICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYm
IHR5cGUsIEVudW1lcmF0aW9uTWVtYmVycyYmIG1lbWJlcnMpCi0gICAgICAgIDogbV9vcmlnaW4o
V1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgIEVu
dW1lcmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUs
IHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiB0eXBlKQorICAgICAgICA6IE5hbWVkVHlw
ZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlKFdURk1v
dmUodHlwZSkpCi0gICAgICAgICwgbV9tZW1iZXJzKFdURk1vdmUobWVtYmVycykpCiAgICAgewog
ICAgIH0KIApAQCAtNTQsMTQgKzU1LDM1IEBAIHB1YmxpYzoKICAgICBFbnVtZXJhdGlvbkRlZmlu
aXRpb24oY29uc3QgRW51bWVyYXRpb25EZWZpbml0aW9uJikgPSBkZWxldGU7CiAgICAgRW51bWVy
YXRpb25EZWZpbml0aW9uKEVudW1lcmF0aW9uRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAg
ICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQotICAgIEVudW1lcmF0aW9uTWVtYmVy
cyYgZW51bWVyYXRpb25NZW1iZXJzKCkgeyByZXR1cm4gbV9tZW1iZXJzOyB9CisgICAgYm9vbCBp
c0VudW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
KworICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorCisgICAgYm9v
bCBhZGQoRW51bWVyYXRpb25NZW1iZXImJiBtZW1iZXIpCisgICAgeworICAgICAgICBhdXRvIHJl
c3VsdCA9IG1fbWVtYmVycy5hZGQobWVtYmVyLm5hbWUoKSwgc3RkOjptYWtlX3VuaXF1ZTxFbnVt
ZXJhdGlvbk1lbWJlcj4oV1RGTW92ZShtZW1iZXIpKSk7CisgICAgICAgIHJldHVybiAhcmVzdWx0
LmlzTmV3RW50cnk7CisgICAgfQorCisgICAgRW51bWVyYXRpb25NZW1iZXIqIG1lbWJlckJ5TmFt
ZShjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9t
ZW1iZXJzLmZpbmQobmFtZSk7CisgICAgICAgIGlmIChpdGVyYXRvciA9PSBtX21lbWJlcnMuZW5k
KCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9y
LT52YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxFbnVtZXJhdGlvbk1lbWJlcj4+IGVudW1lcmF0aW9uTWVtYmVycygpCisgICAgeworICAgICAg
ICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxFbnVtZXJhdGlvbk1lbWJlcj4+IHJlc3Vs
dDsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9tZW1iZXJzKQorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgqcGFpci52YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQog
CiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBTdHJpbmcgbV9uYW1l
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX3R5cGU7Ci0gICAgRW51bWVyYXRpb25NZW1i
ZXJzIG1fbWVtYmVyczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IG1fdHlwZTsK
KyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEVudW1lcmF0aW9uTWVtYmVyPj4g
bV9tZW1iZXJzOwogfTsKIAogfQpAQCAtNzAsNCArOTIsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShFbnVtZXJhdGlvbkRlZmluaXRp
b24sIGlzRW51bWVyYXRpb25EZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1i
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1l
cmF0aW9uTWVtYmVyLmgKaW5kZXggOWQ5ZDg1NDg4M2UuLmRlZmYxNGI1ODUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlv
bk1lbWJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEVudW1lcmF0aW9uTWVtYmVyLmgKQEAgLTU0LDE1ICs1NCwyMyBAQCBwdWJsaWM6CiAgICAg
RW51bWVyYXRpb25NZW1iZXIoY29uc3QgRW51bWVyYXRpb25NZW1iZXImKSA9IGRlbGV0ZTsKICAg
ICBFbnVtZXJhdGlvbk1lbWJlcihFbnVtZXJhdGlvbk1lbWJlciYmKSA9IGRlZmF1bHQ7CiAKKyAg
ICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9
CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgT3B0aW9uYWw8Q29u
c3RhbnRFeHByZXNzaW9uPiYgdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9CiAKKyAgICB2b2lk
IHNldFZhbHVlKENvbnN0YW50RXhwcmVzc2lvbiYmIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFtX3ZhbHVlKTsKKyAgICAgICAgbV92YWx1ZSA9IFdURk1vdmUodmFsdWUpOworICAgIH0K
KwogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3RyaW5nIG1fbmFt
ZTsKICAgICBPcHRpb25hbDxDb25zdGFudEV4cHJlc3Npb24+IG1fdmFsdWU7CiB9OwogCi10eXBl
ZGVmIFZlY3RvcjxFbnVtZXJhdGlvbk1lbWJlcj4gRW51bWVyYXRpb25NZW1iZXJzOwordXNpbmcg
RW51bWVyYXRpb25NZW1iZXJzID0gVmVjdG9yPEVudW1lcmF0aW9uTWVtYmVyPjsKIAogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xF
bnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNGJjMjBmZThlZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVt
YmVyLmgiCisjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xMZXhl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVz
cGFjZSBBU1QgeworCitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwgOiBwdWJsaWMgRXhw
cmVzc2lvbiB7CitwdWJsaWM6CisgICAgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKExleGVyOjpU
b2tlbiYmIG9yaWdpbiwgRW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQorICAg
ICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fZW51bWVyYXRp
b25NZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
fkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCgpID0gZGVmYXVsdDsKKworICAgIEVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbChjb25zdCBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmKSA9IGRlbGV0ZTsK
KyAgICBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiYp
ID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBFbnVtZXJhdGlvbk1lbWJlciYgZW51
bWVyYXRpb25NZW1iZXIoKSB7IHJldHVybiBtX2VudW1lcmF0aW9uTWVtYmVyOyB9CisKK3ByaXZh
dGU6CisgICAgRW51bWVyYXRpb25NZW1iZXImIG1fZW51bWVyYXRpb25NZW1iZXI7Cit9OworCit9
CisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJT04oRW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsLCBpc0VudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCgpKQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBlMzY4MzgzNjQ2ZC4uZmViNmNhNmIxZTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4
cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFeHByZXNzaW9uLmgKQEAgLTQ4LDE0ICs0OCwxOSBAQCBwdWJsaWM6CiAgICAgZXhwbGlj
aXQgRXhwcmVzc2lvbihjb25zdCBFeHByZXNzaW9uJikgPSBkZWZhdWx0OwogICAgIEV4cHJlc3Np
b24oRXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBMZXhlcjo6VG9rZW4gb3JpZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBFeHByZXNzaW9uJiBvcGVyYXRvcj0oY29u
c3QgRXhwcmVzc2lvbiYpID0gZGVmYXVsdDsKKyAgICBFeHByZXNzaW9uJiBvcGVyYXRvcj0oRXhw
cmVzc2lvbiYmKSA9IGRlZmF1bHQ7CisKKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNBc3NpZ25t
ZW50RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzQm9vbGVhbkxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc0NhbGxFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0
dWFsIGJvb2wgaXNDb21tYUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc0RlcmVmZXJlbmNlRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRG90RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRmxvYXRMaXRlcmFsKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmRleEV4cHJlc3Npb24oKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ludGVnZXJMaXRlcmFsKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNMb2dpY2FsRXhwcmVzc2lv
bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9naWNhbE5v
dEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtNjcsNiArNzIsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzVGVybmFyeUV4cHJlc3Npb24oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkSW50ZWdlckxpdGVyYWwo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxlUmVm
ZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiBwcml2YXRl
OgogICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsLmgKaW5kZXgg
Y2JmNTQ2OWRiZmEuLjI3ZDg4YmMwNTNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaApAQCAtMjgs
NiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Np
b24uaCIKKyNpbmNsdWRlICJXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCIKICNpbmNsdWRlICJXSExT
TExleGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDIxICs0MCwzNSBAQCBuYW1l
c3BhY2UgQVNUIHsKIGNsYXNzIEZsb2F0TGl0ZXJhbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1
YmxpYzoKICAgICBGbG9hdExpdGVyYWwoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBmbG9hdCB2YWx1
ZSkKLSAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgOiBFeHBy
ZXNzaW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQorICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKG9y
aWdpbiksIHZhbHVlKQogICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgewogICAgIH0KIAog
ICAgIHZpcnR1YWwgfkZsb2F0TGl0ZXJhbCgpID0gZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0IEZs
b2F0TGl0ZXJhbChjb25zdCBGbG9hdExpdGVyYWwmKSA9IGRlZmF1bHQ7CisgICAgRmxvYXRMaXRl
cmFsKGNvbnN0IEZsb2F0TGl0ZXJhbCYpID0gZGVsZXRlOwogICAgIEZsb2F0TGl0ZXJhbChGbG9h
dExpdGVyYWwmJikgPSBkZWZhdWx0OwogCisgICAgRmxvYXRMaXRlcmFsJiBvcGVyYXRvcj0oY29u
c3QgRmxvYXRMaXRlcmFsJikgPSBkZWxldGU7CisgICAgRmxvYXRMaXRlcmFsJiBvcGVyYXRvcj0o
RmxvYXRMaXRlcmFsJiYpID0gZGVmYXVsdDsKKworICAgIEZsb2F0TGl0ZXJhbFR5cGUmIHR5cGUo
KSB7IHJldHVybiBtX3R5cGU7IH0KICAgICBmbG9hdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWU7IH0KIAogICAgIGJvb2wgaXNGbG9hdExpdGVyYWwoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiAKKyAgICBGbG9hdExpdGVyYWwgY2xvbmUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgRmxvYXRMaXRlcmFsIHJlc3VsdChMZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBtX3ZhbHVl
KTsKKyAgICAgICAgaWYgKHJlc3VsdC5tX3R5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgICAg
ICByZXN1bHQubV90eXBlLnJlc29sdmUocmVzdWx0Lm1fdHlwZS5yZXNvbHZlZFR5cGUoKS0+Y2xv
bmUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiBwcml2YXRlOgorICAgIEZs
b2F0TGl0ZXJhbFR5cGUgbV90eXBlOwogICAgIGZsb2F0IG1fdmFsdWU7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExp
dGVyYWxUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5jMzUxODM1Y2E4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwCkBAIC0wLDAg
KzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsVHlwZS5oIgorCisjaW5jbHVkZSAi
V0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7
CisKK0Zsb2F0TGl0ZXJhbFR5cGU6OkZsb2F0TGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBmbG9hdCB2YWx1ZSkKKyAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgLCBtX3ByZWZlcnJl
ZFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKG9yaWdpbiksIFN0
cmluZygiZmxvYXQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgVHlwZUFyZ3VtZW50
cygpKSkKK3sKK30KKworRmxvYXRMaXRlcmFsVHlwZTo6fkZsb2F0TGl0ZXJhbFR5cGUoKSA9IGRl
ZmF1bHQ7CisKK2Jvb2wgRmxvYXRMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShjb25zdCBUeXBlJiB0
eXBlKSBjb25zdAoreworICAgIGlmICghaXM8TmFtZWRUeXBlPih0eXBlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PE5hbWVkVHlwZT4odHlw
ZSk7CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3du
Y2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAgaWYgKCFuYXRpdmVU
eXBlRGVjbGFyYXRpb24uaXNGbG9hdGluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uY2FuUmVwcmVzZW50RmxvYXQoKShtX3ZhbHVlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBG
bG9hdExpdGVyYWxUeXBlOjpjb252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYgdW5uYW1l
ZFR5cGUpIGNvbnN0Cit7CisgICAgaWYgKG1hdGNoZXModW5uYW1lZFR5cGUsICptX3ByZWZlcnJl
ZFR5cGUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsKK30KKworfQorCit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNlMzJiZjU2MDVmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFs
VHlwZS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFJlc29sdmFibGVUeXBlLmgiCisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIFR5cGVSZWZlcmVuY2U7
CisKK2NsYXNzIEZsb2F0TGl0ZXJhbFR5cGUgOiBwdWJsaWMgUmVzb2x2YWJsZVR5cGUgeworcHVi
bGljOgorICAgIEZsb2F0TGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBmbG9hdCB2
YWx1ZSk7CisKKyAgICB2aXJ0dWFsIH5GbG9hdExpdGVyYWxUeXBlKCk7CisKKyAgICBGbG9hdExp
dGVyYWxUeXBlKGNvbnN0IEZsb2F0TGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBGbG9hdExp
dGVyYWxUeXBlKEZsb2F0TGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgRmxvYXRMaXRl
cmFsVHlwZSYgb3BlcmF0b3I9KGNvbnN0IEZsb2F0TGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAg
ICBGbG9hdExpdGVyYWxUeXBlJiBvcGVyYXRvcj0oRmxvYXRMaXRlcmFsVHlwZSYmKSA9IGRlZmF1
bHQ7CisKKyAgICBib29sIGlzRmxvYXRMaXRlcmFsVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KKworICAgIFR5cGVSZWZlcmVuY2UmIHByZWZlcnJlZFR5cGUoKSB7IHJldHVy
biAqbV9wcmVmZXJyZWRUeXBlOyB9CisKKyAgICBib29sIGNhblJlc29sdmUoY29uc3QgVHlwZSYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0KGNvbnN0IFVubmFt
ZWRUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZmxvYXQgbV92YWx1ZTsK
KyAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5k
ZW5jeSBiZXR3ZWVuCisgICAgLy8gQ29uc3RhbnRFeHByZXNzaW9uIC0+IExpdGVyYWxUeXBlIC0+
IFR5cGVSZWZlcmVuY2UgLT4gVHlwZUFyZ3VtZW50cyAtPiBDb25zdGFudEV4cHJlc3Npb24KKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBlOworfTsKKwor
fQorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9SRVNPTFZBQkxFX1RZ
UEUoRmxvYXRMaXRlcmFsVHlwZSwgaXNGbG9hdExpdGVyYWxUeXBlKCkpCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVu
Y3Rpb25BdHRyaWJ1dGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgKaW5kZXggY2JkNzJkNGE5MGMuLjZhYjY1OGUwZjYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xGdW5jdGlvbkF0dHJpYnV0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgKQEAgLTM3LDggKzM3LDggQEAgbmFt
ZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLXR5cGVkZWYgVmFyaWFudDxOdW1U
aHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGU+IEZ1bmN0aW9uQXR0cmlidXRlOwotdHlwZWRlZiBWZWN0
b3I8RnVuY3Rpb25BdHRyaWJ1dGU+IEF0dHJpYnV0ZUJsb2NrOwordXNpbmcgRnVuY3Rpb25BdHRy
aWJ1dGUgPSBWYXJpYW50PE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZT47Cit1c2luZyBBdHRy
aWJ1dGVCbG9jayA9IFZlY3RvcjxGdW5jdGlvbkF0dHJpYnV0ZT47CiAKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25E
ZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCmluZGV4IDdhN2UwYTA2NTZjLi42NzY0OGY0OTM4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RnVuY3Rpb25EZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaApAQCAtMzAsOSArMzAsOSBAQAog
I2luY2x1ZGUgIldITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJXSExTTExleGVy
LmgiCiAjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCi0jaW5jbHVkZSAiV0hMU0xQYXJhbWV0ZXIuaCIK
ICNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5j
bHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJh
dGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC00NiwxMCArNDYsMTEgQEAgcHVibGljOgogICAgIGVudW0gY2xhc3MgRW50cnlQ
b2ludFR5cGUgewogICAgICAgICBWZXJ0ZXgsCiAgICAgICAgIEZyYWdtZW50LAotICAgICAgICBD
b21wdXRlCisgICAgICAgIENvbXB1dGUsCisgICAgICAgIC8vIEZJWE1FOiBBZGQgYW4gZW50cnkg
cG9pbnQgdHlwZSBmb3IgdGVzdGluZwogICAgIH07CiAKLSAgICBGdW5jdGlvbkRlY2xhcmF0aW9u
KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQXR0cmlidXRlQmxvY2smJiBhdHRyaWJ1dGVCbG9jaywg
T3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IGVudHJ5UG9pbnRUeXBlLCBzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIFBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJz
LCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFudGljKQorICAgIEZ1bmN0aW9uRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9jayYmIGF0dHJpYnV0ZUJs
b2NrLCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5cGUsIHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIFZhcmlhYmxlRGVj
bGFyYXRpb25zJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1hbnRp
YywgYm9vbCBpc09wZXJhdG9yKQogICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkK
ICAgICAgICAgLCBtX2F0dHJpYnV0ZUJsb2NrKFdURk1vdmUoYXR0cmlidXRlQmxvY2spKQogICAg
ICAgICAsIG1fZW50cnlQb2ludFR5cGUoZW50cnlQb2ludFR5cGUpCkBAIC01Nyw2ICs1OCw3IEBA
IHB1YmxpYzoKICAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3Bh
cmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKICAgICAgICAgLCBtX3NlbWFudGljKFdURk1v
dmUoc2VtYW50aWMpKQorICAgICAgICAsIG1faXNPcGVyYXRvcihXVEZNb3ZlKGlzT3BlcmF0b3Ip
KQogICAgIHsKICAgICB9CiAKQEAgLTY1LDI3ICs2NywyOCBAQCBwdWJsaWM6CiAgICAgRnVuY3Rp
b25EZWNsYXJhdGlvbihjb25zdCBGdW5jdGlvbkRlY2xhcmF0aW9uJikgPSBkZWxldGU7CiAgICAg
RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uJiYpID0gZGVmYXVsdDsKIAor
ICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uRGVmaW5pdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICBBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRlQmxv
Y2soKSB7IHJldHVybiBtX2F0dHJpYnV0ZUJsb2NrOyB9Ci0gICAgQVNUOjpUeXBlJiB0eXBlKCkg
eyByZXR1cm4gKm1fdHlwZTsgfQotICAgIFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMoKSB7IHJldHVy
biBtX3BhcmFtZXRlcnM7IH0KKyAgICBjb25zdCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4mIGVu
dHJ5UG9pbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeVBvaW50VHlwZTsgfQorICAgIEFT
VDo6VW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiAqbV90eXBlOyB9CisgICAgY29u
c3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgYm9vbCBpc0Nh
c3QoKSBjb25zdCB7IHJldHVybiBtX25hbWUgPT0gIm9wZXJhdG9yIGNhc3QiOyB9CisgICAgY29u
c3QgVmFyaWFibGVEZWNsYXJhdGlvbnMmIHBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBtX3Bh
cmFtZXRlcnM7IH0KKyAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyYgcGFyYW1ldGVycygpIHsgcmV0
dXJuIG1fcGFyYW1ldGVyczsgfQogICAgIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+JiBzZW1hbnRp
YygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KLQotICAgIExleGVyOjpUb2tlbiYmIHRha2VPcmln
aW4oKSB7IHJldHVybiBXVEZNb3ZlKG1fb3JpZ2luKTsgfQotICAgIEF0dHJpYnV0ZUJsb2NrJiYg
dGFrZUF0dHJpYnV0ZUJsb2NrKCkgeyByZXR1cm4gV1RGTW92ZShtX2F0dHJpYnV0ZUJsb2NrKTsg
fQotICAgIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiYmIHRha2VFbnRyeVBvaW50VHlwZSgpIHsg
cmV0dXJuIFdURk1vdmUobV9lbnRyeVBvaW50VHlwZSk7IH0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPiYmIHRha2VUeXBlKCkgeyByZXR1cm4gV1RGTW92ZShtX3R5cGUpOyB9Ci0gICAg
U3RyaW5nJiYgdGFrZU5hbWUoKSB7IHJldHVybiBXVEZNb3ZlKG1fbmFtZSk7IH0KLSAgICBQYXJh
bWV0ZXJzJiYgdGFrZVBhcmFtZXRlcnMoKSB7IHJldHVybiBXVEZNb3ZlKG1fcGFyYW1ldGVycyk7
IH0KLSAgICBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHRha2VTZW1hbnRpYygpIHsgcmV0dXJu
IFdURk1vdmUobV9zZW1hbnRpYyk7IH0KKyAgICBib29sIGlzT3BlcmF0b3IoKSBjb25zdCB7IHJl
dHVybiBtX2lzT3BlcmF0b3I7IH0KIAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmln
aW47CiAgICAgQXR0cmlidXRlQmxvY2sgbV9hdHRyaWJ1dGVCbG9jazsKICAgICBPcHRpb25hbDxF
bnRyeVBvaW50VHlwZT4gbV9lbnRyeVBvaW50VHlwZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpUeXBlPiBtX3R5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBtX3R5cGU7
CiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICBQYXJhbWV0ZXJzIG1fcGFyYW1ldGVyczsKKyAgICBW
YXJpYWJsZURlY2xhcmF0aW9ucyBtX3BhcmFtZXRlcnM7CiAgICAgT3B0aW9uYWw8QVNUOjpTZW1h
bnRpYz4gbV9zZW1hbnRpYzsKKyAgICBib29sIG1faXNPcGVyYXRvcjsKIH07CiAKIH0KQEAgLTk0
LDQgKzk3LDkgQEAgcHJpdmF0ZToKIAogfQogCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfRlVOQ1RJT05fREVDTEFSQVRJT04oVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUp
IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9W
YWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldI
TFNMOjpBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGlj
YXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlv
bkRlZmluaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oCmluZGV4IGE0OTA3YjBkMjk4Li5iNmI3YmEwNzdkMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RnVuY3Rpb25EZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgKQEAgLTUwLDYgKzUwLDggQEAgcHVi
bGljOgogICAgIEZ1bmN0aW9uRGVmaW5pdGlvbihjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSA9
IGRlbGV0ZTsKICAgICBGdW5jdGlvbkRlZmluaXRpb24oRnVuY3Rpb25EZWZpbml0aW9uJiYpID0g
ZGVmYXVsdDsKIAorICAgIGJvb2wgaXNGdW5jdGlvbkRlZmluaXRpb24oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CisKICAgICBCbG9jayYgYmxvY2soKSB7IHJldHVybiBtX2Jsb2Nr
OyB9CiAgICAgYm9vbCByZXN0cmljdGVkKCkgY29uc3QgeyByZXR1cm4gbV9yZXN0cmljdGVkOyB9
CiAKQEAgLTY0LDQgKzY2LDYgQEAgcHJpdmF0ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX1dITFNMX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OKEZ1bmN0aW9uRGVmaW5pdGlvbiwgaXNGdW5j
dGlvbkRlZmluaXRpb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCmlu
ZGV4IDZiYjZhMGYwZGFiLi40M2U2MGExMDQ5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9u
LmgKQEAgLTQ5LDYgKzQ5LDI1IEBAIHB1YmxpYzoKICAgICBJbmRleEV4cHJlc3Npb24oY29uc3Qg
SW5kZXhFeHByZXNzaW9uJikgPSBkZWxldGU7CiAgICAgSW5kZXhFeHByZXNzaW9uKEluZGV4RXhw
cmVzc2lvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzSW5kZXhFeHByZXNzaW9uKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgU3RyaW5nIGdldEZ1bmN0aW9uTmFt
ZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5nKCJvcGVyYXRv
cltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAgfQorCisgICAgU3RyaW5n
IHNldEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4g
U3RyaW5nKCJvcGVyYXRvciZbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAg
IH0KKworICAgIFN0cmluZyBhbmRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFN0cmluZygib3BlcmF0b3JbXT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24oKSB7
IHJldHVybiAqbV9pbmRleDsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHBy
ZXNzaW9uPiBtX2luZGV4OwogfTsKQEAgLTU5LDQgKzc4LDYgQEAgcHJpdmF0ZToKIAogfQogCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJT04oSW5kZXhFeHByZXNzaW9uLCBp
c0luZGV4RXhwcmVzc2lvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjkxMWQzZjdmMmQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xJ
bnRlZ2VyTGl0ZXJhbC5oIgorCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24u
aCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworaW50NjRfdCBJbnRl
Z2VyTGl0ZXJhbDo6dmFsdWVGb3JTZWxlY3RlZFR5cGUoKSBjb25zdAoreworICAgIEFTU0VSVCht
X3R5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2Fz
dDxUeXBlUmVmZXJlbmNlPigqbV90eXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBBU1NFUlQodHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0
aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNv
bHZlZFR5cGUoKSk7CisgICAgcmV0dXJuIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5mb3JtYXRWYWx1
ZUZyb21JbnRlZ2VyKCkobV92YWx1ZSk7Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50
ZWdlckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEludGVnZXJMaXRlcmFsLmgKaW5kZXggNjg1NGRkMjdmMGMuLmNiMTJkNWQ3ZDdiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRl
Z2VyTGl0ZXJhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEludGVnZXJMaXRlcmFsLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRl
Z2VyTGl0ZXJhbFR5cGUuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTM5LDIxICs0MCwzNyBAQCBuYW1lc3BhY2UgQVNUIHsKIGNsYXNzIEludGVn
ZXJMaXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgogICAgIEludGVnZXJMaXRl
cmFsKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgaW50IHZhbHVlKQotICAgICAgICA6IEV4cHJlc3Np
b24oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICA6IEV4cHJlc3Npb24oTGV4ZXI6OlRva2VuKG9y
aWdpbikpCisgICAgICAgICwgbV90eXBlKFdURk1vdmUob3JpZ2luKSwgdmFsdWUpCiAgICAgICAg
ICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQogCiAgICAgdmlydHVhbCB+SW50ZWdlckxp
dGVyYWwoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBJbnRlZ2VyTGl0ZXJhbChjb25zdCBJ
bnRlZ2VyTGl0ZXJhbCYpID0gZGVmYXVsdDsKKyAgICBJbnRlZ2VyTGl0ZXJhbChjb25zdCBJbnRl
Z2VyTGl0ZXJhbCYpID0gZGVsZXRlOwogICAgIEludGVnZXJMaXRlcmFsKEludGVnZXJMaXRlcmFs
JiYpID0gZGVmYXVsdDsKIAorICAgIEludGVnZXJMaXRlcmFsJiBvcGVyYXRvcj0oY29uc3QgSW50
ZWdlckxpdGVyYWwmKSA9IGRlbGV0ZTsKKyAgICBJbnRlZ2VyTGl0ZXJhbCYgb3BlcmF0b3I9KElu
dGVnZXJMaXRlcmFsJiYpID0gZGVmYXVsdDsKKworICAgIEludGVnZXJMaXRlcmFsVHlwZSYgdHlw
ZSgpIHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGludCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWU7IH0KIAogICAgIGJvb2wgaXNJbnRlZ2VyTGl0ZXJhbCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KIAorICAgIEludGVnZXJMaXRlcmFsIGNsb25lKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEludGVnZXJMaXRlcmFsIHJlc3VsdChMZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBt
X3ZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5tX3R5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAg
ICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVzdWx0Lm1fdHlwZS5yZXNvbHZlZFR5cGUo
KS0+Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaW50NjRf
dCB2YWx1ZUZvclNlbGVjdGVkVHlwZSgpIGNvbnN0OworCiBwcml2YXRlOgorICAgIEludGVnZXJM
aXRlcmFsVHlwZSBtX3R5cGU7CiAgICAgaW50IG1fdmFsdWU7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJh
bFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
SW50ZWdlckxpdGVyYWxUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNWZjMjFhY2JkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCkBAIC0wLDAg
KzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWxUeXBlLmgiCisKKyNpbmNsdWRl
ICJXSExTTEluZmVyVHlwZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
V0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworSW50ZWdlckxpdGVyYWxUeXBlOjpJbnRlZ2Vy
TGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBpbnQgdmFsdWUpCisgICAgOiBtX3Zh
bHVlKHZhbHVlKQorICAgICwgbV9wcmVmZXJyZWRUeXBlKHN0ZDo6bWFrZV91bmlxdWU8VHlwZVJl
ZmVyZW5jZT4oV1RGTW92ZShvcmlnaW4pLCBTdHJpbmcoImludCIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLCBUeXBlQXJndW1lbnRzKCkpKQoreworfQorCitJbnRlZ2VyTGl0ZXJhbFR5
cGU6On5JbnRlZ2VyTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgSW50ZWdlckxpdGVy
YWxUeXBlOjpjYW5SZXNvbHZlKGNvbnN0IFR5cGUmIHR5cGUpIGNvbnN0Cit7CisgICAgaWYgKCFp
czxOYW1lZFR5cGU+KHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgbmFt
ZWRUeXBlID0gZG93bmNhc3Q8TmFtZWRUeXBlPih0eXBlKTsKKyAgICBpZiAoIWlzPE5hdGl2ZVR5
cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1
dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4obmFtZWRUeXBlKTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc051bWJlcigp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24u
Y2FuUmVwcmVzZW50SW50ZWdlcigpKG1fdmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIEludGVnZXJMaXRlcmFsVHlwZTo6Y29udmVy
c2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSBjb25zdAoreworICAgIGlm
IChtYXRjaGVzKHVubmFtZWRUeXBlLCAqbV9wcmVmZXJyZWRUeXBlKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIDE7Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxp
dGVyYWxUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNWYwMDIyYzZiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaApAQCAtMCwwICsx
LDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQor
CisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBUeXBlUmVmZXJlbmNlOworCitjbGFzcyBJbnRlZ2Vy
TGl0ZXJhbFR5cGUgOiBwdWJsaWMgUmVzb2x2YWJsZVR5cGUgeworcHVibGljOgorICAgIEludGVn
ZXJMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIGludCB2YWx1ZSk7CisKKyAgICB2
aXJ0dWFsIH5JbnRlZ2VyTGl0ZXJhbFR5cGUoKTsKKworICAgIEludGVnZXJMaXRlcmFsVHlwZShj
b25zdCBJbnRlZ2VyTGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBJbnRlZ2VyTGl0ZXJhbFR5
cGUoSW50ZWdlckxpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIEludGVnZXJMaXRlcmFs
VHlwZSYgb3BlcmF0b3I9KGNvbnN0IEludGVnZXJMaXRlcmFsVHlwZSYpID0gZGVsZXRlOworICAg
IEludGVnZXJMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KEludGVnZXJMaXRlcmFsVHlwZSYmKSA9IGRl
ZmF1bHQ7CisKKyAgICBib29sIGlzSW50ZWdlckxpdGVyYWxUeXBlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgVHlwZVJlZmVyZW5jZSYgcHJlZmVycmVkVHlwZSgpIHsg
cmV0dXJuICptX3ByZWZlcnJlZFR5cGU7IH0KKworICAgIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBU
eXBlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoY29uc3Qg
VW5uYW1lZFR5cGUmKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBpbnQgbV92YWx1
ZTsKKyAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEgY2lyY3VsYXIgZGVw
ZW5kZW5jeSBiZXR3ZWVuCisgICAgLy8gQ29uc3RhbnRFeHByZXNzaW9uIC0+IExpdGVyYWxUeXBl
IC0+IFR5cGVSZWZlcmVuY2UgLT4gVHlwZUFyZ3VtZW50cyAtPiBDb25zdGFudEV4cHJlc3Npb24K
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBlOworfTsK
KworfQorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9SRVNPTFZBQkxF
X1RZUEUoSW50ZWdlckxpdGVyYWxUeXBlLCBpc0ludGVnZXJMaXRlcmFsVHlwZSgpKQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTE5hbWVkVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTmFtZWRUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjY3ZGIwMDAxNmEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgTmFtZWRU
eXBlIDogcHVibGljIFR5cGUgeworcHVibGljOgorICAgIE5hbWVkVHlwZShMZXhlcjo6VG9rZW4m
JiBvcmlnaW4sIFN0cmluZyYmIG5hbWUpCisgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmln
aW4pKQorICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIH5OYW1lZFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBOYW1lZFR5cGUoY29uc3Qg
TmFtZWRUeXBlJikgPSBkZWxldGU7CisgICAgTmFtZWRUeXBlKE5hbWVkVHlwZSYmKSA9IGRlZmF1
bHQ7CisKKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
b3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICBi
b29sIGlzTmFtZWRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpc1R5cGVEZWZpbml0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaXNTdHJ1Y3R1cmVEZWZpbml0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGlvbkRlZmluaXRpb24oKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2ZVR5cGVEZWNsYXJhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IFR5cGUmIHVu
aWZ5Tm9kZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgdmlydHVhbCBUeXBlJiB1bmlm
eU5vZGUoKSB7IHJldHVybiAqdGhpczsgfQorCitwcml2YXRlOgorICAgIExleGVyOjpUb2tlbiBt
X29yaWdpbjsKKyAgICBTdHJpbmcgbV9uYW1lOworfTsKKworfQorCit9CisKK30KKworI2RlZmlu
ZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoVG9WYWx1ZVR5cGVOYW1l
LCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hM
U0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0
IFdlYkNvcmU6OldITFNMOjpBU1Q6Ok5hbWVkVHlwZSYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVk
aWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dITFNMX1RZUEUoTmFtZWRUeXBlLCBpc05hbWVkVHlwZSgpKQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaAppbmRleCAwMTBl
NmViYTcwMC4uYTgxNGJlNjhlMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLmgKQEAgLTM3LDggKzM3LDggQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNz
IE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwdWJsaWMgRnVuY3Rpb25EZWNsYXJhdGlvbiB7
CiBwdWJsaWM6Ci0gICAgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBv
cmlnaW4sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9wdGlvbmFsPEVudHJ5UG9p
bnRUeXBlPiBlbnRyeVBvaW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBl
LCBTdHJpbmcmJiBuYW1lLCBQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpT
ZW1hbnRpYz4mJiBzZW1hbnRpYywgYm9vbCByZXN0cmljdGVkKQotICAgICAgICA6IEZ1bmN0aW9u
RGVjbGFyYXRpb24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSwgV1RG
TW92ZShlbnRyeVBvaW50VHlwZSksIFdURk1vdmUodHlwZSksIFdURk1vdmUobmFtZSksIFdURk1v
dmUocGFyYW1ldGVycyksIFdURk1vdmUoc2VtYW50aWMpKQorICAgIE5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiYmIGZ1bmN0aW9uRGVjbGFyYXRpb24sIGJvb2wg
cmVzdHJpY3RlZCkKKyAgICAgICAgOiBGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoZnVuY3Rp
b25EZWNsYXJhdGlvbikpCiAgICAgICAgICwgbV9yZXN0cmljdGVkKHJlc3RyaWN0ZWQpCiAgICAg
ewogICAgIH0KQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIE5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oY29uc3QgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAg
IE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmKSA9
IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIGJvb2wgcmVzdHJpY3RlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVzdHJpY3RlZDsgfQogCiBwcml2YXRlOgpAQCAtNjAsNCArNjIsNiBAQCBw
cml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRlVOQ1RJT05fREVD
TEFSQVRJT04oTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXNOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24u
aAppbmRleCAzMjBhYmMzYzQ3NS4uMmI4OTQ2MWYzODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkK
IAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNs
dWRlICJXSExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM4LDExICszOCwxMCBAQCBuYW1l
c3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgTmF0aXZlVHlwZURlY2xh
cmF0aW9uIDogcHVibGljIFR5cGUgeworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHVi
bGljIE5hbWVkVHlwZSB7CiBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURlY2xhcmF0aW9uKExleGVy
OjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgVHlwZUFyZ3VtZW50cyYmIHR5cGVBcmd1
bWVudHMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1f
bmFtZShXVEZNb3ZlKG5hbWUpKQorICAgICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiks
IFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlQXJndW1lbnRzKFdURk1vdmUodHlwZUFy
Z3VtZW50cykpCiAgICAgewogICAgIH0KQEAgLTUyLDE4ICs1MSw1NiBAQCBwdWJsaWM6CiAgICAg
TmF0aXZlVHlwZURlY2xhcmF0aW9uKGNvbnN0IE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpID0gZGVs
ZXRlOwogICAgIE5hdGl2ZVR5cGVEZWNsYXJhdGlvbihOYXRpdmVUeXBlRGVjbGFyYXRpb24mJikg
PSBkZWZhdWx0OwogCisgICAgYm9vbCBpc05hdGl2ZVR5cGVEZWNsYXJhdGlvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsg
fQogICAgIFR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMoKSB7IHJldHVybiBtX3R5cGVBcmd1
bWVudHM7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJy
aWRlCi0gICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQorICAgIGJvb2wgaXNJbnQoKSBjb25zdCB7IHJldHVybiBtX2lzSW50
OyB9CisgICAgYm9vbCBpc051bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1faXNOdW1iZXI7IH0KKyAg
ICBib29sIGlzRmxvYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzRmxvYXRpbmc7IH0KKyAgICBi
b29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZlY3RvcjsgfQorICAgIGJvb2wgaXNN
YXRyaXgoKSBjb25zdCB7IHJldHVybiBtX2lzTWF0cml4OyB9CisgICAgYm9vbCBpc1RleHR1cmUo
KSBjb25zdCB7IHJldHVybiBtX2lzVGV4dHVyZTsgfQorICAgIGJvb2wgaXNTaWduZWQoKSBjb25z
dCB7IHJldHVybiBtX2lzU2lnbmVkOyB9CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGlu
dCk+JiBjYW5SZXByZXNlbnRJbnRlZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9jYW5SZXByZXNlbnRJ
bnRlZ2VyOyB9CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKHVuc2lnbmVkKT4mIGNhblJl
cHJlc2VudFVuc2lnbmVkSW50ZWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fY2FuUmVwcmVzZW50VW5z
aWduZWRJbnRlZ2VyOyB9CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGZsb2F0KT4mIGNh
blJlcHJlc2VudEZsb2F0KCkgY29uc3QgeyByZXR1cm4gbV9jYW5SZXByZXNlbnRGbG9hdDsgfQor
ICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248aW50NjRfdChpbnQ2NF90KT4mIHN1Y2Nlc3NvcigpIGNv
bnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yOyB9CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxpbnQ2
NF90KGludCk+JiBmb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9mb3Jt
YXRWYWx1ZUZyb21JbnRlZ2VyOyB9CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxpbnQ2NF90KHVu
c2lnbmVkKT4mIGZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcigpIGNvbnN0IHsgcmV0dXJu
IG1fZm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyOyB9CisKKyAgICB2b2lkIHNldElzSW50
KCkgeyBtX2lzSW50ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0SXNOdW1iZXIoKSB7IG1faXNOdW1i
ZXIgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRJc0Zsb2F0aW5nKCkgeyBtX2lzRmxvYXRpbmcgPSB0
cnVlOyB9CisgICAgdm9pZCBzZXRJc1ZlY3RvcigpIHsgbV9pc1ZlY3RvciA9IHRydWU7IH0KKyAg
ICB2b2lkIHNldElzTWF0cml4KCkgeyBtX2lzTWF0cml4ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0
SXNUZXh0dXJlKCkgeyBtX2lzVGV4dHVyZSA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzU2lnbmVk
KCkgeyBtX2lzU2lnbmVkID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0Q2FuUmVwcmVzZW50SW50ZWdl
cihzdGQ6OmZ1bmN0aW9uPGJvb2woaW50KT4mJiBjYW5SZXByZXNlbnQpIHsgbV9jYW5SZXByZXNl
bnRJbnRlZ2VyID0gV1RGTW92ZShjYW5SZXByZXNlbnQpOyB9CisgICAgdm9pZCBzZXRDYW5SZXBy
ZXNlbnRVbnNpZ25lZEludGVnZXIoc3RkOjpmdW5jdGlvbjxib29sKHVuc2lnbmVkKT4mJiBjYW5S
ZXByZXNlbnQpIHsgbV9jYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIgPSBXVEZNb3ZlKGNhblJl
cHJlc2VudCk7IH0KKyAgICB2b2lkIHNldENhblJlcHJlc2VudEZsb2F0KHN0ZDo6ZnVuY3Rpb248
Ym9vbChmbG9hdCk+JiYgY2FuUmVwcmVzZW50KSB7IG1fY2FuUmVwcmVzZW50RmxvYXQgPSBXVEZN
b3ZlKGNhblJlcHJlc2VudCk7IH0KKyAgICB2b2lkIHNldFN1Y2Nlc3NvcihzdGQ6OmZ1bmN0aW9u
PGludDY0X3QoaW50NjRfdCk+JiYgc3VjY2Vzc29yKSB7IG1fc3VjY2Vzc29yID0gV1RGTW92ZShz
dWNjZXNzb3IpOyB9CisgICAgdm9pZCBzZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKHN0ZDo6ZnVu
Y3Rpb248aW50NjRfdChpbnQpPiYmIGZvcm1hdFZhbHVlKSB7IG1fZm9ybWF0VmFsdWVGcm9tSW50
ZWdlciA9IFdURk1vdmUoZm9ybWF0VmFsdWUpOyB9CisgICAgdm9pZCBzZXRGb3JtYXRWYWx1ZUZy
b21VbnNpZ25lZEludGVnZXIoc3RkOjpmdW5jdGlvbjxpbnQ2NF90KHVuc2lnbmVkKT4mJiBmb3Jt
YXRWYWx1ZSkgeyBtX2Zvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlciA9IFdURk1vdmUoZm9y
bWF0VmFsdWUpOyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAg
IFN0cmluZyBtX25hbWU7CiAgICAgVHlwZUFyZ3VtZW50cyBtX3R5cGVBcmd1bWVudHM7CisgICAg
c3RkOjpmdW5jdGlvbjxib29sKGludCk+IG1fY2FuUmVwcmVzZW50SW50ZWdlcjsKKyAgICBzdGQ6
OmZ1bmN0aW9uPGJvb2wodW5zaWduZWQpPiBtX2NhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcjsK
KyAgICBzdGQ6OmZ1bmN0aW9uPGJvb2woZmxvYXQpPiBtX2NhblJlcHJlc2VudEZsb2F0OworICAg
IHN0ZDo6ZnVuY3Rpb248aW50NjRfdChpbnQ2NF90KT4gbV9zdWNjZXNzb3I7CisgICAgc3RkOjpm
dW5jdGlvbjxpbnQ2NF90KGludCk+IG1fZm9ybWF0VmFsdWVGcm9tSW50ZWdlcjsKKyAgICBzdGQ6
OmZ1bmN0aW9uPGludDY0X3QodW5zaWduZWQpPiBtX2Zvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50
ZWdlcjsKKyAgICBib29sIG1faXNJbnQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc051bWJlciB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2lzRmxvYXRpbmcgeyBmYWxzZSB9OworICAgIGJvb2wgbV9p
c1ZlY3RvciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzTWF0cml4IHsgZmFsc2UgfTsKKyAgICBi
b29sIG1faXNUZXh0dXJlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNTaWduZWQgeyBmYWxzZSB9
OwogfTsKIAogfQpAQCAtNzIsNCArMTA5LDYgQEAgcHJpdmF0ZToKIAogfQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoTmF0aXZlVHlwZURlY2xhcmF0aW9uLCBpc05h
dGl2ZVR5cGVEZWNsYXJhdGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5vZGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5vZGUuaAppbmRleCBmNmM0ZjAwNjBjMC4u
YzhmZGMxMzg2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xOb2RlLmgKQEAgLTQyLDYgKzQyLDkgQEAgcHVibGljOgogICAgIGV4cGxp
Y2l0IE5vZGUoY29uc3QgTm9kZSYpID0gZGVmYXVsdDsKICAgICBOb2RlKE5vZGUmJikgPSBkZWZh
dWx0OwogCisgICAgTm9kZSYgb3BlcmF0b3I9KGNvbnN0IE5vZGUmKSA9IGRlZmF1bHQ7CisgICAg
Tm9kZSYgb3BlcmF0b3I9KE5vZGUmJikgPSBkZWZhdWx0OworCiBwcml2YXRlOgogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVs
bExpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TE51bGxMaXRlcmFsLmgKaW5kZXggZWU2NDdjZjlkMzkuLjU0YWY4YWZhOGMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJh
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51
bGxMaXRlcmFsLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lv
bi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFs
VHlwZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ1LDEyICs0NiwyNiBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIH5OdWxsTGl0ZXJhbCgpID0gZGVmYXVsdDsKIAotICAgIGV4cGxp
Y2l0IE51bGxMaXRlcmFsKGNvbnN0IE51bGxMaXRlcmFsJikgPSBkZWZhdWx0OworICAgIE51bGxM
aXRlcmFsKGNvbnN0IE51bGxMaXRlcmFsJikgPSBkZWxldGU7CiAgICAgTnVsbExpdGVyYWwoTnVs
bExpdGVyYWwmJikgPSBkZWZhdWx0OwogCisgICAgTnVsbExpdGVyYWwmIG9wZXJhdG9yPShjb25z
dCBOdWxsTGl0ZXJhbCYpID0gZGVsZXRlOworICAgIE51bGxMaXRlcmFsJiBvcGVyYXRvcj0oTnVs
bExpdGVyYWwmJikgPSBkZWZhdWx0OworCisgICAgTnVsbExpdGVyYWxUeXBlJiB0eXBlKCkgeyBy
ZXR1cm4gbV90eXBlOyB9CisKICAgICBib29sIGlzTnVsbExpdGVyYWwoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBOdWxsTGl0ZXJhbCBjbG9uZSgpIGNvbnN0CisgICAg
eworICAgICAgICBhdXRvIHJlc3VsdCA9IE51bGxMaXRlcmFsKExleGVyOjpUb2tlbihvcmlnaW4o
KSkpOworICAgICAgICBpZiAocmVzdWx0Lm1fdHlwZS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAg
ICAgIHJlc3VsdC5tX3R5cGUucmVzb2x2ZShyZXN1bHQubV90eXBlLnJlc29sdmVkVHlwZSgpLT5j
bG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKIHByaXZhdGU6CisgICAg
TnVsbExpdGVyYWxUeXBlIG1fdHlwZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbFR5
cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MWViZGMxYjQz
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworYm9vbCBOdWxsTGl0ZXJhbFR5cGU6OmNh
blJlc29sdmUoY29uc3QgVHlwZSYgdHlwZSkgY29uc3QKK3sKKyAgICBpZiAoIWlzPFVubmFtZWRU
eXBlPih0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIHVubmFtZWRUeXBl
ID0gZG93bmNhc3Q8VW5uYW1lZFR5cGU+KHR5cGUpOworICAgIGlmICghaXM8UmVmZXJlbmNlVHlw
ZT4odW5uYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3Vuc2lnbmVkIE51bGxMaXRlcmFsVHlwZTo6Y29udmVyc2lvbkNvc3QoY29uc3QgVW5u
YW1lZFR5cGUmKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit9CisKK30KKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTE51bGxMaXRlcmFsVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWxUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjgzMTI1MTAxYzZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWxUeXBlLmgKQEAg
LTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkdQVSkKKworI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5cGUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3Mg
TnVsbExpdGVyYWxUeXBlIDogcHVibGljIFJlc29sdmFibGVUeXBlIHsKK3B1YmxpYzoKKyAgICBO
dWxsTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5OdWxsTGl0ZXJhbFR5
cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBOdWxsTGl0ZXJhbFR5cGUoY29uc3QgTnVsbExpdGVyYWxU
eXBlJikgPSBkZWxldGU7CisgICAgTnVsbExpdGVyYWxUeXBlKE51bGxMaXRlcmFsVHlwZSYmKSA9
IGRlZmF1bHQ7CisKKyAgICBOdWxsTGl0ZXJhbFR5cGUmIG9wZXJhdG9yPShjb25zdCBOdWxsTGl0
ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBOdWxsTGl0ZXJhbFR5cGUmIG9wZXJhdG9yPShOdWxs
TGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc051bGxMaXRlcmFsVHlwZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJvb2wgY2FuUmVzb2x2ZShj
b25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQgY29udmVyc2lvbkNvc3Qo
Y29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKK307CisKK30K
KworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfUkVTT0xWQUJMRV9UWVBF
KE51bGxMaXRlcmFsVHlwZSwgaXNOdWxsTGl0ZXJhbFR5cGUoKSkKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVy
VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9p
bnRlclR5cGUuaAppbmRleCAxNTI5NDI2YTJlZC4uNjNjMjA5M2M1MGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBvaW50ZXJUeXBlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRl
clR5cGUuaApAQCAtMzksOCArMzksOCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgUG9pbnRl
clR5cGUgOiBwdWJsaWMgUmVmZXJlbmNlVHlwZSB7CiBwdWJsaWM6Ci0gICAgUG9pbnRlclR5cGUo
TGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBhZGRyZXNzU3BhY2UsIHN0ZDo6dW5pcXVl
X3B0cjxUeXBlPiBlbGVtZW50VHlwZSkKLSAgICAgICAgOiBSZWZlcmVuY2VUeXBlKFdURk1vdmUo
b3JpZ2luKSwgV1RGTW92ZShhZGRyZXNzU3BhY2UpLCBXVEZNb3ZlKGVsZW1lbnRUeXBlKSkKKyAg
ICBQb2ludGVyVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEFkZHJlc3NTcGFjZSBhZGRyZXNz
U3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4gZWxlbWVudFR5cGUpCisgICAgICAg
IDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdpbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShl
bGVtZW50VHlwZSkpCiAgICAgewogICAgIH0KIApAQCAtNDksMTEgKzQ5LDExIEBAIHB1YmxpYzoK
ICAgICBQb2ludGVyVHlwZShjb25zdCBQb2ludGVyVHlwZSYpID0gZGVsZXRlOwogICAgIFBvaW50
ZXJUeXBlKFBvaW50ZXJUeXBlJiYpID0gZGVmYXVsdDsKIAotICAgIGJvb2wgaXNQb2ludGVyVHlw
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc1BvaW50ZXJU
eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5u
YW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPFBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBTdHJp
bmcoYWRkcmVzc1NwYWNlKCkpLCBlbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwg
YWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2YXRl
OgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfVFlQRShQb2ludGVyVHlwZSwgaXNQb2ludGVyVHlwZSgpKQorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoUG9pbnRlclR5cGUsIGlzUG9pbnRlclR5cGUo
KSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5o
CmluZGV4IGJhMzhhNWMwMWVhLi5kMDVhNzJjMWZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKQEAgLTUxLDEwICs1MSwzMCBAQCBwdWJsaWM6CiAKICAg
ICBib29sIGlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0RnVuY3Rpb25OYW1lKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHNldEZ1bmN0aW9uTmFtZSgpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBhbmRGdW5jdGlvbk5hbWUoKSBjb25zdCA9IDA7CisKKyAgICB2b2lk
IHNldFBvc3NpYmxlR2V0T3ZlcmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRzKQorICAgIHsKKyAgICAgICAg
bV9wb3NzaWJsZUdldE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKKyAgICB9CisgICAgdm9pZCBzZXRQ
b3NzaWJsZVNldE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykKKyAgICB7CisgICAgICAgIG1fcG9z
c2libGVTZXRPdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAgfQorICAgIHZvaWQgc2V0UG9zc2li
bGVBbmRPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rp
b25EZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMpCisgICAgeworICAgICAgICBtX3Bvc3NpYmxl
QW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAgIH0KKwogICAgIEV4cHJlc3Npb24mIGJhc2Uo
KSB7IHJldHVybiAqbV9iYXNlOyB9CiAKIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4
cHJlc3Npb24+IG1fYmFzZTsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5j
dGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZUdldE92ZXJsb2FkczsKKyAgICBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJs
ZVNldE92ZXJsb2FkczsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlv
bkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZUFuZE92ZXJsb2FkczsKIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFF1YWxp
Zmllci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUXVh
bGlmaWVyLmgKaW5kZXggMzMzZjA1MjI0NDEuLmY3Y2QyZmRmZmEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xRdWFsaWZpZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xRdWFsaWZpZXIu
aApAQCAtNDYsNyArNDYsNyBAQCBlbnVtIGNsYXNzIFF1YWxpZmllciB7CiAgICAgU2FtcGxlCiB9
OwogCi10eXBlZGVmIFZlY3RvcjxRdWFsaWZpZXI+IFF1YWxpZmllcnM7Cit1c2luZyBRdWFsaWZp
ZXJzID0gVmVjdG9yPFF1YWxpZmllcj47CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5oCmluZGV4IGE0YzE0Y2UxY2YzLi5jZDU1NjMyMGRiMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaApAQCAtMjcsNyAr
MjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMQW5vbnltb3Vz
VmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlv
bi5oIgogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCkBAIC01Miw4ICs1Miw4IEBA
IHB1YmxpYzoKICAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9y
aWdpbiwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IGxWYWx1ZSkKICAgICAgICAgOiBFeHBy
ZXNzaW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQogICAgICAgICAsIG1fbFZhbHVlKFdURk1vdmUo
bFZhbHVlKSkKLSAgICAgICAgLCBtX29sZFZhbHVlKExleGVyOjpUb2tlbihvcmlnaW4pKQotICAg
ICAgICAsIG1fbmV3VmFsdWUoV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fb2xkVmFsdWUo
TGV4ZXI6OlRva2VuKG9yaWdpbiksIFF1YWxpZmllcnMoKSwgbnVsbHB0ciwgU3RyaW5nKCksIFdU
Rjo6bnVsbG9wdCwgbnVsbHB0cikKKyAgICAgICAgLCBtX25ld1ZhbHVlKFdURk1vdmUob3JpZ2lu
KSwgUXVhbGlmaWVycygpLCBudWxscHRyLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRy
KQogICAgIHsKICAgICB9CiAKQEAgLTg3LDE1ICs4NywxNSBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
c1JlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CiAKICAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJldHVybiAqbV9sVmFsdWU7IH0KLSAg
ICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJiBvbGRWYWx1ZSgpIHsgcmV0dXJuIG1fb2xk
VmFsdWU7IH0KLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJiBuZXdWYWx1ZSgpIHsg
cmV0dXJuIG1fbmV3VmFsdWU7IH0KKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uJiBvbGRWYWx1ZSgp
IHsgcmV0dXJuIG1fb2xkVmFsdWU7IH0KKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uJiBuZXdWYWx1
ZSgpIHsgcmV0dXJuIG1fbmV3VmFsdWU7IH0KICAgICBFeHByZXNzaW9uJiBuZXdWYWx1ZUV4cHJl
c3Npb24oKSB7IHJldHVybiAqbV9uZXdWYWx1ZUV4cHJlc3Npb247IH0KICAgICBFeHByZXNzaW9u
JiByZXN1bHRFeHByZXNzaW9uKCkgeyByZXR1cm4gKm1fcmVzdWx0RXhwcmVzc2lvbjsgfQogCiBw
cml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2xWYWx1ZTsKLSAgICBB
bm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uIG1fb2xkVmFsdWU7Ci0gICAgQW5vbnltb3VzVmFy
aWFibGVEZWNsYXJhdGlvbiBtX25ld1ZhbHVlOworICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbV9v
bGRWYWx1ZTsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG1fbmV3VmFsdWU7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fbmV3VmFsdWVFeHByZXNzaW9uOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxFeHByZXNzaW9uPiBtX3Jlc3VsdEV4cHJlc3Npb247CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlw
ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJl
bmNlVHlwZS5oCmluZGV4IDIyNTdmOWJlMjQwLi41ZDI5ZmZkNWI3YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlZmVy
ZW5jZVR5cGUuaApAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNs
dWRlICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hM
U0xVbm5hbWVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0zNywxMSArMzcsMTggQEAgbmFtZXNwYWNlIFdITFNMIHsKIAog
bmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFJlZmVyZW5jZVR5cGUgOiBwdWJsaWMgVHlwZSB7Citj
bGFzcyBSZWZlcmVuY2VUeXBlIDogcHVibGljIFVubmFtZWRUeXBlIHsKIHB1YmxpYzoKLSAgICBS
ZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgYWRkcmVzc1NwYWNl
LCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4mJiBlbGVtZW50VHlwZSkKLSAgICAgICAgOiBtX29yaWdp
bihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9hZGRyZXNzU3BhY2UoV1RGTW92ZShhZGRy
ZXNzU3BhY2UpKQorICAgIGVudW0gY2xhc3MgQWRkcmVzc1NwYWNlIHsKKyAgICAgICAgQ29uc3Rh
bnQsCisgICAgICAgIERldmljZSwKKyAgICAgICAgVGhyZWFkZ3JvdXAsCisgICAgICAgIFRocmVh
ZAorICAgIH07CisKKyAgICBSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRk
cmVzc1NwYWNlIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVs
ZW1lbnRUeXBlKQorICAgICAgICA6IFVubmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSkKKyAgICAg
ICAgLCBtX2FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCiAgICAgICAgICwgbV9lbGVtZW50VHlw
ZShXVEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICB7CiAgICAgfQpAQCAtNTAsMTggKzU3LDE1IEBA
IHB1YmxpYzoKIAogICAgIFJlZmVyZW5jZVR5cGUoY29uc3QgUmVmZXJlbmNlVHlwZSYpID0gZGVs
ZXRlOwogICAgIFJlZmVyZW5jZVR5cGUoUmVmZXJlbmNlVHlwZSYmKSA9IGRlZmF1bHQ7Ci0gICAg
Ci0gICAgVHlwZSYgZWxlbWVudFR5cGUoKSB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQogCi1w
cm90ZWN0ZWQ6Ci0gICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVy
biBtX29yaWdpbjsgfQotICAgIGNvbnN0IFN0cmluZyYgYWRkcmVzc1NwYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KLSAgICBjb25zdCBUeXBlJiBlbGVtZW50VHlwZSgpIGNv
bnN0IHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9CisgICAgYm9vbCBpc1JlZmVyZW5jZVR5cGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgQWRkcmVzc1NwYWNlIGFk
ZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9CisgICAgVW5uYW1l
ZFR5cGUmIGVsZW1lbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gKm1fZWxlbWVudFR5cGU7IH0KIAog
cHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgU3RyaW5nIG1fYWRkcmVz
c1NwYWNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX2VsZW1lbnRUeXBlOworICAgIEFk
ZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFjZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5
cGU+IG1fZWxlbWVudFR5cGU7CiB9OwogCiB9CkBAIC03MCw0ICs3NCw2IEBAIHByaXZhdGU6CiAK
IH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoUmVmZXJlbmNl
VHlwZSwgaXNSZWZlcmVuY2VUeXBlKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb2x2YWJsZVR5cGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc29sdmFibGVUeXBl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU4YTY4ZWEzYzlhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUmVzb2x2YWJsZVR5cGUuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsK
KworY2xhc3MgUmVzb2x2YWJsZVR5cGUgOiBwdWJsaWMgVHlwZSB7CitwdWJsaWM6CisgICAgUmVz
b2x2YWJsZVR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5SZXNvbHZhYmxlVHlwZSgp
ID0gZGVmYXVsdDsKKworICAgIFJlc29sdmFibGVUeXBlKGNvbnN0IFJlc29sdmFibGVUeXBlJikg
PSBkZWxldGU7CisgICAgUmVzb2x2YWJsZVR5cGUoUmVzb2x2YWJsZVR5cGUmJikgPSBkZWZhdWx0
OworCisgICAgUmVzb2x2YWJsZVR5cGUmIG9wZXJhdG9yPShjb25zdCBSZXNvbHZhYmxlVHlwZSYp
ID0gZGVsZXRlOworICAgIFJlc29sdmFibGVUeXBlJiBvcGVyYXRvcj0oUmVzb2x2YWJsZVR5cGUm
JikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc1Jlc29sdmFibGVUeXBlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0Zsb2F0TGl0ZXJhbFR5cGUo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0ludGVnZXJMaXRl
cmFsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzTnVs
bExpdGVyYWxUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisK
KyAgICB2aXJ0dWFsIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25z
dCA9IDA7CisKKyAgICBVbm5hbWVkVHlwZSogcmVzb2x2ZWRUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9yZXNvbHZlZFR5cGUuZ2V0KCk7IH0KKyAgICBVbm5hbWVkVHlwZSogcmVzb2x2ZWRUeXBlKCkg
eyByZXR1cm4gbV9yZXNvbHZlZFR5cGUuZ2V0KCk7IH0KKworICAgIHZvaWQgcmVzb2x2ZShzdGQ6
OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+JiYgdHlwZSkKKyAgICB7CisgICAgICAgIG1fcmVzb2x2
ZWRUeXBlID0gV1RGTW92ZSh0eXBlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlx
dWVfcHRyPFVubmFtZWRUeXBlPiBtX3Jlc29sdmVkVHlwZTsKK307CisKK30KKworfQorCit9CisK
KyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9SRVNPTFZBQkxFX1RZUEUoVG9W
YWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4o
V2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wg
aXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlc29sdmFibGVUeXBlJiB0eXBlKSB7
IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgp
CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShSZXNvbHZhYmxlVHlwZSwgaXNS
ZXNvbHZhYmxlVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVhOGU4YTFkZjE2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hM
U0xSZXNvdXJjZVNlbWFudGljLmgiCisKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2lu
Y2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgor
I2luY2x1ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVy
ZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25h
bWVzcGFjZSBBU1QgeworCitib29sIFJlc291cmNlU2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUo
Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0IEludHJpbnNpY3MmIGlu
dHJpbnNpY3MpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX21vZGUpIHsKKyAgICBjYXNlIE1vZGU6
OlVub3JkZXJlZEFjY2Vzc1ZpZXc6CisgICAgICAgIGlmIChpczxSZWZlcmVuY2VUeXBlPih1bm5h
bWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHJlZmVyZW5jZVR5cGUgPSBkb3duY2FzdDxS
ZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNl
VHlwZS5hZGRyZXNzU3BhY2UoKSA9PSBSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0
YW50IHx8IHJlZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkgPT0gUmVmZXJlbmNlVHlwZTo6QWRk
cmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEFycmF5VHlwZT4o
dW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChpczxU
eXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5cGVSZWZl
cmVuY2UgPSBkb3duY2FzdDxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAg
ICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgICAgICBpZiAo
aXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4o
KnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpLmlzVGV4dHVyZSgpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIE1vZGU6OlRleHR1cmU6CisgICAgICAgIGlm
IChpczxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZG93
bmNhc3Q8UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmFkZHJlc3NTcGFjZSgpID09IFJlZmVy
ZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAgICAgIGlmIChpczxBcnJheVR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
aXM8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgICAgICBhdXRvJiB0eXBl
UmVmZXJlbmNlID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpOworICAgICAg
ICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICAgICAg
aWYgKGlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBl
KCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRp
b24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKS5pc1RleHR1cmUoKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBNb2RlOjpCdWZmZXI6CisgICAgICAg
IGlmIChpczxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmFkZHJlc3NTcGFjZSgpID09IFJl
ZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAgICAgIHJldHVybiBpczxB
cnJheVR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICBjYXNlIE1vZGU6OlNhbXBsZXI6CisgICAgICAg
IHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnNhbXBsZXJUeXBlKCkpOwor
ICAgIH0KK30KKworYm9vbCBSZXNvdXJjZVNlbWFudGljOjppc0FjY2VwdGFibGVGb3JTaGFkZXJJ
dGVtRGlyZWN0aW9uKFNoYWRlckl0ZW1EaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBGdW5jdGlv
bkRlZmluaXRpb24mKSBjb25zdAoreworICAgIHJldHVybiBkaXJlY3Rpb24gPT0gU2hhZGVySXRl
bURpcmVjdGlvbjo6SW5wdXQ7Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VT
ZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVzb3VyY2VTZW1hbnRpYy5oCmluZGV4IGFiM2I0MzBmNDQyLi42YWUzMTdhMzU5YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3Vy
Y2VTZW1hbnRpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFJlc291cmNlU2VtYW50aWMuaApAQCAtNjIsNiArNjIsMTkgQEAgcHVibGljOgogICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIHVuc2lnbmVk
IHNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZTsgfQogCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFJlc291cmNlU2VtYW50aWMmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fbW9kZSA9PSBvdGhlci5tX21vZGUgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4ICYm
IG1fc3BhY2UgPT0gb3RoZXIubV9zcGFjZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgUmVzb3VyY2VTZW1hbnRpYyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBpc0FjY2VwdGFibGVUeXBl
KGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNzJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgYm9vbCBpc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKFNoYWRlckl0
ZW1EaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpIGNvbnN0IG92ZXJyaWRlOwor
CiBwcml2YXRlOgogICAgIE1vZGUgbV9tb2RlOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1
cm4uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJldHVy
bi5oCmluZGV4IGM1YmZjOWU0Mjg2Li5hYzkzMjNkMjQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKQEAgLTU0LDgg
KzU0LDExIEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb24qIHZhbHVlKCkgeyByZXR1cm4gbV92
YWx1ZS5nZXQoKTsgfQogCisgICAgdm9pZCBzZXRGdW5jdGlvbihGdW5jdGlvbkRlZmluaXRpb24q
IGZ1bmN0aW9uRGVmaW5pdGlvbikgeyBtX2Z1bmN0aW9uID0gZnVuY3Rpb25EZWZpbml0aW9uOyB9
CisKIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fdmFsdWU7IC8v
IG51bGxhYmxlCisgICAgRnVuY3Rpb25EZWZpbml0aW9uKiBtX2Z1bmN0aW9uOwogfTsKIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
U2VtYW50aWMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFNlbWFudGljLmgKaW5kZXggYjA1MmI5MmVhMjYuLmIyYzA5MGJmMWE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTZW1hbnRpYy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNlbWFudGlj
LmgKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7
CiAKLXR5cGVkZWYgVmFyaWFudDxCdWlsdEluU2VtYW50aWMsIFJlc291cmNlU2VtYW50aWMsIFNw
ZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYywgU3RhZ2VJbk91dFNlbWFudGljPiBTZW1hbnRp
YzsKK3VzaW5nIFNlbWFudGljID0gVmFyaWFudDxCdWlsdEluU2VtYW50aWMsIFJlc291cmNlU2Vt
YW50aWMsIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYywgU3RhZ2VJbk91dFNlbWFudGlj
PjsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFu
dFNlbWFudGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjI0
YmFlY2MwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwCkBAIC0w
LDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGlj
LmgiCisKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExTTEludHJp
bnNpY3MuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworYm9vbCBT
cGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNU
OjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdAorewor
ICAgIGlmICghaXM8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PFR5cGVSZWZlcmVuY2U+
KHVubmFtZWRUeXBlKTsKKyAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7
CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29s
dmVkVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBkb3duY2FzdDxO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKS5pc051
bWJlcigpOworfQorCitib29sIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYzo6aXNBY2Nl
cHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0aW9uIGRpcmVjdGlv
biwgY29uc3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3QKK3sKKyAgICByZXR1cm4gZGlyZWN0
aW9uID09IFNoYWRlckl0ZW1EaXJlY3Rpb246OklucHV0OworfQorCit9CisKK30KKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFu
dGljLmgKaW5kZXggOWE3YzUzZmQ0YjYuLjlhODRhYjljZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0
YW50U2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaApAQCAtNDgsNiArNDgsMTkg
QEAgcHVibGljOgogICAgIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyhjb25zdCBTcGVj
aWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKSA9IGRlbGV0ZTsKICAgICBTcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWMoU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJiYpID0gZGVm
YXVsdDsKIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTcGVjaWFsaXphdGlvbkNvbnN0YW50
U2VtYW50aWMmKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBp
c0FjY2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNz
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGly
ZWN0aW9uKFNoYWRlckl0ZW1EaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpIGNv
bnN0IG92ZXJyaWRlOworCiBwcml2YXRlOgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRT
ZW1hbnRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjIwM2M0
NjA4OGZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcApAQCAtMCwwICsxLDgxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oIgorCisjaW5jbHVkZSAiV0hMU0xBcnJh
eVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1
ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVz
LmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVm
ZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
bmFtZXNwYWNlIEFTVCB7CisKK2Jvb2wgU3RhZ2VJbk91dFNlbWFudGljOjppc0FjY2VwdGFibGVU
eXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBJbnRyaW5zaWNz
JikgY29uc3QKK3sKKyAgICBpZiAoaXM8QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGlmICghaXM8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0
PFR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKTsKKyAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5y
ZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byYgcmVzb2x2ZWRUeXBlID0gKnR5cGVSZWZlcmVuY2Uu
cmVzb2x2ZWRUeXBlKCk7CisgICAgaWYgKGlzPEVudW1lcmF0aW9uRGVmaW5pdGlvbj4ocmVzb2x2
ZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KHJlc29sdmVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRv
JiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+
KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICByZXR1cm4gbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLmlzTnVtYmVyKCkKKyAgICAgICAgfHwgbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlz
VmVjdG9yKCkKKyAgICAgICAgfHwgbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzTWF0cml4KCk7Cit9
CisKK2Jvb2wgU3RhZ2VJbk91dFNlbWFudGljOjppc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGly
ZWN0aW9uKFNoYWRlckl0ZW1EaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmlu
aXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKCpmdW5jdGlv
bkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rpb25EZWNsYXJh
dGlvbjo6RW50cnlQb2ludFR5cGU6OlZlcnRleDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
Y2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6RnJhZ21lbnQ6CisgICAg
ICAgIHJldHVybiBkaXJlY3Rpb24gPT0gU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ7CisgICAg
Y2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZToKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFn
ZUluT3V0U2VtYW50aWMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oCmluZGV4IGEzOTkyNzgxZTNhLi4yOTliOTFiZDk5
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMU3RhZ2VJbk91dFNlbWFudGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmgKQEAgLTUxLDYgKzUxLDE5IEBA
IHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsg
fQogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0YWdlSW5PdXRTZW1hbnRpYyYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4Owor
ICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTdGFnZUluT3V0U2VtYW50aWMmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
IH0KKworICAgIGJvb2wgaXNBY2NlcHRhYmxlVHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwg
Y29uc3QgSW50cmluc2ljcyYpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNBY2NlcHRhYmxl
Rm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0aW9uLCBjb25zdCBGdW5jdGlv
bkRlZmluaXRpb24mKSBjb25zdCBvdmVycmlkZTsKKwogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBt
X2luZGV4OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFN0YXRlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMU3RhdGVtZW50LmgKaW5kZXggNDM0ZDIxYTA0MzIuLmZlZGQwNjhmOGI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xTdGF0ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xTdGF0ZW1lbnQuaApAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogICAgIExleGVy
OjpUb2tlbiBtX29yaWdpbjsKIH07CiAKLXR5cGVkZWYgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxT
dGF0ZW1lbnQ+PiBTdGF0ZW1lbnRzOwordXNpbmcgU3RhdGVtZW50cyA9IFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8U3RhdGVtZW50Pj47CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5p
dGlvbi5oCmluZGV4IDg3Y2M2MmYyMzU2Li5hOGM5OGU5OWI0YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0
cnVjdHVyZURlZmluaXRpb24uaApAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiV0hMU0xM
ZXhlci5oIgogI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRWxlbWVudC5oIgotI2luY2x1ZGUgIldI
TFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0zOSwxMSArMzks
MTAgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFN0cnVj
dHVyZURlZmluaXRpb24gOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBTdHJ1Y3R1cmVEZWZpbml0aW9u
IDogcHVibGljIE5hbWVkVHlwZSB7CiBwdWJsaWM6CiAgICAgU3RydWN0dXJlRGVmaW5pdGlvbihM
ZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIFN0cnVjdHVyZUVsZW1lbnRzJiYg
c3RydWN0dXJlRWxlbWVudHMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQot
ICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgICAgICA6IE5hbWVkVHlwZShXVEZN
b3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV9zdHJ1Y3R1cmVFbGVtZW50
cyhXVEZNb3ZlKHN0cnVjdHVyZUVsZW1lbnRzKSkKICAgICB7CiAgICAgfQpAQCAtNTMsMTcgKzUy
LDExIEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVEZWZpbml0aW9uKGNvbnN0IFN0cnVjdHVyZURl
ZmluaXRpb24mKSA9IGRlbGV0ZTsKICAgICBTdHJ1Y3R1cmVEZWZpbml0aW9uKFN0cnVjdHVyZURl
ZmluaXRpb24mJikgPSBkZWZhdWx0OwogCi0gICAgU3RydWN0dXJlRWxlbWVudHMmIHN0cnVjdHVy
ZUVsZW1lbnRzKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVFbGVtZW50czsgfQorICAgIGJvb2wgaXNT
dHJ1Y3R1cmVEZWZpbml0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9CisgICAgU3RydWN0dXJlRWxlbWVudHMmIHN0cnVjdHVyZUVsZW1lbnRzKCkgeyByZXR1cm4g
bV9zdHJ1Y3R1cmVFbGVtZW50czsgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29y
aWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwogICAgIFN0cnVjdHVyZUVsZW1lbnRzIG1fc3RydWN0
dXJlRWxlbWVudHM7CiB9OwogCkBAIC03Myw0ICs2Niw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9OQU1FRF9UWVBFKFN0cnVjdHVyZURlZmluaXRpb24s
IGlzU3RydWN0dXJlRGVmaW5pdGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVs
ZW1lbnQuaAppbmRleCAxNGJlNDFjNzI5OC4uNmE2NGIwOWMwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1
Y3R1cmVFbGVtZW50LmgKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNz
IFN0cnVjdHVyZUVsZW1lbnQgOiBwdWJsaWMgTm9kZSB7CiBwdWJsaWM6Ci0gICAgU3RydWN0dXJl
RWxlbWVudChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBz
dGQ6OnVuaXF1ZV9wdHI8VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1h
bnRpYz4gc2VtYW50aWMpCisgICAgU3RydWN0dXJlRWxlbWVudChMZXhlcjo6VG9rZW4mJiBvcmln
aW4sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+
JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgT3B0aW9uYWw8U2VtYW50aWM+IHNlbWFudGljKQogICAg
ICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX3F1YWxpZmllcnMo
V1RGTW92ZShxdWFsaWZpZXJzKSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkKQEAg
LTU1LDE4ICs1NSwyMCBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlRWxlbWVudChjb25zdCBTdHJ1
Y3R1cmVFbGVtZW50JikgPSBkZWxldGU7CiAgICAgU3RydWN0dXJlRWxlbWVudChTdHJ1Y3R1cmVF
bGVtZW50JiYpID0gZGVmYXVsdDsKIAotICAgIFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBl
OyB9CisgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29y
aWdpbjsgfQorICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAg
IGNvbnN0IFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIE9wdGlvbmFsPFNl
bWFudGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9CiAKIHByaXZhdGU6CiAg
ICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIFF1YWxpZmllcnMgbV9xdWFsaWZpZXJzOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX3R5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiBtX3R5cGU7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBPcHRpb25hbDxTZW1h
bnRpYz4gbV9zZW1hbnRpYzsKIH07CiAKLXR5cGVkZWYgVmVjdG9yPFN0cnVjdHVyZUVsZW1lbnQ+
IFN0cnVjdHVyZUVsZW1lbnRzOwordXNpbmcgU3RydWN0dXJlRWxlbWVudHMgPSBWZWN0b3I8U3Ry
dWN0dXJlRWxlbWVudD47CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZS5oCmluZGV4IGNmNGNiYzg4NzkwLi4yODQxZDk1MDhk
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFR5cGUuaApAQCAtNDIsMTUgKzQyLDE1IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgflR5
cGUoKSA9IGRlZmF1bHQ7CiAKLSAgICBUeXBlKGNvbnN0IFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBl
eHBsaWNpdCBUeXBlKGNvbnN0IFR5cGUmKSA9IGRlbGV0ZTsKICAgICBUeXBlKFR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgdmlydHVhbCBib29sIGlzVHlwZVJlZmVyZW5jZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQXJyYXlUeXBlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBUeXBlJiBvcGVyYXRvcj0oY29uc3QgVHlwZSYpID0g
ZGVsZXRlOworICAgIFR5cGUmIG9wZXJhdG9yPShUeXBlJiYpID0gZGVmYXVsdDsKIAotICAgIHZp
cnR1YWwgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBpc05hbWVkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIGlzVW5uYW1lZFR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc1Jlc29sdmFibGVUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogcHJp
dmF0ZToKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcAppbmRleCA3ZTU4MDFlM2I1Ni4uOTgw
ODY2NGQxZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcApAQCAtMjMsMTQgKzIzLDE0IEBA
CiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI3ByYWdtYSBvbmNl
Ci0KICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
V0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCiAKLSNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIgor
I2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDksNyArNDksNyBAQCBUeXBlQXJndW1lbnRz
IGNsb25lKGNvbnN0IFR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMpCiBUeXBlQXJndW1lbnQg
Y2xvbmUoY29uc3QgVHlwZUFyZ3VtZW50JiB0eXBlQXJndW1lbnQpCiB7CiAgICAgcmV0dXJuIFdU
Rjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShjb25zdCBDb25zdGFudEV4cHJlc3Npb24mIGNv
bnN0YW50RXhwcmVzc2lvbikgLT4gVHlwZUFyZ3VtZW50IHsKLSAgICAgICAgcmV0dXJuIGNvbnN0
YW50RXhwcmVzc2lvbjsKKyAgICAgICAgcmV0dXJuIGNvbnN0YW50RXhwcmVzc2lvbi5jbG9uZSgp
OwogICAgIH0sIFtdKGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxUeXBlUmVmZXJlbmNlPiYgdHlwZVJl
ZmVyZW5jZSkgLT4gVHlwZUFyZ3VtZW50IHsKICAgICAgICAgcmV0dXJuIHR5cGVSZWZlcmVuY2Ut
PmNsb25lVHlwZVJlZmVyZW5jZSgpOwogICAgIH0pLCB0eXBlQXJndW1lbnQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3Vt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBl
QXJndW1lbnQuaAppbmRleCBlMzg1ZDUwZDVlZi4uM2IwMzdiYTM1MWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVB
cmd1bWVudC5oCkBAIC00MCw4ICs0MCw4IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBUeXBl
UmVmZXJlbmNlOwogCi10eXBlZGVmIFZhcmlhbnQ8Q29uc3RhbnRFeHByZXNzaW9uLCBzdGQ6OnVu
aXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4+IFR5cGVBcmd1bWVudDsKLXR5cGVkZWYgVmVjdG9yPFR5
cGVBcmd1bWVudD4gVHlwZUFyZ3VtZW50czsKK3VzaW5nIFR5cGVBcmd1bWVudCA9IFZhcmlhbnQ8
Q29uc3RhbnRFeHByZXNzaW9uLCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4+OwordXNp
bmcgVHlwZUFyZ3VtZW50cyA9IFZlY3RvcjxUeXBlQXJndW1lbnQ+OwogCiBUeXBlQXJndW1lbnQg
Y2xvbmUoY29uc3QgVHlwZUFyZ3VtZW50Jik7CiBUeXBlQXJndW1lbnRzIGNsb25lKGNvbnN0IFR5
cGVBcmd1bWVudHMmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCmluZGV4IGY3MzYyOWUyOWIx
Li5lZDFjNDc1YTgyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCkBAIC0yOSw3ICsyOSw4
IEBACiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCi0j
aW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNs
dWRlICJXSExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDExICszOSwxMCBAQCBuYW1lc3BhY2UgV0hM
U0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgVHlwZURlZmluaXRpb24gOiBwdWJsaWMg
VHlwZSB7CitjbGFzcyBUeXBlRGVmaW5pdGlvbiA6IHB1YmxpYyBOYW1lZFR5cGUgewogcHVibGlj
OgotICAgIFR5cGVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFt
ZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlKQotICAgICAgICA6IG1fb3JpZ2lu
KFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKKyAgICBU
eXBlRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUpCisgICAgICAgIDogTmFtZWRUeXBl
KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92
ZSh0eXBlKSkKICAgICB7CiAgICAgfQpAQCAtNTIsMTggKzUyLDI0IEBAIHB1YmxpYzoKICAgICBU
eXBlRGVmaW5pdGlvbihjb25zdCBUeXBlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFR5cGVE
ZWZpbml0aW9uKFR5cGVEZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKIAotICAgIEFTVDo6VHlwZSYg
dHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBib29sIGlzVHlwZURlZmluaXRpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQorICAgIEFTVDo6VW5uYW1lZFR5cGUqIHR5cGUoKSB7
IHJldHVybiBtX3R5cGUuZ2V0KCk7IH0KKworICAgIGNvbnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNv
bnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIEFTU0VSVChtX3R5cGUpOworICAgICAgICByZXR1
cm4gbV90eXBlLT51bmlmeU5vZGUoKTsKKyAgICB9CisKKyAgICBUeXBlJiB1bmlmeU5vZGUoKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdHlwZSk7CisgICAgICAgIHJldHVybiBt
X3R5cGUtPnVuaWZ5Tm9kZSgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4g
bV9vcmlnaW47Ci0gICAgU3RyaW5nIG1fbmFtZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpU
eXBlPiBtX3R5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1fdHlw
ZTsKIH07CiAKIH0KQEAgLTcyLDQgKzc4LDYgQEAgcHJpdmF0ZToKIAogfQogCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoVHlwZURlZmluaXRpb24sIGlzVHlwZURlZmlu
aXRpb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNjg5YjRhNzdmOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZl
cmVuY2UuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5o
IgorCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworc3Rk
Ojp1bmlxdWVfcHRyPFR5cGVSZWZlcmVuY2U+IFR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luLCBOYW1lZFR5cGUmIHJlc29sdmVkVHlwZSkKK3sKKyAgICBUeXBlQXJndW1l
bnRzIHR5cGVBcmd1bWVudHM7CisgICAgaWYgKGlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocmVz
b2x2ZWRUeXBlKSkKKyAgICAgICAgdHlwZUFyZ3VtZW50cyA9IEFTVDo6Y2xvbmUoZG93bmNhc3Q8
TmF0aXZlVHlwZURlY2xhcmF0aW9uPihyZXNvbHZlZFR5cGUpLnR5cGVBcmd1bWVudHMoKSk7Cisg
ICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVSZWZlcmVuY2U+KFdURk1vdmUo
b3JpZ2luKSwgU3RyaW5nKHJlc29sdmVkVHlwZS5uYW1lKCkpLCBXVEZNb3ZlKHR5cGVBcmd1bWVu
dHMpKTsKKyAgICByZXN1bHQtPnNldFJlc29sdmVkVHlwZShyZXNvbHZlZFR5cGUpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVy
ZW5jZS5oCmluZGV4IDQ5NDQxZDhiNWM3Li4wMjg0MmY2ZjlkNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZl
cmVuY2UuaApAQCAtMjgsOCArMjgsOCBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRl
ICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xU
eXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDEwICsz
OCwxMiBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3MgVHlw
ZVJlZmVyZW5jZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIE5hbWVkVHlwZTsKKworY2xhc3MgVHlw
ZVJlZmVyZW5jZSA6IHB1YmxpYyBVbm5hbWVkVHlwZSB7CiBwdWJsaWM6CiAgICAgVHlwZVJlZmVy
ZW5jZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIFR5cGVBcmd1bWVudHMm
JiB0eXBlQXJndW1lbnRzKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAg
ICAgICAgOiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9uYW1lKFdU
Rk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlQXJndW1lbnRzKFdURk1vdmUodHlwZUFyZ3Vt
ZW50cykpCiAgICAgewpAQCAtNTIsMjQgKzU0LDQ1IEBAIHB1YmxpYzoKICAgICBUeXBlUmVmZXJl
bmNlKGNvbnN0IFR5cGVSZWZlcmVuY2UmKSA9IGRlbGV0ZTsKICAgICBUeXBlUmVmZXJlbmNlKFR5
cGVSZWZlcmVuY2UmJikgPSBkZWZhdWx0OwogCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxU
eXBlUmVmZXJlbmNlPiB3cmFwKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgTmFtZWRUeXBlJiByZXNv
bHZlZFR5cGUpOworCiAgICAgYm9vbCBpc1R5cGVSZWZlcmVuY2UoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CiAKKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0K
ICAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gbV90eXBlQXJndW1l
bnRzOyB9CisgICAgTmFtZWRUeXBlKiByZXNvbHZlZFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3Jl
c29sdmVkVHlwZTsgfQorCisgICAgY29uc3QgVHlwZSYgdW5pZnlOb2RlKCkgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Jlc29sdmVkVHlwZSk7CisgICAgICAgIHJldHVy
biBtX3Jlc29sdmVkVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgfQorCisgICAgVHlwZSYgdW5pZnlO
b2RlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Jlc29sdmVkVHlwZSk7Cisg
ICAgICAgIHJldHVybiBtX3Jlc29sdmVkVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2V0UmVzb2x2ZWRUeXBlKE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBlKQorICAgIHsK
KyAgICAgICAgbV9yZXNvbHZlZFR5cGUgPSAmcmVzb2x2ZWRUeXBlOworICAgIH0KIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxUeXBlUmVmZXJlbmNlPiBjbG9uZVR5cGVSZWZlcmVuY2UoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8VHlwZVJlZmVyZW5jZT4oTGV4
ZXI6OlRva2VuKG1fb3JpZ2luKSwgU3RyaW5nKG1fbmFtZSksIEFTVDo6Y2xvbmUobV90eXBlQXJn
dW1lbnRzKSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVSZWZlcmVuY2U+
KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhtX25hbWUpLCBBU1Q6OmNsb25lKG1fdHlw
ZUFyZ3VtZW50cykpOwogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgp
IGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgp
IGNvbnN0IG92ZXJyaWRlCiAgICAgewogICAgICAgICByZXR1cm4gY2xvbmVUeXBlUmVmZXJlbmNl
KCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBT
dHJpbmcgbV9uYW1lOwogICAgIFR5cGVBcmd1bWVudHMgbV90eXBlQXJndW1lbnRzOworICAgIE5h
bWVkVHlwZSogbV9yZXNvbHZlZFR5cGUgeyBudWxscHRyIH07CiB9OwogCiB9CkBAIC03OCw2ICsx
MDEsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQ
RShUeXBlUmVmZXJlbmNlLCBpc1R5cGVSZWZlcmVuY2UoKSkKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfVU5OQU1FRF9UWVBFKFR5cGVSZWZlcmVuY2UsIGlzVHlwZVJlZmVyZW5jZSgpKQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFVubmFtZWRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5lOWUzMjlmMTIzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKQEAgLTAsMCArMSw4
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNpbmNsdWRl
ICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKwor
Y2xhc3MgVW5uYW1lZFR5cGUgOiBwdWJsaWMgVHlwZSB7CitwdWJsaWM6CisgICAgVW5uYW1lZFR5
cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQorICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3Jp
Z2luKSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+VW5uYW1lZFR5cGUoKSA9IGRlZmF1
bHQ7CisKKyAgICBVbm5hbWVkVHlwZShjb25zdCBVbm5hbWVkVHlwZSYpID0gZGVsZXRlOworICAg
IFVubmFtZWRUeXBlKFVubmFtZWRUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNVbm5h
bWVkVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNUeXBlUmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVh
bCBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc1JlZmVyZW5jZVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
CisgICAgdmlydHVhbCBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCB7IHJldHVybiAqdGhp
czsgfQorICAgIHZpcnR1YWwgVHlwZSYgdW5pZnlOb2RlKCkgeyByZXR1cm4gKnRoaXM7IH0KKwor
ICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0ID0g
MDsKKworICAgIGNvbnN0IExleGVyOjpUb2tlbiYgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW47IH0KKworcHJpdmF0ZToKKyAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Cit9OworCit9
CisKK30KKworfQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5OQU1F
RF9UWVBFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0JFR0lOKFdlYkNvcmU6OldITFNMOjpBU1Q6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0
YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpXSExTTDo6QVNUOjpVbm5hbWVkVHlwZSYg
dHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZUEUoVW5uYW1lZFR5cGUs
IGlzVW5uYW1lZFR5cGUoKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50
ZWdlckxpdGVyYWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5i
MWNhOTYyZjc3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwCkBAIC0wLDAgKzEs
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oIgorCisjaW5jbHVk
ZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZl
cmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitu
YW1lc3BhY2UgQVNUIHsKKworaW50NjRfdCBVbnNpZ25lZEludGVnZXJMaXRlcmFsOjp2YWx1ZUZv
clNlbGVjdGVkVHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fdHlwZS5yZXNvbHZlZFR5cGUo
KSk7CisgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PFR5cGVSZWZlcmVuY2U+KCpt
X3R5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVk
VHlwZSgpKTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxOYXRp
dmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBy
ZXR1cm4gbmF0aXZlVHlwZURlY2xhcmF0aW9uLmZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdl
cigpKG1fdmFsdWUpOworfQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAppbmRleCA1OGQ2ZTIzMDc1ZS4uMWE2YzFlM2U4ODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgKQEAgLTI5LDYgKzI5
LDcgQEAKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4
ZXIuaCIKKyNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzksMjEgKzQwLDM3IEBAIG5hbWVzcGFjZSBBU1Qgewog
Y2xhc3MgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1Ymxp
YzoKICAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgdW5z
aWduZWQgdmFsdWUpCi0gICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCisgICAg
ICAgIDogRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4ob3JpZ2luKSkKKyAgICAgICAgLCBtX3R5cGUo
V1RGTW92ZShvcmlnaW4pLCB2YWx1ZSkKICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgIHsK
ICAgICB9CiAKICAgICB2aXJ0dWFsIH5VbnNpZ25lZEludGVnZXJMaXRlcmFsKCkgPSBkZWZhdWx0
OwogCi0gICAgZXhwbGljaXQgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbChjb25zdCBVbnNpZ25lZElu
dGVnZXJMaXRlcmFsJikgPSBkZWZhdWx0OworICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwoY29u
c3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpID0gZGVsZXRlOwogICAgIFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwoVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CiAKKyAgICBVbnNp
Z25lZEludGVnZXJMaXRlcmFsJiBvcGVyYXRvcj0oY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCYpID0gZGVsZXRlOworICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIG9wZXJhdG9yPShVbnNp
Z25lZEludGVnZXJMaXRlcmFsJiYpID0gZGVmYXVsdDsKKworICAgIFVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlJiB0eXBlKCkgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdW5zaWduZWQgdmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAKICAgICBib29sIGlzVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIFVuc2lnbmVk
SW50ZWdlckxpdGVyYWwgY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgVW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbCByZXN1bHQoTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgbV92YWx1ZSk7CisgICAg
ICAgIGlmIChyZXN1bHQubV90eXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICAgICAgcmVzdWx0
Lm1fdHlwZS5yZXNvbHZlKHJlc3VsdC5tX3R5cGUucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGludDY0X3QgdmFsdWVGb3JTZWxl
Y3RlZFR5cGUoKSBjb25zdDsKKwogcHJpdmF0ZToKKyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZSBtX3R5cGU7CiAgICAgdW5zaWduZWQgbV92YWx1ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWxUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uOTMzNjMyNGU4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJM
aXRlcmFsVHlwZS5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZS5oIgorCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7
CisKK1Vuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlw
ZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIHVuc2lnbmVkIHZhbHVlKQorICAgIDogbV92YWx1ZSh2
YWx1ZSkKKyAgICAsIG1fcHJlZmVycmVkVHlwZShzdGQ6Om1ha2VfdW5pcXVlPFR5cGVSZWZlcmVu
Y2U+KFdURk1vdmUob3JpZ2luKSwgU3RyaW5nKCJ1aW50IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCksIFR5cGVBcmd1bWVudHMoKSkpCit7Cit9CisKK1Vuc2lnbmVkSW50ZWdlckxpdGVy
YWxUeXBlOjp+VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKK2Jvb2wg
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNhblJlc29sdmUoY29uc3QgVHlwZSYgdHlwZSkg
Y29uc3QKK3sKKyAgICBpZiAoIWlzPE5hbWVkVHlwZT4odHlwZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxOYW1lZFR5cGU+KHR5cGUpOwor
ICAgIGlmICghaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8
TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpOworICAgIGlmICghbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLmlzSW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5pc1NpZ25lZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uY2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKCko
bV92YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dW5zaWduZWQgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNvbnZlcnNpb25Db3N0KGNvbnN0
IFVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgY29uc3QKK3sKKyAgICBpZiAobWF0Y2hlcyh1bm5h
bWVkVHlwZSwgKm1fcHJlZmVycmVkVHlwZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biAxOworfQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxU
eXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNp
Z25lZEludGVnZXJMaXRlcmFsVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi40OTU1NDZjYWRhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgK
QEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5cGUuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
V0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgVHlwZVJlZmVyZW5jZTsKKworY2xh
c3MgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUgOiBwdWJsaWMgUmVzb2x2YWJsZVR5cGUgewor
cHVibGljOgorICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKExleGVyOjpUb2tlbiYmIG9y
aWdpbiwgdW5zaWduZWQgdmFsdWUpOworCisgICAgdmlydHVhbCB+VW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbFR5cGUoKTsKKworICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKGNvbnN0IFVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlJikgPSBkZWxldGU7CisgICAgVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbFR5cGUoVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0OworCisgICAg
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmIG9wZXJhdG9yPShjb25zdCBVbnNpZ25lZEludGVn
ZXJMaXRlcmFsVHlwZSYpID0gZGVsZXRlOworICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBl
JiBvcGVyYXRvcj0oVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0OworCisg
ICAgYm9vbCBpc1Vuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgVHlwZVJlZmVyZW5jZSYgcHJlZmVycmVkVHlwZSgpIHsgcmV0
dXJuICptX3ByZWZlcnJlZFR5cGU7IH0KKworICAgIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBl
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoY29uc3QgVW5u
YW1lZFR5cGUmKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX3Zh
bHVlOworICAgIC8vIFRoaXMgaXMgYSB1bmlxdWVfcHRyIHRvIHJlc29sdmUgYSBjaXJjdWxhciBk
ZXBlbmRlbmN5IGJldHdlZW4KKyAgICAvLyBDb25zdGFudEV4cHJlc3Npb24gLT4gTGl0ZXJhbFR5
cGUgLT4gVHlwZVJlZmVyZW5jZSAtPiBUeXBlQXJndW1lbnRzIC0+IENvbnN0YW50RXhwcmVzc2lv
bgorICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUmVmZXJlbmNlPiBtX3ByZWZlcnJlZFR5cGU7Cit9
OworCit9CisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1JFU09MVkFC
TEVfVFlQRShVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSwgaXNVbnNpZ25lZEludGVnZXJMaXRl
cmFsVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xWYWx1ZS5oCmluZGV4IDZlMGVhOTFmYzFkLi5hZjI5YzgxMTg4
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xWYWx1ZS5oCkBAIC00Niw2ICs0Niw5IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBWYWx1
ZShjb25zdCBWYWx1ZSYpID0gZGVmYXVsdDsKICAgICBWYWx1ZShWYWx1ZSYmKSA9IGRlZmF1bHQ7
CiAKKyAgICBWYWx1ZSYgb3BlcmF0b3I9KGNvbnN0IFZhbHVlJikgPSBkZWZhdWx0OworICAgIFZh
bHVlJiBvcGVyYXRvcj0oVmFsdWUmJikgPSBkZWZhdWx0OworCiBwcml2YXRlOgogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFy
aWFibGVEZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCmluZGV4IGZmMDM2ODE5M2JkLi43ZjRhMzVi
NjBiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaApAQCAtNDQsNyArNDQs
NyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbiA6IHB1Ymxp
YyBWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgVmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4m
JiBvcmlnaW4sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpU
eXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIE9wdGlvbmFsPFNlbWFudGljPiYmIHNlbWFudGlj
LCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4mJiBpbml0aWFsaXplcikKKyAgICBWYXJpYWJs
ZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmll
cnMsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5h
bWUsIE9wdGlvbmFsPFNlbWFudGljPiYmIHNlbWFudGljLCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVz
c2lvbj4mJiBpbml0aWFsaXplcikKICAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CiAgICAgICAgICwgbV9xdWFsaWZpZXJzKFdURk1vdmUocXVhbGlmaWVycykpCiAgICAgICAgICwg
bV90eXBlKFdURk1vdmUodHlwZSkpCkBAIC01OSwyMSArNTksMjQgQEAgcHVibGljOgogICAgIFZh
cmlhYmxlRGVjbGFyYXRpb24oY29uc3QgVmFyaWFibGVEZWNsYXJhdGlvbiYpID0gZGVsZXRlOwog
ICAgIFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7
CiAKLSAgICBMZXhlcjo6VG9rZW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0K
KyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2lu
OyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAKLSAgICBUeXBlJiB0
eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gKm1fdHlwZTsgfQogICAgIE9wdGlvbmFsPFNlbWFudGljPiYgc2VtYW50aWMoKSB7
IHJldHVybiBtX3NlbWFudGljOyB9CiAgICAgRXhwcmVzc2lvbiogaW5pdGlhbGl6ZXIoKSB7IHJl
dHVybiBtX2luaXRpYWxpemVyLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2Vu
IG1fb3JpZ2luOwogICAgIFF1YWxpZmllcnMgbV9xdWFsaWZpZXJzOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVk
VHlwZT4gbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgT3B0aW9uYWw8U2VtYW50aWM+
IG1fc2VtYW50aWM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1faW5pdGlhbGl6
ZXI7CiB9OwogCit1c2luZyBWYXJpYWJsZURlY2xhcmF0aW9ucyA9IFZlY3RvcjxWYXJpYWJsZURl
Y2xhcmF0aW9uPjsKKwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVuY2UuaAppbmRl
eCAyYWU4MjhkNTI5NS4uZTM5ZWNmNWM1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVu
Y2UuaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUg
IldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFy
aWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1
ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIK
QEAgLTU1LDE5ICs1NSwyMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFZhcmlhYmxlUmVmZXJlbmNl
IHdyYXAoVmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKICAgICB7CiAg
ICAgICAgIFZhcmlhYmxlUmVmZXJlbmNlIHJlc3VsdChMZXhlcjo6VG9rZW4odmFyaWFibGVEZWNs
YXJhdGlvbi5vcmlnaW4oKSkpOwotICAgICAgICByZXN1bHQubV92YXJpYWJsZSA9IHsgJnZhcmlh
YmxlRGVjbGFyYXRpb24gfTsKKyAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSAmdmFyaWFibGVE
ZWNsYXJhdGlvbjsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBzdGF0aWMg
VmFyaWFibGVSZWZlcmVuY2Ugd3JhcChBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJiBhbm9u
eW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKQorICAgIGJvb2wgaXNWYXJpYWJsZVJlZmVyZW5jZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyYgbmFtZSgpIHsg
cmV0dXJuIG1fbmFtZTsgfQorCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiogdmFyaWFibGUoKSB7
IHJldHVybiBtX3ZhcmlhYmxlOyB9CisKKyAgICB2b2lkIHNldFZhcmlhYmxlKFZhcmlhYmxlRGVj
bGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgewotICAgICAgICBWYXJpYWJsZVJl
ZmVyZW5jZSByZXN1bHQoTGV4ZXI6OlRva2VuKGFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24u
b3JpZ2luKCkpKTsKLSAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSB7ICZhbm9ueW1vdXNWYXJp
YWJsZURlY2xhcmF0aW9uIH07Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIG1fdmFy
aWFibGUgPSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKICAgICB9CiAKLSAgICBib29sIGlzVmFyaWFi
bGVSZWZlcmVuY2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KIHByaXZhdGU6
CiAgICAgVmFyaWFibGVSZWZlcmVuY2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQogICAgICAgICA6
IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQpAQCAtNzUsNyArNzcsNyBAQCBwcml2YXRlOgog
ICAgIH0KIAogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgT3B0aW9uYWw8VmFyaWFudDxWYXJpYWJs
ZURlY2xhcmF0aW9uKiwgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbio+PiBtX3ZhcmlhYmxl
OworICAgIFZhcmlhYmxlRGVjbGFyYXRpb24qIG1fdmFyaWFibGU7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGlj
YXRlRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi42ZDVlZjM3NTY3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3Bw
CkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25z
LmgiCisKKyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldI
TFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAi
V0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNl
IFdITFNMIHsKKworYm9vbCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJiBw
cm9ncmFtKQoreworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbj4+IGZ1bmN0aW9uczsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5p
dGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAgICBmdW5jdGlvbnMu
YXBwZW5kKCpmdW5jdGlvbkRlZmluaXRpb24pOworICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKKyAg
ICAgICAgZnVuY3Rpb25zLmFwcGVuZCgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisKKyAg
ICBzdGQ6OnNvcnQoZnVuY3Rpb25zLmJlZ2luKCksIGZ1bmN0aW9ucy5lbmQoKSwgW10oY29uc3Qg
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBhLCBjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24mIGIpIC0+IGJvb2wgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RkOjpt
aW4oYS5uYW1lKCkubGVuZ3RoKCksIGIubmFtZSgpLmxlbmd0aCgpKTsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoYS5uYW1lKClbaV0gPCBiLm5hbWUoKVtpXSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChhLm5hbWUoKVtpXSA+IGIubmFtZSgpW2ldKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYS5u
YW1lKCkubGVuZ3RoKCkgPCBiLm5hbWUoKS5sZW5ndGgoKTsKKyAgICB9KTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHNp
emVfdCBqID0gaSArIDE7IGogPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpICE9IGZ1bmN0aW9uc1tqXS5nZXQoKS5uYW1l
KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uPihmdW5jdGlvbnNbaV0uZ2V0KCkpICYmIGlzPEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oZnVuY3Rpb25zW2pdLmdldCgpKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1l
dGVycygpLnNpemUoKSAhPSBmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0u
Z2V0KCkuaXNDYXN0KCkpIHsKKyAgICAgICAgICAgICAgICBib29sIHNhbWUgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCkudHlwZSgpLCBmdW5j
dGlvbnNbal0uZ2V0KCkudHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgc2FtZSA9IGZhbHNl
OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBrID0gMDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2sp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSwgZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMo
KVtrXS50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmIChzYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJvb2wgc2FtZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBmdW5jdGlvbnNbaV0uZ2V0KCku
cGFyYW1ldGVycygpLnNpemUoKTsgKytrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghbWF0
Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSwgZnVuY3Rpb25z
W2pdLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzYW1lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
c2FtZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUo
KSA9PSAib3BlcmF0b3ImW10iICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6
ZSgpID09IDIKKyAgICAgICAgICAgICYmIGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihmdW5j
dGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpIHsKKyAgICAgICAgICAgIGF1
dG8mIHR5cGUgPSBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLnR5cGUoKTsKKyAg
ICAgICAgICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGF1dG8qIHJlc29sdmVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5j
ZT4odHlwZSkucmVzb2x2ZWRUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqcmVzb2x2ZWRUeXBlKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KCpyZXNvbHZlZFR5cGUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVpbnQiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChm
dW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiICYmIGZ1bmN0aW9u
c1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEKKyAgICAgICAgICAgICYmIChpczxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsw
XS50eXBlKCkpCisgICAgICAgICAgICB8fCBpczxBU1Q6OkFycmF5VHlwZT4oZnVuY3Rpb25zW2ld
LmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5hbWUoKSA9PSAib3BlcmF0
b3I9PSIKKyAgICAgICAgICAgICYmIGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6
ZSgpID09IDIKKyAgICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25z
W2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpCisgICAgICAgICAgICAmJiBpczxBU1Q6
OlJlZmVyZW5jZVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgp
KQorICAgICAgICAgICAgJiYgbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygp
WzBdLnR5cGUoKSwgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ZWNlZTc4MmM1ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tE
dXBsaWNhdGVGdW5jdGlvbnMuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworYm9vbCBjaGVj
a0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJik7CisKK30KKworfQorCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xD
aGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hl
Y2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZiNTJiZWJl
MWNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDaGVja2VyLmNwcApAQCAtMCwwICsxLDgyMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xDaGVj
a2VyLmgiCisKKyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUg
IldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgorI2lu
Y2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZl
clR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNM
UHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5cGUuaCIKKyNpbmNsdWRlICJX
SExTTFJlc29sdmVPdmVybG9hZEltcGwuaCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmluZ1R5cGUu
aCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQT0RDaGVja2VyIDog
cHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIFBPRENoZWNrZXIoKSA9IGRlZmF1bHQ7CisK
KyAgICB2aXJ0dWFsIH5QT0RDaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsK
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRp
dmVUeXBlRGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5pc051bWJlcigpCisgICAgICAgICAgICAmJiAhbmF0aXZlVHlwZURlY2xh
cmF0aW9uLmlzVmVjdG9yKCkKKyAgICAgICAgICAgICYmICFuYXRpdmVUeXBlRGVjbGFyYXRpb24u
aXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgfQorCisgICAgdm9pZCB2
aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pIG92ZXJy
aWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsK
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0
aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQodHlwZURlZmluaXRp
b24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KGFycmF5VHlwZSk7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJikgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIHNldEVycm9yKCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBzZXRFcnJvcigpOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkp
OworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXROYW1lZFR5cGUoKnR5cGVSZWZlcmVuY2UucmVz
b2x2ZWRUeXBlKCkpOworICAgIH0KK307CisKK3N0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIoKQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCitzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiByZXNv
bHZlV2l0aE9wZXJhdG9yTGVuZ3RoKCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMu
CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKK30KKworc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4g
cmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lv
biwgY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiB0
eXBlcywgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3sKKyAgICBpZiAoY2FsbEV4cHJl
c3Npb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIgJiYgdHlwZXMuc2l6ZSgpID09IDIpIHsKKyAg
ICAgICAgYm9vbCBmaXJzdEFyZ3VtZW50SXNBcnJheVJlZiA9IFdURjo6dmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBl
KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZT4oKnVubmFtZWRUeXBlKTsKKyAgICAgICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9KSwg
dHlwZXNbMF0uZ2V0KCkpOworICAgICAgICBib29sIHNlY29uZEFyZ3VtZW50SXNVaW50ID0gV1RG
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVk
VHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVz
KCp1bm5hbWVkVHlwZSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICAgICAgfSwgWyZdKFJl
ZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBi
b29sIHsKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2
YWJsZVR5cGUoKS5jYW5SZXNvbHZlKGludHJpbnNpY3MudWludFR5cGUoKSk7CisgICAgICAgIH0p
LCB0eXBlc1sxXS5nZXQoKSk7CisgICAgICAgIGlmIChmaXJzdEFyZ3VtZW50SXNBcnJheVJlZiAm
JiBzZWNvbmRBcmd1bWVudElzVWludCkKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZlV2l0aE9w
ZXJhdG9yQW5kZXJJbmRleGVyKCk7CisgICAgfSBlbHNlIGlmIChjYWxsRXhwcmVzc2lvbi5uYW1l
KCkgPT0gIm9wZXJhdG9yLmxlbmd0aCIgJiYgdHlwZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAg
Ym9vbCBpc0FjY2VwdGFibGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oc3RkOjp1
bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAg
ICAgICAgICByZXR1cm4gaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KCp1bm5hbWVkVHlwZSkg
fHwgaXM8QVNUOjpBcnJheVR5cGU+KCp1bm5hbWVkVHlwZSk7CisgICAgICAgIH0sIFtdKFJlZjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfSksIHR5cGVzWzBdLmdldCgpKTsKKyAgICAgICAgaWYgKGlzQWNjZXB0
YWJsZSkKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKCk7Cisg
ICAgfSBlbHNlIGlmIChjYWxsRXhwcmVzc2lvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iICYmIHR5
cGVzLnNpemUoKSA9PSAyKSB7CisgICAgICAgIGF1dG8gaXNBY2NlcHRhYmxlID0gW10oUmVzb2x2
aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gV1RG
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRU
eXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBpczxB
U1Q6OlJlZmVyZW5jZVR5cGU+KCp1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICB9LCBbXShSZWY8
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9v
bCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihyZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAgICAgICB9KSwg
cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpc0FjY2VwdGFibGUodHlw
ZXNbMF0uZ2V0KCkpICYmIGlzQWNjZXB0YWJsZSh0eXBlc1sxXS5nZXQoKSkpCisgICAgICAgICAg
ICByZXR1cm4gcmVzb2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKCk7CisgICAgfQorICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2NsYXNzIENoZWNrZXIgOiBwdWJsaWMgVmlzaXRvciB7
CitwdWJsaWM6CisgICAgQ2hlY2tlcihjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBQcm9n
cmFtJiBwcm9ncmFtKQorICAgICAgICA6IG1faW50cmluc2ljcyhpbnRyaW5zaWNzKQorICAgICAg
ICAsIG1fcHJvZ3JhbShwcm9ncmFtKQorICAgIHsKKyAgICB9CisKKyAgICB+Q2hlY2tlcigpID0g
ZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGZvciAoYXV0byYgdHlwZURlZmluaXRpb24gOiBwcm9ncmFtLnR5cGVEZWZp
bml0aW9ucygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlRGVmaW5pdGlv
bik7CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3Ry
dWN0dXJlRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqc3Ry
dWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0
aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpCisgICAgICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoKmVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIGZvciAoYXV0
byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25z
KCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKm5hdGl2ZVR5cGVEZWNsYXJhdGlv
bik7CisKKyAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1
bmN0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZnVu
Y3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKQorICAgICAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgYm9vbCBjaGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
KmZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CisgICAgICAgIGNhc2UgQVNU
OjpGdW5jdGlvbkRlZmluaXRpb246OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgICAg
ICByZXR1cm4gIW1fdmVydGV4RW50cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1l
KCkpLmlzTmV3RW50cnk7CisgICAgICAgIGNhc2UgQVNUOjpGdW5jdGlvbkRlZmluaXRpb246OkVu
dHJ5UG9pbnRUeXBlOjpGcmFnbWVudDoKKyAgICAgICAgICAgIHJldHVybiAhbV9mcmFnbWVudEVu
dHJ5UG9pbnRzLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKS5pc05ld0VudHJ5OworICAg
ICAgICBjYXNlIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0
ZToKKyAgICAgICAgICAgIHJldHVybiAhbV9jb21wdXRlRW50cnlQb2ludHMuYWRkKGZ1bmN0aW9u
RGVmaW5pdGlvbi5uYW1lKCkpLmlzTmV3RW50cnk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBi
b29sIGNoZWNrU2VtYW50aWNzKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmlu
aXRpb24pCisgICAgeworICAgICAgICBhdXRvIGVudHJ5UG9pbnRJdGVtcyA9IGdhdGhlckVudHJ5
UG9pbnRJdGVtcyhtX2ludHJpbnNpY3MsIGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIGlm
ICghZW50cnlQb2ludEl0ZW1zKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBh
dXRvIGlucHV0SXRlbXMgPSBXVEZNb3ZlKGVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzKTsKKyAgICAg
ICAgYXV0byBvdXRwdXRJdGVtcyA9IFdURk1vdmUoZW50cnlQb2ludEl0ZW1zLT5vdXRwdXRzKTsK
KworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGNoZWNrRHVwbGljYXRlU2VtYW50aWNzID0g
WyZdKGNvbnN0IFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGl0ZW1zKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGZhc3RlciB0aGFuIE8obl4yKS4KKyAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGl0ZW1zLnNpemUo
KTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXNbaV0uc2VtYW50aWMg
PT0gaXRlbXNbal0uc2VtYW50aWMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICgh
Y2hlY2tEdXBsaWNhdGVTZW1hbnRpY3MoaW5wdXRJdGVtcykpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFjaGVja0R1cGxpY2F0ZVNlbWFudGljcyhvdXRw
dXRJdGVtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byBjaGVja1NlbWFudGljVHlwZXMgPSBbJl0oY29uc3Qg
VmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAg
IGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWNj
ZXB0YWJsZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgQVNUOjpCYXNl
U2VtYW50aWMmIHNlbWFudGljKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzZW1hbnRpYy5pc0FjY2VwdGFibGVUeXBlKGl0ZW0udW5uYW1lZFR5cGUsIG1faW50cmlu
c2ljcyk7CisgICAgICAgICAgICAgICAgICAgIH0pLCBpdGVtLnNlbWFudGljKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFhY2NlcHRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNUeXBlcyhp
bnB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBp
ZiAoIWNoZWNrU2VtYW50aWNUeXBlcyhvdXRwdXRJdGVtcykpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBjaGVj
a1NlbWFudGljRm9yU2hhZGVyVHlwZSA9IFsmXShjb25zdCBWZWN0b3I8RW50cnlQb2ludEl0ZW0+
JiBpdGVtcywgQVNUOjpCYXNlU2VtYW50aWM6OlNoYWRlckl0ZW1EaXJlY3Rpb24gZGlyZWN0aW9u
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtcykgewor
ICAgICAgICAgICAgICAgICAgICBhdXRvIGFjY2VwdGFibGUgPSBXVEY6OnZpc2l0KFdURjo6bWFr
ZVZpc2l0b3IoWyZdKGNvbnN0IEFTVDo6QmFzZVNlbWFudGljJiBzZW1hbnRpYykgLT4gYm9vbCB7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VtYW50aWMuaXNBY2NlcHRhYmxlRm9y
U2hhZGVySXRlbURpcmVjdGlvbihkaXJlY3Rpb24sIGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAg
ICAgICAgICAgICAgICAgIH0pLCBpdGVtLnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFhY2NlcHRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNGb3JTaGFkZXJUeXBlKGlucHV0
SXRlbXMsIEFTVDo6QmFzZVNlbWFudGljOjpTaGFkZXJJdGVtRGlyZWN0aW9uOjpJbnB1dCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFjaGVja1NlbWFu
dGljRm9yU2hhZGVyVHlwZShvdXRwdXRJdGVtcywgQVNUOjpCYXNlU2VtYW50aWM6OlNoYWRlckl0
ZW1EaXJlY3Rpb246Ok91dHB1dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBjaGVja1BPRERhdGEgPSBbJl0o
Y29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMpIC0+IGJvb2wgeworICAgICAgICAg
ICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgICAgICAgICAgICAgIFBP
RENoZWNrZXIgcG9kQ2hlY2tlcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9p
bnRlclR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9k
Q2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShkb3duY2FzdDxBU1Q6OlBvaW50
ZXJUeXBlPihpdGVtLnVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KGl0ZW0udW5uYW1lZFR5
cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlz
aXRVbm5hbWVkVHlwZShkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oaXRlbS51bm5h
bWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlz
PEFTVDo6QXJyYXlUeXBlPihpdGVtLnVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUoZG93bmNhc3Q8QVNU
OjpBcnJheVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpLnR5cGUoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICBpZiAocG9kQ2hlY2tlci5lcnJvcigpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoIWNoZWNrUE9ERGF0YShpbnB1
dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAo
IWNoZWNrUE9ERGF0YShvdXRwdXRJdGVtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBj
aGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0
aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIGVudW0gY2xhc3MgQ2hlY2tLaW5kIHsKKyAg
ICAgICAgICAgIEluZGV4LAorICAgICAgICAgICAgRG90CisgICAgICAgIH07CisKKyAgICAgICAg
YXV0byBjaGVja0dldHRlciA9IFsmXShDaGVja0tpbmQga2luZCkgLT4gYm9vbCB7CisgICAgICAg
ICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6Oklu
ZGV4ID8gMiA6IDE7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGZ1bmN0aW9uRGVmaW5p
dGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgaWYg
KGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBjaGVja1NldHRlciA9
IFsmXShDaGVja0tpbmQga2luZCkgLT4gYm9vbCB7CisgICAgICAgICAgICBzaXplX3QgbnVtRXhw
ZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6OkluZGV4ID8gMyA6IDI7CisgICAg
ICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVt
RXhwZWN0ZWRQYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRVbmlmeU5vZGUgPSBmdW5jdGlvbkRlZmluaXRpb24u
cGFyYW1ldGVycygpWzBdLnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGlmIChpczxB
U1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKSkgeworICAgICAgICAgICAg
ICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RB
cmd1bWVudFVuaWZ5Tm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9uRGVmaW5pdGlvbi50
eXBlKCksIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAvLyBGSVhNRTogQWRkIGZ1bmN0
aW9uIHJlc29sdXRpb24gY29kZS4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
OworCisgICAgICAgIGF1dG8gY2hlY2tBbmRlciA9IFsmXShDaGVja0tpbmQga2luZCkgLT4gYm9v
bCB7CisgICAgICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBD
aGVja0tpbmQ6OkluZGV4ID8gMiA6IDE7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBh
dXRvJiB1bmlmeU5vZGUgPSBmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpLnVuaWZ5Tm9kZSgpOwor
ICAgICAgICAgICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGF1dG8mIHVu
bmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5w
YXJhbWV0ZXJzKClbMF0udHlwZSgpLnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICgh
aXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzPEFT
VDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSAmJiAhaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfTsKKworICAgICAgICBpZiAoIWZ1bmN0aW9uRGVmaW5pdGlvbi5pc09wZXJhdG9yKCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5p
c0Nhc3QoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoZnVuY3Rpb25E
ZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IrKyIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9u
RGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLS0iKSB7CisgICAgICAgICAgICBpZiAoZnVu
Y3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCksIGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVy
YXRvcisiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVy
YXRvci0iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgIT0gMQorICAgICAgICAgICAgICAgICYmIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpICE9IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yKiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLyIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yJSIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yJiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yfCIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yXiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPDwiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpID09ICJvcHJlYXRvcj4+IikgeworICAgICAgICAgICAgaWYgKGZ1bmN0
aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IDIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yfiIpIHsKKyAgICAg
ICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSAxKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVy
YXRvcj09IgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3I8IgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3I8PSIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9w
ZXJhdG9yPiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9w
ZXJhdG9yPj0iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRl
cnMoKS5zaXplKCkgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSwgbV9pbnRyaW5zaWNz
LmJvb2xUeXBlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24u
bmFtZSgpID09ICJvcGVyYXRvcltdIikgeworICAgICAgICAgICAgaWYgKCFjaGVja0dldHRlcihD
aGVja0tpbmQ6OkluZGV4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0
aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXT0iKSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrU2V0
dGVyKENoZWNrS2luZDo6SW5kZXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIpIHsKKyAgICAgICAgICAgIGlmICghY2hl
Y2tBbmRlcihDaGVja0tpbmQ6OkluZGV4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rp
b25EZWZpbml0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvci4iKSkgeworICAgICAgICAg
ICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkuZW5kc1dpdGgoIj0iKSkgeworICAgICAg
ICAgICAgICAgIGlmICghY2hlY2tTZXR0ZXIoQ2hlY2tLaW5kOjpEb3QpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGlmICghY2hlY2tHZXR0ZXIoQ2hlY2tLaW5kOjpEb3QpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5zdGFydHNX
aXRoKCJvcGVyYXRvciYuIikpIHsKKyAgICAgICAgICAgIGlmICghY2hlY2tBbmRlcihDaGVja0tp
bmQ6OkRvdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2lu
dFR5cGUoKSkgeworICAgICAgICAgICAgaWYgKCFjaGVja1NoYWRlclR5cGUoZnVuY3Rpb25EZWZp
bml0aW9uKSkgeworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjaGVja1NlbWFudGljcyhm
dW5jdGlvbkRlZmluaXRpb24pKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFjaGVja09wZXJhdG9yT3ZlcmxvYWQoZnVuY3Rpb25EZWZpbml0aW9uKSkgeworICAgICAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24pOworICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlv
bikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBl
KGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworCisgICAgICAgIGF1dG8mIGJhc2VUeXBl
ID0gZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKS51bmlmeU5vZGUoKTsKKworICAgICAgICBp
ZiAoIWlzPEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VUeXBlKSkgeworICAgICAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvJiB1bm5h
bWVkQmFzZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VUeXBlKTsKKyAgICAgICAg
aWYgKCFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRCYXNlKSkgeworICAgICAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRv
JiB0eXBlUmVmZXJlbmNlQmFzZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1l
ZEJhc2UpOworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkp
OworICAgICAgICBpZiAoIWlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVy
ZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVy
ZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5pc0ludCgpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBlbnVtZXJhdGlvbk1lbWJlcnMgPSBlbnVt
ZXJhdGlvbkRlZmluaXRpb24uZW51bWVyYXRpb25NZW1iZXJzKCk7CisKKyAgICAgICAgZm9yIChh
dXRvJiBtZW1iZXIgOiBlbnVtZXJhdGlvbk1lbWJlcnMpIHsKKyAgICAgICAgICAgIGlmICghbWVt
YmVyLmdldCgpLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
ICAgIGJvb2wgc3VjY2VzczsKKyAgICAgICAgICAgIG1lbWJlci5nZXQoKS52YWx1ZSgpLT52aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShhdXRvJiB2YWx1ZSkgeworICAgICAgICAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9
IG1fdHlwZU1hcC5maW5kKCZ2YWx1ZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXJhdG9y
ICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFdURjo6dmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRj
aGVzKCp1bm5hbWVkVHlwZSwgZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICAgICAgICAgICAg
ICB9LCBbJl0oUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UmIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+
KG1hdGNoQW5kQ29tbWl0KGVudW1lcmF0aW9uRGVmaW5pdGlvbiwgcmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UucmVzb2x2YWJsZVR5cGUoKSkpOworICAgICAgICAgICAgICAgIH0pLCBpdGVyYXRvci0+
dmFsdWUpOworICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7Cisg
ICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnQ2NF90IG5leHRWYWx1ZSA9IDA7Cisg
ICAgICAgIGZvciAoYXV0byYgbWVtYmVyIDogZW51bWVyYXRpb25NZW1iZXJzKSB7CisgICAgICAg
ICAgICBpZiAobWVtYmVyLmdldCgpLnZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBpbnQ2NF90
IHZhbHVlOworICAgICAgICAgICAgICAgIG1lbWJlci5nZXQoKS52YWx1ZSgpLT52aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgewor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGludGVnZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0
ZWRUeXBlKCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWVGb3JTZWxlY3RlZFR5cGUoKTsKKyAgICAg
ICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51
bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfSwgWyZd
KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
IH0pKTsKKyAgICAgICAgICAgICAgICBuZXh0VmFsdWUgPSBuYXRpdmVUeXBlRGVjbGFyYXRpb24u
c3VjY2Vzc29yKCkodmFsdWUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBtZW1iZXIuZ2V0KCkuc2V0VmFsdWUoQVNUOjpDb25zdGFudEV4cHJlc3Npb24oQVNUOjpJbnRl
Z2VyTGl0ZXJhbChMZXhlcjo6VG9rZW4obWVtYmVyLmdldCgpLm9yaWdpbigpKSwgbmV4dFZhbHVl
KSkpOworICAgICAgICAgICAgICAgIG5leHRWYWx1ZSA9IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
dWNjZXNzb3IoKShuZXh0VmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnVtZXJhdGlvbk1lbWJlcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGF1dG8mIG1lbWJlciA9IGVudW1lcmF0aW9uTWVtYmVyc1tpXS5nZXQo
KTsKKyAgICAgICAgICAgIEFTU0VSVChtZW1iZXIudmFsdWUoKSk7CisgICAgICAgICAgICBpbnQ2
NF90IHZhbHVlOworICAgICAgICAgICAgbWVtYmVyLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAg
ICAgICAgICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICAgICAgfSwg
WyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkg
eworICAgICAgICAgICAgICAgIHZhbHVlID0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgp
OworICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExp
dGVyYWwmKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVz
c2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikgeworICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IGkgKyAxOyBqIDwgZW51bWVyYXRpb25NZW1iZXJzLnNpemUoKTsgKytqKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgb3RoZXJNZW1iZXIgPSBlbnVtZXJhdGlvbk1lbWJlcnNbal0uZ2V0
KCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTWVtYmVyLnZhbHVlKCkpOworICAgICAg
ICAgICAgICAgIGJvb2wgZmFpbCA9IGZhbHNlOworICAgICAgICAgICAgICAgIG90aGVyTWVtYmVy
LnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwm
IGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgIGZhaWwgPSB2YWx1ZSA9PSBp
bnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZmFpbCA9IHZhbHVlID09IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsK
KyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmKSB7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0sIFsmXShB
U1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
fSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Um
KSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICBpZiAoZmFpbCkgeworICAgICAgICAgICAgICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYm9vbCBmb3VuZFpl
cm8gPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvJiBtZW1iZXIgOiBlbnVtZXJhdGlvbk1lbWJl
cnMpIHsKKyAgICAgICAgICAgIEFTU0VSVChtZW1iZXIuZ2V0KCkudmFsdWUoKSk7CisgICAgICAg
ICAgICBtZW1iZXIuZ2V0KCkudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNU
OjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAo
aW50ZWdlckxpdGVyYWwudmFsdWUoKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBmb3VuZFpl
cm8gPSB0cnVlOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIGlmICh1bnNpZ25l
ZEludGVnZXJMaXRlcmFsLnZhbHVlKCkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgZm91bmRa
ZXJvID0gdHJ1ZTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0sIFsmXShB
U1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25z
dGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIWZvdW5kWmVybykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpU
eXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNT
RVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh0eXBlUmVmZXJlbmNlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1w
bGVtZW50IG1lCisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNz
aW9uJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUKKyAg
ICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpIG92
ZXJyaWRlCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lCisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYpIG92ZXJyaWRlCisgICAg
eworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lCisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IG1lCisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24mKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCBtZQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNz
aW9uJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUKKyAg
ICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBtZQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpSZXR1cm4m
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtZQorICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICAvLyBGb2xsb3dpbmcgcG9pbnRlciB0eXBlcyBjYW4gY2F1c2UgaW5maW5pdGUgbG9vcHMg
YmVjYXVzZSBvZiBkYXRhIHN0cnVjdHVyZXMKKyAgICAgICAgLy8gbGlrZSBsaW5rZWQgbGlzdHMu
CisgICAgICAgIC8vIEZJWE1FOiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW1w
dHkKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJikgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZvbGxvd2luZyBhcnJheSByZWZlcmVuY2UgdHlwZXMg
Y2FuIGNhdXNlIGluZmluaXRlIGxvb3BzIGJlY2F1c2Ugb2YgZGF0YQorICAgICAgICAvLyBzdHJ1
Y3R1cmVzIGxpa2UgbGlua2VkIGxpc3RzLgorICAgICAgICAvLyBGSVhNRTogTWFrZSBzdXJlIHRo
aXMgZnVuY3Rpb24gc2hvdWxkIGJlIGVtcHR5CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGF1dG8gcmVmID0gYWRvcHRSZWYoKm5ldyBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShpbnRlZ2Vy
TGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRk
KCZpbnRlZ2VyTGl0ZXJhbCwgV1RGTW92ZShyZWYpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChh
ZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gcmVmID0gYWRvcHRSZWYoKm5ldyBSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZSh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnR5cGUoKSkpOworICAgICAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJnVuc2lnbmVkSW50ZWdlckxpdGVyYWwsIFdU
Rk1vdmUocmVmKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYg
ZmxvYXRMaXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byByZWYgPSBhZG9wdFJl
ZigqbmV3IFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKGZsb2F0TGl0ZXJhbC50eXBlKCkpKTsKKyAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZmbG9hdExpdGVyYWwsIFdURk1v
dmUocmVmKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNO
ZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxs
TGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gcmVmID0gYWRvcHRSZWYoKm5l
dyBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShudWxsTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZudWxsTGl0ZXJhbCwgV1RGTW92ZShyZWYp
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5M
aXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVN
YXAuYWRkKCZib29sZWFuTGl0ZXJhbCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihib29sZWFuTGl0ZXJhbC5vcmlnaW4oKSksIG1faW50cmluc2ljcy5ib29sVHlwZSgpKSk7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0
aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJl
ZmVyZW5jZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChjb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7Cisg
ICAgICAgIGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9ICpjb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbkRlZmluaXRpb24oKTsKKyAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZjb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5vcmlnaW4o
KSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJl
c3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNU
OjpMb2dpY2FsTm90RXhwcmVzc2lvbiYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IG1lCisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxFeHBy
ZXNzaW9uJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUK
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtZQorICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpXaGlsZUxvb3AmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IElt
cGxlbWVudCBtZQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYpIG92
ZXJyaWRlCisgICAgeworICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1lCisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBtZQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hT
dGF0ZW1lbnQmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBt
ZQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtZQorICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IG1lCisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNh
bGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZv
ciAoYXV0byYgYXJndW1lbnQgOiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkKKyAgICAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqYXJndW1lbnQpOworICAgICAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gdHlwZXM7CisgICAgICAgIHR5cGVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoY2FsbEV4cHJlc3Npb24uYXJndW1lbnRzKCkuc2l6ZSgpKTsK
KyAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygp
KSB7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoYXJndW1lbnQu
Z2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7
CisgICAgICAgICAgICB0eXBlcy51bmNoZWNrZWRBcHBlbmQoaXRlcmF0b3ItPnZhbHVlKTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBGSVhNRTogVmlzaXQgdGhlIHJldHVybiB0eXBlIG9uY2UgQ2Fs
bEV4cHJlc3Npb246OnNldENhc3REYXRhKCkgaXMgaW1wbGVtZW50ZWQuCisKKyAgICAgICAgQVNT
RVJUKGNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKTsKKyAgICAgICAgYXV0byogZnVuY3Rp
b24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoKmNhbGxFeHByZXNzaW9uLm92ZXJsb2Fk
cygpLCB0eXBlcyk7CisgICAgICAgIGlmICghZnVuY3Rpb24pIHsKKyAgICAgICAgICAgIGlmIChh
dXRvIG5ld0Z1bmN0aW9uID0gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihjYWxsRXhwcmVzc2lvbiwg
dHlwZXMsIG1faW50cmluc2ljcykpIHsKKyAgICAgICAgICAgICAgICBtX3Byb2dyYW0uYXBwZW5k
KFdURk1vdmUoKm5ld0Z1bmN0aW9uKSk7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBtX3By
b2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5sYXN0KCkuZ2V0KCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZ1bmN0aW9uKSB7CisgICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbi0+cGFyYW1ldGVycygpLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoZnVu
Y3Rpb24tPnBhcmFtZXRlcnMoKVtpXS50eXBlKCksIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5y
ZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgICAgICAgICB9KSwgdHlwZXNbaV0uZ2V0KCkpOworICAg
ICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBjYWxsRXhwcmVzc2lvbi5zZXRGdW5jdGlvbigqZnVuY3Rpb24pOworCisgICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmY2FsbEV4cHJlc3Npb24sIGZ1bmN0aW9uLT50eXBl
KCkuY2xvbmUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7CisgICAgfQorCitwcml2YXRlOgorCisgICAgLypjbGFzcyBSZXNvbHZpbmdU
eXBlSGFzaFRyYWl0cyA6IHB1YmxpYyBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8UmVzb2x2aW5nVHlw
ZT4KKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgUmVzb2x2aW5nVHlwZSYgZW1w
dHlWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFJlc29sdmluZ1R5cGU+IGVtcHR5VmFs
dWU7CisgICAgICAgICAgICByZXR1cm4gZW1wdHlWYWx1ZS5nZXQoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHR5cGVkZWYgUmVzb2x2aW5nVHlwZSYgUGVla1R5cGU7CisgICAgICAgIHN0YXRpYyBQ
ZWVrVHlwZSBwZWVrKFJlc29sdmluZ1R5cGUmIHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfQorICAg
ICAgICB0eXBlZGVmIFJlc29sdmluZ1R5cGUmJiBUYWtlVHlwZTsKKyAgICAgICAgc3RhdGljIFRh
a2VUeXBlIHRha2UoUmVzb2x2aW5nVHlwZSYmIHZhbHVlKSB7IHJldHVybiBXVEZNb3ZlKHZhbHVl
KTsgfQorICAgIH07Ki8KKworICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwgUmVzb2x2aW5n
VHlwZSAvKiwgV1RGOjpQdHJIYXNoPEFTVDo6RXhwcmVzc2lvbio+LCBXVEY6Okhhc2hUcmFpdHM8
QVNUOjpFeHByZXNzaW9uKj4sIFJlc29sdmluZ1R5cGVIYXNoVHJhaXRzKi8+IG1fdHlwZU1hcDsK
KyAgICBIYXNoU2V0PFN0cmluZz4gbV92ZXJ0ZXhFbnRyeVBvaW50czsKKyAgICBIYXNoU2V0PFN0
cmluZz4gbV9mcmFnbWVudEVudHJ5UG9pbnRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2NvbXB1
dGVFbnRyeVBvaW50czsKKyAgICBjb25zdCBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CisgICAg
UHJvZ3JhbSYgbV9wcm9ncmFtOworfTsKKworYm9vbCBjaGVjayhQcm9ncmFtJiBwcm9ncmFtKQor
eworICAgIENoZWNrZXIgY2hlY2tlcihwcm9ncmFtLmludHJpbnNpY3MoKSwgcHJvZ3JhbSk7Cisg
ICAgY2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAgcmV0dXJuICFjaGVj
a2VyLmVycm9yKCk7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVkMjY4ZDczNDFmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmgKQEAgLTAsMCAr
MSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
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
cmFtOworCitib29sIGNoZWNrKFByb2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRy
eVBvaW50SXRlbXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5hMDhjNjVmZjJmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcApAQCAt
MCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCIKKwor
I2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIK
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgV0hMU0wgeworCitjbGFzcyBHYXRoZXJlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1Ymxp
YzoKKyAgICBHYXRoZXJlcihjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBBU1Q6OlNlbWFu
dGljKiBzZW1hbnRpYyA9IG51bGxwdHIpCisgICAgICAgIDogbV9pbnRyaW5zaWNzKGludHJpbnNp
Y3MpCisgICAgICAgICwgbV9jdXJyZW50U2VtYW50aWMoc2VtYW50aWMpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgfkdhdGhlcmVyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCByZXNldCgp
CisgICAgeworICAgICAgICBtX2N1cnJlbnRTZW1hbnRpYyA9IG51bGxwdHI7CisgICAgfQorCisg
ICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYmIHRha2VFbnRyeVBvaW50SXRlbXMoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9lbnRyeVBvaW50SXRlbXMpOworICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKQorICAgIHsKKyAgICAgICAg
aWYgKCFtX2N1cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBl
bmQoRW50cnlQb2ludEl0ZW0obV90eXBlUmVmZXJlbmNlcy5sYXN0KCkuZ2V0KCksICptX2N1cnJl
bnRTZW1hbnRpYykpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICghbV9j
dXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1hdGNoZXMobmF0aXZlVHlwZURlY2xhcmF0
aW9uLCBtX2ludHJpbnNpY3Mudm9pZFR5cGUoKSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2VudHJ5UG9pbnRJ
dGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0obV90eXBlUmVmZXJlbmNlcy5sYXN0KCkuZ2V0KCks
ICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1
Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgaWYg
KG1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVt
ZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CisgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygpKQorICAgICAgICAgICAgICAgIG1f
Y3VycmVudFNlbWFudGljID0gJipzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCk7CisgICAgICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRWxlbWVudCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9u
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVEZWZpbml0aW9uLnR5cGUoKSk7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBlKCp0eXBlRGVmaW5pdGlvbi50eXBlKCkpOwor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwor
ICAgICAgICBtX3R5cGVSZWZlcmVuY2VzLmFwcGVuZCh0eXBlUmVmZXJlbmNlKTsKKyAgICAgICAg
YXV0byBkZXB0aCA9IG1fdHlwZVJlZmVyZW5jZXMuc2l6ZSgpOworICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXROYW1lZFR5cGUoKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKGRlcHRoLCBtX3R5cGVSZWZlcmVuY2VzLnNpemUoKSA9PSBkZXB0aCk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkK
KyAgICB7CisgICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRy
eVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKHBvaW50ZXJUeXBlLCAqbV9jdXJyZW50
U2VtYW50aWMpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpCisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNl
bWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRl
bShhcnJheVJlZmVyZW5jZVR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkKKyAgICB7CisgICAgICAgIGlm
ICghbV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5k
KEVudHJ5UG9pbnRJdGVtKGFycmF5VHlwZSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFy
YXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoIW1fY3VycmVudFNlbWFudGljKTsKKyAgICAg
ICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKKyAgICAgICAgICAgIG1fY3Vy
cmVudFNlbWFudGljID0gJip2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCk7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdFVubmFtZWRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgp
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNz
OworICAgIEFTVDo6U2VtYW50aWMqIG1fY3VycmVudFNlbWFudGljIHsgbnVsbHB0ciB9OworICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VHlwZVJlZmVyZW5jZT4+IG1fdHlw
ZVJlZmVyZW5jZXM7CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBtX2VudHJ5UG9pbnRJdGVt
czsKK307CisKK09wdGlvbmFsPEVudHJ5UG9pbnRJdGVtcz4gZ2F0aGVyRW50cnlQb2ludEl0ZW1z
KGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MsIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBm
dW5jdGlvbkRlZmluaXRpb24pCit7CisgICAgQVNTRVJUKGZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRy
eVBvaW50VHlwZSgpKTsKKyAgICBHYXRoZXJlciBpbnB1dEdhdGhlcmVyKGludHJpbnNpY3MpOwor
ICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KSkgeworICAgICAgICBpbnB1dEdhdGhlcmVyLnJlc2V0KCk7CisgICAgICAgIGlucHV0R2F0aGVy
ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHBhcmFtZXRlcik7CisgICAgICAgIGlmIChpbnB1dEdhdGhl
cmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKyAg
ICBHYXRoZXJlciBvdXRwdXRHYXRoZXJlcihpbnRyaW5zaWNzLCBmdW5jdGlvbkRlZmluaXRpb24u
c2VtYW50aWMoKSA/ICYqZnVuY3Rpb25EZWZpbml0aW9uLnNlbWFudGljKCkgOiBudWxscHRyKTsK
KyAgICBvdXRwdXRHYXRoZXJlci5jaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShmdW5jdGlv
bkRlZmluaXRpb24udHlwZSgpKTsKKyAgICBpZiAob3V0cHV0R2F0aGVyZXIuZXJyb3IoKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7eyBpbnB1dEdhdGhlcmVy
LnRha2VFbnRyeVBvaW50SXRlbXMoKSwgb3V0cHV0R2F0aGVyZXIudGFrZUVudHJ5UG9pbnRJdGVt
cygpIH19OworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQYXJhbWV0ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKc2lt
aWxhcml0eSBpbmRleCA2MiUKcmVuYW1lIGZyb20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUGFyYW1ldGVyLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKaW5kZXggOTI1
ODZmODY5MWYuLmUxZWI4MjkyMWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQYXJhbWV0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oCkBAIC0yNywx
MyArMjcsOSBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFF1YWxpZmllci5oIgogI2luY2x1ZGUgIldITFNMU2VtYW50aWMu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKLSNpbmNsdWRlICJXSExTTFZhbHVlLmgiCisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDM2
ICszNywzMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3Mg
UGFyYW1ldGVyIDogcHVibGljIFZhbHVlIHsKLXB1YmxpYzoKLSAgICBQYXJhbWV0ZXIoTGV4ZXI6
OlRva2VuJiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRy
PEFTVDo6VHlwZT4mJiB0eXBlLCBPcHRpb25hbDxTdHJpbmc+JiYgbmFtZSwgT3B0aW9uYWw8QVNU
OjpTZW1hbnRpYz4mJiBzZW1hbnRpYykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdp
bikpCi0gICAgICAgICwgbV9xdWFsaWZpZXJzKFdURk1vdmUocXVhbGlmaWVycykpCi0gICAgICAg
ICwgbV90eXBlKFdURk1vdmUodHlwZSkpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkp
Ci0gICAgICAgICwgbV9zZW1hbnRpYyhXVEZNb3ZlKHNlbWFudGljKSkKLSAgICB7Ci0gICAgfQor
Y2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOwogCi0gICAgdmlydHVhbCB+UGFyYW1ldGVyKCkgPSBk
ZWZhdWx0OworfQogCi0gICAgUGFyYW1ldGVyKGNvbnN0IFBhcmFtZXRlciYpID0gZGVsZXRlOwot
ICAgIFBhcmFtZXRlcihQYXJhbWV0ZXImJikgPSBkZWZhdWx0OworY2xhc3MgSW50cmluc2ljczsK
K2NsYXNzIFVubmFtZWRUeXBlOwogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7
IH0KLSAgICBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3Nl
bWFudGljOyB9CitzdHJ1Y3QgRW50cnlQb2ludEl0ZW0geworICAgIEVudHJ5UG9pbnRJdGVtKEFT
VDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBBU1Q6OlNlbWFudGljJiBzZW1hbnRpYykKKyAg
ICAgICAgOiB1bm5hbWVkVHlwZSh1bm5hbWVkVHlwZSkKKyAgICAgICAgLCBzZW1hbnRpYyhzZW1h
bnRpYykKKyAgICB7CisgICAgfQogCi1wcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdp
bjsKLSAgICBRdWFsaWZpZXJzIG1fcXVhbGlmaWVyczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpUeXBlPiBtX3R5cGU7Ci0gICAgT3B0aW9uYWw8U3RyaW5nPiBtX25hbWU7Ci0gICAgT3B0aW9u
YWw8QVNUOjpTZW1hbnRpYz4gbV9zZW1hbnRpYzsKKyAgICBBU1Q6OlVubmFtZWRUeXBlJiB1bm5h
bWVkVHlwZTsKKyAgICBBU1Q6OlNlbWFudGljJiBzZW1hbnRpYzsKIH07CiAKLXR5cGVkZWYgVmVj
dG9yPFBhcmFtZXRlcj4gUGFyYW1ldGVyczsKK3N0cnVjdCBFbnRyeVBvaW50SXRlbXMgeworICAg
IFZlY3RvcjxFbnRyeVBvaW50SXRlbT4gaW5wdXRzOworICAgIFZlY3RvcjxFbnRyeVBvaW50SXRl
bT4gb3V0cHV0czsKK307CiAKLX0KK09wdGlvbmFsPEVudHJ5UG9pbnRJdGVtcz4gZ2F0aGVyRW50
cnlQb2ludEl0ZW1zKGNvbnN0IEludHJpbnNpY3MmLCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYp
OwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMSW5mZXJUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEluZmVyVHlwZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi44NGE4YjdhY2E1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKQEAgLTAsMCArMSwyMDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5o
IgorI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5cGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCitzdGF0aWMgYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6
VHlwZSYgdW5pZnlUaGlzLCBjb25zdCBBU1Q6OlR5cGUmIHVuaWZ5T3RoZXIpCit7CisgICAgaWYg
KCZ1bmlmeVRoaXMgPT0gJnVuaWZ5T3RoZXIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeVRoaXMpICYmIGlzPEFTVDo6TmFtZWRUeXBlPih1
bmlmeU90aGVyKSkgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgYXV0byYgbmFtZWRU
aGlzID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5VGhpcyk7CisgICAgICAgIGF1dG8m
IG5hbWVkT3RoZXIgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlPdGhlcik7CisgICAg
ICAgIEFTU0VSVCghaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUaGlzKSAmJiAhaXM8QVNU
OjpUeXBlRGVmaW5pdGlvbj4obmFtZWRPdGhlcikpOworI2VuZGlmCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9IGVsc2UgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5VGhpcykgJiYg
aXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlPdGhlcikpIHsKKyAgICAgICAgYXV0byYgdW5uYW1l
ZFRoaXMgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeVRoaXMpOworICAgICAgICBh
dXRvJiB1bm5hbWVkT3RoZXIgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU90aGVy
KTsKKyAgICAgICAgQVNTRVJUKCFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUaGlzKSAm
JiAhaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkT3RoZXIpKTsKKyAgICAgICAgaWYgKGlz
PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkT3RoZXIpKSB7CisgICAgICAgICAgICBhdXRvJiBwb2ludGVyVGhpcyA9IGRvd25jYXN0
PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUaGlzKTsKKyAgICAgICAgICAgIGF1dG8mIHBvaW50
ZXJPdGhlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRPdGhlcik7CisgICAg
ICAgICAgICBpZiAocG9pbnRlclRoaXMuYWRkcmVzc1NwYWNlKCkgIT0gcG9pbnRlck90aGVyLmFk
ZHJlc3NTcGFjZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBtYXRjaGVzKHBvaW50ZXJUaGlzLmVsZW1lbnRUeXBlKCksIHBvaW50ZXJPdGhlci5l
bGVtZW50VHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5u
YW1lZE90aGVyKSl7CisgICAgICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZVRoaXMgPSBkb3du
Y2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFRoaXMpOworICAgICAgICAgICAg
YXV0byYgYXJyYXlSZWZlcmVuY2VPdGhlciA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPih1bm5hbWVkT3RoZXIpOworICAgICAgICAgICAgaWYgKGFycmF5UmVmZXJlbmNlVGhpcy5h
ZGRyZXNzU3BhY2UoKSAhPSBhcnJheVJlZmVyZW5jZU90aGVyLmFkZHJlc3NTcGFjZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKGFy
cmF5UmVmZXJlbmNlVGhpcy5lbGVtZW50VHlwZSgpLCBhcnJheVJlZmVyZW5jZU90aGVyLmVsZW1l
bnRUeXBlKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5u
YW1lZFRoaXMpICYmIGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkT3RoZXIpKSB7CisgICAgICAg
ICAgICBhdXRvJiBhcnJheVRoaXMgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFRo
aXMpOworICAgICAgICAgICAgYXV0byYgYXJyYXlPdGhlciA9IGRvd25jYXN0PEFTVDo6QXJyYXlU
eXBlPih1bm5hbWVkT3RoZXIpOworICAgICAgICAgICAgaWYgKGFycmF5VGhpcy5udW1FbGVtZW50
cygpICE9IGFycmF5T3RoZXIubnVtRWxlbWVudHMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhhcnJheVRoaXMudHlwZSgpLCBhcnJh
eU90aGVyLnR5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6OlVubmFtZWRU
eXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgb3RoZXIpCit7CisgICAg
cmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUudW5pZnlOb2RlKCksIG90aGVyLnVuaWZ5Tm9kZSgp
KTsKK30KKworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUsIGNv
bnN0IEFTVDo6TmFtZWRUeXBlJiBvdGhlcikKK3sKKyAgICByZXR1cm4gbWF0Y2hlcyhuYW1lZFR5
cGUudW5pZnlOb2RlKCksIG90aGVyLnVuaWZ5Tm9kZSgpKTsKK30KKworYm9vbCBtYXRjaGVzKGNv
bnN0IEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBBU1Q6Ok5hbWVkVHlwZSYg
b3RoZXIpCit7CisgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUudW5pZnlOb2RlKCksIG90
aGVyLnVuaWZ5Tm9kZSgpKTsKK30KKworc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFt
ZWRUeXBlPiBtYXRjaEFuZENvbW1pdChBU1Q6OlR5cGUmIHVuaWZ5Tm9kZSwgQVNUOjpSZXNvbHZh
YmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCit7CisgICAgaWYgKCFyZXNvbHZhYmxlVHlwZS5jYW5S
ZXNvbHZlKHVuaWZ5Tm9kZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiByZXN1bHQ7CisgICAgaWYgKGlzPEFTVDo6TmFtZWRU
eXBlPih1bmlmeU5vZGUpKSB7CisgICAgICAgIGF1dG8mIG5hbWVkVW5pZnlOb2RlID0gZG93bmNh
c3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgIHJlc3VsdCA9IEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRVbmlmeU5vZGUub3JpZ2luKCkpLCBu
YW1lZFVuaWZ5Tm9kZSk7CisgICAgfSBlbHNlCisgICAgICAgIHJlc3VsdCA9IGRvd25jYXN0PEFT
VDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkuY2xvbmUoKTsKKyAgICBBU1NFUlQoIXJlc29sdmFi
bGVUeXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICByZXNvbHZhYmxlVHlwZS5yZXNvbHZlKHJlc3Vs
dC0+Y2xvbmUoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFT
VDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRU
eXBlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKK3sKKyAgICByZXR1cm4g
bWF0Y2hBbmRDb21taXQodW5uYW1lZFR5cGUudW5pZnlOb2RlKCksIHJlc29sdmFibGVUeXBlKTsK
K30KKworc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFT
VDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUsIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVU
eXBlKQoreworICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChuYW1lZFR5cGUudW5pZnlOb2RlKCks
IHJlc29sdmFibGVUeXBlKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
IG1hdGNoQW5kQ29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlMSwgQVNU
OjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUyKQoreworICAgIEFTU0VSVCghcmVzb2x2
YWJsZVR5cGUxLnJlc29sdmVkVHlwZSgpKTsKKyAgICBBU1NFUlQoIXJlc29sdmFibGVUeXBlMi5y
ZXNvbHZlZFR5cGUoKSk7CisgICAgaWYgKGlzPEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2
YWJsZVR5cGUxKSAmJiBpczxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikp
IHsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUxLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpGbG9hdExp
dGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAg
ICAgICAgcmVzb2x2YWJsZVR5cGUyLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWxU
eXBlPihyZXNvbHZhYmxlVHlwZTIpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5w
cmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6SW50ZWdlckxp
dGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpICYmIGlzPEFTVDo6SW50ZWdlckxpdGVyYWxUeXBl
PihyZXNvbHZhYmxlVHlwZTIpKSB7CisgICAgICAgIHJlc29sdmFibGVUeXBlMS5yZXNvbHZlKGRv
d25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJl
ZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUyLnJlc29sdmUoZG93bmNh
c3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikucHJlZmVycmVkVHlw
ZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJh
bFR5cGU+KHJlc29sdmFibGVUeXBlMSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCk7CisgICAgfQor
ICAgIGlmIChpczxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlw
ZTEpICYmIGlzPEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBl
MikpIHsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUxLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpVbnNp
Z25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCku
Y2xvbmUoKSk7CisgICAgICAgIHJlc29sdmFibGVUeXBlMi5yZXNvbHZlKGRvd25jYXN0PEFTVDo6
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikucHJlZmVycmVkVHlw
ZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVn
ZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsK
KyAgICB9CisgICAgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEp
ICYmIGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTIpKSB7CisgICAgICAg
IC8vIEZJWE1FOiBUcnlpbmcgdG8gbWF0Y2ggbnVsbHB0ciBhbmQgbnVsbHB0ciBmYWlscy4KKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCiti
b29sIGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFTVDo6TmFtZWRUeXBlJiBwb3NzaWJsZVR5
cGUsIEFTVDo6VHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cykKK3sKKyAgICBpZiAoaXM8QVNU
OjpUeXBlRGVmaW5pdGlvbj4ocG9zc2libGVUeXBlKQorICAgICAgICB8fCBpczxBU1Q6OlN0cnVj
dHVyZURlZmluaXRpb24+KHBvc3NpYmxlVHlwZSkKKyAgICAgICAgfHwgaXM8QVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24+KHBvc3NpYmxlVHlwZSkpIHsKKyAgICAgICAgcmV0dXJuIHR5cGVBcmd1
bWVudHMuaXNFbXB0eSgpOworICAgIH0KKworICAgIEFTU0VSVChpczxBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbj4ocG9zc2libGVUeXBlKSk7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0
aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHBvc3NpYmxlVHlwZSk7
CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpICE9
IHR5cGVBcmd1bWVudHMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNp
emUoKTsgKytpKSB7CisgICAgICAgIEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKiB0eXBlQXJndW1l
bnRFeHByZXNzaW9uID0gbnVsbHB0cjsKKyAgICAgICAgQVNUOjpUeXBlUmVmZXJlbmNlKiB0eXBl
QXJndW1lbnRUeXBlUmVmZXJlbmNlID0gbnVsbHB0cjsKKyAgICAgICAgQVNUOjpDb25zdGFudEV4
cHJlc3Npb24qIG5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24gPSBudWxscHRyOworICAgICAg
ICBBU1Q6OlR5cGVSZWZlcmVuY2UqIG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UgPSBu
dWxscHRyOworCisgICAgICAgIGF1dG8gYXNzaWduID0gWyZdKEFTVDo6VHlwZUFyZ3VtZW50JiB0
eXBlQXJndW1lbnQsIEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKiYgZXhwcmVzc2lvbiwgQVNUOjpU
eXBlUmVmZXJlbmNlKiYgdHlwZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgV1RGOjp2aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHBy
ZXNzaW9uKSB7CisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiA9ICZjb25zdGFudEV4cHJlc3Np
b247CisgICAgICAgICAgICB9LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5j
ZT4mIHRoZVR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICB0eXBlUmVmZXJlbmNlID0g
dGhlVHlwZVJlZmVyZW5jZS5nZXQoKTsKKyAgICAgICAgICAgIH0pLCB0eXBlQXJndW1lbnQpOwor
ICAgICAgICB9OworCisgICAgICAgIGFzc2lnbih0eXBlQXJndW1lbnRzW2ldLCB0eXBlQXJndW1l
bnRFeHByZXNzaW9uLCB0eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlKTsKKyAgICAgICAgYXNzaWdu
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbaV0sIG5hdGl2ZVR5cGVBcmd1
bWVudEV4cHJlc3Npb24sIG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpOworCisgICAg
ICAgIGlmICh0eXBlQXJndW1lbnRFeHByZXNzaW9uICYmIG5hdGl2ZVR5cGVBcmd1bWVudEV4cHJl
c3Npb24pIHsKKyAgICAgICAgICAgIGlmICghdHlwZUFyZ3VtZW50RXhwcmVzc2lvbi0+bWF0Y2hl
cygqbmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVzc2lvbikpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKHR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UgJiYg
bmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgaWYgKCFtYXRj
aGVzKCp0eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlLCAqbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJl
ZmVyZW5jZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uJiBwb3NzaWJsZUZ1bmN0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIHJlc29sdmluZ1R5cGVzKQoreworICAgIGlmIChw
b3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gcmVzb2x2aW5nVHlwZXMuc2l6
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
b3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRv
IHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAg
cmV0dXJuIG1hdGNoZXMocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLCAq
dW5uYW1lZFR5cGUpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
PiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJu
IHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUocG9z
c2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpKTsKKyAgICAgICAgfSksIHJlc29s
dmluZ1R5cGVzW2ldLmdldCgpKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBGSVhNRTogTWFrZSBzdXJlIHRoZSByZXR1cm4g
dHlwZSBtYXRjaGVzIG9uY2UgQ2FsbEV4cHJlc3Npb246OnNldENhc3REYXRhKCkgaXMgaW1wbGVt
ZW50ZWQuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc0OTFlMmQxNWI0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJ
bmZlclR5cGVzLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUmVzb2x2aW5nVHlwZS5oIgor
I2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1Qgewor
CitjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3MgTmFtZWRUeXBlOworY2xhc3MgUmVz
b2x2YWJsZVR5cGU7CitjbGFzcyBVbm5hbWVkVHlwZTsKKworfQorCitib29sIG1hdGNoZXMoY29u
c3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmKTsKK2Jvb2wgbWF0
Y2hlcyhjb25zdCBBU1Q6Ok5hbWVkVHlwZSYsIGNvbnN0IEFTVDo6TmFtZWRUeXBlJik7Citib29s
IG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNvbnN0IEFTVDo6TmFtZWRUeXBlJik7
CisvLyBGSVhNRTogSXMgYW55b25lIGFjdHVhbGx5IHVzaW5nIHRoZSByZXR1cm4gdHlwZSBoZXJl
Pworc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6
VW5uYW1lZFR5cGUmLCBBU1Q6OlJlc29sdmFibGVUeXBlJik7CitzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpOYW1lZFR5cGUmLCBBU1Q6OlJlc29s
dmFibGVUeXBlJik7CitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRD
b21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKK2Jvb2wg
aW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMoQVNUOjpOYW1lZFR5cGUmIHBvc3NpYmxlVHlwZSwg
QVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKTsKK2Jvb2wgaW5mZXJUeXBlc0ZvckNh
bGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBwb3NzaWJsZUZ1bmN0aW9uLCBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIHJlc29sdmluZ1R5cGVzKTsKKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMSW50cmluc2ljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmE1YzAyYjQxYThiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNwcApAQCAtMCwwICsxLDQx
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisKKyNpbmNsdWRlICJXSExTTENvbnN0
YW50RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVk
ZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK0ludHJpbnNpY3M6OkludHJpbnNp
Y3MoKQorICAgIDogbV90ZXh0dXJlVHlwZU5hbWVzIHsgU3RyaW5nKCJUZXh0dXJlMUQiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiUldUZXh0dXJl
MUQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygi
VGV4dHVyZTFEQXJyYXkiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAg
ICAgIFN0cmluZygiUldUZXh0dXJlMURBcnJheSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLAorICAgICAgICAgICAgU3RyaW5nKCJUZXh0dXJlMkQiLCBTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiUldUZXh0dXJlMkQiLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiVGV4dHVyZTJEQXJyYXki
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiUldU
ZXh0dXJlMkRBcnJheSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAg
ICAgU3RyaW5nKCJUZXh0dXJlM0QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAg
ICAgICAgICAgIFN0cmluZygiUldUZXh0dXJlM0QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiVGV4dHVyZUN1YmUiLCAgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCkgfQorICAgICwgbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMgeyBTdHJpbmco
InVjaGFyIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJp
bmcoInVzaG9ydCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAg
U3RyaW5nKCJ1aW50IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAg
ICBTdHJpbmcoImNoYXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAg
ICAgIFN0cmluZygic2hvcnQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAg
ICAgICAgIFN0cmluZygiaW50IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAg
ICAgICAgICBTdHJpbmcoImhhbGYiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAg
ICAgICAgICAgIFN0cmluZygiZmxvYXQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSB9
CisgICAgLCBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMgeyBTdHJpbmcoImhhbGYiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiZmxvYXQiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSB9Cit7CisgICAgQVNTRVJUKG1fdGV4dHVyZVR5cGVO
YW1lcy5zaXplKCkgPT0gMTEpOyAvLyBmdWxsVGV4dHVyZXMgaGFyZGNvZGVzIHRoZSBsZW5ndGgg
b2YgdGhpcyBhcnJheS4KKyAgICBBU1NFUlQobV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgp
ID09IDgpOyAvLyBmdWxsVGV4dHVyZXMgaGFyZGNvZGVzIHRoZSBsZW5ndGggb2YgdGhpcyBhcnJh
eS4KKyAgICBBU1NFUlQobV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKSA9PSAyKTsgLy8g
dGV4dHVyZURlcHRoMkQgJiBmcmllbmRzIGhhcmRjb2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJy
YXkuCit9CisKK3ZvaWQgSW50cmluc2ljczo6YWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiYpCit7CisgICAgLy8gRklYTUU6IFBvcHVsYXRlIHRoaXMuCit9CisKK2Jvb2wgSW50cmlu
c2ljczo6YWRkUHJpbWl0aXZlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBl
RGVjbGFyYXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKCkuc2l6ZSgpICE9IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ2b2lkIikKKyAgICAgICAgbV92b2lkVHlwZSA9
ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiYm9vbCIpCisgICAgICAgIG1fYm9vbFR5cGUgPSAmbmF0aXZlVHlwZURl
Y2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0g
InVjaGFyIikgeworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAg
ICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCB4KSB7CisgICAg
ICAgICAgICByZXR1cm4geCA+PSAwICYmIHggPD0gMHhGRjsKKyAgICAgICAgfSk7CisgICAgICAg
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10o
dW5zaWduZWQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPD0gMHhGRjsKKyAgICAgICAgfSk7
CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShm
bG9hdCB4KSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHgpKSA9PSB4OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnNldFN1Y2Nlc3NvcihbXShpbnQ2NF90IHgpIC0+IGludDY0X3QgeworICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHggKyAxKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtd
KGludCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50
OF90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRG
b3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oeCk7CisgICAgICAgIH0p
OworICAgICAgICBtX3VjaGFyVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBl
bHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1c2hvcnQiKSB7CisgICAg
ICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9u
LnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50IHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4
ID49IDAgJiYgeCA8PSAweEZGRkY7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIHsK
KyAgICAgICAgICAgIHJldHVybiB4IDw9IDB4RkZGRjsKKyAgICAgICAgfSk7CisgICAgICAgIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PHVpbnQxNl90
Pih4KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXRTdWNjZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1aW50MTZfdD4oeCArIDEpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbUludGVnZXIoW10oaW50IHgpIC0+
IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90Pih4KTsK
KyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1
ZUZyb21VbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAg
ICAgbV91c2hvcnRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYg
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVpbnQiKSB7CisgICAgICAgIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJl
cHJlc2VudEludGVnZXIoW10oaW50IHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4ID49IDA7Cisg
ICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50
VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNl
bnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHN0YXRpY19jYXN0PHVpbnQzMl90Pih4KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAgICAg
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2
NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oeCArIDEpOwor
ICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVl
RnJvbUludGVnZXIoW10oaW50IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVpbnQzMl90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQg
eCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbV91aW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFy
YXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJj
aGFyIikgeworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAg
ICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5zZXRJc1NpZ25lZCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQgeCkgeworICAgICAgICAgICAgcmV0dXJu
IHggPj0gLTEyOCAmJiB4IDw9IDEyNzsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkg
eworICAgICAgICAgICAgcmV0dXJuIHggPD0gMTI3OworICAgICAgICB9KTsKKyAgICAgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50OF90Pih4
KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRT
dWNjZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ4X3Q+KHggKyAxKTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBpbnQ2
NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHgpOworICAgICAg
ICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbVVu
c2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jaGFy
VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJzaG9ydCIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldElzSW50KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051
bWJlcigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNTaWduZWQoKTsKKyAg
ICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50
IHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4ID49IC0zMjc2OCAmJiB4IDw9IDMyNzY3OworICAg
ICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVu
c2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA8PSAz
Mjc2NzsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5S
ZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PGludDE2X3Q+KHgpKSA9PSB4OworICAgICAgICB9KTsKKyAg
ICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldFN1Y2Nlc3NvcihbXShpbnQ2NF90IHgpIC0+
IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDE2X3Q+KHggKyAx
KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRW
YWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQxNl90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIoW10odW5zaWdu
ZWQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MTZf
dD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBtX3Nob3J0VHlwZSA9ICZuYXRpdmVUeXBlRGVj
bGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09
ICJpbnQiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAg
ICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldElzU2lnbmVkKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCkgeworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2Fu
UmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB4IDw9IDIxNDc0ODM2NDc7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQgeCkgeworICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDxpbnQzMl90Pih4KSkgPT0geDsK
KyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3Io
W10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQzMl90Pih4ICsgMSk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFy
YXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tSW50ZWdlcihbXShpbnQgeCkgLT4gaW50NjRfdCB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4oeCk7CisgICAgICAgIH0pOwor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJ
bnRlZ2VyKFtdKHVuc2lnbmVkIHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludDMyX3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbV9pbnRUeXBlID0g
Jm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkgPT0gImhhbGYiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXRJc051bWJlcigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNGbG9hdGlu
ZygpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdl
cihbXShpbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAg
ICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihb
XSh1bnNpZ25lZCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAg
ICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQp
IHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbV9oYWxm
VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJmbG9hdCIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJ
c0Zsb2F0aW5nKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNl
bnRJbnRlZ2VyKFtdKGludCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0p
OworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJ
bnRlZ2VyKFtdKHVuc2lnbmVkKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChb
XShmbG9hdCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAg
ICBtX2Zsb2F0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfQorICAgIGVsc2Ug
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21pY19pbnQiKQorICAgICAg
ICBtX2F0b21pY0ludFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYg
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21pY191aW50IikKKyAgICAgICAg
bV9hdG9taWNVaW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAo
bmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAic2FtcGxlciIpCisgICAgICAgIG1fc2Ft
cGxlclR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50cmluc2lj
czo6YWRkVmVjdG9yKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgIT0gInZlY3Rv
ciIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFy
YXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAyKTsKKyAgICBBU1NFUlQoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZl
VHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIEFTU0VSVChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFy
YXRpb24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlUG9pbnRlciA9
IFdURjo6Z2V0PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBl
RGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBhdXRvJiBsZW5ndGhFeHByZXNz
aW9uID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi50eXBlQXJndW1lbnRzKClbMV0pOworICAgIEFTU0VSVChpbm5lclR5cGVQb2ludGVyKTsK
KyAgICBhdXRvJiBpbm5lclR5cGUgPSAqaW5uZXJUeXBlUG9pbnRlcjsKKyAgICBBU1NFUlQoaW5u
ZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMCk7CisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qKiBhcnJheTsKKyAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiYm9vbCIp
CisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JCb29sOworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5u
YW1lKCkgPT0gInVjaGFyIikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvclVjaGFyOworICAgIGVs
c2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gInVzaG9ydCIpCisgICAgICAgIGFycmF5ID0gbV92
ZWN0b3JVc2hvcnQ7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAidWludCIpCisg
ICAgICAgIGFycmF5ID0gbV92ZWN0b3JVaW50OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1l
KCkgPT0gImNoYXIiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yQ2hhcjsKKyAgICBlbHNlIGlm
IChpbm5lclR5cGUubmFtZSgpID09ICJzaG9ydCIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JT
aG9ydDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJpbnQiKQorICAgICAgICBh
cnJheSA9IG1fdmVjdG9ySW50OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImhh
bGYiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9ySGFsZjsKKyAgICBlbHNlIGlmIChpbm5lclR5
cGUubmFtZSgpID09ICJmbG9hdCIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JGbG9hdDsKKyAg
ICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGludCBsZW5ndGggPSBs
ZW5ndGhFeHByZXNzaW9uLmludGVnZXJMaXRlcmFsKCkudmFsdWUoKTsKKyAgICBBU1NFUlQobGVu
Z3RoID49IDIgJiYgbGVuZ3RoIDw9IDQpOworICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJ
c1ZlY3RvcigpOworICAgIGFycmF5W2xlbmd0aCAtIDJdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlv
bjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRNYXRyaXgoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBp
ZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSAhPSAibWF0cml4IikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKCkuc2l6ZSgpID09IDMpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24u
dHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKClbMV0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsyXSkp
OworICAgIGF1dG8mIGlubmVyVHlwZVBvaW50ZXIgPSBXVEY6OmdldDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMo
KVswXSk7CisgICAgYXV0byYgcm93RXhwcmVzc2lvbiA9IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRF
eHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKTsKKyAg
ICBhdXRvJiBjb2x1bW5FeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Np
b24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMl0pOworICAgIEFTU0VS
VChpbm5lclR5cGVQb2ludGVyKTsKKyAgICBhdXRvJiBpbm5lclR5cGUgPSAqaW5uZXJUeXBlUG9p
bnRlcjsKKyAgICBBU1NFUlQoaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMCk7
CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qICgqYXJyYXkpWzNdOworICAgIGlmIChp
bm5lclR5cGUubmFtZSgpID09ICJoYWxmIikKKyAgICAgICAgYXJyYXkgPSBtX21hdHJpeEhhbGY7
CisgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImZsb2F0IikKKyAgICAgICAgYXJyYXkgPSBt
X21hdHJpeEZsb2F0OworICAgIGludCByb3cgPSByb3dFeHByZXNzaW9uLmludGVnZXJMaXRlcmFs
KCkudmFsdWUoKTsKKyAgICBBU1NFUlQocm93ID49IDIgJiYgcm93IDw9IDQpOworICAgIGludCBj
b2x1bW4gPSBjb2x1bW5FeHByZXNzaW9uLmludGVnZXJMaXRlcmFsKCkudmFsdWUoKTsKKyAgICBB
U1NFUlQoY29sdW1uID49IDIgJiYgY29sdW1uIDw9IDQpOworICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRJc01hdHJpeCgpOworICAgIGFycmF5W3JvdyAtIDJdW2NvbHVtbiAtIDJdID0gJm5h
dGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5z
aWNzOjphZGRGdWxsVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2UmIGlubmVyVHlwZSkKK3sKKyAgICB1bnNp
Z25lZCB0ZXh0dXJlVHlwZUluZGV4ID0gbV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09IG1fdGV4dHVyZVR5
cGVOYW1lc1tpXSkKKyAgICAgICAgICAgIHRleHR1cmVUeXBlSW5kZXggPSBpOworICAgIH0KKyAg
ICBpZiAodGV4dHVyZVR5cGVJbmRleCA9PSBtX3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBpbm5lclR5cGVJbmRleCA9IG1fdGV4
dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGlmIChpbm5lclR5cGUubmFtZSgpLnN0YXJ0c1dpdGgobV90ZXh0
dXJlSW5uZXJUeXBlTmFtZXNbaV0pKSB7CisgICAgICAgICAgICB0ZXh0dXJlVHlwZUluZGV4ID0g
aTsKKyAgICAgICAgICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09IG1fdGV4dHVyZUlubmVyVHlw
ZU5hbWVzW2ldKQorICAgICAgICAgICAgICAgIHZlY3Rvckxlbmd0aCA9IDE7CisgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgo
KSA9PSBtX3RleHR1cmVJbm5lclR5cGVOYW1lc1tpXS5sZW5ndGgoKSArIDEpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChpbm5lclR5cGUubmFtZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkg
LSAxXSA9PSAnMicKKyAgICAgICAgICAgICAgICAgICAgfHwgaW5uZXJUeXBlLm5hbWUoKVtpbm5l
clR5cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0gPT0gJzMnCisgICAgICAgICAgICAgICAgICAgIHx8
IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAtIDFdID09ICc0Jyk7
CisgICAgICAgICAgICAgICAgdmVjdG9yTGVuZ3RoID0gaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5
cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0gLSAnMCc7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgQVNTRVJUKGlubmVyVHlwZUluZGV4ICE9IG1fdGV4dHVyZUlubmVyVHlwZU5h
bWVzLnNpemUoKSk7CisgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzVGV4dHVyZSgpOwor
ICAgIG1fZnVsbFRleHR1cmVzW3RleHR1cmVUeXBlSW5kZXhdW2lubmVyVHlwZUluZGV4XVt2ZWN0
b3JMZW5ndGggLSAxXSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgSW50cmluc2ljczo6YWRkRGVwdGhUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24sIEFTVDo6VHlwZVJlZmVyZW5jZSYgaW5u
ZXJUeXBlKQoreworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiogdGV4dHVyZTsKKyAg
ICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZURlcHRoMkQiKQor
ICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlRGVwdGgyRDsKKyAgICBlbHNlIGlmIChuYXRpdmVU
eXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJSV1RleHR1cmVEZXB0aDJEIikKKyAgICAgICAgdGV4
dHVyZSA9IG1fcndUZXh0dXJlRGVwdGgyRDsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFy
YXRpb24ubmFtZSgpID09ICJUZXh0dXJlRGVwdGgyREFycmF5IikKKyAgICAgICAgdGV4dHVyZSA9
IG1fdGV4dHVyZURlcHRoMkRBcnJheTsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRp
b24ubmFtZSgpID09ICJSV1RleHR1cmVEZXB0aDJEQXJyYXkiKQorICAgICAgICB0ZXh0dXJlID0g
bV9yd1RleHR1cmVEZXB0aDJEQXJyYXk7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0
aW9uLm5hbWUoKSA9PSAiVGV4dHVyZURlcHRoQ3ViZSIpCisgICAgICAgIHRleHR1cmUgPSBtX3Rl
eHR1cmVEZXB0aEN1YmU7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB1bnNpZ25lZCBpbm5lclR5cGVJbmRleCA9IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcy5z
aXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGVwdGhUZXh0dXJlSW5uZXJU
eXBlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSBtX2Rl
cHRoVGV4dHVyZUlubmVyVHlwZXNbaV0pCisgICAgICAgICAgICBpbm5lclR5cGVJbmRleCA9IGk7
CisgICAgfQorICAgIEFTU0VSVChpbm5lclR5cGVJbmRleCAhPSBtX2RlcHRoVGV4dHVyZUlubmVy
VHlwZXMuc2l6ZSgpKTsKKyAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNUZXh0dXJlKCk7
CisgICAgdGV4dHVyZVtpbm5lclR5cGVJbmRleF0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOwor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEludHJpbnNpY3M6OmFkZFRleHR1cmUoQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBBU1NF
UlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMSk7Cisg
ICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlw
ZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsK
KyAgICBhdXRvJiBpbm5lclR5cGVQb2ludGVyID0gV1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPEFT
VDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClb
MF0pOworICAgIEFTU0VSVChpbm5lclR5cGVQb2ludGVyKTsKKyAgICBhdXRvJiBpbm5lclR5cGUg
PSAqaW5uZXJUeXBlUG9pbnRlcjsKKyAgICBBU1NFUlQoaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMo
KS5zaXplKCkgPT0gMCk7CisgICAgaWYgKGFkZEZ1bGxUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiwgaW5uZXJUeXBlKSkgeworICAgICAgICBtX3RleHR1cmVTZXQuYWRkKCZuYXRpdmVUeXBl
RGVjbGFyYXRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChhZGREZXB0aFRl
eHR1cmUobmF0aXZlVHlwZURlY2xhcmF0aW9uLCBpbm5lclR5cGUpKQorICAgICAgICBtX3RleHR1
cmVTZXQuYWRkKCZuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworfQorCit2b2lkIEludHJpbnNpY3M6
OmFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQor
eworICAgIGlmIChhZGRQcmltaXRpdmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChhZGRWZWN0b3IobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmIChhZGRNYXRyaXgobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGFkZFRleHR1cmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKK30K
KworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uOTkwMjFmOTQ2ODEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuaApAQCAtMCwwICsxLDE0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNM
TmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgSW50cmluc2ljcyB7Citw
dWJsaWM6CisgICAgSW50cmluc2ljcygpOworCisgICAgdm9pZCBhZGQoQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uJik7CisgICAgdm9pZCBhZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mKTsKKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiB2b2lkVHlwZSgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQobV92b2lkVHlwZSk7CisgICAgICAgIHJldHVybiAqbV92
b2lkVHlwZTsKKyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgYm9vbFR5
cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYm9vbFR5cGUpOworICAgICAgICBy
ZXR1cm4gKm1fYm9vbFR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mIHVpbnRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3VpbnRUeXBlKTsK
KyAgICAgICAgcmV0dXJuICptX3VpbnRUeXBlOworICAgIH0KKworICAgIEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJiBzYW1wbGVyVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
bV9zYW1wbGVyVHlwZSk7CisgICAgICAgIHJldHVybiAqbV9zYW1wbGVyVHlwZTsKKyAgICB9CisK
KyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgZmxvYXRUeXBlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2Zsb2F0VHlwZSk7CisgICAgICAgIHJldHVybiAqbV9mbG9hdFR5
cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIGZsb2F0M1R5cGUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdmVjdG9yRmxvYXRbMV0pOworICAgICAg
ICByZXR1cm4gKm1fdmVjdG9yRmxvYXRbMV07CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24mIGZsb2F0NFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
dmVjdG9yRmxvYXRbMl0pOworICAgICAgICByZXR1cm4gKm1fdmVjdG9yRmxvYXRbMl07CisgICAg
fQorCitwcml2YXRlOgorICAgIGJvb2wgYWRkUHJpbWl0aXZlKEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uJik7CisgICAgYm9vbCBhZGRWZWN0b3IoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24m
KTsKKyAgICBib29sIGFkZE1hdHJpeChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAg
IGJvb2wgYWRkRnVsbFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mLCBBU1Q6OlR5
cGVSZWZlcmVuY2UmKTsKKyAgICBib29sIGFkZERlcHRoVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiYsIEFTVDo6VHlwZVJlZmVyZW5jZSYpOworICAgIHZvaWQgYWRkVGV4dHVyZShB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworCisgICAgSGFzaFNldDxjb25zdCBBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbio+IG1fdGV4dHVyZVNldDsKKworICAgIEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uKiBtX3ZvaWRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
KiBtX2Jvb2xUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3VjaGFyVHlw
ZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV91c2hvcnRUeXBlOworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3VpbnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uKiBtX2NoYXJUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
KiBtX3Nob3J0VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9pbnRUeXBl
OworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2hhbGZUeXBlOworICAgIEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2Zsb2F0VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV9hdG9taWNJbnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uKiBtX2F0b21pY1VpbnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBt
X3NhbXBsZXJUeXBlOworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9y
Qm9vbFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JVY2hhclsz
XTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JVc2hvcnRbM107Cisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yVWludFszXTsKKyAgICBBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JDaGFyWzNdOworICAgIEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvclNob3J0WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uKiBtX3ZlY3RvckludFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biogbV92ZWN0b3JIYWxmWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3Zl
Y3RvckZsb2F0WzNdOworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fbWF0cml4
SGFsZlszXVszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9tYXRyaXhGbG9h
dFszXVszXTsKKworICAgIFZlY3RvcjxTdHJpbmc+IG1fdGV4dHVyZVR5cGVOYW1lczsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBtX3RleHR1cmVJbm5lclR5cGVOYW1lczsKKworICAgIEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uKiBtX2Z1bGxUZXh0dXJlc1sxMV1bOF1bNF07CisKKyAgICBWZWN0b3I8
U3RyaW5nPiBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXM7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24qIG1fdGV4dHVyZURlcHRoMkRbMl07CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24qIG1fcndUZXh0dXJlRGVwdGgyRFsyXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiogbV90ZXh0dXJlRGVwdGgyREFycmF5WzJdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiBtX3J3VGV4dHVyZURlcHRoMkRBcnJheVsyXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV90ZXh0dXJlRGVwdGhDdWJlWzJdOworfTsKKworfQorCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xM
ZXhlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVy
LmNwcAppbmRleCAzYjE5MzRlOTMxNi4uZTlhZWFlN2I1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCkBAIC0yMyw4ICsyMyw2
IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI3ByYWdtYSBv
bmNlCi0KICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNv
bnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1l
Q29udGV4dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRlODZi
Yjk4MDRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldI
TFNMTmFtZUNvbnRleHQuaCIKKworI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExT
TE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgorI2lu
Y2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVj
bGFyYXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CitOYW1lQ29udGV4dDo6TmFtZUNvbnRleHQoTmFtZUNvbnRleHQqIHBhcmVudCkKKyAgICA6IG1f
cGFyZW50KHBhcmVudCkKK3sKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6VHlwZURl
ZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKQoreworICAgIGlmIChleGlzdHModHlwZURlZmluaXRp
b24ubmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV90
eXBlcy5hZGQodHlwZURlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZCh0eXBlRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRl
eHQ6OmFkZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCit7
CisgICAgaWYgKGV4aXN0cyhzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKHN0cnVjdHVyZURlZmlu
aXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlw
ZT4sIDE+KCkpOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChzdHJ1Y3R1cmVEZWZpbml0
aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCit7CisgICAgaWYg
KGV4aXN0cyhlbnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQoZW51bWVyYXRpb25EZWZpbml0aW9u
Lm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAx
PigpKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZW51bWVyYXRpb25EZWZpbml0aW9u
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7CisgICAgaWYgKG1fdHlwZXMu
ZmluZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAg
IHx8IG1fdmFyaWFibGVzLmZpbmQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkgIT0gbV92YXJp
YWJsZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1f
ZnVuY3Rpb25zLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChmdW5jdGlvbkRlZmluaXRpb24pOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIGlmIChtX3R5cGVz
LmZpbmQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdHlwZXMuZW5kKCkK
KyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSkgIT0gbV92YXJpYWJsZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBh
dXRvIHJlc3VsdCA9IG1fZnVuY3Rpb25zLmFkZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5h
bWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uPiwgMT4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRl
eHQ6OmFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9u
KQoreworICAgIGlmIChtX2Z1bmN0aW9ucy5maW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkpICE9IG1fZnVuY3Rpb25zLmVuZCgpCisgICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV92YXJpYWJsZXMuZW5kKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFt
ZWRUeXBlPiwgMT4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobmF0aXZl
VHlwZURlY2xhcmF0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4
dDo6YWRkKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKK3sK
KyAgICBpZiAoZXhpc3RzKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV92YXJpYWJsZXMuYWRkKFN0cmluZyh2YXJp
YWJsZURlY2xhcmF0aW9uLm5hbWUoKSksICZ2YXJpYWJsZURlY2xhcmF0aW9uKTsKKyAgICByZXR1
cm4gcmVzdWx0LmlzTmV3RW50cnk7Cit9CisKK1ZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEFTVDo6TmFtZWRUeXBlPiwgMT4qIE5hbWVDb250ZXh0OjpnZXRUeXBlcyhjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgYXV0byBpdGVyYXRvciA9IG1fdHlwZXMuZmluZChuYW1lKTsKKyAgICBp
ZiAoaXRlcmF0b3IgPT0gbV90eXBlcy5lbmQoKSkgeworICAgICAgICBpZiAobV9wYXJlbnQpCisg
ICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldFR5cGVzKG5hbWUpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7Cit9CisKK1Zl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+
KiBOYW1lQ29udGV4dDo6Z2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBh
dXRvIGl0ZXJhdG9yID0gbV9mdW5jdGlvbnMuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlcmF0b3Ig
PT0gbV9mdW5jdGlvbnMuZW5kKCkpIHsKKyAgICAgICAgaWYgKG1fcGFyZW50KQorICAgICAgICAg
ICAgcmV0dXJuIG1fcGFyZW50LT5nZXRGdW5jdGlvbnMobmFtZSk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKyAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKK30KKworQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uKiBOYW1lQ29udGV4dDo6Z2V0VmFyaWFibGUoY29uc3QgU3RyaW5n
JiBuYW1lKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3ZhcmlhYmxlcy5maW5kKG5hbWUpOwor
ICAgIGlmIChpdGVyYXRvciA9PSBtX3ZhcmlhYmxlcy5lbmQoKSkgeworICAgICAgICBpZiAobV9w
YXJlbnQpCisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldFZhcmlhYmxlKG5hbWUpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1
ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6ZXhpc3RzKFN0cmluZyYgbmFtZSkKK3sKKyAgICBy
ZXR1cm4gbV90eXBlcy5maW5kKG5hbWUpICE9IG1fdHlwZXMuZW5kKCkKKyAgICAgICAgfHwgbV9m
dW5jdGlvbnMuZmluZChuYW1lKSAhPSBtX2Z1bmN0aW9ucy5lbmQoKQorICAgICAgICB8fCBtX3Zh
cmlhYmxlcy5maW5kKG5hbWUpICE9IG1fdmFyaWFibGVzLmVuZCgpOworfQorCit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTE5hbWVDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTE5hbWVDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmQzZGY4MDAxNGFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlIDxmdW5j
dGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBOYW1lZFR5
cGU7CitjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3MgVHlwZURlZmluaXRpb247Citj
bGFzcyBTdHJ1Y3R1cmVEZWZpbml0aW9uOworY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uOwor
Y2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworY2xhc3MgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bjsKK2NsYXNzIE5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKK2NsYXNzIFZhcmlhYmxlRGVjbGFyYXRp
b247CisKK30KKworY2xhc3MgTmFtZUNvbnRleHQgeworcHVibGljOgorICAgIE5hbWVDb250ZXh0
KE5hbWVDb250ZXh0KiBwYXJlbnQgPSBudWxscHRyKTsKKworICAgIGJvb2wgYWRkKEFTVDo6VHlw
ZURlZmluaXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mKTsK
KyAgICBib29sIGFkZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRk
KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mKTsKKyAgICBib29sIGFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKTsKKworICAgIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4qIGdldFR5cGVz
KGNvbnN0IFN0cmluZyYpOworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KiBnZXRGdW5jdGlvbnMoY29uc3QgU3RyaW5nJik7Cisg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKiBnZXRWYXJpYWJsZShjb25zdCBTdHJpbmcmKTsK
KworcHJpdmF0ZToKKyAgICBib29sIGV4aXN0cyhTdHJpbmcmKTsKKworICAgIEhhc2hNYXA8U3Ry
aW5nLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+PiBt
X3R5cGVzOworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPj4gbV9mdW5jdGlvbnM7CisgICAgSGFzaE1h
cDxTdHJpbmcsIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbio+IG1fdmFyaWFibGVzOworICAgIE5h
bWVDb250ZXh0KiBtX3BhcmVudDsKK307CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVy
LmNwcAppbmRleCA3ODBkNWM1NDI1YS4uOWY5YjAyNzRkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAK
QEAgLTI4LDE5ICsyOCwyNDUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXSExT
TE5hbWVSZXNvbHZlci5oIgogCi0jaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSAi
V0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250
ZXh0LmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgiCisjaW5jbHVkZSAi
V0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24u
aCIKKyNpbmNsdWRlICJXSExTTElmU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xXaGlsZUxv
b3AuaCIKKyNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xGb3JM
b29wLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMUmV0dXJuLmgiCisjaW5j
bHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTERv
dEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgor
I2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFByb2dyYW0u
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi1jbGFzcyBO
YW1lUmVzb2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7Ci0gICAgfk5hbWVSZXNvbHZlcigpID0gZGVm
YXVsdDsKLX07CitOYW1lUmVzb2x2ZXI6Ok5hbWVSZXNvbHZlcihOYW1lQ29udGV4dCYgbmFtZUNv
bnRleHQpCisgICAgOiBtX25hbWVDb250ZXh0KG5hbWVDb250ZXh0KQoreworfQorCit2b2lkIE5h
bWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQorewor
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlUmVmZXJlbmNlKTsKKyAgICBpZiAodHlwZVJlZmVy
ZW5jZS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogY2FuZGlk
YXRlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXModHlwZVJlZmVyZW5jZS5uYW1lKCkpOworICAg
IGlmIChjYW5kaWRhdGVzID09IG51bGxwdHIpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSByZXNvbHZlVHlwZU92ZXJs
b2FkSW1wbCgqY2FuZGlkYXRlcywgdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpKQorICAg
ICAgICB0eXBlUmVmZXJlbmNlLnNldFJlc29sdmVkVHlwZSgqcmVzdWx0KTsKKyAgICBlbHNlIHsK
KyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBO
YW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmlu
aXRpb24pCit7CisgICAgTmFtZUNvbnRleHQgbmV3TmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQp
OworICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIobmV3TmFtZUNvbnRleHQpOworICAg
IHZpc2l0VW5uYW1lZFR5cGUoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7CisgICAgZm9yIChh
dXRvJiBwYXJhbWV0ZXIgOiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpKSB7CisgICAg
ICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQocGFyYW1ldGVyKTsKKyAgICAg
ICAgYXV0byBzdWNjZXNzID0gbmV3TmFtZUNvbnRleHQuYWRkKHBhcmFtZXRlcik7CisgICAgICAg
IGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBuZXdOYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFu
ZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKK30KKwordm9pZCBOYW1lUmVzb2x2
ZXI6OnZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQoreworICAgIE5hbWVDb250ZXh0IG5hbWVDb250
ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNr
RXJyb3JBbmRWaXNpdChibG9jayk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6
OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZT
dGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1f
bmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFu
ZFZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CisgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5
KCkpIHsKKyAgICAgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOwor
ICAgICAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdCgqaWZT
dGF0ZW1lbnQuZWxzZUJvZHkoKSk7CisgICAgfQorfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlz
aXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQo
d2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZt
X25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JB
bmRWaXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0
KEFTVDo6RG9XaGlsZUxvb3AmIHdoaWxlTG9vcCkKK3sKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29u
dGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVj
a0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0
KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKK3sKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgm
bV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9y
QW5kVmlzaXQoZm9yTG9vcCk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgbV9uYW1lQ29u
dGV4dC5hZGQodmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZh
cmlhYmxlRGVjbGFyYXRpb24pOworfQogCi12b2lkIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3Jh
bSYpCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYgdmFy
aWFibGVSZWZlcmVuY2UpCiB7CisgICAgaWYgKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChhdXRvKiB2YXJpYWJsZSA9IG1fbmFtZUNvbnRl
eHQuZ2V0VmFyaWFibGUodmFyaWFibGVSZWZlcmVuY2UubmFtZSgpKSkKKyAgICAgICAgdmFyaWFi
bGVSZWZlcmVuY2Uuc2V0VmFyaWFibGUoKnZhcmlhYmxlKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBOYW1lUmVzb2x2
ZXI6OnZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpCit7CisgICAgQVNTRVJUKG1f
Y3VycmVudEZ1bmN0aW9uKTsKKyAgICByZXR1cm5TdGF0ZW1lbnQuc2V0RnVuY3Rpb24obV9jdXJy
ZW50RnVuY3Rpb24pOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZXR1cm5TdGF0ZW1lbnQpOwor
fQogCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoYXV0byogZ2V0RnVuY3Rp
b25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LmdldEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNl
dFBvc3NpYmxlR2V0T3ZlcmxvYWRzKCpnZXRGdW5jdGlvbnMpOworICAgIGlmIChhdXRvKiBzZXRG
dW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uc2V0RnVuY3Rpb25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uc2V0UG9zc2libGVTZXRPdmVybG9hZHMoKnNldEZ1bmN0aW9ucyk7CisgICAgaWYgKGF1dG8q
IGFuZEZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5hbmRGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgIHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5zZXRQb3NzaWJsZUFuZE92ZXJsb2FkcygqYW5kRnVuY3Rpb25zKTsKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKTsKK30KKwordm9pZCBOYW1l
UmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAg
ICBpZiAoaXM8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5iYXNlKCkpKSB7
CisgICAgICAgIGlmIChhdXRvIGVudW1lcmF0aW9uVHlwZXMgPSBtX25hbWVDb250ZXh0LmdldFR5
cGVzKGRvd25jYXN0PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGRvdEV4cHJlc3Npb24uYmFzZSgp
KS5uYW1lKCkpKSB7CisgICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy0+c2l6ZSgp
ID09IDEpOworICAgICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVudW1lcmF0aW9u
VHlwZXMpWzBdOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
Pih0eXBlKSkgeworICAgICAgICAgICAgICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBl
bnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlv
bj4odHlwZSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1lcmF0aW9u
RGVmaW5pdGlvbi5tZW1iZXJCeU5hbWUoZG90RXhwcmVzc2lvbi5maWVsZE5hbWUoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpFbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwpIDw9IHNpemVvZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4cHJlc3Np
b25zIG5lZWQgdG8gYmUgYWJsZSB0byBiZWNvbWUgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFscyB3
aXRob3V0IHVwZGF0aW5nIGJhY2tyZWZlcmVuY2VzIik7CisgICAgICAgICAgICAgICAgICAgIExl
eGVyOjpUb2tlbiBvcmlnaW4gPSBkb3RFeHByZXNzaW9uLm9yaWdpbigpOworICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogUGVyaGFwcyBkbyB0aGlzIHdpdGggdmFyaWFudHMgb3IgYSBSZXdy
aXRlciBpbnN0ZWFkLgorICAgICAgICAgICAgICAgICAgICBkb3RFeHByZXNzaW9uLn5Eb3RFeHBy
ZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAgIG5ldyAoJmRvdEV4cHJlc3Npb24pIEFTVDo6
RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKFdURk1vdmUob3JpZ2luKSwgKm1lbWJlcik7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvdEV4cHJlc3Npb24pOworfQorCit2b2lkIE5hbWVSZXNvbHZl
cjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCit7CisgICAgaWYg
KCFjYWxsRXhwcmVzc2lvbi5oYXNPdmVybG9hZHMoKSkgeworICAgICAgICBpZiAoYXV0byogZnVu
Y3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoY2FsbEV4cHJlc3Npb24ubmFtZSgp
KSkKKyAgICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjYWxsRXhwcmVzc2lvbi5zZXRDYXN0RGF0YSgp
OworICAgICAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVu
Y3Rpb25zKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpCisgICAgICAgICAgICAgICAgY2FsbEV4cHJl
c3Npb24uc2V0T3ZlcmxvYWRzKCpmdW5jdGlvbnMpOworICAgICAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGNhbGxFeHBy
ZXNzaW9uKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Q29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1l
cmF0aW9uTWVtYmVyUmVmZXJlbmNlKQoreworICAgIGlmIChhdXRvIGVudW1lcmF0aW9uVHlwZXMg
PSBtX25hbWVDb250ZXh0LmdldFR5cGVzKGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVt
YmVyUmVmZXJlbmNlLmxlZnQoKSkpIHsKKyAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uVHlwZXMt
PnNpemUoKSA9PSAxKTsKKyAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVudW1lcmF0
aW9uVHlwZXMpWzBdOworICAgICAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+
KHR5cGUpKSB7CisgICAgICAgICAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVy
YXRpb25EZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHR5
cGUpOworICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1lcmF0aW9uRGVmaW5pdGlv
bi5tZW1iZXJCeU5hbWUoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UucmlnaHQoKSkpIHsKKyAgICAgICAgICAgICAgICBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZS5zZXRFbnVtZXJhdGlvbk1lbWJlcihlbnVtZXJhdGlvbkRlZmlu
aXRpb24sICptZW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzZXRFcnJvcigpOworfQorCisvLyBGSVhNRTog
TWFrZSBzdXJlIGFsbCB0aGUgbmFtZXMgaGF2ZSBiZWVuIHJlc29sdmVkLgorCitib29sIHJlc29s
dmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2
ZXIpCit7CisgICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmlu
aXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCgqdHlw
ZURlZmluaXRpb24pOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5p
dGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVz
b2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KCpzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAg
aWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVy
YXRpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5k
VmlzaXQoKmVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIu
ZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChhdXRv
JiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMo
KSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KCpuYXRpdmVUeXBl
RGVjbGFyYXRpb24pOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIHJl
c29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZlciYgbmFt
ZVJlc29sdmVyKQoreworICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3Jh
bS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLnNldEN1cnJl
bnRGdW5jdGlvbkRlZmluaXRpb24oZnVuY3Rpb25EZWZpbml0aW9uLmdldCgpKTsKKyAgICAgICAg
bmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCgqZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAg
ICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihu
dWxscHRyKTsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9n
cmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVy
LmNoZWNrRXJyb3JBbmRWaXNpdCgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAg
IGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCmluZGV4IDQ3ZDRkNmE1
NzkzLi4xNWFmZGUzZDAzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCkBAIC0yNywxMyArMjcsNDkgQEAKIAog
I2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRl
ICJXSExTTE5hbWVDb250ZXh0LmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAotdm9pZCByZXNvbHZlTmFtZXNJ
blR5cGVzKFByb2dyYW0mIHByb2dyYW0pOworY2xhc3MgUHJvZ3JhbTsKKworY2xhc3MgTmFtZVJl
c29sdmVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIE5hbWVSZXNvbHZlcihOYW1l
Q29udGV4dCYpOworCisgICAgdmlydHVhbCB+TmFtZVJlc29sdmVyKCkgPSBkZWZhdWx0OworCisg
ICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9u
KSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAg
bV9jdXJyZW50RnVuY3Rpb24gPSBmdW5jdGlvbkRlZmluaXRpb247CisgICAgfQorCitwcml2YXRl
OgorICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2aXNpdChBU1Q6OkJsb2NrJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OklmU3Rh
dGVtZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYpIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlzaXQoQVNUOjpGb3JMb29wJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2UmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJikgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2
aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikg
b3ZlcnJpZGU7CisKKyAgICBOYW1lQ29udGV4dCBtX25hbWVDb250ZXh0OworICAgIEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uKiBtX2N1cnJlbnRGdW5jdGlvbiB7IG51bGxwdHIgfTsKK307CisKK2Jv
b2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiwgTmFtZVJlc29sdmVyJik7Citib29sIHJl
c29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mLCBOYW1lUmVzb2x2ZXImKTsKIAogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5j
cHAKaW5kZXggYmM2ZTczZTZhMWYuLmE3ZGI1ZTUzNDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCkBAIC0zOCw3ICszOCw4
IEBAIFBhcnNlcjo6UGFyc2VyKCkKIHsKIH0KIAotYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0m
IHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmFsPEVy
cm9yPgorLy8gRklYTUU6IFJldHVybiBhIGJldHRlciBlcnJvciBjb2RlIGZyb20gdGhpcywgYW5k
IHJlcG9ydCBpdCB0byBKYXZhU2NyaXB0LgorYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHBy
b2dyYW0sIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hbDxFcnJv
cj4KIHsKICAgICBtX2xleGVyID0gTGV4ZXIoc3RyaW5nVmlldyk7CiAgICAgbV9tb2RlID0gbW9k
ZTsKQEAgLTU0LDcgKzU1LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQs
IFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlVHlwZURlZmluaXRpb24oKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICAgICAgaWYgKHR5cGVEZWZpbml0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChXVEZNb3ZlKCp0eXBlRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3Vj
Y2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKnR5cGVEZWZpbml0aW9uKSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5
cygiTmFtZSBFcnJvciEgJXMiLCB0eXBlRGVmaW5pdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtNjQsNyArNjksMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwg
U3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmEKICAgICAgICAgICAg
ICAgICByZXR1cm4gcGFyc2VTdHJ1Y3R1cmVEZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVEZWZpbml0aW9uKSB7Ci0gICAgICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CisgICAgICAgICAg
ICAgICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqc3RydWN0dXJlRGVm
aW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAg
ICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgc3RydWN0dXJlRGVmaW5pdGlv
bi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzQsNyArODMsMTEgQEAgYXV0byBQYXJzZXI6
OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUp
IC0+IE9wdGlvbmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VFbnVtZXJhdGlvbkRlZmlu
aXRpb24oKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKGVudW1lcmF0aW9uRGVm
aW5pdGlvbikgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqZW51bWVy
YXRpb25EZWZpbml0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gcHJvZ3Jh
bS5hcHBlbmQoV1RGTW92ZSgqZW51bWVyYXRpb25EZWZpbml0aW9uKSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiTmFt
ZSBFcnJvciEgJXMiLCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KQEAgLTg1LDcgKzk4LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQs
IFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9KTsK
ICAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24pIHsKLSAgICAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKFdURk1vdmUoKmZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAg
ICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmZ1bmN0aW9uRGVmaW5p
dGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAg
ICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgZnVuY3Rpb25EZWZpbml0aW9uLT5u
YW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgZXJyb3IgPSBmdW5jdGlvbkRlZmluaXRpb24uZXJyb3Io
KTsKQEAgLTk2LDcgKzExMywxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0
LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJzZU5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pIHsKLSAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgaWYg
KCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJv
ciEgJXMiLCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC0xMDYsNyArMTI3LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQs
IFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlTmF0aXZlVHlwZURlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgICB9
KTsKICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKm5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpOworICAg
ICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAg
ICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00NTQsMTYgKzQ3OSw1MiBA
QCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQoKSAtPiBFeHBlY3Rl
ZDxUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KHJpZ2h0U3F1YXJlQnJhY2tldC5lcnJvcigpKTsKICAgICAgICAgcmV0dXJuIHt7ICp0
b2tlbiwgV1RGOjpudWxsb3B0LCAqbnVtRWxlbWVudHMgfX07CiAgICAgfQotICAgIGF1dG8gYWRk
cmVzc1NwYWNlID0gY29uc3VtZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudCwg
TGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2UsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3Jv
dXAsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkfSk7Ci0gICAgaWYgKCFhZGRyZXNzU3BhY2Up
Ci0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2UuZXJyb3IoKSk7
Ci0gICAgcmV0dXJuIHt7ICp0b2tlbiwgeyAqYWRkcmVzc1NwYWNlIH0sIFdURjo6bnVsbG9wdCB9
fTsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZVRva2VuID0gY29uc3VtZVR5cGVzKHsgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2UsIExleGVyOjpU
b2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkfSk7Cisg
ICAgaWYgKCFhZGRyZXNzU3BhY2VUb2tlbikKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KGFkZHJlc3NTcGFjZVRva2VuLmVycm9yKCkpOworICAgIEFTVDo6UmVmZXJlbmNlVHlwZTo6
QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsKKyAgICBzd2l0Y2ggKGFkZHJlc3NTcGFjZVRva2Vu
LT50eXBlKSB7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0YW50OgorICAgICAg
ICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3Rh
bnQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2U6
CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNl
OjpEZXZpY2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpU
aHJlYWRncm91cDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVy
OjpUb2tlbjo6VHlwZTo6VGhyZWFkOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVy
ZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KEVycm9yKFN0cmluZygiU29tZXRoaW5nIHJlYWxseSBiYWQgaGFwcGVuZWQi
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkpOworICAgIH0KKyAgICByZXR1cm4ge3sg
KnRva2VuLCB7IGFkZHJlc3NTcGFjZSB9LCBXVEY6Om51bGxvcHQgfX07CiB9CiAKLWF1dG8gUGFy
c2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPiwgRXJyb3I+IHsKLSAgICBhdXRvIGFkZHJlc3NTcGFjZSA9IGNvbnN1bWVUeXBl
cyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2
aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6
OlRocmVhZH0pOwotICAgIGlmICghYWRkcmVzc1NwYWNlKQotICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4oYWRkcmVzc1NwYWNlLmVycm9yKCkpOworYXV0byBQYXJzZXI6OnBhcnNlQWRk
cmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRU
eXBlPiwgRXJyb3I+IHsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZVRva2VuID0gY29uc3VtZVR5cGVz
KHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZp
Y2UsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExleGVyOjpUb2tlbjo6VHlwZTo6
VGhyZWFkfSk7CisgICAgaWYgKCFhZGRyZXNzU3BhY2VUb2tlbikKKyAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZVRva2VuLmVycm9yKCkpOworICAgIEFTVDo6UmVm
ZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsKKyAgICBzd2l0Y2ggKGFkZHJl
c3NTcGFjZVRva2VuLT50eXBlKSB7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0
YW50OgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NT
cGFjZTo6Q29uc3RhbnQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpU
eXBlOjpEZXZpY2U6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6
QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpUaHJlYWRncm91cDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZl
cmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkOgorICAgICAgICBhZGRyZXNzU3BhY2Ug
PSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKFN0cmluZygiU29tZXRoaW5nIHJlYWxseSBi
YWQgaGFwcGVuZWQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkpOworICAgIH0KICAg
ICBhdXRvIG5hbWUgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIp
OwogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUu
ZXJyb3IoKSk7CkBAIC00NzEsMTIgKzUzMiwxMiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNz
U3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycgog
ICAgIGlmICghdHlwZUFyZ3VtZW50cykKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KHR5cGVBcmd1bWVudHMuZXJyb3IoKSk7CiAKLSAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3Vm
Zml4QWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeEFiYnJldmlhdGVkJiB0eXBlU3Vm
Zml4QWJicmV2aWF0ZWQsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgcHJldmlvdXMpIC0+
IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IHsKKyAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9t
U3VmZml4QWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeEFiYnJldmlhdGVkJiB0eXBl
U3VmZml4QWJicmV2aWF0ZWQsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHBy
ZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAgICBz
d2l0Y2ggKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbi50eXBlKSB7CiAgICAgICAgIGNhc2Ug
TGV4ZXI6OlRva2VuOjpUeXBlOjpTdGFyOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRl
ZC50b2tlbiksIGFkZHJlc3NTcGFjZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHBy
ZXZpb3VzKSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlBvaW50
ZXJUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeEFiYnJldmlhdGVkLnRva2VuKSwgYWRkcmVz
c1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpU
eXBlOjpTcXVhcmVCcmFja2V0UGFpcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeEFiYnJl
dmlhdGVkLnRva2VuKSwgYWRkcmVzc1NwYWNlLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1v
dmUocHJldmlvdXMpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeEFiYnJldmlhdGVkLnRv
a2VuKSwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgIGNhc2UgTGV4
ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldDoKICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeEFi
YnJldmlhdGVkLnRva2VuKSwgV1RGTW92ZShwcmV2aW91cyksICp0eXBlU3VmZml4QWJicmV2aWF0
ZWQubnVtRWxlbWVudHMpOwogICAgICAgICBkZWZhdWx0OgpAQCAtNDg4LDcgKzU0OSw3IEBAIGF1
dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpUeXBlPiwgRXJyCiAgICAgYXV0byBmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRl
ZCA9IHBhcnNlVHlwZVN1ZmZpeEFiYnJldmlhdGVkKCk7CiAgICAgaWYgKCFmaXJzdFR5cGVTdWZm
aXhBYmJyZXZpYXRlZCkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0VHlw
ZVN1ZmZpeEFiYnJldmlhdGVkLmVycm9yKCkpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5
cGU+IHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBlUmVmZXJlbmNlPihMZXhlcjo6
VG9rZW4oKmFkZHJlc3NTcGFjZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92
ZSgqdHlwZUFyZ3VtZW50cykpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBl
PiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZVJlZmVyZW5jZT4oV1RGTW92ZSgq
YWRkcmVzc1NwYWNlVG9rZW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUo
KnR5cGVBcmd1bWVudHMpKTsKICAgICByZXN1bHQgPSBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFi
YnJldmlhdGVkKCpmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZCwgV1RGTW92ZShyZXN1bHQpKTsK
ICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBhdXRvIHR5cGVTdWZmaXhBYmJyZXZpYXRlZCA9
IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPFR5cGVTdWZmaXhBYmJyZXZpYXRlZCwgRXJyb3I+
PihbJl0oKSB7CkBAIC01MDMsNyArNTY0LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlQWRkcmVzc1Nw
YWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnIKICAg
ICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VOb25BZGRy
ZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVy
cm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4gewogICAgIGF1dG8g
b3JpZ2luID0gcGVlaygpOwogICAgIGlmICghb3JpZ2luKQogICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwpAQCAtNTE0LDEyICs1NzUsMTIgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+LAogICAgIGlmICghdHlwZUFyZ3VtZW50cykKICAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGVBcmd1bWVudHMuZXJyb3IoKSk7CiAKLSAgICBhdXRvIGNv
bnN0cnVjdFR5cGVGcm9tU3VmZml4Tm9uQWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZp
eE5vbkFiYnJldmlhdGVkJiB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQsIHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlR5cGU+JiYgcHJldmlvdXMpIC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IHsK
KyAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4Tm9uQWJicmV2aWF0ZWQgPSBbJl0oY29u
c3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkJiB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQsIHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAgICBzd2l0Y2ggKHR5cGVTdWZmaXhOb25B
YmJyZXZpYXRlZC50b2tlbi50eXBlKSB7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBl
OjpTdGFyOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVy
VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbiksIHR5cGVT
dWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2UtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwg
V1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50
b2tlbiksICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHBy
ZXZpb3VzKSk7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpTcXVhcmVCcmFja2V0
UGFpcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLnRva2VuKSwg
dHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NTcGFjZS0+c3RyaW5nVmlldy50b1N0cmlu
ZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25B
YmJyZXZpYXRlZC50b2tlbiksICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNl
LCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpM
ZWZ0U3F1YXJlQnJhY2tldDoKICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFT
VDo6QXJyYXlUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLnRva2Vu
KSwgV1RGTW92ZShwcmV2aW91cyksICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQubnVtRWxlbWVu
dHMpOwogICAgICAgICBkZWZhdWx0OgpAQCAtNTI4LDcgKzU4OSw3IEBAIGF1dG8gUGFyc2VyOjpw
YXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpUeXBlPiwKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpU
eXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZVJlZmVyZW5jZT4oV1RGTW92
ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJn
dW1lbnRzKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHJlc3VsdCA9
IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKCpvcmlnaW4pLCBu
YW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKICAg
ICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBhdXRvIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCA9
IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCwgRXJy
b3I+PihbJl0oKSB7CiAgICAgICAgICAgICByZXR1cm4gcGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2
aWF0ZWQoKTsKQEAgLTU0MiwxNCArNjAzLDE0IEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJl
c3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwKICAg
ICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VUeXBlKCkg
LT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiB7Ci0gICAgYXV0
byB0eXBlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6
VHlwZT4sIEVycm9yPj4oWyZdKCkgeworYXV0byBQYXJzZXI6OnBhcnNlVHlwZSgpIC0+IEV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHsKKyAgICBhdXRv
IHR5cGUgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpV
bm5hbWVkVHlwZT4sIEVycm9yPj4oWyZdKCkgewogICAgICAgICByZXR1cm4gcGFyc2VBZGRyZXNz
U3BhY2VUeXBlKCk7CiAgICAgfSk7CiAgICAgaWYgKHR5cGUpCiAgICAgICAgIHJldHVybiB0eXBl
OwogCi0gICAgdHlwZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKKyAgICB0eXBlID0gYmFja3RyYWNraW5nU2Nv
cGU8RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4+KFsm
XSgpIHsKICAgICAgICAgcmV0dXJuIHBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpOwogICAgIH0p
OwogICAgIGlmICh0eXBlKQpAQCAtODQ3LDcgKzkwOCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVu
dW1lcmF0aW9uRGVmaW5pdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uCiAgICAgaWYgKCFuYW1lKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmFt
ZS5lcnJvcigpKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IHR5cGU7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHR5cGU7CiAgICAgaWYgKHRyeVR5cGUo
TGV4ZXI6OlRva2VuOjpUeXBlOjpDb2xvbikpIHsKICAgICAgICAgYXV0byBwYXJzZWRUeXBlID0g
cGFyc2VUeXBlKCk7CiAgICAgICAgIGlmICghcGFyc2VkVHlwZSkKQEAgLTg2MywyMSArOTI0LDI1
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigpIC0+IEV4cGVjdGVk
PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uCiAgICAgaWYgKCFmaXJzdEVudW1lcmF0aW9uTWVt
YmVyKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZmlyc3RFbnVtZXJhdGlvbk1l
bWJlci5lcnJvcigpKTsKIAotICAgIEFTVDo6RW51bWVyYXRpb25NZW1iZXJzIG1lbWJlcnM7Ci0g
ICAgbWVtYmVycy5hcHBlbmQoV1RGTW92ZSgqZmlyc3RFbnVtZXJhdGlvbk1lbWJlcikpOworICAg
IEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uIHJlc3VsdChXVEZNb3ZlKCpvcmlnaW4pLCBuYW1l
LT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUodHlwZSkpOworICAgIGF1dG8gc3VjY2Vz
cyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgqZmlyc3RFbnVtZXJhdGlvbk1lbWJlcikpOworICAgIGlm
ICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGZhaWwoU3RyaW5nKCJDYW5ub3QgYWRkIGVudW1l
cmF0aW9uIG1lbWJlciIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKIAogICAgIHdo
aWxlICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29tbWEpKSB7CiAgICAgICAgIGF1dG8g
bWVtYmVyID0gcGFyc2VFbnVtZXJhdGlvbk1lbWJlcigpOwogICAgICAgICBpZiAoIW1lbWJlcikK
ICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihtZW1iZXIuZXJyb3IoKSk7Ci0g
ICAgICAgIG1lbWJlcnMuYXBwZW5kKFdURk1vdmUoKm1lbWJlcikpOworICAgICAgICBzdWNjZXNz
ID0gcmVzdWx0LmFkZChXVEZNb3ZlKCptZW1iZXIpKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQor
ICAgICAgICAgICAgcmV0dXJuIGZhaWwoU3RyaW5nKCJDYW5ub3QgYWRkIGVudW1lcmF0aW9uIG1l
bWJlciIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKICAgICB9CiAKICAgICBhdXRv
IHJpZ2h0Q3VybHlCcmFja2V0ID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdo
dEN1cmx5QnJhY2tldCk7CiAgICAgaWYgKCFyaWdodEN1cmx5QnJhY2tldCkKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHJpZ2h0Q3VybHlCcmFja2V0LmVycm9yKCkpOwogCi0gICAg
cmV0dXJuIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uKFdURk1vdmUoKm9yaWdpbiksIG5hbWUt
PnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSh0eXBlKSwgV1RGTW92ZShtZW1iZXJzKSk7
CisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlRW51
bWVyYXRpb25NZW1iZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uTWVtYmVyLCBFcnJv
cj4gewpAQCAtOTgxLDcgKzEwNDYsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VBdHRyaWJ1dGVCbG9j
aygpIC0+IEV4cGVjdGVkPEFTVDo6QXR0cmlidXRlQmxvY2ssIEVycm9yPiB7CiAgICAgcmV0dXJu
IFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVyKCkgLT4g
RXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXIsIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VQYXJh
bWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiB7CiAg
ICAgYXV0byBvcmlnaW4gPSBwZWVrKCk7CiAgICAgaWYgKCFvcmlnaW4pCiAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CkBAIC05OTIsNyArMTA1Nyw3IEBA
IGF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVy
LCBFcnJvcj4gewogICAgIGlmICghdHlwZSkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KHR5cGUuZXJyb3IoKSk7CiAKLSAgICBPcHRpb25hbDxTdHJpbmc+IG5hbWU7CisgICAgU3Ry
aW5nIG5hbWU7CiAgICAgaWYgKGF1dG8gdG9rZW4gPSB0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlw
ZTo6SWRlbnRpZmllcikpCiAgICAgICAgIG5hbWUgPSB0b2tlbi0+c3RyaW5nVmlldy50b1N0cmlu
ZygpOwogCkBAIC0xMDAwLDE4ICsxMDY1LDE4IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRl
cigpIC0+IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4gewogICAgICAgICBhdXRvIHNl
bWFudGljID0gcGFyc2VTZW1hbnRpYygpOwogICAgICAgICBpZiAoIXNlbWFudGljKQogICAgICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNlbWFudGljLmVycm9yKCkpOwotICAgICAg
ICByZXR1cm4gQVNUOjpQYXJhbWV0ZXIoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShxdWFsaWZp
ZXJzKSwgV1RGTW92ZSgqdHlwZSksIFdURk1vdmUobmFtZSksIFdURk1vdmUoKnNlbWFudGljKSk7
CisgICAgICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2lu
KSwgV1RGTW92ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSgqdHlwZSksIFdURk1vdmUobmFtZSksIFdU
Rk1vdmUoKnNlbWFudGljKSwgbnVsbHB0cik7CiAgICAgfQogCi0gICAgcmV0dXJuIEFTVDo6UGFy
YW1ldGVyKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5
cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEY6Om51bGxvcHQpOworICAgIHJldHVybiBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShxdWFsaWZpZXJzKSwgV1RG
TW92ZSgqdHlwZSksIFdURk1vdmUobmFtZSksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CiB9CiAK
LWF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRl
cnMsIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXJzKCkgLT4gRXhwZWN0ZWQ8
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucywgRXJyb3I+IHsKICAgICBhdXRvIGxlZnRQYXJlbnRo
ZXNpcyA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFBhcmVudGhlc2lzKTsK
ICAgICBpZiAoIWxlZnRQYXJlbnRoZXNpcykKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KGxlZnRQYXJlbnRoZXNpcy5lcnJvcigpKTsKIAotICAgIEFTVDo6UGFyYW1ldGVycyBwYXJh
bWV0ZXJzOworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAgICBp
ZiAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0UGFyZW50aGVzaXMpKQogICAgICAg
ICByZXR1cm4gV1RGTW92ZShwYXJhbWV0ZXJzKTsKIApAQCAtMTA5NSwxNCArMTE2MCwxNiBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VFbnRyeVBvaW50RnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVj
dGVkPEFTVDo6RnVuY3Rpb25EZWNsYQogICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHBhcmFtZXRlcnMuZXJyb3IoKSk7CiAKKyAgICBib29sIGlz
T3BlcmF0b3IgPSBmYWxzZTsKKwogICAgIGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6
Q29sb24pKSB7CiAgICAgICAgIGF1dG8gc2VtYW50aWMgPSBwYXJzZVNlbWFudGljKCk7CiAgICAg
ICAgIGlmICghc2VtYW50aWMpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
c2VtYW50aWMuZXJyb3IoKSk7Ci0gICAgICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShhdHRyaWJ1dGVCbG9jayksIGVudHJ5UG9pbnRU
eXBlLCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3Zl
KCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsKKyAgICAgICAgcmV0dXJuIEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKGF0dHJpYnV0ZUJs
b2NrKSwgZW50cnlQb2ludFR5cGUsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRv
U3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3Bl
cmF0b3IpOwogICAgIH0KIAotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RG
TW92ZSgqb3JpZ2luKSwgV1RGTW92ZShhdHRyaWJ1dGVCbG9jayksIGVudHJ5UG9pbnRUeXBlLCBX
VEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJh
bWV0ZXJzKSwgV1RGOjpudWxsb3B0KTsKKyAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoYXR0cmlidXRlQmxvY2spLCBlbnRyeVBvaW50
VHlwZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92
ZSgqcGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcik7CiB9CiAKIGF1dG8gUGFy
c2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4gewpAQCAtMTExNyw2ICsxMTg0LDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXQKICAgICBhdXRvIG5hbWUgPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6
VG9rZW46OlR5cGU6OklkZW50aWZpZXIsIExleGVyOjpUb2tlbjo6VHlwZTo6T3BlcmF0b3JOYW1l
IH0pOwogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5h
bWUuZXJyb3IoKSk7CisgICAgYXV0byBpc09wZXJhdG9yID0gbmFtZS0+dHlwZSA9PSBMZXhlcjo6
VG9rZW46OlR5cGU6Ok9wZXJhdG9yTmFtZTsKIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IHBhcnNl
UGFyYW1ldGVycygpOwogICAgIGlmICghcGFyYW1ldGVycykKQEAgLTExMjYsMTAgKzExOTQsMTAg
QEAgYXV0byBQYXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBl
Y3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXQKICAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNl
U2VtYW50aWMoKTsKICAgICAgICAgaWYgKCFzZW1hbnRpYykKICAgICAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5lcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwg
V1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFy
YW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSk7CisgICAgICAgIHJldHVybiBBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1v
dmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRl
cnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3IpOwogICAgIH0KIAotICAgIHJldHVy
biBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51
bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1v
dmUoKnBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQpOworICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUo
KnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMp
LCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpOwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VPcGVy
YXRvckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24sIEVycm9yPiB7CkBAIC0xMTQ1LDE0ICsxMjEzLDE2IEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25E
ZWNsYXJhCiAgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxF
cnJvcj4ocGFyYW1ldGVycy5lcnJvcigpKTsKIAorICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7
CisKICAgICBpZiAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbG9uKSkgewogICAgICAg
ICBhdXRvIHNlbWFudGljID0gcGFyc2VTZW1hbnRpYygpOwogICAgICAgICBpZiAoIXNlbWFudGlj
KQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNlbWFudGljLmVycm9yKCkp
OwotICAgICAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdp
biksIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgU3RyaW5nKCJPcGVyYXRvciBD
YXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoKnBhcmFtZXRlcnMp
LCBXVEZNb3ZlKCpzZW1hbnRpYykpOworICAgICAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBl
KSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCks
IFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3IpOwog
ICAgIH0KIAotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3Jp
Z2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBTdHJpbmcoIk9wZXJhdG9y
IENhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZSgqcGFyYW1ldGVy
cyksIFdURjo6bnVsbG9wdCk7CisgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihX
VEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIFN0cmlu
Zygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3Zl
KCpwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKTsKIH0KIAogYXV0byBQYXJz
ZXI6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbiwgRXJyb3I+IHsKQEAgLTEyMDAsNyArMTI3MCw3IEBAIGF1dG8gUGFyc2VyOjpw
YXJzZU5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjCiAgICAgaWYgKCFzZW1pY29sb24pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihzZW1pY29sb24uZXJyb3IoKSk7CiAKLSAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKGZ1bmN0aW9uRGVjbGFyYXRpb24tPnRha2VPcmlnaW4oKSwgZnVuY3Rp
b25EZWNsYXJhdGlvbi0+dGFrZUF0dHJpYnV0ZUJsb2NrKCksIGZ1bmN0aW9uRGVjbGFyYXRpb24t
PnRha2VFbnRyeVBvaW50VHlwZSgpLCBmdW5jdGlvbkRlY2xhcmF0aW9uLT50YWtlVHlwZSgpLCBm
dW5jdGlvbkRlY2xhcmF0aW9uLT50YWtlTmFtZSgpLCBmdW5jdGlvbkRlY2xhcmF0aW9uLT50YWtl
UGFyYW1ldGVycygpLCBmdW5jdGlvbkRlY2xhcmF0aW9uLT50YWtlU2VtYW50aWMoKSwgcmVzdHJp
Y3RlZCk7CisgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3Zl
KCpmdW5jdGlvbkRlY2xhcmF0aW9uKSwgcmVzdHJpY3RlZCk7CiB9CiAKIGF1dG8gUGFyc2VyOjpw
YXJzZUJsb2NrKCkgLT4gRXhwZWN0ZWQ8QVNUOjpCbG9jaywgRXJyb3I+IHsKQEAgLTEyNjEsNyAr
MTMzMSwxMCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VJZlN0YXRlbWVudCgpIC0+IEV4cGVjdGVkPEFT
VDo6SWZTdGF0ZW1lbnQsIEVycm9yPiB7CiAgICAgICAgIGVsc2VCb2R5ID0gV1RGTW92ZSgqcGFy
c2VkRWxzZUJvZHkpOwogICAgIH0KIAotICAgIHJldHVybiBBU1Q6OklmU3RhdGVtZW50KFdURk1v
dmUoKm9yaWdpbiksIFdURk1vdmUoKmNvbmRpdGlvbmFsKSwgV1RGTW92ZSgqYm9keSksIFdURk1v
dmUoZWxzZUJvZHkpKTsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lv
bj4+IGNhc3RBcmd1bWVudHM7CisgICAgY2FzdEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSgqY29u
ZGl0aW9uYWwpKTsKKyAgICBhdXRvIGJvb2xDYXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNh
bGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKm9yaWdpbiksIFN0cmluZygiYm9vbCIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhc3RBcmd1bWVudHMpKTsKKyAgICBy
ZXR1cm4gQVNUOjpJZlN0YXRlbWVudChXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKGJvb2xDYXN0
KSwgV1RGTW92ZSgqYm9keSksIFdURk1vdmUoZWxzZUJvZHkpKTsKIH0KIAogYXV0byBQYXJzZXI6
OnBhcnNlU3dpdGNoU3RhdGVtZW50KCkgLT4gRXhwZWN0ZWQ8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQs
IEVycm9yPiB7CkBAIC0xNDQzLDcgKzE1MTYsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VEb1doaWxl
TG9vcCgpIC0+IEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxvb3AsIEVycm9yPiB7CiAgICAgcmV0dXJu
IEFTVDo6RG9XaGlsZUxvb3AoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZSgqYm9keSksIFdURk1v
dmUoKmNvbmRpdGlvbmFsKSk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFy
YXRpb24oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlKSAtPiBFeHBlY3RlZDxBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJs
ZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUpIC0+
IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+IHsKICAgICBhdXRvIG9y
aWdpbiA9IHBlZWsoKTsKICAgICBpZiAoIW9yaWdpbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKQEAgLTE0ODgsNyArMTU2MSw3IEBAIGF1dG8gUGFy
c2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uc1N0CiAgICAgaWYgKCF0eXBlKQogICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4odHlwZS5lcnJvcigpKTsKIAotICAgIGF1dG8gZmlyc3RWYXJpYWJsZURlY2xhcmF0
aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+
KCgqdHlwZSktPmNsb25lKCkpKTsKKyAgICBhdXRvIGZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbiA9
IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKICAgICBpZiAoIWZp
cnN0VmFyaWFibGVEZWNsYXJhdGlvbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KGZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsKIApAQCAtMTQ5Niw3ICsxNTY5LDcg
QEAgYXV0byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKSAtPiBFeHBlY3RlZDxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3QKICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKmZp
cnN0VmFyaWFibGVEZWNsYXJhdGlvbikpOwogCiAgICAgd2hpbGUgKHRyeVR5cGUoTGV4ZXI6OlRv
a2VuOjpUeXBlOjpDb21tYSkpIHsKLSAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0g
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+KCgqdHlw
ZSktPmNsb25lKCkpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VW
YXJpYWJsZURlY2xhcmF0aW9uKCgqdHlwZSktPmNsb25lKCkpOwogICAgICAgICBpZiAoIXZhcmlh
YmxlRGVjbGFyYXRpb24pCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFy
aWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3Zl
KCp2YXJpYWJsZURlY2xhcmF0aW9uKSk7CkBAIC0xOTU5LDggKzIwMzIsMTAgQEAgYXV0byBQYXJz
ZXI6OnBhcnNlVGVybmFyeUNvbmRpdGlvbmFsKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6RXhwcmVzc2kKICAgICBpZiAoIWVsc2VFeHByZXNzaW9uKQogICAgICAgICByZXR1cm4g
VW5leHBlY3RlZDxFcnJvcj4oZWxzZUV4cHJlc3Npb24uZXJyb3IoKSk7CiAKLSAgICAvLyBGSVhN
RTogQ2FzdCB0aGUgcHJlZGljYXRlIHRvIGEgYm9vbC4KLSAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEFTVDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlRlcm5hcnlFeHByZXNz
aW9uPihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKCpwcmVkaWNhdGUpLCBXVEZNb3ZlKCpib2R5
RXhwcmVzc2lvbiksIFdURk1vdmUoKmVsc2VFeHByZXNzaW9uKSkpOworICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPj4gY2FzdEFyZ3VtZW50czsKKyAgICBjYXN0QXJn
dW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpwcmVkaWNhdGUpKTsKKyAgICBhdXRvIGJvb2xDYXN0ID0g
c3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKm9yaWdp
biksIFN0cmluZygiYm9vbCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3Zl
KGNhc3RBcmd1bWVudHMpKTsKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVz
c2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlRlcm5hcnlFeHByZXNzaW9uPihXVEZNb3ZlKCpv
cmlnaW4pLCBXVEZNb3ZlKGJvb2xDYXN0KSwgV1RGTW92ZSgqYm9keUV4cHJlc3Npb24pLCBXVEZN
b3ZlKCplbHNlRXhwcmVzc2lvbikpKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlQXNzaWdubWVu
dCgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4g
ewpAQCAtMjE3OCw3ICsyMjUzLDYgQEAgYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVSZWxhdGlv
bmFsQmluYXJ5T3BlcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHQKICAgICAgICAg
ICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUocHJldmlvdXMpKTsKICAgICAgICAgICAg
IGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKm5leHQpKTsKICAgICAgICAgICAgIHByZXZp
b3VzID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4o
KnJlbGF0aW9uYWxCaW5hcnlPcGVyYXRpb24pLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYWxsQXJndW1lbnRzKSk7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogQ2FzdCB0aGUgYXJndW1lbnQgdG8gYSBib29sCiAgICAgICAgICAgICBw
cmV2aW91cyA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oV1RG
TW92ZSgqcmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbiksIFdURk1vdmUocHJldmlvdXMpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMzY0LDggKzI0MzgsMTIgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlUG9zc2libGVQcmVmaXgoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpFeHByZXNzaW9uPiwKICAgICAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1v
dmUoKm5leHQpKTsKICAgICAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHBy
ZXNzaW9uPihzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tl
bigqcHJlZml4KSwgU3RyaW5nKCJvcGVyYXRvcn4iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSwgV1RGTW92ZShjYWxsQXJndW1lbnRzKSkpOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
TGV4ZXI6OlRva2VuOjpUeXBlOjpFeGNsYW1hdGlvblBvaW50OgotICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpM
b2dpY2FsTm90RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpwcmVmaXgpLCBXVEZNb3ZlKCpuZXh0
KSkpOworICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6RXhjbGFtYXRpb25Qb2ludDog
eworICAgICAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+PiBj
YXN0QXJndW1lbnRzOworICAgICAgICAgICAgY2FzdEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSgq
bmV4dCkpOworICAgICAgICAgICAgYXV0byBib29sQ2FzdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNU
OjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpwcmVmaXgpLCBTdHJpbmcoImJvb2wiLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYXN0QXJndW1lbnRzKSk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4oc3RkOjpt
YWtlX3VuaXF1ZTxBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKnByZWZp
eCksIFdURk1vdmUoYm9vbENhc3QpKSk7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBMZXhlcjo6
VG9rZW46OlR5cGU6OkFuZDoKICAgICAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpFeHByZXNzaW9uPihzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9u
PihMZXhlcjo6VG9rZW4oKnByZWZpeCksIFdURk1vdmUoKm5leHQpKSk7CiAgICAgICAgIGNhc2Ug
TGV4ZXI6OlRva2VuOjpUeXBlOjpBdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFBhcnNlci5oCmluZGV4IGRhM2UwNmIwMWU0Li44MDEzOTE0OTgwNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNl
ci5oCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAi
V0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xBcnJh
eVJlZmVyZW5jZVR5cGUuaCIKICNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgogI2luY2x1ZGUg
IldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKQEAgLTY4LDcgKzY3LDYgQEAKICNpbmNsdWRl
ICJXSExTTE5vZGUuaCIKICNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFsLmgiCiAjaW5jbHVkZSAi
V0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTFBhcmFt
ZXRlci5oIgogI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKICNpbmNsdWRlICJXSExTTFBy
b2dyYW0uaCIKICNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIgpAQCAt
MTU0LDEzICsxNTIsMTMgQEAgcHJpdmF0ZToKICAgICBFeHBlY3RlZDxUeXBlU3VmZml4QWJicmV2
aWF0ZWQsIEVycm9yPiBwYXJzZVR5cGVTdWZmaXhBYmJyZXZpYXRlZCgpOwogICAgIHN0cnVjdCBU
eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQgewogICAgICAgICBMZXhlcjo6VG9rZW4gdG9rZW47Ci0g
ICAgICAgIE9wdGlvbmFsPExleGVyOjpUb2tlbj4gYWRkcmVzc1NwYWNlOworICAgICAgICBPcHRp
b25hbDxBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlOwogICAg
ICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbnVtRWxlbWVudHM7CiAgICAgfTsKICAgICBFeHBlY3Rl
ZDxUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQsIEVycm9yPiBwYXJzZVR5cGVTdWZmaXhOb25BYmJy
ZXZpYXRlZCgpOwotICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJv
cj4gcGFyc2VBZGRyZXNzU3BhY2VUeXBlKCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6VHlwZT4sIEVycm9yPiBwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKTsKLSAgICBFeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+IHBhcnNlVHlwZSgpOworICAg
IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNl
QWRkcmVzc1NwYWNlVHlwZSgpOworICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVu
bmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpOworICAgIEV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNlVHlwZSgp
OwogICAgIEV4cGVjdGVkPEFTVDo6VHlwZURlZmluaXRpb24sIEVycm9yPiBwYXJzZVR5cGVEZWZp
bml0aW9uKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpCdWlsdEluU2VtYW50aWMsIEVycm9yPiBwYXJz
ZUJ1aWx0SW5TZW1hbnRpYygpOwogICAgIEV4cGVjdGVkPEFTVDo6UmVzb3VyY2VTZW1hbnRpYywg
RXJyb3I+IHBhcnNlUmVzb3VyY2VTZW1hbnRpYygpOwpAQCAtMTc1LDggKzE3Myw4IEBAIHByaXZh
dGU6CiAgICAgRXhwZWN0ZWQ8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJz
ZU5hdGl2ZVR5cGVEZWNsYXJhdGlvbigpOwogICAgIEV4cGVjdGVkPEFTVDo6TnVtVGhyZWFkc0Z1
bmN0aW9uQXR0cmlidXRlLCBFcnJvcj4gcGFyc2VOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUo
KTsKICAgICBFeHBlY3RlZDxBU1Q6OkF0dHJpYnV0ZUJsb2NrLCBFcnJvcj4gcGFyc2VBdHRyaWJ1
dGVCbG9jaygpOwotICAgIEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4gcGFyc2VQYXJh
bWV0ZXIoKTsKLSAgICBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlcnMsIEVycm9yPiBwYXJzZVBhcmFt
ZXRlcnMoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiBw
YXJzZVBhcmFtZXRlcigpOworICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMs
IEVycm9yPiBwYXJzZVBhcmFtZXRlcnMoKTsKICAgICBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24sIEVycm9yPiBwYXJzZUVudHJ5UG9pbnRGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CiAg
ICAgRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VSZWd1bGFy
RnVuY3Rpb25EZWNsYXJhdGlvbigpOwogICAgIEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbiwgRXJyb3I+IHBhcnNlT3BlcmF0b3JGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CkBAIC0xOTIs
NyArMTkwLDcgQEAgcHJpdmF0ZToKICAgICBFeHBlY3RlZDxBU1Q6OkZvckxvb3AsIEVycm9yPiBw
YXJzZUZvckxvb3AoKTsKICAgICBFeHBlY3RlZDxBU1Q6OldoaWxlTG9vcCwgRXJyb3I+IHBhcnNl
V2hpbGVMb29wKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpEb1doaWxlTG9vcCwgRXJyb3I+IHBhcnNl
RG9XaGlsZUxvb3AoKTsKLSAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVy
cm9yPiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4m
Jik7CisgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VW
YXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmKTsK
ICAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LCBFcnJvcj4g
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpOwogICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlN0YXRlbWVudD4sIEVycm9yPiBwYXJzZVN0YXRlbWVudCgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAppbmRl
eCAwZWI2NGRlY2Q0ZC4uNDYwZTk0NmZkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcApAQCAtMjgsMTAgKzI4LDE3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0hMU0xQcmVwYXJlLmgiCiAKKyNpbmNs
dWRlICJXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiV0hMU0xDaGVj
a2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJXSExTTFBh
cnNlci5oIgogI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMUmVjdXJz
aXZlVHlwZUNoZWNrZXIuaCIKICNpbmNsdWRlICJXSExTTFN0YW5kYXJkTGlicmFyeS5oIgorI2lu
Y2x1ZGUgIldITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCIKKyNpbmNsdWRlICJX
SExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVF
bnVtZXJhdGlvbkZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZVN0cnVjdHVy
ZUFjY2Vzc29ycy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwLDggKzU3LDIzIEBA
IE9wdGlvbmFsPFByZXBhcmF0aW9uUmVzdWx0PiBwcmVwYXJlKFN0cmluZ1ZpZXcgc291cmNlKQog
ICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJl
c29sdmVOYW1lc0luVHlwZXMocHJvZ3JhbSk7CisgICAgTmFtZVJlc29sdmVyIG5hbWVSZXNvbHZl
cihwcm9ncmFtLm5hbWVDb250ZXh0KCkpOworICAgIGlmICghcmVzb2x2ZU5hbWVzSW5UeXBlcyhw
cm9ncmFtLCBuYW1lUmVzb2x2ZXIpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IGlmICghY2hlY2tSZWN1cnNpdmVUeXBlcyhwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKHByb2dyYW0pOworICAg
IHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhwcm9ncmFtKTsKKyAgICBzeW50aGVzaXpl
QXJyYXlPcGVyYXRvckxlbmd0aChwcm9ncmFtKTsKKyAgICBzeW50aGVzaXplQ29uc3RydWN0b3Jz
KHByb2dyYW0pOworICAgIGlmICghY2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMocHJvZ3JhbSkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYgKCFyZXNvbHZlTmFtZXNJbkZ1bmN0
aW9ucyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCiAKKyAgICBpZiAoY2hlY2socHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgcmV0dXJuIFByZXBhcmF0aW9uUmVzdWx0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKaW5kZXggNTYzMGZl
NjllZTQuLjYwZWU0NzkwMTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByb2dyYW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByb2dyYW0uaApAQCAtMjksNiArMjksOCBAQAogCiAjaW5jbHVkZSAi
V0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVm
aW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgorI2luY2x1ZGUgIldITFNM
TmFtZUNvbnRleHQuaCIKICNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
aCIKICNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldI
TFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgpAQCAtNDQsNDUgKzQ2LDY0IEBAIHB1YmxpYzoKICAg
ICBQcm9ncmFtKCkgPSBkZWZhdWx0OwogICAgIFByb2dyYW0oUHJvZ3JhbSYmKSA9IGRlZmF1bHQ7
CiAKLSAgICB2b2lkIGFwcGVuZChBU1Q6OlR5cGVEZWZpbml0aW9uJiYgdHlwZURlZmluaXRpb24p
CisgICAgYm9vbCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5pdGlvbiYmIHR5cGVEZWZpbml0aW9uKQog
ICAgIHsKLSAgICAgICAgbV90eXBlRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUodHlwZURlZmlu
aXRpb24pKTsKKyAgICAgICAgbV90eXBlRGVmaW5pdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlx
dWU8QVNUOjpUeXBlRGVmaW5pdGlvbj4oV1RGTW92ZSh0eXBlRGVmaW5pdGlvbikpKTsKKyAgICAg
ICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX3R5cGVEZWZpbml0aW9ucy5sYXN0KCkpOwog
ICAgIH0KLSAgICB2b2lkIGFwcGVuZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mJiBzdHJ1Y3R1
cmVEZWZpbml0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9u
JiYgc3RydWN0dXJlRGVmaW5pdGlvbikKICAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlRGVmaW5p
dGlvbnMuYXBwZW5kKFdURk1vdmUoc3RydWN0dXJlRGVmaW5pdGlvbikpOworICAgICAgICBtX3N0
cnVjdHVyZURlZmluaXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6U3RydWN0dXJl
RGVmaW5pdGlvbj4oV1RGTW92ZShzdHJ1Y3R1cmVEZWZpbml0aW9uKSkpOworICAgICAgICByZXR1
cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fc3RydWN0dXJlRGVmaW5pdGlvbnMubGFzdCgpKTsKICAg
ICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mJiBlbnVtZXJh
dGlvbkRlZmluaXRpb24pCisKKyAgICBib29sIGFwcGVuZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiYmIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKICAgICB7Ci0gICAgICAgIG1fZW51bWVyYXRp
b25EZWZpbml0aW9ucy5hcHBlbmQoV1RGTW92ZShlbnVtZXJhdGlvbkRlZmluaXRpb24pKTsKKyAg
ICAgICAgbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihXVEZNb3ZlKGVudW1lcmF0aW9uRGVmaW5pdGlvbikp
KTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX2VudW1lcmF0aW9uRGVmaW5p
dGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mJiBmdW5jdGlvbkRlZmluaXRpb24pCisKKyAgICBib29sIGFwcGVuZChBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiYmIGZ1bmN0aW9uRGVmaW5pdGlvbikKICAgICB7Ci0gICAgICAgIG1fZnVu
Y3Rpb25EZWZpbml0aW9ucy5hcHBlbmQoV1RGTW92ZShmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAg
ICAgICAgbV9mdW5jdGlvbkRlZmluaXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uPihXVEZNb3ZlKGZ1bmN0aW9uRGVmaW5pdGlvbikpKTsKKyAgICAg
ICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX2Z1bmN0aW9uRGVmaW5pdGlvbnMubGFzdCgp
KTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
JiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCiAgICAg
ewotICAgICAgICBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmFwcGVuZChXVEZNb3ZlKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgbV9uYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24+KFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKTsKKyAgICAgICAgbV9p
bnRyaW5zaWNzLmFkZCgqbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5sYXN0KCkpOworICAg
ICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24mJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCisKKyAgICBib29sIGFwcGVuZChBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiYmIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKICAgICB7Ci0gICAg
ICAgIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RGTW92ZShuYXRpdmVUeXBlRGVj
bGFyYXRpb24pKTsKKyAgICAgICAgbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmFwcGVuZChzdGQ6
Om1ha2VfdW5pcXVlPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihXVEZNb3ZlKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbikpKTsKKyAgICAgICAgbV9pbnRyaW5zaWNzLmFkZCgqbV9uYXRpdmVUeXBl
RGVjbGFyYXRpb25zLmxhc3QoKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgq
bV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSk7CiAgICAgfQogCi0gICAgVmVjdG9yPEFT
VDo6VHlwZURlZmluaXRpb24+JiB0eXBlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3R5cGVEZWZp
bml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+JiBzdHJ1Y3R1
cmVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7IH0KLSAgICBW
ZWN0b3I8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+JiBlbnVtZXJhdGlvbkRlZmluaXRpb25z
KCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uPiYgZnVuY3Rpb25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZnVu
Y3Rpb25EZWZpbml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24+JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24+JiBuYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVUeXBlRGVjbGFy
YXRpb25zOyB9CisgICAgTmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KCkgeyByZXR1cm4gbV9uYW1l
Q29udGV4dDsgfQorICAgIEludHJpbnNpY3MmIGludHJpbnNpY3MoKSB7IHJldHVybiBtX2ludHJp
bnNpY3M7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZURlZmluaXRpb24+
PiYgdHlwZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV90eXBlRGVmaW5pdGlvbnM7IH0KKyAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4+JiBzdHJ1Y3R1
cmVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7IH0KKyAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPj4mIGVudW1l
cmF0aW9uRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7IH0K
KyAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9u
Pj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2Z1bmN0aW9uRGVmaW5p
dGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uPj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVmaW5pdGlv
bnM7IH0KKyAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbj4+JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpIGNvbnN0IHsgcmV0
dXJuIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4+JiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPj4mIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnM7
IH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8QVNUOjpUeXBlRGVmaW5pdGlvbj4gbV90eXBlRGVm
aW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4gbV9zdHJ1Y3R1
cmVEZWZpbml0aW9uczsKLSAgICBWZWN0b3I8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+IG1f
ZW51bWVyYXRpb25EZWZpbml0aW9uczsKLSAgICBWZWN0b3I8QVNUOjpGdW5jdGlvbkRlZmluaXRp
b24+IG1fZnVuY3Rpb25EZWZpbml0aW9uczsKLSAgICBWZWN0b3I8QVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uPiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOwotICAgIFZlY3RvcjxB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4gbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zOworICAg
IE5hbWVDb250ZXh0IG1fbmFtZUNvbnRleHQ7CisgICAgSW50cmluc2ljcyBtX2ludHJpbnNpY3M7
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVEZWZpbml0aW9uPj4gbV90eXBl
RGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0cnVjdHVyZURl
ZmluaXRpb24+PiBtX3N0cnVjdHVyZURlZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+PiBtX2VudW1lcmF0aW9uRGVmaW5pdGlv
bnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4+
IG1fZnVuY3Rpb25EZWZpbml0aW9uczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4+IG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4+
IG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBl
Q2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM3NWVj
YWJiMjJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAKQEAgLTAsMCArMSwxMDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIldITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCIKKworI2luY2x1ZGUgIldITFNMVmlz
aXRvci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUmVjdXJzaXZlVHlwZUNoZWNrZXIgOiBwdWJs
aWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgflJlY3Vyc2l2ZVR5cGVDaGVja2VyKCkgPSBkZWZh
dWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlv
bikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlcy5hZGQo
JnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7Cisg
ICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVEZWZpbml0aW9uKTsKKworICAgICAgICBh
dXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmdHlwZURlZmluaXRpb24pOworICAgICAgICBB
U1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQo
QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVzLmFkZCgmc3RydWN0dXJlRGVm
aW5pdGlvbik7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKworICAgICAgICBhdXRv
IHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAg
IEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZXMuYWRkKCZ0eXBlUmVmZXJlbmNlKTsKKyAgICAg
ICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvJiB0eXBl
QXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkKKyAgICAgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCh0eXBlQXJndW1lbnQpOworICAgICAgICB2aXNpdE5hbWVkVHlwZSgq
dHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisKKyAgICAgICAgYXV0byBzdWNjZXNzID0g
bV90eXBlcy5yZW1vdmUoJnR5cGVSZWZlcmVuY2UpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN1
Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWZlcmVuY2VU
eXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIEhhc2hTZXQ8QVNU
OjpUeXBlKj4gbV90eXBlczsKK307CisKK2Jvb2wgY2hlY2tSZWN1cnNpdmVUeXBlcyhQcm9ncmFt
JiBwcm9ncmFtKQoreworICAgIFJlY3Vyc2l2ZVR5cGVDaGVja2VyIHJlY3Vyc2l2ZVR5cGVDaGVj
a2VyOworICAgIHJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFt
KTsKKyAgICByZXR1cm4gcmVjdXJzaXZlVHlwZUNoZWNrZXIuZXJyb3IoKTsKK30KKworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45YTNhMTlkY2UyMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNr
ZXIuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNM
IHsKKworY2xhc3MgUHJvZ3JhbTsKKworYm9vbCBjaGVja1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0m
KTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ0YTczNGU0NjIxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNv
bHZlT3ZlcmxvYWRJbXBsLmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNv
bHZlT3ZlcmxvYWRJbXBsLmgiCisKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNs
dWRlIDxsaW1pdHM+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsK
Kworc3RhdGljIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biYgY2FuZGlkYXRlLCBjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZp
bmdUeXBlPj4mIHJlc29sdmluZ1R5cGVzKQoreworICAgIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0
ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbmRpZGF0ZS5wYXJhbWV0ZXJzKCku
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29udmVyc2lvbkNvc3QgKz0gV1RGOjp2aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mKSAtPiB1
bnNpZ25lZCB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiB1bnNpZ25l
ZCB7CisgICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFi
bGVUeXBlKCkuY29udmVyc2lvbkNvc3QoY2FuZGlkYXRlLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkp
OworICAgICAgICB9KSwgcmVzb2x2aW5nVHlwZXNbaV0uZ2V0KCkpOworICAgIH0KKyAgICAvLyBG
SVhNRTogSW5jbHVkZSB0aGUgY29udmVyc2lvbiBjb3N0IG9mIHRoZSByZXR1cm4gdHlwZSBvbmNl
IENhbGxFeHByZXNzaW9uOjpzZXRDYXN0RGF0YSgpIGlzIGltcGxlbWVudGVkLgorICAgIHJldHVy
biBjb252ZXJzaW9uQ29zdDsKK30KKworQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZl
RnVuY3Rpb25PdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIHJlc29sdmluZ1R5cGVzKQoreworICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4s
IDE+IGNhbmRpZGF0ZXM7CisgICAgZm9yIChhdXRvJiBwb3NzaWJsZUZ1bmN0aW9uIDogcG9zc2li
bGVGdW5jdGlvbnMpIHsKKyAgICAgICAgaWYgKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkuZW50cnlQ
b2ludFR5cGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoaW5mZXJUeXBl
c0ZvckNhbGwocG9zc2libGVGdW5jdGlvbi5nZXQoKSwgcmVzb2x2aW5nVHlwZXMpKQorICAgICAg
ICAgICAgY2FuZGlkYXRlcy5hcHBlbmQocG9zc2libGVGdW5jdGlvbi5nZXQoKSk7CisgICAgfQor
CisgICAgdW5zaWduZWQgbWluaW11bUNvbnZlcnNpb25Db3N0ID0gc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpOworICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogY2FuZGlkYXRl
cykKKyAgICAgICAgbWluaW11bUNvbnZlcnNpb25Db3N0ID0gc3RkOjptaW4obWluaW11bUNvbnZl
cnNpb25Db3N0LCBjb252ZXJzaW9uQ29zdChjYW5kaWRhdGUuZ2V0KCksIHJlc29sdmluZ1R5cGVz
KSk7CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24+LCAxPiBtaW5pbXVtQ29zdENhbmRpZGF0ZXM7CisgICAgZm9yIChhdXRvJiBjYW5k
aWRhdGUgOiBjYW5kaWRhdGVzKSB7CisgICAgICAgIGlmIChjb252ZXJzaW9uQ29zdChjYW5kaWRh
dGUuZ2V0KCksIHJlc29sdmluZ1R5cGVzKSA9PSBtaW5pbXVtQ29udmVyc2lvbkNvc3QpCisgICAg
ICAgICAgICBtaW5pbXVtQ29zdENhbmRpZGF0ZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgfQor
CisgICAgYm9vbCByZXN0cmljdGVkQ2FuZGlkYXRlRXhpc3RzID0gZmFsc2U7CisgICAgZm9yIChh
dXRvJiBjYW5kaWRhdGUgOiBtaW5pbXVtQ29zdENhbmRpZGF0ZXMpIHsKKyAgICAgICAgaWYgKGlz
PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpICYmIGRvd25jYXN0PEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpLnJlc3RyaWN0ZWQoKSkgewor
ICAgICAgICAgICAgcmVzdHJpY3RlZENhbmRpZGF0ZUV4aXN0cyA9IHRydWU7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNhbmRpZGF0ZXMuY2xlYXIoKTsKKyAg
ICBpZiAocmVzdHJpY3RlZENhbmRpZGF0ZUV4aXN0cykgeworICAgICAgICBmb3IgKGF1dG8mIGNh
bmRpZGF0ZSA6IG1pbmltdW1Db3N0Q2FuZGlkYXRlcykgeworICAgICAgICAgICAgaWYgKGlzPEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpICYmIGRvd25jYXN0PEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpLnJlc3RyaWN0ZWQoKSkKKyAgICAg
ICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChjYW5kaWRhdGUuZ2V0KCkpOworICAgICAgICB9
CisgICAgfSBlbHNlCisgICAgICAgIGNhbmRpZGF0ZXMgPSBtaW5pbXVtQ29zdENhbmRpZGF0ZXM7
CisKKyAgICBpZiAoY2FuZGlkYXRlcy5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuICZjYW5k
aWRhdGVzWzBdLmdldCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitBU1Q6Ok5hbWVkVHlw
ZSogcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpOYW1lZFR5cGU+LCAxPiYgcG9zc2libGVUeXBlcywgQVNUOjpUeXBlQXJndW1lbnRzJiB0
eXBlQXJndW1lbnRzKQoreworICAgIEFTVDo6TmFtZWRUeXBlKiByZXN1bHQgPSBudWxscHRyOwor
ICAgIGZvciAoYXV0byYgcG9zc2libGVUeXBlIDogcG9zc2libGVUeXBlcykgeworICAgICAgICBp
ZiAoaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMocG9zc2libGVUeXBlLCB0eXBlQXJndW1lbnRz
KSkgeworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlwZSY+
KHBvc3NpYmxlVHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZElt
cGwuaApzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgK
cmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2
ZU92ZXJsb2FkSW1wbC5oCmluZGV4IGVmNjFlZDEyNjE5Li41M2JhMzg1NTE0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQW5vbnltb3Vz
VmFyaWFibGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCkBAIC0yNyw4ICsyNywxMCBAQAogCiAj
aWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJX
SExTTFZhbHVlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZpbmdUeXBlLmgiCisjaW5jbHVkZSAi
V0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiwyNiArMzgsMTQgQEAg
bmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIEFub255bW91c1Zh
cmlhYmxlRGVjbGFyYXRpb24gOiBwdWJsaWMgVmFsdWUgewotcHVibGljOgotICAgIEFub255bW91
c1ZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQotICAgICAgICA6IG1f
b3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+QW5v
bnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbigpID0gZGVmYXVsdDsKLQotICAgIEFub255bW91c1Zh
cmlhYmxlRGVjbGFyYXRpb24oY29uc3QgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYpID0g
ZGVsZXRlOwotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oQW5vbnltb3VzVmFyaWFi
bGVEZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7Ci0KLSAgICBMZXhlcjo6VG9rZW4gb3JpZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KLQotcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4g
bV9vcmlnaW47Ci19OworY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNzIE5hbWVkVHlw
ZTsKIAogfQogCitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJs
b2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24+LCAxPiYsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+
PiYpOworQVNUOjpOYW1lZFR5cGUqIHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4mLCBBU1Q6OlR5cGVBcmd1bWVu
dHMmKTsKKwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5iNzlkMmIyYTUxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oCkBAIC0wLDAgKzEs
NjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisK
KyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgUmVz
b2x2YWJsZVR5cGU7CitjbGFzcyBVbm5hbWVkVHlwZTsKKworfQorCitjbGFzcyBSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
PiB7CitwdWJsaWM6CisgICAgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UoQVNUOjpSZXNvbHZhYmxl
VHlwZSYgcmVzb2x2YWJsZVR5cGUpCisgICAgICAgIDogbV9yZXNvbHZhYmxlVHlwZSgmcmVzb2x2
YWJsZVR5cGUpCisgICAgeworICAgIH0KKworICAgIFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKGNv
bnN0IFJlc29sdmFibGVUeXBlUmVmZXJlbmNlJikgPSBkZWxldGU7CisgICAgUmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2UoUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UmJikgPSBkZWxldGU7CisKKyAgICBB
U1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSgpIHsgcmV0dXJuICptX3Jlc29sdmFi
bGVUeXBlOyB9CisKK3ByaXZhdGU6CisgICAgQVNUOjpSZXNvbHZhYmxlVHlwZSogbV9yZXNvbHZh
YmxlVHlwZTsKK307CisKK3VzaW5nIFJlc29sdmluZ1R5cGUgPSBWYXJpYW50PHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPj47CisK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRv
ckxlbmd0aC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg2OWNl
MjU0MTZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKQEAgLTAsMCArMSw3
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEZpbmRBcnJh
eVR5cGVzIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIH5GaW5kQXJyYXlUeXBlcygp
ID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fYXJyYXlUeXBlcy5hcHBlbmQoYXJyYXlUeXBlKTsK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFycmF5VHlwZSk7CisgICAgfQorCisgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpBcnJheVR5cGU+PiYmIHRha2VBcnJheVR5
cGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fYXJyYXlUeXBlcyk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6QXJy
YXlUeXBlPj4gbV9hcnJheVR5cGVzOworfTsKKwordm9pZCBzeW50aGVzaXplQXJyYXlPcGVyYXRv
ckxlbmd0aChQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIEZpbmRBcnJheVR5cGVzIGZpbmRBcnJh
eVR5cGVzOworICAgIGZpbmRBcnJheVR5cGVzLmNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtKTsK
KyAgICBhdXRvIGFycmF5VHlwZXMgPSBmaW5kQXJyYXlUeXBlcy50YWtlQXJyYXlUeXBlcygpOwor
CisgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKKyAgICBib29sIGlzUmVzdHJpY3RlZCA9IGZh
bHNlOworCisgICAgZm9yIChhdXRvJiBhcnJheVR5cGUgOiBhcnJheVR5cGVzKSB7CisgICAgICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tl
bihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgYXJyYXlUeXBl
LmdldCgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICBBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSks
IEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIHByb2dyYW0uaW50
cmluc2ljcygpLnVpbnRUeXBlKCkpLCBTdHJpbmcoIm9wZXJhdG9yLmxlbmd0aCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQs
IGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZN
b3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICB9Cit9CisKK30KKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTlhOWExMTRmMjcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCit2b2lkIHN5bnRoZXNp
emVBcnJheU9wZXJhdG9yTGVuZ3RoKFByb2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVz
aXplQ29uc3RydWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjQyMjFmYTAyMmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNw
cApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3Jz
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3Mg
RmluZEFsbFR5cGVzIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIH5GaW5kQWxsVHlw
ZXMoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50
ZXJUeXBlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV91bm5hbWVkVHlwZXMuYXBwZW5kKHBv
aW50ZXJUeXBlKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHBvaW50ZXJUeXBlKTsKKyAg
ICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVy
ZW5jZVR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQo
YXJyYXlSZWZlcmVuY2VUeXBlKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFycmF5UmVm
ZXJlbmNlVHlwZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJy
YXlUeXBlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV91bm5hbWVkVHlwZXMuYXBwZW5kKGFy
cmF5VHlwZSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcnJheVR5cGUpOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9u
RGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fbmFtZWRUeXBlcy5hcHBlbmQo
ZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVudW1l
cmF0aW9uRGVmaW5pdGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVy
ZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBtX25hbWVkVHlwZXMuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgfQorCisgICAgdm9pZCB2
aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgbV9uYW1lZFR5cGVzLmFwcGVuZChuYXRpdmVUeXBlRGVj
bGFyYXRpb24pOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobmF0aXZlVHlwZURlY2xhcmF0
aW9uKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVu
bmFtZWRUeXBlPj4mJiB0YWtlVW5uYW1lZFR5cGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBX
VEZNb3ZlKG1fdW5uYW1lZFR5cGVzKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+JiYgdGFrZU5hbWVkVHlwZXMoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdURk1vdmUobV9uYW1lZFR5cGVzKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpVbm5hbWVkVHlwZT4+IG1fdW5u
YW1lZFR5cGVzOworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRU
eXBlPj4gbV9uYW1lZFR5cGVzOworfTsKKwordm9pZCBzeW50aGVzaXplQ29uc3RydWN0b3JzKFBy
b2dyYW0mIHByb2dyYW0pCit7CisgICAgRmluZEFsbFR5cGVzIGZpbmRBbGxUeXBlczsKKyAgICBm
aW5kQWxsVHlwZXMuY2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0pOworICAgIGF1dG8gbV91bm5h
bWVkVHlwZXMgPSBmaW5kQWxsVHlwZXMudGFrZVVubmFtZWRUeXBlcygpOworICAgIGF1dG8gbV9u
YW1lZFR5cGVzID0gZmluZEFsbFR5cGVzLnRha2VOYW1lZFR5cGVzKCk7CisKKyAgICBib29sIGlz
T3BlcmF0b3IgPSB0cnVlOworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisKKyAgICBm
b3IgKGF1dG8mIHVubmFtZWRUeXBlIDogbV91bm5hbWVkVHlwZXMpIHsKKyAgICAgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFt
ZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHVubmFtZWRUeXBlLmdl
dCgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICBBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJp
YnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgU3Ry
aW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1v
dmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7
CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoY29weUNvbnN0cnVjdG9yKSk7CisKKyAg
ICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1Y3RvcihB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9y
aWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBl
LmdldCgpLmNsb25lKCksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zKCksIFdURjo6bnVsbG9wdCwg
aXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1v
dmUoZGVmYXVsdENvbnN0cnVjdG9yKSk7CisgICAgfQorCisgICAgZm9yIChhdXRvJiBuYW1lZFR5
cGUgOiBtX25hbWVkVHlwZXMpIHsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZh
cmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2Vu
KG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5nZXQoKSksIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
IHBhcmFtZXRlcnM7CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVE
ZWNsYXJhdGlvbikpOworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gY29w
eUNvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4obmFtZWRU
eXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQs
IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9y
aWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9w
dCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdU
Rk1vdmUoY29weUNvbnN0cnVjdG9yKSk7CisKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uIGRlZmF1bHRDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2so
KSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKG5h
bWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5nZXQoKSksIFN0cmluZygib3BlcmF0
b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb25zKCksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7Cisg
ICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoZGVmYXVsdENvbnN0cnVjdG9yKSk7CisgICAg
fQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MDAyMGRkN2M3MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
U3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXpl
Q29uc3RydWN0b3JzKFByb2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVy
YXRpb25GdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wYmE5MDU2MmJkYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0
aW9uRnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJM
RShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oIgorCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisj
aW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIFdITFNMIHsKKwordm9pZCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMo
UHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGJv
b2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmlu
aXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICB7Cisg
ICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjEo
TGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxp
ZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlv
bkRlZmluaXRpb24tPm9yaWdpbigpKSwgKmVudW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24yKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVt
ZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAg
ICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAg
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjIp
KTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RG
OjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0
aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBwcm9ncmFtLmludHJpbnNpY3MoKS5ib29sVHlwZSgp
KSwgU3RyaW5nKCJvcGVyYXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdU
Rk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3Rl
ZCk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJh
dGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJl
ZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4o
KSksICplbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxs
cHRyKTsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsK
KyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlv
bikpOworICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihl
bnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBX
VEY6Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksIFN0cmlu
Zygib3BlcmF0b3IudmFsdWUiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsK
KyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJl
bmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwg
KmVudW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIp
OworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6
bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCJv
cGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFy
YW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAg
ICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24p
KTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGVudW1lcmF0aW9uRGVmaW5pdGlv
bi0+dHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAg
ICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9w
dCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPm9yaWdpbigpKSwgKmVudW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygib3BlcmF0
b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAg
ICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9u
RnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5
bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5hYzEwNzg3MmVmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rp
b25zLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wg
eworCitjbGFzcyBQcm9ncmFtOworCit2b2lkIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9u
cyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29y
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5mZTgxM2RiMzgxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAK
QEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNz
b3JzLmgiCisKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xQ
cm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwordm9pZCBzeW50
aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgYm9vbCBp
c09wZXJhdG9yID0gdHJ1ZTsKKyAgICBib29sIGlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgIGZv
ciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlv
bnMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVE
ZWZpbml0aW9uLT5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgLy8gVGhlIGdldHRlcjogb3BlcmF0b3IuZmllbGQKKyAgICAgICAgICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4o
c3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCAq
c3RydWN0dXJlRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOwor
ICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRp
b24pKTsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSwgU3RyaW5nOjpmb3Jt
YXQoIm9wZXJhdG9yLiVzIiwgc3RydWN0dXJlRWxlbWVudC5uYW1lKCkudXRmOCgpLmRhdGEoKSks
IFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJp
Y3RlZCk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAvLyBUaGUgc2V0dGVyOiBvcGVyYXRvci5maWVsZD0KKyAgICAgICAgICAgICAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjEoTGV4ZXI6OlRv
a2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigp
KSwgKnN0cnVjdHVyZURlZmluaXRpb24pLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRy
KTsKKyAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNs
YXJhdGlvbjIoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1
YWxpZmllcnMoKSwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCksIFdU
Rjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdU
Rk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJz
LmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CisgICAgICAgICAgICAgICAg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9y
aWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJl
ZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksICpz
dHJ1Y3R1cmVEZWZpbml0aW9uKSwgU3RyaW5nOjpmb3JtYXQoIm9wZXJhdG9yLiVzPSIsIHN0cnVj
dHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBX
VEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAgICAgICAg
IHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBUaGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAor
ICAgICAgICAgICAgYXV0byBjcmVhdGVBbmRlciA9IFsmXShBU1Q6OlJlZmVyZW5jZVR5cGU6OkFk
ZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UpIC0+IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biB7CisgICAgICAgICAgICAgICAgYXV0byBhcmd1bWVudFR5cGUgPSBzdGQ6Om1ha2VfdW5pcXVl
PEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0
cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCAqc3RydWN0dXJlRGVmaW5pdGlvbikpOworICAgICAg
ICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExl
eGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCks
IFdURk1vdmUoYXJndW1lbnRUeXBlKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7
CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwor
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJh
dGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gcmV0dXJuVHlwZSA9IHN0ZDo6bWFrZV91bmlx
dWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2lu
KCkpLCBhZGRyZXNzU3BhY2UsIHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCkpOworICAg
ICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0
dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0
LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3ImLiVzIiwgc3Ry
dWN0dXJlRWxlbWVudC5uYW1lKCkudXRmOCgpLmRhdGEoKSksIFdURk1vdmUocGFyYW1ldGVycyks
IFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb247CisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpB
ZGRyZXNzU3BhY2U6OkNvbnN0YW50KSk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChjcmVh
dGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlKSk7CisgICAg
ICAgICAgICBwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFk
ZHJlc3NTcGFjZTo6VGhyZWFkZ3JvdXApKTsKKyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNy
ZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWQpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNj
ZXNzb3JzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uNGU5YjlmZjcwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaApA
QCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2Ns
YXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFt
Jik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5iMGIzZDBlN2UyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKQEAgLTAsMCArMSwxMDI5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKworI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5o
IgorI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xB
cnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTEJhc2VT
ZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMQmxvY2suaCIKKyNpbmNsdWRlICJXSExTTEJvb2xl
YW5MaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xCcmVhay5oIgorI2luY2x1ZGUgIldITFNMQnVp
bHRJblNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgorI2luY2x1
ZGUgIldITFNMQ29tbWFFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJl
c3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVt
YmVyUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xDb250aW51ZS5oIgorI2luY2x1ZGUgIldI
TFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5o
IgorI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRWZmZWN0
ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZp
bml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIgorI2luY2x1ZGUg
IldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIKKyNpbmNs
dWRlICJXSExTTEZsb2F0TGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgorI2lu
Y2x1ZGUgIldITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9u
RGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2lu
Y2x1ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEluZGV4RXhwcmVzc2lv
bi5oIgorI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTExv
Z2ljYWxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1
ZGUgIldITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRp
b24uaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFs
LmgiCisjaW5jbHVkZSAiV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCIKKyNpbmNs
dWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFF1YWxpZmllci5oIgorI2luY2x1ZGUgIldITFNM
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMUmVmZXJlbmNlVHlw
ZS5oIgorI2luY2x1ZGUgIldITFNMUmVzb3VyY2VTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNM
UmV0dXJuLmgiCisjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3Bl
Y2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xTdGFnZUluT3V0
U2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNM
U3RydWN0dXJlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRWxlbWVudC5o
IgorI2luY2x1ZGUgIldITFNMU3dpdGNoQ2FzZS5oIgorI2luY2x1ZGUgIldITFNMU3dpdGNoU3Rh
dGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUg
IldITFNMVHJhcC5oIgorI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVHlw
ZUFyZ3VtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUg
IldITFNMVHlwZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxl
RGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50LmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldI
TFNMV2hpbGVMb29wLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNM
IHsKKwordm9pZCBWaXNpdG9yOjp2aXNpdChQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIC8vIFRo
ZXNlIHZpc2l0aW5nIGZ1bmN0aW9ucyBtaWdodCBhZGQgbmV3IGdsb2JhbCBzdGF0ZW1lbnRzLCBz
byBkb24ndCB1c2UgZm9yZWFjaCBzeW50YXguCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
cm9ncmFtLnR5cGVEZWZpbml0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKnByb2dyYW0udHlwZURlZmluaXRpb25zKClbaV0pOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpLnNpemUoKTsgKytpKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMo
KVtpXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9ncmFtLmVudW1lcmF0aW9uRGVm
aW5pdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpwcm9n
cmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKVtpXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KCpwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKVtpXSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcHJvZ3JhbS5u
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpW2ldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoKnByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpW2ld
KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdFVubmFtZWRUeXBlKEFTVDo6VW5uYW1lZFR5cGUm
IHVubmFtZWRUeXBlKQoreworICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRU
eXBlKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VHlwZVJlZmVy
ZW5jZT4odW5uYW1lZFR5cGUpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkVHlwZSkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlBv
aW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3du
Y2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBl
KSk7CisgICAgfQorfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0TmFtZWRUeXBlKEFTVDo6TmFtZWRU
eXBlJiBuYW1lZFR5cGUpCit7CisgICAgaWYgKGlzPEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVk
VHlwZSkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlR5cGVEZWZp
bml0aW9uPihuYW1lZFR5cGUpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAgIGVsc2UgaWYgKGlzPEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KG5hbWVkVHlwZSkp
OworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24+KG5hbWVkVHlwZSkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOworICAgIH0KK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKK3sKKyAg
ICBpZiAodHlwZURlZmluaXRpb24udHlwZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXRV
bm5hbWVkVHlwZSgqdHlwZURlZmluaXRpb24udHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCit7Cisg
ICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1
Y3R1cmVFbGVtZW50cygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRWxl
bWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXRVbm5h
bWVkVHlwZShlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAgICBmb3IgKGF1dG8mIGVu
dW1lcmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVy
cygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZW51bWVyYXRpb25NZW1iZXIpOworfQor
Cit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRl
ZmluaXRpb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24mPihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbikKK3sKKyAgICBmb3IgKGF1dG8mIHR5cGVBcmd1bWVudCA6IG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi50eXBlQXJndW1lbnRzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBl
QXJndW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYg
dHlwZVJlZmVyZW5jZSkKK3sKKyAgICBmb3IgKGF1dG8mIHR5cGVBcmd1bWVudCA6IHR5cGVSZWZl
cmVuY2UudHlwZUFyZ3VtZW50cygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZUFy
Z3VtZW50KTsKKyAgICBpZiAodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSAmJiBpczxBU1Q6
OlR5cGVEZWZpbml0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpIHsKKyAgICAg
ICAgYXV0byYgdHlwZURlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uPigq
dHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGlmICh0eXBlRGVmaW5pdGlv
bi50eXBlKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZSgqdHlw
ZURlZmluaXRpb24udHlwZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpQb2ludGVyVHlwZSYgcG9pbnRlclR5cGUpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0
YXRpY19jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZSY+KHBvaW50ZXJUeXBlKSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlw
ZSkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VU
eXBlJj4oYXJyYXlSZWZlcmVuY2VUeXBlKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpBcnJheVR5cGUmIGFycmF5VHlwZSkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVk
VHlwZShhcnJheVR5cGUudHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN0
cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0VW5uYW1lZFR5cGUoc3RydWN0dXJlRWxlbWVudC50eXBlKCkpOworICAgIGlmIChzdHJ1Y3R1
cmVFbGVtZW50LnNlbWFudGljKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqc3RydWN0
dXJlRWxlbWVudC5zZW1hbnRpYygpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkVu
dW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKK3sKKyAgICBpZiAoZW51bWVyYXRp
b25NZW1iZXIudmFsdWUoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCplbnVtZXJhdGlv
bk1lbWJlci52YWx1ZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGZ1bmN0aW9uRGVjbGFyYXRpb24uYXR0cmlidXRlQmxvY2soKSk7CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0VW5uYW1lZFR5cGUoZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworICAgIGZv
ciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkpCisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChwYXJhbWV0ZXIpOworICAgIGlmIChmdW5jdGlvbkRl
Y2xhcmF0aW9uLnNlbWFudGljKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZnVuY3Rp
b25EZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OlR5cGVBcmd1bWVudCYgdHlwZUFyZ3VtZW50KQoreworICAgIFdURjo6dmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikg
eworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoY29uc3RhbnRFeHByZXNzaW9uKTsKKyAgICB9
LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4mIHR5cGVSZWZlcmVuY2Up
IHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlUmVmZXJlbmNlKTsKKyAgICB9KSwg
dHlwZUFyZ3VtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlZmVyZW5jZVR5
cGUmIHJlZmVyZW5jZVR5cGUpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5cGUo
cmVmZXJlbmNlVHlwZS5lbGVtZW50VHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OlNlbWFudGljJiBzZW1hbnRpYykKK3sKKyAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKEFTVDo6QnVpbHRJblNlbWFudGljJiBidWlsdEluU2VtYW50aWMpIHsKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGJ1aWx0SW5TZW1hbnRpYyk7CisgICAgfSwgWyZdKEFTVDo6UmVz
b3VyY2VTZW1hbnRpYyYgcmVzb3VyY2VTZW1hbnRpYykgeworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQocmVzb3VyY2VTZW1hbnRpYyk7CisgICAgfSwgWyZdKEFTVDo6U3BlY2lhbGl6YXRpb25D
b25zdGFudFNlbWFudGljJiBzcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMpIHsKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyk7Cisg
ICAgfSwgWyZdKEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJiBzdGFnZUluT3V0U2VtYW50aWMpIHsK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YWdlSW5PdXRTZW1hbnRpYyk7CisgICAgfSks
IHNlbWFudGljKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVz
c2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKQoreworICAgIGNvbnN0YW50RXhwcmVzc2lvbi52aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJh
bCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoaW50ZWdlckxpdGVyYWwpOworICAgIH0s
IFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwp
IHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpOwor
ICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChmbG9hdExpdGVyYWwpOworICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRl
cmFsJiBudWxsTGl0ZXJhbCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobnVsbExpdGVy
YWwpOworICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkgewor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYm9vbGVhbkxpdGVyYWwpOworICAgIH0sIFsmXShB
U1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkgeworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Up
OworICAgIH0pKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkF0dHJpYnV0ZUJsb2Nr
JiBhdHRyaWJ1dGVCbG9jaykKK3sKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uQXR0cmlidXRlIDog
YXR0cmlidXRlQmxvY2spCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkF0dHJp
YnV0ZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpCdWlsdEluU2VtYW50aWMmKQor
eworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYpCit7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50
aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFudGlj
JikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRl
Z2VyTGl0ZXJhbCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaW50ZWdlckxpdGVyYWwudHlw
ZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVy
YWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHVu
c2lnbmVkSW50ZWdlckxpdGVyYWwudHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChmbG9hdExpdGVyYWwudHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok51
bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobnVsbExp
dGVyYWwudHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkJvb2xlYW5MaXRl
cmFsJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsVHlw
ZSYgaW50ZWdlckxpdGVyYWxUeXBlKQoreworICAgIGlmIChpbnRlZ2VyTGl0ZXJhbFR5cGUucmVz
b2x2ZWRUeXBlKCkpCisgICAgICAgIHZpc2l0VW5uYW1lZFR5cGUoKmludGVnZXJMaXRlcmFsVHlw
ZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgdmlzaXQoaW50ZWdlckxpdGVyYWxUeXBlLnByZWZlcnJl
ZFR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJM
aXRlcmFsVHlwZSYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUpCit7CisgICAgaWYgKHVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICB2aXNpdFVubmFt
ZWRUeXBlKCp1bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAg
dmlzaXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgpKTsKK30KKwor
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbFR5cGUmIGZsb2F0TGl0ZXJhbFR5
cGUpCit7CisgICAgaWYgKGZsb2F0TGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAgICAg
IHZpc2l0VW5uYW1lZFR5cGUoKmZsb2F0TGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAg
IHZpc2l0KGZsb2F0TGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgpKTsKK30KKwordm9pZCBWaXNp
dG9yOjp2aXNpdChBU1Q6Ok51bGxMaXRlcmFsVHlwZSYgbnVsbExpdGVyYWxUeXBlKQoreworICAg
IGlmIChudWxsTGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIHZpc2l0VW5uYW1l
ZFR5cGUoKm51bGxMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5j
ZSYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkF0dHJpYnV0ZSYg
ZnVuY3Rpb25BdHRyaWJ1dGUpCit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYgbnVtVGhyZWFkc0Z1bmN0aW9uQXR0
cmlidXRlKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChudW1UaHJlYWRzRnVuY3Rpb25B
dHRyaWJ1dGUpOworICAgIH0pLCBmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmKQoreworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQoreworICAgIGZvciAoYXV0byYgc3Rh
dGVtZW50IDogYmxvY2suc3RhdGVtZW50cygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
KnN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0
YXRlbWVudCkKK3sKKyAgICBpZiAoaXM8QVNUOjpCbG9jaz4oc3RhdGVtZW50KSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QmxvY2s+KHN0YXRlbWVudCkpOworICAg
IGVsc2UgaWYgKGlzPEFTVDo6QnJlYWs+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChkb3duY2FzdDxBU1Q6OkJyZWFrPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChp
czxBU1Q6OkNvbnRpbnVlPihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZG93bmNhc3Q8QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNU
OjpEb1doaWxlTG9vcD4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRv
d25jYXN0PEFTVDo6RG9XaGlsZUxvb3A+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFT
VDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudD4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVu
dD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpGYWxsdGhyb3VnaD4oc3RhdGVt
ZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RmFsbHRocm91
Z2g+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6Rm9yTG9vcD4oc3RhdGVtZW50
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Rm9yTG9vcD4oc3Rh
dGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpJZlN0YXRlbWVudD4oc3RhdGVtZW50KSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6SWZTdGF0ZW1lbnQ+KHN0
YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6UmV0dXJuPihzdGF0ZW1lbnQpKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpSZXR1cm4+KHN0YXRlbWVudCkp
OworICAgIGVsc2UgaWYgKGlzPEFTVDo6U3dpdGNoQ2FzZT4oc3RhdGVtZW50KSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6U3dpdGNoQ2FzZT4oc3RhdGVtZW50KSk7
CisgICAgZWxzZSBpZiAoaXM8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlN3aXRjaFN0YXRlbWVudD4oc3Rh
dGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpUcmFwPihzdGF0ZW1lbnQpKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpUcmFwPihzdGF0ZW1lbnQpKTsKKyAg
ICBlbHNlIGlmIChpczxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihzdGF0ZW1l
bnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSB7CisgICAgICAgIEFT
U0VSVChpczxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChkb3duY2FzdDxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7CisgICAgfQorfQor
Cit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QnJlYWsmKQoreworfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6Q29udGludWUmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6
RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1do
aWxlTG9vcC5ib2R5KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5jb25k
aXRpb25hbCgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkV4cHJlc3Npb24mIGV4
cHJlc3Npb24pCit7CisgICAgaWYgKGlzPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGV4cHJl
c3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBc3NpZ25t
ZW50RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6Qm9vbGVh
bkxpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNh
c3Q8QVNUOjpCb29sZWFuTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFT
VDo6Q2FsbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoZG93bmNhc3Q8QVNUOjpDYWxsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2Ug
aWYgKGlzPEFTVDo6Q29tbWFFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Q29tbWFFeHByZXNzaW9uPihleHByZXNzaW9uKSk7
CisgICAgZWxzZSBpZiAoaXM8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24p
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpEZXJlZmVyZW5jZUV4
cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkZsb2F0TGl0ZXJh
bD4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6
OkZsb2F0TGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6SW50ZWdl
ckxpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNh
c3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFT
VDo6TG9naWNhbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAg
IGVsc2UgaWYgKGlzPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3du
Y2FzdDxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAg
ICBlbHNlIGlmIChpczxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWw+KGV4
cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpOdWxs
TGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RG90RXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6
OkRvdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkluZGV4
RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3du
Y2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlz
PEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24+
KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlRlcm5hcnlFeHByZXNzaW9uPihl
eHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VGVy
bmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSk7Cisg
ICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihleHBy
ZXNzaW9uKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlZhcmlh
YmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSk7CisgICAgfQorfQorCit2b2lkIFZpc2l0b3I6OnZp
c2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihkb3RF
eHByZXNzaW9uKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Np
b24mIGluZGV4RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaW5kZXhFeHBy
ZXNzaW9uLmluZGV4RXhwcmVzc2lvbigpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGlj
X2Nhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihpbmRleEV4cHJlc3Npb24pKTsK
K30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYg
ZXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZXhwcmVzc2lvbi5iYXNlKCkp
OworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRl
bWVudCYgZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkKK3sKKyAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNzaW9uKCkp
OworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKQoreworfQorCit2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKK3sKKyAgICBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgfSwgWyZdKHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCgqZXhwcmVzc2lvbik7CisgICAgfSksIGZvckxvb3AuaW5pdGlhbGl6YXRp
b24oKSk7CisgICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7CisgICAgaWYgKGZvckxvb3AuaW5jcmVtZW50
KCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7Cisg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuYm9keSgpKTsKK30KKwordm9pZCBWaXNpdG9y
Ojp2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKK3sKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CisgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKK3sK
KyAgICBpZiAocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdCgqcmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBpZiAoc3dpdGNoQ2FzZS52YWx1
ZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnN3aXRjaENhc2UudmFsdWUoKSk7Cisg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkKK3sKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkpOworICAgIGZvciAo
YXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpUcmFwJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkKK3sK
KyAgICBmb3IgKGF1dG8mIHZhcmlhYmxlRGVjbGFyYXRpb24gOiB2YXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudC52YXJpYWJsZURlY2xhcmF0aW9ucygpKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVM
b29wLmNvbmRpdGlvbmFsKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9k
eSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24m
IHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0VW5uYW1lZFR5
cGUodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgIGlmICh2YXJpYWJsZURlY2xhcmF0
aW9uLnNlbWFudGljKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNs
YXJhdGlvbi5zZW1hbnRpYygpKTsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFs
aXplcigpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24u
aW5pdGlhbGl6ZXIoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50
RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQoreworICAgIGZvciAoYXV0byYg
YXJndW1lbnQgOiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KCphcmd1bWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpDb21t
YUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikKK3sKKyAgICBmb3IgKGF1dG8mIGV4cHJlc3Np
b24gOiBjb21tYUV4cHJlc3Npb24ubGlzdCgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
KmV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VF
eHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkpOworfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNzaW9uKQoreworICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOworICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5yaWdodCgpKTsKK30KKwordm9pZCBWaXNp
dG9yOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lv
bikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFu
ZCgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworfQorCit2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRl
ckV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVz
c2lvbi5sVmFsdWUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQoreworICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBj
aGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vbGRWYWx1ZSgpKTsK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1
ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5u
ZXdWYWx1ZUV4cHJlc3Npb24oKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ucmVzdWx0RXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikKK3sKKyAgICBj
aGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24ucHJlZGljYXRlKCkpOworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24uZWxzZUV4cHJlc3Npb24oKSk7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYpCit7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KFByb2dyYW0mIHByb2dyYW0pCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChwcm9ncmFtKTsKK30KKwordm9pZCBW
aXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXRVbm5hbWVkVHlwZShBU1Q6OlVubmFtZWRUeXBlJiB1
bm5hbWVkVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0VW5uYW1lZFR5
cGUodW5uYW1lZFR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdE5h
bWVkVHlwZShBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKQoreworICAgIGlmICghZXJyb3IoKSkK
KyAgICAgICAgdmlzaXROYW1lZFR5cGUobmFtZWRUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh0eXBlRGVmaW5pdGlvbik7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlv
biYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZp
c2l0KHN0cnVjdHVyZURlZmluaXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9u
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZW51bWVyYXRpb25EZWZpbml0
aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisg
ICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9u
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobmF0aXZlVHlwZURlY2xhcmF0
aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUeXBlUmVm
ZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQodHlwZVJlZmVyZW5jZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAg
ICAgICAgdmlzaXQocG9pbnRlclR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBlKQorewor
ICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYXJyYXlSZWZlcmVuY2VUeXBlKTsKK30K
Kwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5
VHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGFycmF5VHlwZSk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RydWN0dXJlRWxlbWVu
dCYgc3RydWN0dXJlRWxlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0
KHN0cnVjdHVyZUVsZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKK3sKKyAgICBpZiAo
IWVycm9yKCkpCisgICAgICAgIHZpc2l0KGVudW1lcmF0aW9uTWVtYmVyKTsKK30KKwordm9pZCBW
aXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5j
dGlvbkRlY2xhcmF0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZnVu
Y3Rpb25EZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBlQXJndW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigpKQor
ICAgICAgICB2aXNpdCh0eXBlQXJndW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmIHJlZmVyZW5jZVR5cGUpCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdChyZWZlcmVuY2VUeXBlKTsKK30KKwordm9pZCBWaXNp
dG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMpCit7CisgICAg
aWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzZW1hbnRpYyk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4
cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChjb25zdGFudEV4
cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkF0
dHJpYnV0ZUJsb2NrJiBhdHRyaWJ1dGVCbG9jaykKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KGF0dHJpYnV0ZUJsb2NrKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpCdWlsdEluU2VtYW50aWMmIGJ1aWx0SW5TZW1hbnRpYykKK3sKKyAgICBp
ZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGJ1aWx0SW5TZW1hbnRpYyk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYgcmVzb3Vy
Y2VTZW1hbnRpYykKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHJlc291cmNl
U2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlNw
ZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYgc3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFu
dGljKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoc3BlY2lhbGl6YXRpb25D
b25zdGFudFNlbWFudGljKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpTdGFnZUluT3V0U2VtYW50aWMmIHN0YWdlSW5PdXRTZW1hbnRpYykKK3sKKyAgICBpZiAo
IWVycm9yKCkpCisgICAgICAgIHZpc2l0KHN0YWdlSW5PdXRTZW1hbnRpYyk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJM
aXRlcmFsKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoaW50ZWdlckxpdGVy
YWwpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlVuc2lnbmVk
SW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpCit7CisgICAgaWYgKCFlcnJv
cigpKQorICAgICAgICB2aXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsKTsKK30KKwordm9pZCBW
aXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJh
bCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZsb2F0TGl0ZXJhbCk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TnVsbExpdGVyYWwmIG51
bGxMaXRlcmFsKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobnVsbExpdGVy
YWwpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJvb2xlYW5M
aXRlcmFsJiBib29sZWFuTGl0ZXJhbCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZp
c2l0KGJvb2xlYW5MaXRlcmFsKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGUmIGludGVnZXJMaXRlcmFsVHlwZSkKK3sKKyAgICBp
ZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGludGVnZXJMaXRlcmFsVHlwZSk7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bFR5cGUmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKQoreworICAgIGlmICghZXJyb3IoKSkK
KyAgICAgICAgdmlzaXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUpOworfQorCit2b2lkIFZp
c2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZsb2F0TGl0ZXJhbFR5cGUmIGZsb2F0TGl0
ZXJhbFR5cGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChmbG9hdExpdGVy
YWxUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOdWxs
TGl0ZXJhbFR5cGUmIG51bGxMaXRlcmFsVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KG51bGxMaXRlcmFsVHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKQoreworICAg
IGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJiBmdW5jdGlvbkF0dHJpYnV0ZSkKK3sKKyAgICBpZiAo
IWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZ1bmN0aW9uQXR0cmlidXRlKTsKK30KKwordm9pZCBW
aXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1
dGUmIG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisg
ICAgICAgIHZpc2l0KG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQoreworICAgIGlmICgh
ZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYmxvY2spOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KQoreworICAgIGlmICghZXJy
b3IoKSkKKyAgICAgICAgdmlzaXQoc3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVj
a0Vycm9yQW5kVmlzaXQoQVNUOjpCcmVhayYgYnJlYWtTdGF0ZW1lbnQpCit7CisgICAgaWYgKCFl
cnJvcigpKQorICAgICAgICB2aXNpdChicmVha1N0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29udGludWUmIGNvbnRpbnVlU3RhdGVtZW50KQor
eworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY29udGludWVTdGF0ZW1lbnQpOwor
fQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkRvV2hpbGVMb29wJiBk
b1doaWxlTG9vcCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGRvV2hpbGVM
b29wKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFeHByZXNz
aW9uJiBleHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZXhw
cmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RG90
RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAg
IHZpc2l0KGRvdEV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKQoreworICAgIGlmICgh
ZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoaW5kZXhFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNp
dG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZp
c2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYgZWZmZWN0ZnVs
RXhwcmVzc2lvblN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0
KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkZhbGx0aHJvdWdoJiBmYWxsdGhyb3VnaFN0YXRlbWVudCkKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZhbGx0aHJvdWdoU3RhdGVtZW50KTsK
K30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGb3JMb29wJiBmb3JM
b29wKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZm9yTG9vcCk7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3Rh
dGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoaWZTdGF0ZW1lbnQp
OworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJldHVybiYgcmV0
dXJuU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQocmV0dXJu
U3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpT
d2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQoc3dpdGNoQ2FzZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdChzd2l0Y2hTdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlRyYXAmIHRyYXApCit7CisgICAgaWYgKCFlcnJvcigpKQor
ICAgICAgICB2aXNpdCh0cmFwKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh2YXJpYWJs
ZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCit7CisgICAgaWYgKCFlcnJvcigpKQor
ICAgICAgICB2aXNpdCh3aGlsZUxvb3ApOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uKTsK
K30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBc3NpZ25tZW50RXhw
cmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAg
ICAgICB2aXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQorewor
ICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY2FsbEV4cHJlc3Npb24pOworfQorCit2
b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29t
bWFFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY29tbWFF
eHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpE
ZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikKK3sKKyAgICBpZiAo
IWVycm9yKCkpCisgICAgICAgIHZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbik7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mIGxv
Z2ljYWxFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobG9n
aWNhbEV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lvbikKK3sKKyAgICBp
ZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAgIGlmICghZXJy
b3IoKSkKKyAgICAgICAgdmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbik7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNz
aW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAg
ICB2aXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24pCit7CisgICAg
aWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbik7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZh
cmlhYmxlUmVmZXJlbmNlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodmFy
aWFibGVSZWZlcmVuY2UpOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCmluZGV4IDUxNjg1NmU0
MWQwLi5hZmI0NjRjZjRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKQEAgLTI3LDU0MyArMjcsMjM1IEBACiAKICNpZiBFTkFC
TEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCi0jaW5jbHVkZSAiV0hMU0xB
bm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVy
ZW5jZVR5cGUuaCIKLSNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgotI2luY2x1ZGUgIldITFNM
QXNzaWdubWVudEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTEJhc2VGdW5jdGlvbkF0dHJp
YnV0ZS5oIgotI2luY2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xC
bG9jay5oIgotI2luY2x1ZGUgIldITFNMQm9vbGVhbkxpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExT
TEJyZWFrLmgiCi0jaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKLSNpbmNsdWRlICJX
SExTTENhbGxFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xDb21tYUV4cHJlc3Npb24uaCIK
LSNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMQ29u
c3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJX
SExTTENvbnRpbnVlLmgiCi0jaW5jbHVkZSAiV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaCIK
LSNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCi0jaW5jbHVkZSAiV0hMU0xEb3RFeHByZXNz
aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmgiCi0j
aW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKLSNpbmNsdWRlICJXSExTTEVu
dW1lcmF0aW9uTWVtYmVyLmgiCi0jaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xGYWxsdGhyb3VnaC5oIgotI2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsLmgiCi0j
aW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkF0dHJpYnV0
ZS5oIgotI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldI
TFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVudC5oIgot
I2luY2x1ZGUgIldITFNMSW5kZXhFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xJbnRlZ2Vy
TGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMTG9naWNhbEV4cHJlc3Npb24uaCIKLSNpbmNsdWRl
ICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xNYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Np
b24uaCIKLSNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKLSNpbmNs
dWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNMTm9kZS5o
IgotI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTE51bVRocmVh
ZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMUGFyYW1ldGVyLmgiCi0jaW5j
bHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgotI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKLSNpbmNsdWRlICJXSExT
TFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5
cGUuaCIKLSNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExT
TFJldHVybi5oIgogI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFNw
ZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMU3RhZ2VJbk91
dFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExT
TFN0cnVjdHVyZURlZmluaXRpb24uaCIKLSNpbmNsdWRlICJXSExTTFN0cnVjdHVyZUVsZW1lbnQu
aCIKLSNpbmNsdWRlICJXSExTTFN3aXRjaENhc2UuaCIKLSNpbmNsdWRlICJXSExTTFN3aXRjaFN0
YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIKLSNpbmNsdWRl
ICJXSExTTFRyYXAuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKICNpbmNsdWRlICJXSExTTFR5
cGVBcmd1bWVudC5oIgotI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKLSNpbmNsdWRl
ICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxp
dGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTFZhbHVlLmgiCi0jaW5jbHVkZSAiV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudC5oIgotI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJX
SExTTFdoaWxlTG9vcC5oIgotCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdI
TFNMIHsKIAotY2xhc3MgVmlzaXRvciB7Ci0gICAgflZpc2l0b3IoKSA9IGRlZmF1bHQ7Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKLSAgICB7Ci0gICAgICAgIGZv
ciAoYXV0byYgdHlwZURlZmluaXRpb24gOiBwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpKQotICAg
ICAgICAgICAgdmlzaXQodHlwZURlZmluaXRpb24pOwotICAgICAgICBmb3IgKGF1dG8mIHN0cnVj
dHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpCi0gICAgICAg
ICAgICB2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKLSAgICAgICAgZm9yIChhdXRvJiBlbnVt
ZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkKLSAg
ICAgICAgICAgIHZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7Ci0gICAgICAgIGZvciAoYXV0
byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpCi0g
ICAgICAgICAgICB2aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOwotICAgICAgICBmb3IgKGF1dG8m
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsK
LSAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbik7Ci0gICAgfQotCi0gICAgdm9pZCB2aXNpdFR5cGUoQVNUOjpUeXBlJiB0eXBlKQotICAg
IHsKLSAgICAgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odHlwZSkpCi0gICAgICAgICAg
ICB2aXNpdChkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpKTsKLSAgICAgICAgZWxz
ZSBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odHlwZSkpCi0gICAgICAgICAgICB2aXNpdChkb3du
Y2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih0eXBlKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPih0eXBlKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPih0eXBlKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlUeXBlPih0eXBlKSk7Ci0gICAgICAgICAgICB2aXNpdChk
b3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odHlwZSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKQot
ICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHR5cGVEZWZpbml0aW9uLnR5cGUoKSk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0
dXJlRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVu
dCA6IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkKLSAgICAgICAgICAg
IHZpc2l0KHN0cnVjdHVyZUVsZW1lbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQotICAg
IHsKLSAgICAgICAgdmlzaXRUeXBlKGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpOwotICAg
ICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25EZWZpbml0aW9u
LmVudW1lcmF0aW9uTWVtYmVycygpKQotICAgICAgICAgICAgdmlzaXQoZW51bWVyYXRpb25NZW1i
ZXIpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQoc3RhdGljX2Nh
c3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4oZnVuY3Rpb25EZWZpbml0aW9uKSk7Ci0gICAg
ICAgIHZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uJj4obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOwotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0
aXZlVHlwZURlY2xhcmF0aW9uKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiB0eXBlQXJndW1l
bnQgOiBuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpKQotICAgICAgICAgICAg
dmlzaXQodHlwZUFyZ3VtZW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRv
JiB0eXBlQXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkKLSAgICAgICAg
ICAgIHZpc2l0KHR5cGVBcmd1bWVudCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKQotICAgIHsKLSAgICAgICAgdmlzaXQoc3Rh
dGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlJj4ocG9pbnRlclR5cGUpKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJl
bmNlVHlwZSkKLSAgICB7Ci0gICAgICAgIHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UmVmZXJlbmNl
VHlwZSY+KGFycmF5UmVmZXJlbmNlVHlwZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBl
KGFycmF5VHlwZS50eXBlKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpCi0gICAgewotICAgICAgICB2aXNp
dFR5cGUoc3RydWN0dXJlRWxlbWVudC50eXBlKCkpOwotICAgICAgICBpZiAoc3RydWN0dXJlRWxl
bWVudC5zZW1hbnRpYygpKQotICAgICAgICAgICAgdmlzaXQoKnN0cnVjdHVyZUVsZW1lbnQuc2Vt
YW50aWMoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRp
b25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKGVudW1lcmF0
aW9uTWVtYmVyLnZhbHVlKCkpCi0gICAgICAgICAgICB2aXNpdCgqZW51bWVyYXRpb25NZW1iZXIu
dmFsdWUoKSk7Ci0gICAgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pCi0gICAgewotICAgICAgICB2aXNp
dChmdW5jdGlvbkRlY2xhcmF0aW9uLmF0dHJpYnV0ZUJsb2NrKCkpOwotICAgICAgICB2aXNpdFR5
cGUoZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBmb3IgKGF1dG8mIHBhcmFt
ZXRlciA6IGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpKQotICAgICAgICAgICAgdmlz
aXQocGFyYW1ldGVyKTsKLSAgICAgICAgaWYgKGZ1bmN0aW9uRGVjbGFyYXRpb24uc2VtYW50aWMo
KSkKLSAgICAgICAgICAgIHZpc2l0KCpmdW5jdGlvbkRlY2xhcmF0aW9uLnNlbWFudGljKCkpOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlR5cGVBcmd1bWVudCYgdHlwZUFy
Z3VtZW50KQotICAgIHsKLSAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShB
U1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKSB7Ci0gICAgICAgICAg
ICB2aXNpdChjb25zdGFudEV4cHJlc3Npb24pOwotICAgICAgICB9LCBbJl0oc3RkOjp1bmlxdWVf
cHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4mIHR5cGVSZWZlcmVuY2UpIHsKLSAgICAgICAgICAgIHZp
c2l0KCp0eXBlUmVmZXJlbmNlKTsKLSAgICAgICAgfSksIHR5cGVBcmd1bWVudCk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYgcmVmZXJlbmNlVHlw
ZSkKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShyZWZlcmVuY2VUeXBlLmVsZW1lbnRUeXBlKCkp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlNlbWFudGljJiBzZW1hbnRp
YykKLSAgICB7Ci0gICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpC
dWlsdEluU2VtYW50aWMmIGJ1aWx0SW5TZW1hbnRpYykgewotICAgICAgICAgICAgdmlzaXQoYnVp
bHRJblNlbWFudGljKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYgcmVz
b3VyY2VTZW1hbnRpYykgewotICAgICAgICAgICAgdmlzaXQocmVzb3VyY2VTZW1hbnRpYyk7Ci0g
ICAgICAgIH0sIFsmXShBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYgc3BlY2lh
bGl6YXRpb25Db25zdGFudFNlbWFudGljKSB7Ci0gICAgICAgICAgICB2aXNpdChzcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMpOwotICAgICAgICB9LCBbJl0oQVNUOjpTdGFnZUluT3V0U2Vt
YW50aWMmIHN0YWdlSW5PdXRTZW1hbnRpYykgewotICAgICAgICAgICAgdmlzaXQoc3RhZ2VJbk91
dFNlbWFudGljKTsKLSAgICAgICAgfSksIHNlbWFudGljKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikK
LSAgICB7Ci0gICAgICAgIGNvbnN0YW50RXhwcmVzc2lvbi52aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgewotICAgICAgICAgICAg
dmlzaXQoaW50ZWdlckxpdGVyYWwpOwotICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVn
ZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7Ci0gICAgICAgICAgICB2aXNpdCh1
bnNpZ25lZEludGVnZXJMaXRlcmFsKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFs
JiBmbG9hdExpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KGZsb2F0TGl0ZXJhbCk7Ci0gICAg
ICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgewotICAgICAgICAgICAg
dmlzaXQobnVsbExpdGVyYWwpOwotICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYg
Ym9vbGVhbkxpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KGJvb2xlYW5MaXRlcmFsKTsKLSAg
ICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSB7Ci0g
ICAgICAgICAgICB2aXNpdChjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZSk7Ci0gICAgICAgIH0pKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRlQmxvY2spCi0gICAgewotICAgICAgICBmb3IgKGF1
dG8mIGZ1bmN0aW9uQXR0cmlidXRlIDogYXR0cmlidXRlQmxvY2spCi0gICAgICAgICAgICB2aXNp
dChmdW5jdGlvbkF0dHJpYnV0ZSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6UGFyYW1ldGVyJiBwYXJhbWV0ZXIpCi0gICAgewotICAgICAgICB2aXNpdFR5cGUocGFyYW1l
dGVyLnR5cGUoKSk7Ci0gICAgICAgIGlmIChwYXJhbWV0ZXIuc2VtYW50aWMoKSkKLSAgICAgICAg
ICAgIHZpc2l0KCpwYXJhbWV0ZXIuc2VtYW50aWMoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6QnVpbHRJblNlbWFudGljJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYpCi0gICAgewotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRp
YyYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0YWdlSW5P
dXRTZW1hbnRpYyYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkludGVnZXJMaXRlcmFsJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYpCi0gICAgewotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJikKLSAgICB7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmKQotICAgIHsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZSYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJiBmdW5jdGlvbkF0dHJpYnV0ZSkKLSAgICB7Ci0gICAg
ICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpOdW1UaHJlYWRzRnVuY3Rp
b25BdHRyaWJ1dGUmIG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkgewotICAgICAgICAgICAg
dmlzaXQobnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKTsKLSAgICAgICAgfSksIGZ1bmN0aW9u
QXR0cmlidXRlKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOdW1UaHJl
YWRzRnVuY3Rpb25BdHRyaWJ1dGUmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpCbG9jayYgYmxvY2spCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHN0YXRl
bWVudCA6IGJsb2NrLnN0YXRlbWVudHMoKSkKLSAgICAgICAgICAgIHZpc2l0KCpzdGF0ZW1lbnQp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0YXRlbWVudCYgc3RhdGVt
ZW50KQotICAgIHsKLSAgICAgICAgaWYgKGlzPEFTVDo6QmxvY2s+KHN0YXRlbWVudCkpCi0gICAg
ICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkJsb2NrPihzdGF0ZW1lbnQpKTsKLSAgICAgICAg
ZWxzZSBpZiAoaXM8QVNUOjpCcmVhaz4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRv
d25jYXN0PEFTVDo6QnJlYWs+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6
OkNvbnRpbnVlPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpD
b250aW51ZT4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6RG9XaGlsZUxv
b3A+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkRvV2hpbGVM
b29wPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpFZmZlY3RmdWxFeHBy
ZXNzaW9uU3RhdGVtZW50PihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8
QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKLSAgICAgICAg
ZWxzZSBpZiAoaXM8QVNUOjpGYWxsdGhyb3VnaD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZp
c2l0KGRvd25jYXN0PEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNl
IGlmIChpczxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3du
Y2FzdDxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6
OklmU3RhdGVtZW50PihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNU
OjpJZlN0YXRlbWVudD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6UmV0
dXJuPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpSZXR1cm4+
KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlN3aXRjaENhc2U+KHN0YXRl
bWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlN3aXRjaENhc2U+KHN0YXRl
bWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlN3aXRjaFN0YXRlbWVudD4oc3RhdGVt
ZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6U3dpdGNoU3RhdGVtZW50Pihz
dGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpUcmFwPihzdGF0ZW1lbnQpKQot
ICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpUcmFwPihzdGF0ZW1lbnQpKTsKLSAgICAg
ICAgZWxzZSBpZiAoaXM8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oc3RhdGVt
ZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFT
U0VSVChpczxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7Ci0gICAgICAgICAgICB2aXNpdChk
b3duY2FzdDxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCcmVhayYpCi0gICAgewotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbnRpbnVlJikKLSAgICB7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKQotICAgIHsK
LSAgICAgICAgdmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKLSAgICAgICAgdmlzaXQoZG9XaGls
ZUxvb3AuY29uZGl0aW9uYWwoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIGlmIChpczxBU1Q6OkFz
c2lnbm1lbnRFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25j
YXN0PEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxz
ZSBpZiAoaXM8QVNUOjpCb29sZWFuTGl0ZXJhbD4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2
aXNpdChkb3duY2FzdDxBU1Q6OkJvb2xlYW5MaXRlcmFsPihleHByZXNzaW9uKSk7Ci0gICAgICAg
IGVsc2UgaWYgKGlzPEFTVDo6Q2FsbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAg
ICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpDYWxsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAg
ICAgICBlbHNlIGlmIChpczxBU1Q6OkNvbW1hRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAg
ICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkNvbW1hRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
OwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oZXhwcmVz
c2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkZsb2F0TGl0ZXJh
bD4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkZsb2F0TGl0
ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkludGVnZXJMaXRl
cmFsPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6SW50ZWdl
ckxpdGVyYWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpMb2dpY2Fs
RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6
OkxvZ2ljYWxFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFT
VDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQo
ZG93bmNhc3Q8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAg
ICBlbHNlIGlmIChpczxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Np
b24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6TWFrZVBv
aW50ZXJFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0
PEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzPEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQo
ZG93bmNhc3Q8QVNUOjpOdWxsTGl0ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlm
IChpczxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAg
ICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbj4oZXhwcmVz
c2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFT
VDo6VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93
bmNhc3Q8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNl
IGlmIChpczxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKQotICAgICAg
ICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihleHByZXNz
aW9uKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2U+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFT
VDo6VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQm
IGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpCi0gICAgewotICAgICAgICB2aXNpdChlZmZl
Y3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmVmZmVjdGZ1bEV4cHJlc3Npb24oKSk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKQotICAgIHsK
LSAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkgewotICAg
ICAgICAgICAgdmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpOwotICAgICAgICB9
LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24pIHsKLSAg
ICAgICAgICAgIHZpc2l0KCpleHByZXNzaW9uKTsKLSAgICAgICAgfSksIGZvckxvb3AuaW5pdGlh
bGl6YXRpb24oKSk7Ci0gICAgICAgIGlmIChmb3JMb29wLmNvbmRpdGlvbigpKQotICAgICAgICAg
ICAgdmlzaXQoKmZvckxvb3AuY29uZGl0aW9uKCkpOwotICAgICAgICBpZiAoZm9yTG9vcC5pbmNy
ZW1lbnQoKSkKLSAgICAgICAgICAgIHZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgpKTsKLSAgICAg
ICAgdmlzaXQoZm9yTG9vcC5ib2R5KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKLSAgICB7Ci0gICAgICAgIHZpc2l0KGlm
U3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOwotICAgICAgICB2aXNpdChpZlN0YXRlbWVudC5ib2R5
KCkpOwotICAgICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkKLSAgICAgICAgICAgIHZp
c2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmIChy
ZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSkKLSAgICAgICAgICAgIHZpc2l0KCpyZXR1cm5TdGF0ZW1l
bnQudmFsdWUoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3dpdGNo
Q2FzZSYgc3dpdGNoQ2FzZSkKLSAgICB7Ci0gICAgICAgIGlmIChzd2l0Y2hDYXNlLnZhbHVlKCkp
Ci0gICAgICAgICAgICB2aXNpdCgqc3dpdGNoQ2FzZS52YWx1ZSgpKTsKLSAgICAgICAgdmlzaXQo
c3dpdGNoQ2FzZS5ibG9jaygpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkKLSAgICB7Ci0gICAgICAgIHZpc2l0
KHN3aXRjaFN0YXRlbWVudC52YWx1ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNl
IDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpCi0gICAgICAgICAgICB2aXNpdChzd2l0
Y2hDYXNlKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUcmFwJikKLSAg
ICB7Ci0gICAgfQorY2xhc3MgUHJvZ3JhbTsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIFR5
cGVEZWZpbml0aW9uOworY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlvbjsKK2NsYXNzIEVudW1lcmF0
aW9uRGVmaW5pdGlvbjsKK2NsYXNzIEZ1bmN0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIE5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBOYXRpdmVUeXBlRGVjbGFyYXRpb247CitjbGFzcyBU
eXBlUmVmZXJlbmNlOworY2xhc3MgUG9pbnRlclR5cGU7CitjbGFzcyBBcnJheVJlZmVyZW5jZVR5
cGU7CitjbGFzcyBBcnJheVR5cGU7CitjbGFzcyBTdHJ1Y3R1cmVFbGVtZW50OworY2xhc3MgRW51
bWVyYXRpb25NZW1iZXI7CitjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3MgUmVmZXJl
bmNlVHlwZTsKK2NsYXNzIENvbnN0YW50RXhwcmVzc2lvbjsKK2NsYXNzIEJ1aWx0SW5TZW1hbnRp
YzsKK2NsYXNzIFJlc291cmNlU2VtYW50aWM7CitjbGFzcyBTcGVjaWFsaXphdGlvbkNvbnN0YW50
U2VtYW50aWM7CitjbGFzcyBTdGFnZUluT3V0U2VtYW50aWM7CitjbGFzcyBJbnRlZ2VyTGl0ZXJh
bDsKK2NsYXNzIFVuc2lnbmVkSW50ZWdlckxpdGVyYWw7CitjbGFzcyBGbG9hdExpdGVyYWw7Citj
bGFzcyBOdWxsTGl0ZXJhbDsKK2NsYXNzIEJvb2xlYW5MaXRlcmFsOworY2xhc3MgQ29uc3RhbnRF
eHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2U7CitjbGFzcyBOdW1UaHJlYWRzRnVu
Y3Rpb25BdHRyaWJ1dGU7CitjbGFzcyBCbG9jazsKK2NsYXNzIFN0YXRlbWVudDsKK2NsYXNzIEJy
ZWFrOworY2xhc3MgQ29udGludWU7CitjbGFzcyBEb1doaWxlTG9vcDsKK2NsYXNzIEV4cHJlc3Np
b247CitjbGFzcyBEb3RFeHByZXNzaW9uOworY2xhc3MgSW5kZXhFeHByZXNzaW9uOworY2xhc3Mg
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uOworY2xhc3MgRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRl
bWVudDsKK2NsYXNzIEZhbGx0aHJvdWdoOworY2xhc3MgRm9yTG9vcDsKK2NsYXNzIElmU3RhdGVt
ZW50OworY2xhc3MgUmV0dXJuOworY2xhc3MgU3dpdGNoQ2FzZTsKK2NsYXNzIFN3aXRjaFN0YXRl
bWVudDsKK2NsYXNzIFRyYXA7CitjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudDsK
K2NsYXNzIFdoaWxlTG9vcDsKK2NsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb247CitjbGFzcyBBc3Np
Z25tZW50RXhwcmVzc2lvbjsKK2NsYXNzIENhbGxFeHByZXNzaW9uOworY2xhc3MgQ29tbWFFeHBy
ZXNzaW9uOworY2xhc3MgRGVyZWZlcmVuY2VFeHByZXNzaW9uOworY2xhc3MgTG9naWNhbEV4cHJl
c3Npb247CitjbGFzcyBMb2dpY2FsTm90RXhwcmVzc2lvbjsKK2NsYXNzIE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb247CitjbGFzcyBNYWtlUG9pbnRlckV4cHJlc3Npb247CitjbGFzcyBSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uOworY2xhc3MgVGVybmFyeUV4cHJlc3Npb247CitjbGFzcyBW
YXJpYWJsZVJlZmVyZW5jZTsKK2NsYXNzIFVubmFtZWRUeXBlOworY2xhc3MgTmFtZWRUeXBlOwog
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQotICAgIHsKLSAgICAgICAgZm9yIChh
dXRvJiB2YXJpYWJsZURlY2xhcmF0aW9uIDogdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQu
dmFyaWFibGVEZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KHZhcmlhYmxlRGVjbGFy
YXRpb24pOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYg
d2hpbGVMb29wKQotICAgIHsKLSAgICAgICAgdmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkp
OwotICAgICAgICB2aXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9u
KQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsK
LSAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKLSAgICAgICAgICAg
IHZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpOwotICAgICAgICBpZiAodmFy
aWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKQotICAgICAgICAgICAgdmlzaXQoKnZhcmlh
YmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQot
ICAgIHsKLSAgICAgICAgdmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKLSAgICAg
ICAgdmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQotICAg
IHsKLSAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50
cygpKQotICAgICAgICAgICAgdmlzaXQoKmFyZ3VtZW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikKLSAgICB7
Ci0gICAgICAgIGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGNvbW1hRXhwcmVzc2lvbi5saXN0KCkp
Ci0gICAgICAgICAgICB2aXNpdCgqZXhwcmVzc2lvbik7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Np
b24pCi0gICAgewotICAgICAgICB2aXNpdChkZXJlZmVyZW5jZUV4cHJlc3Npb24ucG9pbnRlcigp
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lv
biYgbG9naWNhbEV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChsb2dpY2FsRXhwcmVz
c2lvbi5sZWZ0KCkpOwotICAgICAgICB2aXNpdChsb2dpY2FsRXhwcmVzc2lvbi5yaWdodCgpKTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lv
biYgbG9naWNhbE5vdEV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChsb2dpY2FsTm90
RXhwcmVzc2lvbi5vcGVyYW5kKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LmxWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpNYWtlUG9p
bnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZp
c2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uYmFzZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQotICAgIHsKLSAg
ICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0gICAgICAg
IHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFsdWUoKSk7Ci0gICAgICAgIHZp
c2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWUoKSk7Ci0gICAgICAgIHZpc2l0
KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHByZXNzaW9uKCkpOwotICAgICAg
ICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnJlc3VsdEV4cHJlc3Npb24oKSk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mIHRl
cm5hcnlFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQodGVybmFyeUV4cHJlc3Npb24u
cHJlZGljYXRlKCkpOwotICAgICAgICB2aXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVz
c2lvbigpKTsKLSAgICAgICAgdmlzaXQodGVybmFyeUV4cHJlc3Npb24uZWxzZUV4cHJlc3Npb24o
KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVu
Y2UmKQotICAgIHsKLSAgICB9Cit9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBbm9u
eW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJikKLSAgICB7Ci0gICAgfQorY2xhc3MgVmlzaXRvciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+VmlzaXRvcigpID0gZGVmYXVsdDsKKworICAgIC8vIEZJ
WE1FOiBBZGQgYSB3YXkgdG8gdmlzaXQgYSBjb25zdCBQcm9ncmFtCisKKyAgICB2b2lkIHZpc2l0
VW5uYW1lZFR5cGUoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpOworICAgIHZvaWQgdmlz
aXROYW1lZFR5cGUoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSk7CisgICAgdm9pZCBjaGVja0Vy
cm9yQW5kVmlzaXRVbm5hbWVkVHlwZShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSk7Cisg
ICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXROYW1lZFR5cGUoQVNUOjpOYW1lZFR5cGUmIG5hbWVk
VHlwZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoUHJvZ3JhbSYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJl
bmNlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpTdHJ1Y3R1cmVFbGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RW51bWVy
YXRpb25NZW1iZXImKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50Jik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OlNlbWFudGljJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
Q29uc3RhbnRFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXR0cmli
dXRlQmxvY2smKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCdWlsdEluU2VtYW50aWMm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZXNvdXJjZVNlbWFudGljJik7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJik7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJik7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
TnVsbExpdGVyYWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJh
bCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsVHlwZSYpOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsVHlwZSYpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsVHlwZSYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25BdHRyaWJ1dGUmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OlN0YXRlbWVudCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJyZWFr
Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29udGludWUmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OkV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNz
aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZhbGx0aHJvdWdoJik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OklmU3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlRyYXAmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
TG9naWNhbEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2Fs
Tm90RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpNYWtlUG9p
bnRlckV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VGVybmFyeUV4
cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5j
ZSYpOworCisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoUHJvZ3JhbSYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOworICAgIHZvaWQgY2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CisgICAgdm9pZCBjaGVj
a0Vycm9yQW5kVmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICB2
b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmKTsKKyAgICB2b2lkIGNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlBvaW50ZXJUeXBlJik7CisgICAgdm9pZCBjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkFycmF5VHlwZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6U3RydWN0dXJlRWxlbWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
RW51bWVyYXRpb25NZW1iZXImKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5
cGVBcmd1bWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmVmZXJlbmNl
VHlwZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U2VtYW50aWMmKTsKKyAg
ICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYpOworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smKTsKKyAgICB2b2lk
IGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYpOworICAgIHZvaWQgY2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYpOworICAgIHZvaWQgY2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJik7CisgICAg
dm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmKTsKKyAgICB2
b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJik7CisgICAgdm9pZCBj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6Ok51bGxMaXRlcmFsJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsVHlwZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6TnVsbExpdGVyYWxUeXBlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpOworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RnVuY3Rpb25BdHRyaWJ1dGUmKTsKKyAgICB2
b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYp
OworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QmxvY2smKTsKKyAgICB2b2lkIGNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0YXRlbWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6QnJlYWsmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNv
bnRpbnVlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpEb1doaWxlTG9vcCYp
OworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RXhwcmVzc2lvbiYpOworICAgIHZv
aWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQmKTsKKyAg
ICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZhbGx0aHJvdWdoJik7CisgICAgdm9pZCBj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGb3JMb29wJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpJZlN0YXRlbWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6UmV0dXJuJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTd2l0Y2hDYXNl
Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmKTsK
KyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlRyYXAmKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Jik7CisgICAg
dm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpXaGlsZUxvb3AmKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVj
a0Vycm9yQW5kVmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJik7CisgICAgdm9pZCBj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJik7CisgICAg
dm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYpOworICAgIHZv
aWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKTsKKworICAgIHZv
aWQgc2V0RXJyb3IoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2Vycm9yKTsKKyAgICAgICAg
bV9lcnJvciA9IHRydWU7CisgICAgfQorCisgICAgYm9vbCBlcnJvcigpIGNvbnN0IHsgcmV0dXJu
IG1fZXJyb3I7IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1fZXJyb3IgeyBmYWxzZSB9OyAvLyBG
SVhNRTogTWlncmF0ZSB0aGlzIHRvIGJlIHNvbWUgc29ydCBvZiBkZXNjcmlwdGl2ZSBzdHJpbmcu
CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNjMGUzNjQ3MDU0Li5kNDBjMzRmMDRkZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKQEAgLTMwNiw4ICszMDYsMzIgQEAgTW9kdWxlcy93ZWJncHUvRE9NV2luZG93
V2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cmVwYXJlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNwcAorTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xJbmZlclR5cGVzLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2
ZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcAorTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAKK01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCitNb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCitNb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKK01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCitN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCitNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xC
dWlsdEluU2VtYW50aWMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJj
ZVNlbWFudGljLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRp
b25Db25zdGFudFNlbWFudGljLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3Rh
Z2VJbk91dFNlbWFudGljLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRM
aXRlcmFsVHlwZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRl
cmFsVHlwZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsVHlw
ZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVy
YWxUeXBlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5j
cHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKK01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcAorTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuY3BwCitNb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcAogTW9kdWxlcy93ZWJn
cHUvV2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVQWRhcHRlci5jcHAKIE1vZHVsZXMv
d2ViZ3B1L1dlYkdQVUJpbmRHcm91cExheW91dC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwN2MxNmVmMTc3NS4uNGYwNTZi
YjFhMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTY0MDMsOSArNjQwMywyMCBAQAogCQkxQzI0RUVBNzFDNzJBN0I0MDA4MEY4
RkMgLyogSlNGb250RmFjZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBK
U0ZvbnRGYWNlU2V0Lmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9udEZhY2VT
ZXQuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMUMyNjQ5NzkwRDdF
MjQ4QTAwQkQxMEYyIC8qIERvY3VtZW50TG9hZGVyTWFjLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TG9hZGVyTWFjLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUMzMjQ5MTAxQzZENkEzQjAwN0VEQjMyIC8qIEZvbnRWYXJpYW50QnVp
bGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250VmFyaWFu
dEJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc2QzIxQ0VE
QTQyMDAwREM5RjIgLyogV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUMzMzI3NkUyMUNFRkY3NDAwMERDOUYyIC8qIFdITFNMUmVzb2x2ZU92ZXJs
b2FkSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NkYyMUNGMDEzMTAwMERDOUYyIC8qIFdI
TFNMSW5mZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEluZmVyVHlwZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzEyMUNGMEJFMTAwMERDOUYyIC8qIFdITFNM
TmFtZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTmFtZWRUeXBlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzcyMjFDRjBEMkUwMDBEQzlGMiAvKiBXSExTTFVubmFt
ZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVW5uYW1lZFR5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzQyMUQ1QTcwNjAwMERDOUYyIC8qIFdITFNMUmVjdXJz
aXZlVHlwZUNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3NTIxRDVCMEY4MDAwREM5
RjIgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDMzMyNzc2MjFENUMwN0UwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nl
c3NvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3Jz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc3MjFENUNBODMwMDBEQzlG
MiAvKiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQzMzMjc3ODIxRDVDRUQ0MDAwREM5RjIgLyogV0hMU0xTeW50aGVzaXpl
QXJyYXlPcGVyYXRvckxlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVBcnJh
eU9wZXJhdG9yTGVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMzk2OUNG
MUI3NDIxMUUwMDJCQ0ZBNyAvKiBGb250Q2FjaGVDb3JlVGV4dC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FjaGVDb3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFDNjYyNjBFMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RmFjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjYyNjBGMUM2RTdDQTYwMEFCNTI3QyAvKiBG
b250RmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RmFjZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzdDQzIxRDIxQ0RFMTk4MDBDMUZBMkMgLyog
V0hMU0xOYW1lQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE5hbWVDb250ZXh0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJ
bnNwZWN0b3JDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
c3BlY3RvckNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5
NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCOTU4MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNw
ZWN0b3JDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9y
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NDE1LDYgKzY0MjYsMTgg
QEAKIAkJMUNBRjM0N0UwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmplY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBRjM0N0YwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlw
dE9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYlNj
cmlwdE9iamVjdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBRjM0ODAwQTZD
NDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQ0I2OUIyQzIxREQ5NkVGMDA2RTg0NkEgLyogV0hMU0xHYXRoZXJF
bnRyeVBvaW50SXRlbXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xHYXRoZXJFbnRyeVBv
aW50SXRlbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIyRDIxREQ5
NkVGMDA2RTg0NkEgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUNCNjlCMzIyMURFRDQwQjAwNkU4NDZBIC8qIFdITFNMUmVzb2x2YWJsZVR5cGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0hMU0xSZXNvbHZhYmxlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQ0I2OUIzNDIxREVENjNBMDA2RTg0NkEgLyogV0hMU0xGbG9hdExpdGVyYWxU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRmxvYXRMaXRlcmFsVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIzNTIxREVENjQ5MDA2RTg0NkEgLyogV0hMU0xJbnRl
Z2VyTGl0ZXJhbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCMzYyMURFRDY1NzAwNkU4NDZB
IC8qIFdITFNMTnVsbExpdGVyYWxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTnVsbExpdGVy
YWxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjM3MjFERUQ2NkIw
MDZFODQ2QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUNCNjlCMzgyMURGMDNFMTAwNkU4NDZBIC8qIFdITFNMRmxvYXRMaXRlcmFs
VHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIzOTIxREYwM0YzMDA2RTg0NkEgLyog
V0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbnRl
Z2VyTGl0ZXJhbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIz
QTIxREYwNDAzMDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxQ0I2OUIzQjIxREYwNDFFMDA2RTg0NkEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJM
aXRlcmFsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCM0UyMUUw
MzVGMzAwNkU4NDZBIC8qIFdITFNMUmVzb2x2aW5nVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TFJlc29sdmluZ1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNCNkI0Rjgy
MTdCODM5MzAwOTNCOUNEIC8qIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFDQjZCNEZCMjE3QjgzOTQwMDkzQjlDRCAvKiBUZXh0VW5kZXJsaW5lT2Zmc2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRleHRVbmRlcmxpbmVPZmZzZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUNDREY1QkIxOTkwMzMyNDAwQkNFQkFEIC8qIFNWR1RvT1RGRm9udENvbnZlcnNp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHVG9PVEZGb250
Q29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzIxNCw5ICsx
MzIzNywxOSBAQAogCQlDMTFBOUVDRDIxNDAzQTVDMDBDRkIyMEEgLyogU3dpdGNoaW5nR1BVQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN3aXRjaGluZ0dQVUNsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDMTFBOUVEMjIxNDA1NzhCMDBDRkIyMEEgLyogU3dpdGNoaW5nR1BV
Q2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN3aXRjaGluZ0dQVUNsaWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMxRTFEMjM1MjAzREYxNTQwMDU4NDY2NSAvKiBT
Y3JlZW5Qcm9wZXJ0aWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmVlblByb3BlcnRpZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwMTMzNDQyMURBQzA5NTAwQjYwQzI3IC8qIFdI
TFNMSW50cmluc2ljcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEludHJpbnNpY3MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwMTMzNDYyMURBRUU2RTAwQjYwQzI3IC8qIFdITFNM
SW50cmluc2ljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEludHJpbnNpY3MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjAxMzM0NzIxREI0MzYzMDBCNjBDMjcgLyog
V0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3ludGhl
c2l6ZUNvbnN0cnVjdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjAxNUMw
OTFCRTZGRTJDMDA4MjIzODkgLyogRm9udFZhcmlhbnRCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZvbnRWYXJpYW50QnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjBG
NEY2NDIxREZCRTVDMDA3MEM0NUEgLyogV0hMU0xUeXBlUmVmZXJlbmNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdITFNMVHlwZVJlZmVyZW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyMEY0RjY2MjFERkYyMzYwMDcwQzQ1QSAvKiBXSExTTEludGVnZXJMaXRlcmFsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW50ZWdlckxpdGVyYWwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMjBGNEY2NzIxREZGM0E3MDA3MEM0NUEgLyogV0hMU0xVbnNp
Z25lZEludGVnZXJMaXRlcmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMTBFOTEx
MjFCNEJEMTAwMEI3RjgzRCAvKiBXSExTTExleGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMTGV4ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjEwRTkxMjIxQjRC
RDEwMDBCN0Y4M0QgLyogV0hMU0xMZXhlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTExleGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMTM4QTEzMjFEREVDRDMwMEY1MTZCQSAv
KiBXSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEJ1aWx0
SW5TZW1hbnRpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMTM4QTE1MjFE
REVDRTkwMEY1MTZCQSAvKiBXSExTTFJlc291cmNlU2VtYW50aWMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQzIxMzhBMTYyMURERUNGQjAwRjUxNkJBIC8qIFdITFNMU3BlY2lhbGl6YXRpb25Db25z
dGFudFNlbWFudGljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU3BlY2lhbGl6YXRpb25D
b25zdGFudFNlbWFudGljLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzhB
MTcyMURERUQwRDAwRjUxNkJBIC8qIFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQzIxQkY2RjMyMUNEODlBRDAwMjI3OTc5IC8qIFdITFNMVHJhcC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXSExTTFRyYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzIxQkY2RjQyMUNEODlCMzAwMjI3OTc5IC8qIFdITFNMRnVuY3Rpb25EZWZpbml0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMRnVuY3Rpb25EZWZpbml0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMUJGNkY1MjFDRDg5QjUwMDIyNzk3OSAvKiBXSExTTENvbnRpbnVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdITFNMQ29udGludWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEzMjQ1LDcgKzEzMjc4LDYgQEAKIAkJQzIxQkY3MEMyMUNEODlDQzAwMjI3OTc5IC8q
IFdITFNMRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEV4cHJlc3Npb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MEQyMUNEODlDRDAwMjI3OTc5IC8qIFdI
TFNMUmVmZXJlbmNlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlZmVyZW5jZVR5cGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MEUyMUNEODlDRTAwMjI3OTc5IC8q
IFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3RhZ2VJbk91
dFNlbWFudGljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyMUJGNzBGMjFDRDg5
Q0YwMDIyNzk3OSAvKiBXSExTTEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzEwMjFDRDg5RDAwMDIyNzk3OSAvKiBXSExTTFZhcmlh
YmxlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzExMjFDRDg5RDEwMDIyNzk3
OSAvKiBXSExTTFR5cGVBcmd1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFR5cGVBcmd1bWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxMjIxQ0Q4OUQxMDAyMjc5
NzkgLyogV0hMU0xTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTdGF0ZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjUzLDcgKzEzMjg1LDYgQEAKIAkJQzIx
QkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxNTIxQ0Q4OUQ0MDAyMjc5Nzkg
LyogV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTExvZ2lj
YWxOb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzE2
MjFDRDg5RDUwMDIyNzk3OSAvKiBXSExTTENhbGxFeHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMQ2FsbEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzIx
QkY3MTcyMUNEODlENjAwMjI3OTc5IC8qIFdITFNMUGFyYW1ldGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMUGFyYW1ldGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzE4
MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTERvdEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xEb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJG
NzE5MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTFN3aXRjaENhc2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzFB
MjFDRDg5RDgwMDIyNzk3OSAvKiBXSExTTEJyZWFrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQnJl
YWsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjk5LDE1ICsxMzMzMCwyNyBA
QAogCQlDMjgwODMzRDFDNkRDMjJDMDAxNDUxQjYgLyogSlNGb250RmFjZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU0ZvbnRGYWNlLmNwcDsgcGF0aCA9IERlcml2
ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZS5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07CiAJCUMyODA4MzNFMUM2REMyMkMwMDE0NTFCNiAvKiBKU0ZvbnRGYWNlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTRm9udEZhY2UuaDsgcGF0aCA9IERl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZS5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJP
RFVDVFNfRElSOyB9OwogCQlDMjgwQjNGRDFFRjQ2MDg5MDBEMzUxMzUgLyogRm9udEZhbWlseVNw
ZWNpZmljYXRpb25OdWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyODZFRDlFMjFEQjVBQkEwMDcxM0M0MCAvKiBXSExTTFJlc29sdmVPdmVybG9hZElt
cGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MjcyMUM4QzZFRjAwMkRGNUNBIC8q
IFdITFNMVmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFZpc2l0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MjkyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJl
cGFyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFByZXBhcmUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyQTIxQzhDQTUwMDAyREY1Q0EgLyogV0hMU0xQcmVw
YXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUHJlcGFyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlDMjg4QzcyQjIxQzhDQ0MyMDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyQzIxQzhDQ0MyMDAyREY1Q0EgLyogV0hMU0xOYW1l
UmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1lUmVzb2x2ZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MkQyMUM5OTFEQTAwMkRGNUNBIC8qIFdITFNMVHlw
ZUFyZ3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVHlwZUFyZ3VtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJBQjBBRjQxRTZCM0M2QzAwMTM0OEM1IC8q
IEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRm9udFNlbGVjdGlvbkFsZ29yaXRobS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyQUIwQUY1MUU2QjNDNkMwMDEzNDhDNSAvKiBGb250U2VsZWN0aW9uQWxnb3Jp
dGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRTZWxlY3Rpb25BbGdv
cml0aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJBQjBCMDMxRTZERTkyQzAw
MTM0OEM1IC8qIEZvbnRTZWxlY3Rpb25WYWx1ZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9u
dFNlbGVjdGlvblZhbHVlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MkI1NTE3MDIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdITFNMQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
QjU1MTcxMjFEQjRCNDgwMDRCRTI2RSAvKiBXSExTTENoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTczMjFE
QjRCQkQwMDRCRTI2RSAvKiBXSExTTE5hbWVSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXSExTTE5hbWVSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
QjU1MTc0MjFEQjUxMEYwMDRCRTI2RSAvKiBXSExTTE5hbWVDb250ZXh0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdITFNMTmFtZUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMkI1NTE3NTIxREI1MjY2MDA0QkUyNkUgLyogV0hMU0xJbmZlclR5cGVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdITFNMSW5mZXJUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyQjU1MTc2MjFEQjUzOTQwMDRCRTI2RSAvKiBXSExTTFJlY3Vyc2l2ZVR5cGVD
aGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3NzIxREI1NDBGMDA0QkUy
NkUgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzJCNTUxNzgyMURCNTU3NTAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZVN0cnVj
dHVyZUFjY2Vzc29ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVTdHJ1
Y3R1cmVBY2Nlc3NvcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3
OTIxREI1NThGMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlv
bnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3QTIxREI1NTlFMDA0
QkUyNkUgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxN0IyMURCNTVBRjAwNEJFMjZFIC8qIFdITFNM
U3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN5bnRo
ZXNpemVDb25zdHJ1Y3RvcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1
NTE3QzIxREI1N0VEMDA0QkUyNkUgLyogV0hMU0xWaXNpdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdITFNMVmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQzJD
RjU1MUVGMzc2MUEwMDQyODFBOCAvKiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbk51bGwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udEZhbWlseVNwZWNpZmljYXRpb25OdWxs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRTM4RUZCMUU4Mzk2RkQwMENBM0FE
RiAvKiBDU1NGb250U3R5bGVWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDU1NGb250U3R5bGVWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyRTM4RUZDMUU4Mzk2RkQwMENBM0FERiAvKiBDU1NGb250U3R5bGVWYWx1ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250U3R5bGVWYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzMzIsMTEgKzI1Mzc1LDM3IEBACiAJCQkJQzIxQkY3
MzcyMUNEOEEwMjAwMjI3OTc5IC8qIFdITFNMUGFyc2VyLmNwcCAqLywKIAkJCQlDMjFCRjczODIx
Q0Q4QTAzMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuaCAqLywKIAkJCQlDMjFCRjczQTIxQ0Q4RDcw
MDAyMjc5NzkgLyogV0hMU0xQcm9ncmFtLmggKi8sCi0gCQkJCUMyODhDNzI3MjFDOEM2RUYwMDJE
RjVDQSAvKiBXSExTTFZpc2l0b3IuaCAqLywKLSAJCQkJQzI4OEM3MjkyMUM4Q0E1MDAwMkRGNUNB
IC8qIFdITFNMUHJlcGFyZS5jcHAgKi8sCi0gCQkJCUMyODhDNzJBMjFDOENBNTAwMDJERjVDQSAv
KiBXSExTTFByZXBhcmUuaCAqLywKLSAJCQkJQzI4OEM3MkIyMUM4Q0NDMjAwMkRGNUNBIC8qIFdI
TFNMTmFtZVJlc29sdmVyLmNwcCAqLywKLSAJCQkJQzI4OEM3MkMyMUM4Q0NDMjAwMkRGNUNBIC8q
IFdITFNMTmFtZVJlc29sdmVyLmggKi8sCisJCQkJQzI4OEM3MjcyMUM4QzZFRjAwMkRGNUNBIC8q
IFdITFNMVmlzaXRvci5oICovLAorCQkJCUMyQjU1MTdDMjFEQjU3RUQwMDRCRTI2RSAvKiBXSExT
TFZpc2l0b3IuY3BwICovLAorCQkJCUMyODhDNzI5MjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFBy
ZXBhcmUuY3BwICovLAorCQkJCUMyODhDNzJBMjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBh
cmUuaCAqLywKKwkJCQlDMjg4QzcyQzIxQzhDQ0MyMDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2
ZXIuaCAqLywKKwkJCQlDMkI1NTE3MzIxREI0QkJEMDA0QkUyNkUgLyogV0hMU0xOYW1lUmVzb2x2
ZXIuY3BwICovLAorCQkJCTFDN0NDMjFEMjFDREUxOTgwMEMxRkEyQyAvKiBXSExTTE5hbWVDb250
ZXh0LmggKi8sCisJCQkJQzJCNTUxNzQyMURCNTEwRjAwNEJFMjZFIC8qIFdITFNMTmFtZUNvbnRl
eHQuY3BwICovLAorCQkJCTFDMzMyNzZFMjFDRUZGNzQwMDBEQzlGMiAvKiBXSExTTFJlc29sdmVP
dmVybG9hZEltcGwuaCAqLywKKwkJCQlDMjg2RUQ5RTIxREI1QUJBMDA3MTNDNDAgLyogV0hMU0xS
ZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCAqLywKKwkJCQkxQzMzMjc2RjIxQ0YwMTMxMDAwREM5RjIg
LyogV0hMU0xJbmZlclR5cGVzLmggKi8sCisJCQkJQzJCNTUxNzUyMURCNTI2NjAwNEJFMjZFIC8q
IFdITFNMSW5mZXJUeXBlcy5jcHAgKi8sCisJCQkJMUMzMzI3NzQyMUQ1QTcwNjAwMERDOUYyIC8q
IFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCAqLywKKwkJCQlDMkI1NTE3NjIxREI1Mzk0MDA0
QkUyNkUgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAgKi8sCisJCQkJMUMzMzI3NzUy
MUQ1QjBGODAwMERDOUYyIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaCAqLywKKwkJ
CQlDMkI1NTE3NzIxREI1NDBGMDA0QkUyNkUgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9u
cy5jcHAgKi8sCisJCQkJMUMzMzI3NzYyMUQ1QzA3RTAwMERDOUYyIC8qIFdITFNMU3ludGhlc2l6
ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICovLAorCQkJCUMyQjU1MTc4MjFEQjU1NzUwMDRCRTI2RSAv
KiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwICovLAorCQkJCTFDMzMyNzc3
MjFENUNBODMwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5o
ICovLAorCQkJCUMyQjU1MTc5MjFEQjU1OEYwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVFbnVt
ZXJhdGlvbkZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJMUMzMzI3NzgyMUQ1Q0VENDAwMERDOUYyIC8q
IFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCAqLywKKwkJCQlDMkI1NTE3QTIx
REI1NTlFMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAg
Ki8sCisJCQkJQzIwMTMzNDcyMURCNDM2MzAwQjYwQzI3IC8qIFdITFNMU3ludGhlc2l6ZUNvbnN0
cnVjdG9ycy5oICovLAorCQkJCUMyQjU1MTdCMjFEQjU1QUYwMDRCRTI2RSAvKiBXSExTTFN5bnRo
ZXNpemVDb25zdHJ1Y3RvcnMuY3BwICovLAorCQkJCUMyMDEzMzQ0MjFEQUMwOTUwMEI2MEMyNyAv
KiBXSExTTEludHJpbnNpY3MuaCAqLywKKwkJCQlDMjAxMzM0NjIxREFFRTZFMDBCNjBDMjcgLyog
V0hMU0xJbnRyaW5zaWNzLmNwcCAqLywKKwkJCQlDMkI1NTE3MDIxREI0QjQ4MDA0QkUyNkUgLyog
V0hMU0xDaGVja2VyLmNwcCAqLywKKwkJCQlDMkI1NTE3MTIxREI0QjQ4MDA0QkUyNkUgLyogV0hM
U0xDaGVja2VyLmggKi8sCisJCQkJMUNCNjlCMkMyMUREOTZFRjAwNkU4NDZBIC8qIFdITFNMR2F0
aGVyRW50cnlQb2ludEl0ZW1zLmNwcCAqLywKKwkJCQkxQ0I2OUIyRDIxREQ5NkVGMDA2RTg0NkEg
LyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCAqLywKKwkJCQkxQ0I2OUIzRTIxRTAzNUYz
MDA2RTg0NkEgLyogV0hMU0xSZXNvbHZpbmdUeXBlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IFdI
TFNMOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI1MzQ0LDcgKzI1NDEzLDYgQEAK
IAkJQzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5IC8qIEFTVCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQzIxQkY3MEYyMUNEODlDRjAwMjI3OTc5IC8qIFdI
TFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oICovLAogCQkJCUMyMUJGNzI1MjFDRDg5
RTIwMDIyNzk3OSAvKiBXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oICovLAogCQkJCUMyMUJGNzA5
MjFDRDg5Q0EwMDIyNzk3OSAvKiBXSExTTEFycmF5VHlwZS5oICovLAogCQkJCUMyMUJGNzMwMjFD
RDg5RUQwMDIyNzk3OSAvKiBXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmggKi8sCkBAIC0yNTM4
NCw3ICsyNTQ1Miw2IEBACiAJCQkJQzIxQkY3MjQyMUNEODlFMTAwMjI3OTc5IC8qIFdITFNMTm9k
ZS5oICovLAogCQkJCUMyMUJGNzA3MjFDRDg5QzgwMDIyNzk3OSAvKiBXSExTTE51bGxMaXRlcmFs
LmggKi8sCiAJCQkJQzIxQkY3MjEyMUNEODlERTAwMjI3OTc5IC8qIFdITFNMTnVtVGhyZWFkc0Z1
bmN0aW9uQXR0cmlidXRlLmggKi8sCi0JCQkJQzIxQkY3MTcyMUNEODlENjAwMjI3OTc5IC8qIFdI
TFNMUGFyYW1ldGVyLmggKi8sCiAJCQkJQzIxQkY3MkYyMUNEODlFQzAwMjI3OTc5IC8qIFdITFNM
UG9pbnRlclR5cGUuaCAqLywKIAkJCQlDMjFCRjcyRTIxQ0Q4OUVBMDAyMjc5NzkgLyogV0hMU0xQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCAqLywKIAkJCQlDMjFCRjcwQjIxQ0Q4OUNDMDAyMjc5
NzkgLyogV0hMU0xRdWFsaWZpZXIuaCAqLywKQEAgLTI1NDEyLDcgKzI1NDc5LDI2IEBACiAJCQkJ
QzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQuaCAqLywKIAkJCQlDMjFCRjcxMzIxQ0Q4OUQyMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJs
ZVJlZmVyZW5jZS5oICovLAogCQkJCUMyMUJGNzA0MjFDRDg5QzYwMDIyNzk3OSAvKiBXSExTTFdo
aWxlTG9vcC5oICovLAotIAkJCQlDMjg4QzcyRDIxQzk5MURBMDAyREY1Q0EgLyogV0hMU0xUeXBl
QXJndW1lbnQuY3BwICovLAorCQkJCUMyODhDNzJEMjFDOTkxREEwMDJERjVDQSAvKiBXSExTTFR5
cGVBcmd1bWVudC5jcHAgKi8sCisJCQkJMUMzMzI3NkMyMUNFREE0MjAwMERDOUYyIC8qIFdITFNM
RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmggKi8sCisJCQkJMUMzMzI3NzEyMUNGMEJFMTAwMERD
OUYyIC8qIFdITFNMTmFtZWRUeXBlLmggKi8sCisJCQkJMUMzMzI3NzIyMUNGMEQyRTAwMERDOUYy
IC8qIFdITFNMVW5uYW1lZFR5cGUuaCAqLywKKwkJCQlDMjEzOEExMzIxRERFQ0QzMDBGNTE2QkEg
LyogV0hMU0xCdWlsdEluU2VtYW50aWMuY3BwICovLAorCQkJCUMyMTM4QTE1MjFEREVDRTkwMEY1
MTZCQSAvKiBXSExTTFJlc291cmNlU2VtYW50aWMuY3BwICovLAorCQkJCUMyMTM4QTE2MjFEREVD
RkIwMEY1MTZCQSAvKiBXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAgKi8s
CisJCQkJQzIxMzhBMTcyMURERUQwRDAwRjUxNkJBIC8qIFdITFNMU3RhZ2VJbk91dFNlbWFudGlj
LmNwcCAqLywKKwkJCQkxQ0I2OUIzMjIxREVENDBCMDA2RTg0NkEgLyogV0hMU0xSZXNvbHZhYmxl
VHlwZS5oICovLAorCQkJCTFDQjY5QjM0MjFERUQ2M0EwMDZFODQ2QSAvKiBXSExTTEZsb2F0TGl0
ZXJhbFR5cGUuaCAqLywKKwkJCQkxQ0I2OUIzNTIxREVENjQ5MDA2RTg0NkEgLyogV0hMU0xJbnRl
Z2VyTGl0ZXJhbFR5cGUuaCAqLywKKwkJCQkxQ0I2OUIzNjIxREVENjU3MDA2RTg0NkEgLyogV0hM
U0xOdWxsTGl0ZXJhbFR5cGUuaCAqLywKKwkJCQkxQ0I2OUIzNzIxREVENjZCMDA2RTg0NkEgLyog
V0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oICovLAorCQkJCTFDQjY5QjM4MjFERjAz
RTEwMDZFODQ2QSAvKiBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwICovLAorCQkJCTFDQjY5QjM5
MjFERjAzRjMwMDZFODQ2QSAvKiBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8sCisJCQkJ
MUNCNjlCM0EyMURGMDQwMzAwNkU4NDZBIC8qIFdITFNMTnVsbExpdGVyYWxUeXBlLmNwcCAqLywK
KwkJCQkxQ0I2OUIzQjIxREYwNDFFMDA2RTg0NkEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRl
cmFsVHlwZS5jcHAgKi8sCisJCQkJQzIwRjRGNjQyMURGQkU1QzAwNzBDNDVBIC8qIFdITFNMVHlw
ZVJlZmVyZW5jZS5jcHAgKi8sCisJCQkJQzIwRjRGNjYyMURGRjIzNjAwNzBDNDVBIC8qIFdITFNM
SW50ZWdlckxpdGVyYWwuY3BwICovLAorCQkJCUMyMEY0RjY3MjFERkYzQTcwMDcwQzQ1QSAvKiBX
SExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBBU1Q7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358482</attachid>
            <date>2019-01-07 00:13:23 -0800</date>
            <delta_ts>2019-01-08 00:59:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>421684</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXggMmQ1NjdmMDBlNzAuLmViMzkw
ZTQyZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaApAQCAtMzksOCArMzks
OCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVibGlj
IFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFR5
cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgQXJy
YXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAg
ICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJs
aWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYpID0g
ZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhh
ZGRyZXNzU3BhY2UoKSksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfVFlQRShBcnJheVJlZmVyZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBl
KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShBcnJheVJlZmVy
ZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAppbmRleCA0MGI1ZjhkZjZmZS4uYzQxNzcwNWYzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBBcnJh
eVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIEFycmF5VHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlLCB1
bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgQXJyYXlUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRz
KQogICAgIHsKQEAgLTUyLDIwICs1MiwxOCBAQCBwdWJsaWM6CiAgICAgQXJyYXlUeXBlKGNvbnN0
IEFycmF5VHlwZSYpID0gZGVsZXRlOwogICAgIEFycmF5VHlwZShBcnJheVR5cGUmJikgPSBkZWZh
dWx0OwogCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVs
ZW1lbnRzOyB9Ci0KLSAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsg
fQorICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1FbGVtZW50
czsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZT4oTGV4ZXI6
OlRva2VuKG1fb3JpZ2luKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7
CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZT4oTGV4ZXI6OlRva2Vu
KG9yaWdpbigpKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZT4gbV9lbGVtZW50VHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5
cGU+IG1fZWxlbWVudFR5cGU7CiAgICAgdW5zaWduZWQgbV9udW1FbGVtZW50czsKIH07CiAKQEAg
LTc1LDYgKzczLDYgQEAgcHJpdmF0ZToKIAogfQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dI
TFNMX1RZUEUoQXJyYXlUeXBlLCBpc0FycmF5VHlwZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19XSExTTF9VTk5BTUVEX1RZUEUoQXJyYXlUeXBlLCBpc0FycmF5VHlwZSgpKQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEJhc2VTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQmFzZVNlbWFudGljLmgKaW5kZXggNjU3MzM3MmYxMzcuLmM2YTJkMzlhMGMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNl
U2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCYXNlU2VtYW50aWMuaApAQCAtMzQsOCArMzQsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBuYW1lc3BhY2UgV0hMU0wgewogCitjbGFzcyBJbnRyaW5zaWNzOworCiBuYW1lc3BhY2Ug
QVNUIHsKIAorY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworY2xhc3MgVW5uYW1lZFR5cGU7CisK
IGNsYXNzIEJhc2VTZW1hbnRpYyA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKICAgICBCYXNlU2Vt
YW50aWMoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQpAQCAtNDgsNiArNTMsMTQgQEAgcHVibGljOgog
ICAgIEJhc2VTZW1hbnRpYyhjb25zdCBCYXNlU2VtYW50aWMmKSA9IGRlbGV0ZTsKICAgICBCYXNl
U2VtYW50aWMoQmFzZVNlbWFudGljJiYpID0gZGVmYXVsdDsKIAorICAgIHZpcnR1YWwgYm9vbCBp
c0FjY2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNz
JikgY29uc3QgPSAwOworCisgICAgZW51bSBjbGFzcyBTaGFkZXJJdGVtRGlyZWN0aW9uIHsKKyAg
ICAgICAgSW5wdXQsCisgICAgICAgIE91dHB1dAorICAgIH07CisgICAgdmlydHVhbCBib29sIGlz
QWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29u
c3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3QgPSAwOworCiBwcml2YXRlOgogICAgIExleGVy
OjpUb2tlbiBtX29yaWdpbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCb29sZWFuTGl0ZXJhbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaAppbmRleCAyMDBm
MzY0OTMyYi4uMTEwZDY1NWM0OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEJvb2xlYW5MaXRlcmFsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaApAQCAtNDYs
MTMgKzQ2LDIxIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkJvb2xlYW5MaXRlcmFsKCkgPSBk
ZWZhdWx0OwogCi0gICAgZXhwbGljaXQgQm9vbGVhbkxpdGVyYWwoY29uc3QgQm9vbGVhbkxpdGVy
YWwmKSA9IGRlZmF1bHQ7CisgICAgQm9vbGVhbkxpdGVyYWwoY29uc3QgQm9vbGVhbkxpdGVyYWwm
KSA9IGRlbGV0ZTsKICAgICBCb29sZWFuTGl0ZXJhbChCb29sZWFuTGl0ZXJhbCYmKSA9IGRlZmF1
bHQ7CiAKKyAgICBCb29sZWFuTGl0ZXJhbCYgb3BlcmF0b3I9KGNvbnN0IEJvb2xlYW5MaXRlcmFs
JikgPSBkZWxldGU7CisgICAgQm9vbGVhbkxpdGVyYWwmIG9wZXJhdG9yPShCb29sZWFuTGl0ZXJh
bCYmKSA9IGRlZmF1bHQ7CisKICAgICBib29sIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQogCiAgICAgYm9vbCBpc0Jvb2xlYW5MaXRlcmFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCisgICAgQm9vbGVhbkxpdGVyYWwgY2xvbmUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEJvb2xlYW5MaXRlcmFsKExleGVyOjpUb2tlbihvcmlnaW4oKSksIG1fdmFs
dWUpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBib29sIG1fdmFsdWU7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNl
bWFudGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEJ1aWx0SW5TZW1hbnRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjIxMjUzMjZmYjJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcApAQCAtMCwwICsxLDE0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKKworI2luY2x1ZGUgIldITFNM
RnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5j
bHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNl
IEFTVCB7CisKK2Jvb2wgQnVpbHRJblNlbWFudGljOjppc0FjY2VwdGFibGVUeXBlKGNvbnN0IEFT
VDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNz
KSBjb25zdAoreworICAgIHN3aXRjaCAobV92YXJpYWJsZSkgeworICAgIGNhc2UgVmFyaWFibGU6
OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJp
bnNpY3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZWZXJ0ZXhJRDoKKyAgICAg
ICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWludFR5cGUoKSk7Cisg
ICAgY2FzZSBWYXJpYWJsZTo6UFNpemU6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRU
eXBlLCBpbnRyaW5zaWNzLmZsb2F0VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVlBvc2l0
aW9uOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9h
dDRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAgICAgIHJl
dHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOworICAgIGNh
c2UgVmFyaWFibGU6OlNWU2FtcGxlSW5kZXg6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFt
ZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWSW5u
ZXJDb3ZlcmFnZToKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNp
Y3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAgICAgIHJl
dHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0NFR5cGUoKSk7CisgICAg
Y2FzZSBWYXJpYWJsZTo6U1ZEZXB0aDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5
cGUsIGludHJpbnNpY3MuZmxvYXRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWQ292ZXJh
Z2U6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRU
eXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoKKyAgICAgICAg
cmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQzVHlwZSgpKTsKKyAg
ICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwSUQ6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFt
ZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZH
cm91cEluZGV4OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2lj
cy51aW50VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwVGhyZWFkSUQ6CisgICAg
ICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7
CisgICAgfQorfQorCitib29sIEJ1aWx0SW5TZW1hbnRpYzo6aXNBY2NlcHRhYmxlRm9yU2hhZGVy
SXRlbURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIGNvbnN0Cit7CisgICAgc3dpdGNoICgq
ZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9u
RGVjbGFyYXRpb246OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgIHN3aXRjaCAoZGly
ZWN0aW9uKSB7CisgICAgICAgIGNhc2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6
OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWVmVydGV4SUQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBTaGFk
ZXJJdGVtRGlyZWN0aW9uOjpPdXRwdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUp
IHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlBTaXplOgorICAgICAgICAgICAgY2FzZSBW
YXJpYWJsZTo6U1ZQb3NpdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50
VHlwZTo6RnJhZ21lbnQ6CisgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNh
c2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFy
aWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAg
ICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVlBvc2l0aW9uOgorICAgICAgICAgICAgY2FzZSBWYXJp
YWJsZTo6U1ZTYW1wbGVJbmRleDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSW5uZXJD
b3ZlcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICBjYXNlIFNoYWRlckl0ZW1EaXJlY3Rpb246Ok91dHB1dDoKKyAgICAgICAgICAgIHN3aXRjaCAo
bV92YXJpYWJsZSkgeworICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAg
ICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkRlcHRoOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZDb3ZlcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6
Q29tcHV0ZToKKyAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBTaGFk
ZXJJdGVtRGlyZWN0aW9uOjpJbnB1dDoKKyAgICAgICAgICAgIHN3aXRjaCAobV92YXJpYWJsZSkg
eworICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZEaXNwYXRjaFRocmVhZElEOgorICAgICAg
ICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cElEOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZHcm91cEluZGV4OgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cFRocmVh
ZElEOgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIGNh
c2UgU2hhZGVySXRlbURpcmVjdGlvbjo6T3V0cHV0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorfQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5T
ZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QnVpbHRJblNlbWFudGljLmgKaW5kZXggNzA0NmRmMzJjZmEuLjhlNzA0MzAwMTU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdElu
U2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCdWlsdEluU2VtYW50aWMuaApAQCAtNzAsNiArNzAsMTkgQEAgcHVibGljOgogCiAgICAg
VmFyaWFibGUgdmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlOyB9CiAKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQnVpbHRJblNlbWFudGljJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IG90aGVyLm1fdmFyaWFibGUgJiYgbV90YXJn
ZXRJbmRleCA9PSBvdGhlci5tX3RhcmdldEluZGV4OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBCdWlsdEluU2VtYW50aWMmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJvb2wgaXNBY2NlcHRhYmxl
VHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgSW50cmluc2ljcyYpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFk
ZXJJdGVtRGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSBjb25zdCBvdmVycmlk
ZTsKKwogcHJpdmF0ZToKICAgICBWYXJpYWJsZSBtX3ZhcmlhYmxlOwogICAgIE9wdGlvbmFsPHVu
c2lnbmVkPiBtX3RhcmdldEluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKaW5kZXggNjRh
ZjcxMzI5OWMuLmMxOGUxZWViYThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKQEAgLTI4
LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAi
V0hMU0xMZXhlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw2ICszNyw4IEBAIG5h
bWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCitjbGFzcyBOYW1lZFR5cGU7CisK
IGNsYXNzIENhbGxFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgogICAg
IENhbGxFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4mJiBhcmd1bWVudHMpCkBAIC01NCw5ICs1
NywzNSBAQCBwdWJsaWM6CiAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
PiYgYXJndW1lbnRzKCkgeyByZXR1cm4gbV9hcmd1bWVudHM7IH0KIAorICAgIFN0cmluZyYgbmFt
ZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgdm9pZCBzZXRDYXN0RGF0YShBU1Q6Ok5hbWVk
VHlwZSYgbmFtZWRUeXBlKQorICAgIHsKKyAgICAgICAgbV9jYXN0UmV0dXJuVHlwZSA9IHsgbmFt
ZWRUeXBlIH07CisgICAgfQorCisgICAgYm9vbCBpc0Nhc3QoKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxib29sPihtX2Nhc3RSZXR1cm5UeXBlKTsgfQorICAgIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiYgY2FzdFJldHVyblR5cGUoKSB7IHJldHVybiBtX2Nh
c3RSZXR1cm5UeXBlOyB9CisgICAgYm9vbCBoYXNPdmVybG9hZHMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxib29sPihtX292ZXJsb2Fkcyk7IH0KKyAgICBPcHRpb25hbDxWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4+JiBvdmVybG9hZHMo
KSB7IHJldHVybiBtX292ZXJsb2FkczsgfQorICAgIHZvaWQgc2V0T3ZlcmxvYWRzKGNvbnN0IFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3Zl
cmxvYWRzKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KCFoYXNPdmVybG9hZHMoKSk7CisgICAgICAg
IG1fb3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAgIH0KKworICAgIHZvaWQgc2V0RnVuY3Rpb24o
RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNsYXJhdGlvbikKKyAgICB7CisgICAgICAg
IGFzc2VydCghbV9mdW5jdGlvbik7CisgICAgICAgIG1fZnVuY3Rpb24gPSAmZnVuY3Rpb25EZWNs
YXJhdGlvbjsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+PiBtX2FyZ3VtZW50czsKKyAgICBPcHRpb25h
bDxWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4+
IG1fb3ZlcmxvYWRzOworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fZnVuY3Rpb24geyBudWxs
cHRyIH07CisgICAgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlw
ZT4+IG1fY2FzdFJldHVyblR5cGUgeyBXVEY6Om51bGxvcHQgfTsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50
RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMQ29uc3RhbnRFeHByZXNzaW9uLmgKaW5kZXggYTM4YjBkNWIzYTEuLjcwY2ExMjhkNTVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xD
b25zdGFudEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaApAQCAtNzYsMTEgKzc2LDkyIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgQ29uc3RhbnRFeHByZXNzaW9uKGNvbnN0IENvbnN0
YW50RXhwcmVzc2lvbiYpID0gZGVsZXRlOworICAgIENvbnN0YW50RXhwcmVzc2lvbihDb25zdGFu
dEV4cHJlc3Npb24mJikgPSBkZWZhdWx0OworCisgICAgQ29uc3RhbnRFeHByZXNzaW9uJiBvcGVy
YXRvcj0oY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uJikgPSBkZWxldGU7CisgICAgQ29uc3RhbnRF
eHByZXNzaW9uJiBvcGVyYXRvcj0oQ29uc3RhbnRFeHByZXNzaW9uJiYpID0gZGVmYXVsdDsKKwor
ICAgIEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCgpCisgICAgeworICAgICAgICBBU1NF
UlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxJbnRlZ2VyTGl0ZXJhbD4obV92YXJpYW50KSk7Cisg
ICAgICAgIHJldHVybiBXVEY6OmdldDxJbnRlZ2VyTGl0ZXJhbD4obV92YXJpYW50KTsKKyAgICB9
CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHZpc2l0KFQmJiB0KQogICAgIHsKICAg
ICAgICAgV1RGOjp2aXNpdChXVEZNb3ZlKHQpLCBtX3ZhcmlhbnQpOwogICAgIH0KIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdmlzaXQoVCYmIHQpIGNvbnN0CisgICAgeworICAgICAg
ICBXVEY6OnZpc2l0KFdURk1vdmUodCksIG1fdmFyaWFudCk7CisgICAgfQorCisgICAgQ29uc3Rh
bnRFeHByZXNzaW9uIGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0
ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBpbnRlZ2Vy
TGl0ZXJhbC5jbG9uZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9uIHsKKyAg
ICAgICAgICAgIHJldHVybiB1bnNpZ25lZEludGVnZXJMaXRlcmFsLmNsb25lKCk7CisgICAgICAg
IH0sIFsmXShjb25zdCBGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHBy
ZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdExpdGVyYWwuY2xvbmUoKTsKKyAgICAg
ICAgfSwgWyZdKGNvbnN0IE51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHBy
ZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsTGl0ZXJhbC5jbG9uZSgpOworICAgICAg
ICB9LCBbJl0oY29uc3QgQm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSAtPiBDb25zdGFu
dEV4cHJlc3Npb24geworICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5MaXRlcmFsLmNsb25lKCk7
CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Up
IC0+IENvbnN0YW50RXhwcmVzc2lvbiB7CisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuY2xvbmUoKTsKKyAgICAgICAgfSksIG1f
dmFyaWFudCk7CisgICAgfQorCisgICAgYm9vbCBtYXRjaGVzKGNvbnN0IENvbnN0YW50RXhwcmVz
c2lvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBPcHRpb25hbDxib29sPiByZXN1bHQ7
CisgICAgICAgIGRvdWJsZSB2YWx1ZTsKKyAgICAgICAgdmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oY29uc3QgSW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICB2
YWx1ZSA9IGludGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0sIFsmXShjb25zdCBVbnNp
Z25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAg
ICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZd
KGNvbnN0IEZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAgICB2YWx1ZSA9
IGZsb2F0TGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgTnVsbExpdGVyYWwm
KSB7CisgICAgICAgICAgICByZXN1bHQgPSBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPE51bGxMaXRl
cmFsPihvdGhlci5tX3ZhcmlhbnQpOworICAgICAgICB9LCBbJl0oY29uc3QgQm9vbGVhbkxpdGVy
YWwmIGJvb2xlYW5MaXRlcmFsKSB7CisgICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxCb29sZWFuTGl0ZXJhbD4ob3RoZXIubV92YXJpYW50KSkgeworICAgICAgICAgICAgICAg
IGNvbnN0IGF1dG8mIG90aGVyQm9vbGVhbkxpdGVyYWwgPSBXVEY6OmdldDxCb29sZWFuTGl0ZXJh
bD4ob3RoZXIubV92YXJpYW50KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBib29sZWFuTGl0
ZXJhbC52YWx1ZSgpID09IG90aGVyQm9vbGVhbkxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9LCBbJl0o
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0
YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSB7CisgICAgICAgICAgICBp
ZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZT4ob3RoZXIubV92YXJpYW50KSkgeworICAgICAgICAgICAgICAgIGNvbnN0
IGF1dG8mIG90aGVyTWVtYmVyUmVmZXJlbmNlID0gV1RGOjpnZXQ8Q29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2U+KG90aGVyLm1fdmFyaWFudCk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UuZW51bWVyYXRpb25NZW1iZXIoKSA9PSBvdGhlck1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlv
bk1lbWJlcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
ZmFsc2U7CisgICAgICAgIH0pKTsKKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAg
cmV0dXJuICpyZXN1bHQ7CisKKyAgICAgICAgb3RoZXIudmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oY29uc3QgSW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICBy
ZXN1bHQgPSB2YWx1ZSA9PSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0o
Y29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgewor
ICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUgPT0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgRmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlID09IGZsb2F0TGl0ZXJhbC52YWx1ZSgpOworICAg
ICAgICB9LCBbJl0oY29uc3QgTnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICByZXN1bHQgPSBm
YWxzZTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEJvb2xlYW5MaXRlcmFsJikgeworICAgICAgICAg
ICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZh
bHNlOworICAgICAgICB9KSk7CisKKyAgICAgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgICAgIHJl
dHVybiAqcmVzdWx0OworICAgIH0KKwogcHJpdmF0ZToKICAgICBWYXJpYW50PAogICAgICAgICBJ
bnRlZ2VyTGl0ZXJhbCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25z
dGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oCmluZGV4IDJjMjRhOThi
MmNhLi42YzUzYzE0N2Y1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oCkBAIC0zNiwx
MCArMzYsMTMgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNz
IENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlIDogcHVibGljIE5v
ZGUgeworY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uOworY2xhc3MgRW51bWVyYXRpb25NZW1i
ZXI7CisKK2NsYXNzIENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
IDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgogICAgIENvbnN0YW50RXhwcmVzc2lvbkVu
dW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYg
bGVmdCwgU3RyaW5nJiYgcmlnaHQpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4p
KQorICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fbGVm
dChXVEZNb3ZlKGxlZnQpKQogICAgICAgICAsIG1fcmlnaHQoV1RGTW92ZShyaWdodCkpCiAgICAg
ewpAQCAtNTAsMTAgKzUzLDUwIEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZShjb25zdCBDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpID0gZGVmYXVsdDsKICAgICBDb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZShDb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZSYmKSA9IGRlZmF1bHQ7CiAKKyAgICBDb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IENvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikgPSBkZWxldGU7CisgICAgQ29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIG9wZXJhdG9yPShDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYmKSA9IGRlZmF1bHQ7CisKKyAg
ICBjb25zdCBTdHJpbmcmIGxlZnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnQ7IH0KKyAgICBjb25z
dCBTdHJpbmcmIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodDsgfQorCisgICAgQ29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UgY2xvbmUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZShMZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBTdHJpbmcobV9sZWZ0KSwgU3Ry
aW5nKG1fcmlnaHQpKTsKKyAgICAgICAgcmVzdWx0Lm1fZW51bWVyYXRpb25NZW1iZXIgPSBtX2Vu
dW1lcmF0aW9uTWVtYmVyOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uKiBlbnVtZXJhdGlvbkRlZmluaXRpb24oKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uOworICAgIH0KKworICAgIEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uKiBlbnVtZXJhdGlvbkRlZmluaXRpb24oKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uOworICAgIH0KKwor
ICAgIEFTVDo6RW51bWVyYXRpb25NZW1iZXIqIGVudW1lcmF0aW9uTWVtYmVyKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIEFTVDo6RW51
bWVyYXRpb25NZW1iZXIqIGVudW1lcmF0aW9uTWVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIHZvaWQgc2V0RW51bWVy
YXRpb25NZW1iZXIoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbiwgQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCisgICAgewor
ICAgICAgICBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbiA9ICZlbnVtZXJhdGlvbkRlZmluaXRpb247
CisgICAgICAgIG1fZW51bWVyYXRpb25NZW1iZXIgPSAmZW51bWVyYXRpb25NZW1iZXI7CisgICAg
fQorCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9s
ZWZ0OwogICAgIFN0cmluZyBtX3JpZ2h0OworICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
KiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbiB7IG51bGxwdHIgfTsKKyAgICBBU1Q6OkVudW1lcmF0
aW9uTWVtYmVyKiBtX2VudW1lcmF0aW9uTWVtYmVyIHsgbnVsbHB0ciB9OwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90
RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRG90RXhwcmVzc2lvbi5oCmluZGV4IGM0M2M2OWVlNTQxLi5lYmY3MjMyNmNkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhw
cmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTERvdEV4cHJlc3Npb24uaApAQCAtNDksNiArNDksMjUgQEAgcHVibGljOgogICAgIERvdEV4
cHJlc3Npb24oY29uc3QgRG90RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAgIERvdEV4cHJlc3Np
b24oRG90RXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRG90RXhwcmVzc2lv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5j
dGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6
Zm9ybWF0KCJvcGVyYXRvci4lcyIsIG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0K
KworICAgIFN0cmluZyBzZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0iLCBtX2ZpZWxkTmFtZS51
dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgib3BlcmF0
b3ImLiVzIiwgbV9maWVsZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgU3RyaW5n
JiBmaWVsZE5hbWUoKSB7IHJldHVybiBtX2ZpZWxkTmFtZTsgfQorCiBwcml2YXRlOgogICAgIFN0
cmluZyBtX2ZpZWxkTmFtZTsKIH07CkBAIC01OSw0ICs3OCw2IEBAIHByaXZhdGU6CiAKIH0KIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9FWFBSRVNTSU9OKERvdEV4cHJlc3Npb24sIGlz
RG90RXhwcmVzc2lvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZp
bml0aW9uLmgKaW5kZXggNzk3MGI1OWU1NGEuLjI0YThkNTlkYjNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmlu
aXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaApAQCAtMjksOCArMjksMTEgQEAKIAogI2luY2x1ZGUg
IldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCi0jaW5j
bHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNsdWRl
ICJXSExTTFVubmFtZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwx
MyArNDIsMTEgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNz
IEVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVudW1lcmF0aW9u
RGVmaW5pdGlvbiA6IHB1YmxpYyBOYW1lZFR5cGUgewogcHVibGljOgotICAgIEVudW1lcmF0aW9u
RGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5p
cXVlX3B0cjxUeXBlPiYmIHR5cGUsIEVudW1lcmF0aW9uTWVtYmVycyYmIG1lbWJlcnMpCi0gICAg
ICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShXVEZNb3Zl
KG5hbWUpKQorICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4s
IFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiB0eXBlKQorICAg
ICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAg
ICwgbV90eXBlKFdURk1vdmUodHlwZSkpCi0gICAgICAgICwgbV9tZW1iZXJzKFdURk1vdmUobWVt
YmVycykpCiAgICAgewogICAgIH0KIApAQCAtNTQsMTQgKzU1LDM1IEBAIHB1YmxpYzoKICAgICBF
bnVtZXJhdGlvbkRlZmluaXRpb24oY29uc3QgRW51bWVyYXRpb25EZWZpbml0aW9uJikgPSBkZWxl
dGU7CiAgICAgRW51bWVyYXRpb25EZWZpbml0aW9uKEVudW1lcmF0aW9uRGVmaW5pdGlvbiYmKSA9
IGRlZmF1bHQ7CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQotICAgIEVu
dW1lcmF0aW9uTWVtYmVycyYgZW51bWVyYXRpb25NZW1iZXJzKCkgeyByZXR1cm4gbV9tZW1iZXJz
OyB9CisgICAgYm9vbCBpc0VudW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KKworICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlw
ZTsgfQorCisgICAgYm9vbCBhZGQoRW51bWVyYXRpb25NZW1iZXImJiBtZW1iZXIpCisgICAgewor
ICAgICAgICBhdXRvIHJlc3VsdCA9IG1fbWVtYmVycy5hZGQobWVtYmVyLm5hbWUoKSwgc3RkOjpt
YWtlX3VuaXF1ZTxFbnVtZXJhdGlvbk1lbWJlcj4oV1RGTW92ZShtZW1iZXIpKSk7CisgICAgICAg
IHJldHVybiAhcmVzdWx0LmlzTmV3RW50cnk7CisgICAgfQorCisgICAgRW51bWVyYXRpb25NZW1i
ZXIqIG1lbWJlckJ5TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gbV9tZW1iZXJzLmZpbmQobmFtZSk7CisgICAgICAgIGlmIChpdGVyYXRvciA9
PSBtX21lbWJlcnMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxFbnVtZXJhdGlvbk1lbWJlcj4+IGVudW1lcmF0aW9uTWVtYmVycygp
CisgICAgeworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxFbnVtZXJhdGlv
bk1lbWJlcj4+IHJlc3VsdDsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9tZW1iZXJzKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqcGFpci52YWx1ZSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAg
ICBTdHJpbmcgbV9uYW1lOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX3R5cGU7Ci0gICAg
RW51bWVyYXRpb25NZW1iZXJzIG1fbWVtYmVyczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1l
ZFR5cGU+IG1fdHlwZTsKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEVudW1l
cmF0aW9uTWVtYmVyPj4gbV9tZW1iZXJzOwogfTsKIAogfQpAQCAtNzAsNCArOTIsNiBAQCBwcml2
YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShFbnVt
ZXJhdGlvbkRlZmluaXRpb24sIGlzRW51bWVyYXRpb25EZWZpbml0aW9uKCkpCisKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RW51bWVyYXRpb25NZW1iZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKaW5kZXggOWQ5ZDg1NDg4M2UuLmRlZmYxNGI1
ODUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKQEAgLTU0LDE1ICs1NCwyMyBA
QCBwdWJsaWM6CiAgICAgRW51bWVyYXRpb25NZW1iZXIoY29uc3QgRW51bWVyYXRpb25NZW1iZXIm
KSA9IGRlbGV0ZTsKICAgICBFbnVtZXJhdGlvbk1lbWJlcihFbnVtZXJhdGlvbk1lbWJlciYmKSA9
IGRlZmF1bHQ7CiAKKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAg
ICAgT3B0aW9uYWw8Q29uc3RhbnRFeHByZXNzaW9uPiYgdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVl
OyB9CiAKKyAgICB2b2lkIHNldFZhbHVlKENvbnN0YW50RXhwcmVzc2lvbiYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX3ZhbHVlKTsKKyAgICAgICAgbV92YWx1ZSA9IFdURk1vdmUo
dmFsdWUpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAg
ICAgU3RyaW5nIG1fbmFtZTsKICAgICBPcHRpb25hbDxDb25zdGFudEV4cHJlc3Npb24+IG1fdmFs
dWU7CiB9OwogCi10eXBlZGVmIFZlY3RvcjxFbnVtZXJhdGlvbk1lbWJlcj4gRW51bWVyYXRpb25N
ZW1iZXJzOwordXNpbmcgRW51bWVyYXRpb25NZW1iZXJzID0gVmVjdG9yPEVudW1lcmF0aW9uTWVt
YmVyPjsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNGJjMjBmZThlZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExT
TEVudW1lcmF0aW9uTWVtYmVyLmgiCisjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xMZXhlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBX
SExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CitwdWJsaWM6CisgICAgRW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgRW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0
aW9uTWVtYmVyKQorICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAg
ICAsIG1fZW51bWVyYXRpb25NZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgfkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCgpID0gZGVmYXVsdDsKKwor
ICAgIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChjb25zdCBFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwmKSA9IGRlbGV0ZTsKKyAgICBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoRW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNFbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBFbnVtZXJh
dGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIoKSB7IHJldHVybiBtX2VudW1lcmF0aW9uTWVt
YmVyOyB9CisKK3ByaXZhdGU6CisgICAgRW51bWVyYXRpb25NZW1iZXImIG1fZW51bWVyYXRpb25N
ZW1iZXI7Cit9OworCit9CisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNM
X0VYUFJFU1NJT04oRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLCBpc0VudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbCgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBlMzY4MzgzNjQ2ZC4u
ZmViNmNhNmIxZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKQEAgLTQ4LDE0ICs0OCwxOSBAQCBwdWJs
aWM6CiAgICAgZXhwbGljaXQgRXhwcmVzc2lvbihjb25zdCBFeHByZXNzaW9uJikgPSBkZWZhdWx0
OwogICAgIEV4cHJlc3Npb24oRXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBMZXhlcjo6
VG9rZW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBFeHByZXNzaW9u
JiBvcGVyYXRvcj0oY29uc3QgRXhwcmVzc2lvbiYpID0gZGVmYXVsdDsKKyAgICBFeHByZXNzaW9u
JiBvcGVyYXRvcj0oRXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CisKKyAgICBjb25zdCBMZXhlcjo6
VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNBc3NpZ25tZW50RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzQm9vbGVhbkxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc0NhbGxFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNDb21tYUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0RlcmVmZXJlbmNlRXhwcmVzc2lvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRG90RXhwcmVzc2lvbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRmxvYXRMaXRlcmFs
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmRleEV4cHJl
c3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ludGVn
ZXJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNM
b2dpY2FsRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzTG9naWNhbE5vdEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAt
NjcsNiArNzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzVGVybmFyeUV4cHJlc3Np
b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVk
SW50ZWdlckxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc1ZhcmlhYmxlUmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCiBwcml2YXRlOgogICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJh
bC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRM
aXRlcmFsLmgKaW5kZXggY2JmNTQ2OWRiZmEuLjI3ZDg4YmMwNTNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExp
dGVyYWwuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRl
ICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCIK
ICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDIx
ICs0MCwzNSBAQCBuYW1lc3BhY2UgQVNUIHsKIGNsYXNzIEZsb2F0TGl0ZXJhbCA6IHB1YmxpYyBF
eHByZXNzaW9uIHsKIHB1YmxpYzoKICAgICBGbG9hdExpdGVyYWwoTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBmbG9hdCB2YWx1ZSkKLSAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkK
KyAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQorICAgICAgICAsIG1f
dHlwZShXVEZNb3ZlKG9yaWdpbiksIHZhbHVlKQogICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAg
ICAgewogICAgIH0KIAogICAgIHZpcnR1YWwgfkZsb2F0TGl0ZXJhbCgpID0gZGVmYXVsdDsKIAot
ICAgIGV4cGxpY2l0IEZsb2F0TGl0ZXJhbChjb25zdCBGbG9hdExpdGVyYWwmKSA9IGRlZmF1bHQ7
CisgICAgRmxvYXRMaXRlcmFsKGNvbnN0IEZsb2F0TGl0ZXJhbCYpID0gZGVsZXRlOwogICAgIEZs
b2F0TGl0ZXJhbChGbG9hdExpdGVyYWwmJikgPSBkZWZhdWx0OwogCisgICAgRmxvYXRMaXRlcmFs
JiBvcGVyYXRvcj0oY29uc3QgRmxvYXRMaXRlcmFsJikgPSBkZWxldGU7CisgICAgRmxvYXRMaXRl
cmFsJiBvcGVyYXRvcj0oRmxvYXRMaXRlcmFsJiYpID0gZGVmYXVsdDsKKworICAgIEZsb2F0TGl0
ZXJhbFR5cGUmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KICAgICBmbG9hdCB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAogICAgIGJvb2wgaXNGbG9hdExpdGVyYWwoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBGbG9hdExpdGVyYWwgY2xvbmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgRmxvYXRMaXRlcmFsIHJlc3VsdChMZXhlcjo6VG9rZW4ob3Jp
Z2luKCkpLCBtX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5tX3R5cGUucmVzb2x2ZWRUeXBl
KCkpCisgICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVzdWx0Lm1fdHlwZS5yZXNv
bHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiBw
cml2YXRlOgorICAgIEZsb2F0TGl0ZXJhbFR5cGUgbV90eXBlOwogICAgIGZsb2F0IG1fdmFsdWU7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMzUxODM1Y2E4YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5
cGUuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsVHlwZS5o
IgorCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVm
ZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
bmFtZXNwYWNlIEFTVCB7CisKK0Zsb2F0TGl0ZXJhbFR5cGU6OkZsb2F0TGl0ZXJhbFR5cGUoTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBmbG9hdCB2YWx1ZSkKKyAgICA6IG1fdmFsdWUodmFsdWUpCisg
ICAgLCBtX3ByZWZlcnJlZFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihXVEZN
b3ZlKG9yaWdpbiksIFN0cmluZygiZmxvYXQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwgVHlwZUFyZ3VtZW50cygpKSkKK3sKK30KKworRmxvYXRMaXRlcmFsVHlwZTo6fkZsb2F0TGl0
ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgRmxvYXRMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2
ZShjb25zdCBUeXBlJiB0eXBlKSBjb25zdAoreworICAgIGlmICghaXM8TmFtZWRUeXBlPih0eXBl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0
PE5hbWVkVHlwZT4odHlwZSk7CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5h
bWVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24gPSBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7Cisg
ICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNGbG9hdGluZygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uY2FuUmVwcmVzZW50Rmxv
YXQoKShtX3ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
fQorCit1bnNpZ25lZCBGbG9hdExpdGVyYWxUeXBlOjpjb252ZXJzaW9uQ29zdChjb25zdCBVbm5h
bWVkVHlwZSYgdW5uYW1lZFR5cGUpIGNvbnN0Cit7CisgICAgaWYgKG1hdGNoZXModW5uYW1lZFR5
cGUsICptX3ByZWZlcnJlZFR5cGUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsK
K30KKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNlMzJiZjU2MDVmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRmxvYXRMaXRlcmFsVHlwZS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFJlc29sdmFi
bGVUeXBlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNz
IFR5cGVSZWZlcmVuY2U7CisKK2NsYXNzIEZsb2F0TGl0ZXJhbFR5cGUgOiBwdWJsaWMgUmVzb2x2
YWJsZVR5cGUgeworcHVibGljOgorICAgIEZsb2F0TGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBmbG9hdCB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIH5GbG9hdExpdGVyYWxUeXBlKCk7
CisKKyAgICBGbG9hdExpdGVyYWxUeXBlKGNvbnN0IEZsb2F0TGl0ZXJhbFR5cGUmKSA9IGRlbGV0
ZTsKKyAgICBGbG9hdExpdGVyYWxUeXBlKEZsb2F0TGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0Owor
CisgICAgRmxvYXRMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KGNvbnN0IEZsb2F0TGl0ZXJhbFR5cGUm
KSA9IGRlbGV0ZTsKKyAgICBGbG9hdExpdGVyYWxUeXBlJiBvcGVyYXRvcj0oRmxvYXRMaXRlcmFs
VHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzRmxvYXRMaXRlcmFsVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFR5cGVSZWZlcmVuY2UmIHByZWZlcnJl
ZFR5cGUoKSB7IHJldHVybiAqbV9wcmVmZXJyZWRUeXBlOyB9CisKKyAgICBib29sIGNhblJlc29s
dmUoY29uc3QgVHlwZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHVuc2lnbmVkIGNvbnZlcnNpb25D
b3N0KGNvbnN0IFVubmFtZWRUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZmxvYXQgbV92YWx1ZTsKKyAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEg
Y2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCisgICAgLy8gQ29uc3RhbnRFeHByZXNzaW9uIC0+
IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2UgLT4gVHlwZUFyZ3VtZW50cyAtPiBDb25zdGFu
dEV4cHJlc3Npb24KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJy
ZWRUeXBlOworfTsKKworfQorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExT
TF9SRVNPTFZBQkxFX1RZUEUoRmxvYXRMaXRlcmFsVHlwZSwgaXNGbG9hdExpdGVyYWxUeXBlKCkp
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgKaW5kZXggY2JkNzJkNGE5
MGMuLjZhYjY1OGUwZjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgKQEAgLTM3
LDggKzM3LDggQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLXR5cGVk
ZWYgVmFyaWFudDxOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGU+IEZ1bmN0aW9uQXR0cmlidXRl
OwotdHlwZWRlZiBWZWN0b3I8RnVuY3Rpb25BdHRyaWJ1dGU+IEF0dHJpYnV0ZUJsb2NrOwordXNp
bmcgRnVuY3Rpb25BdHRyaWJ1dGUgPSBWYXJpYW50PE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0
ZT47Cit1c2luZyBBdHRyaWJ1dGVCbG9jayA9IFZlY3RvcjxGdW5jdGlvbkF0dHJpYnV0ZT47CiAK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCmluZGV4IDdhN2UwYTA2NTZj
Li42NzY0OGY0OTM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaApAQCAt
MzAsOSArMzAsOSBAQAogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCi0jaW5jbHVkZSAiV0hM
U0xQYXJhbWV0ZXIuaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hM
U0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgorI2luY2x1ZGUgIldITFNM
VmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NiwxMCArNDYsMTEgQEAgcHVibGljOgogICAgIGVu
dW0gY2xhc3MgRW50cnlQb2ludFR5cGUgewogICAgICAgICBWZXJ0ZXgsCiAgICAgICAgIEZyYWdt
ZW50LAotICAgICAgICBDb21wdXRlCisgICAgICAgIENvbXB1dGUsCisgICAgICAgIC8vIEZJWE1F
OiBBZGQgYW4gZW50cnkgcG9pbnQgdHlwZSBmb3IgdGVzdGluZwogICAgIH07CiAKLSAgICBGdW5j
dGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQXR0cmlidXRlQmxvY2smJiBh
dHRyaWJ1dGVCbG9jaywgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IGVudHJ5UG9pbnRUeXBlLCBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIFBhcmFtZXRl
cnMmJiBwYXJhbWV0ZXJzLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFudGljKQorICAg
IEZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9j
ayYmIGF0dHJpYnV0ZUJsb2NrLCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5
cGUsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5h
bWUsIFZhcmlhYmxlRGVjbGFyYXRpb25zJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1h
bnRpYz4mJiBzZW1hbnRpYywgYm9vbCBpc09wZXJhdG9yKQogICAgICAgICA6IG1fb3JpZ2luKFdU
Rk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2F0dHJpYnV0ZUJsb2NrKFdURk1vdmUoYXR0cmli
dXRlQmxvY2spKQogICAgICAgICAsIG1fZW50cnlQb2ludFR5cGUoZW50cnlQb2ludFR5cGUpCkBA
IC01Nyw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkK
ICAgICAgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKICAgICAgICAgLCBt
X3NlbWFudGljKFdURk1vdmUoc2VtYW50aWMpKQorICAgICAgICAsIG1faXNPcGVyYXRvcihXVEZN
b3ZlKGlzT3BlcmF0b3IpKQogICAgIHsKICAgICB9CiAKQEAgLTY1LDI3ICs2NywyOCBAQCBwdWJs
aWM6CiAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbihjb25zdCBGdW5jdGlvbkRlY2xhcmF0aW9uJikg
PSBkZWxldGU7CiAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uJiYp
ID0gZGVmYXVsdDsKIAorICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uRGVmaW5pdGlvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICBBdHRyaWJ1dGVCbG9j
ayYgYXR0cmlidXRlQmxvY2soKSB7IHJldHVybiBtX2F0dHJpYnV0ZUJsb2NrOyB9Ci0gICAgQVNU
OjpUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQotICAgIFBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBjb25zdCBPcHRpb25hbDxFbnRy
eVBvaW50VHlwZT4mIGVudHJ5UG9pbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeVBvaW50
VHlwZTsgfQorICAgIEFTVDo6VW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiAqbV90
eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
CisgICAgYm9vbCBpc0Nhc3QoKSBjb25zdCB7IHJldHVybiBtX25hbWUgPT0gIm9wZXJhdG9yIGNh
c3QiOyB9CisgICAgY29uc3QgVmFyaWFibGVEZWNsYXJhdGlvbnMmIHBhcmFtZXRlcnMoKSBjb25z
dCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyYgcGFy
YW1ldGVycygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQogICAgIE9wdGlvbmFsPEFTVDo6U2Vt
YW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KLQotICAgIExleGVyOjpU
b2tlbiYmIHRha2VPcmlnaW4oKSB7IHJldHVybiBXVEZNb3ZlKG1fb3JpZ2luKTsgfQotICAgIEF0
dHJpYnV0ZUJsb2NrJiYgdGFrZUF0dHJpYnV0ZUJsb2NrKCkgeyByZXR1cm4gV1RGTW92ZShtX2F0
dHJpYnV0ZUJsb2NrKTsgfQotICAgIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiYmIHRha2VFbnRy
eVBvaW50VHlwZSgpIHsgcmV0dXJuIFdURk1vdmUobV9lbnRyeVBvaW50VHlwZSk7IH0KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHRha2VUeXBlKCkgeyByZXR1cm4gV1RGTW92ZSht
X3R5cGUpOyB9Ci0gICAgU3RyaW5nJiYgdGFrZU5hbWUoKSB7IHJldHVybiBXVEZNb3ZlKG1fbmFt
ZSk7IH0KLSAgICBQYXJhbWV0ZXJzJiYgdGFrZVBhcmFtZXRlcnMoKSB7IHJldHVybiBXVEZNb3Zl
KG1fcGFyYW1ldGVycyk7IH0KLSAgICBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHRha2VTZW1h
bnRpYygpIHsgcmV0dXJuIFdURk1vdmUobV9zZW1hbnRpYyk7IH0KKyAgICBib29sIGlzT3BlcmF0
b3IoKSBjb25zdCB7IHJldHVybiBtX2lzT3BlcmF0b3I7IH0KIAogcHJpdmF0ZToKICAgICBMZXhl
cjo6VG9rZW4gbV9vcmlnaW47CiAgICAgQXR0cmlidXRlQmxvY2sgbV9hdHRyaWJ1dGVCbG9jazsK
ICAgICBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gbV9lbnRyeVBvaW50VHlwZTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiBtX3R5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFt
ZWRUeXBlPiBtX3R5cGU7CiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICBQYXJhbWV0ZXJzIG1fcGFy
YW1ldGVyczsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyBtX3BhcmFtZXRlcnM7CiAgICAgT3B0
aW9uYWw8QVNUOjpTZW1hbnRpYz4gbV9zZW1hbnRpYzsKKyAgICBib29sIG1faXNPcGVyYXRvcjsK
IH07CiAKIH0KQEAgLTk0LDQgKzk3LDkgQEAgcHJpdmF0ZToKIAogfQogCisjZGVmaW5lIFNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRlVOQ1RJT05fREVDTEFSQVRJT04oVG9WYWx1ZVR5cGVO
YW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHR5cGUpIHsgcmV0
dXJuIHR5cGUucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oCmluZGV4IGE0OTA3YjBkMjk4
Li5iNmI3YmEwNzdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgKQEAgLTUw
LDYgKzUwLDggQEAgcHVibGljOgogICAgIEZ1bmN0aW9uRGVmaW5pdGlvbihjb25zdCBGdW5jdGlv
bkRlZmluaXRpb24mKSA9IGRlbGV0ZTsKICAgICBGdW5jdGlvbkRlZmluaXRpb24oRnVuY3Rpb25E
ZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKIAorICAgIGJvb2wgaXNGdW5jdGlvbkRlZmluaXRpb24o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKICAgICBCbG9jayYgYmxvY2soKSB7
IHJldHVybiBtX2Jsb2NrOyB9CiAgICAgYm9vbCByZXN0cmljdGVkKCkgY29uc3QgeyByZXR1cm4g
bV9yZXN0cmljdGVkOyB9CiAKQEAgLTY0LDQgKzY2LDYgQEAgcHJpdmF0ZToKIAogfQogCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OKEZ1bmN0aW9uRGVm
aW5pdGlvbiwgaXNGdW5jdGlvbkRlZmluaXRpb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Np
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4
RXhwcmVzc2lvbi5oCmluZGV4IDZiYjZhMGYwZGFiLi40M2U2MGExMDQ5OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNz
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
SW5kZXhFeHByZXNzaW9uLmgKQEAgLTQ5LDYgKzQ5LDI1IEBAIHB1YmxpYzoKICAgICBJbmRleEV4
cHJlc3Npb24oY29uc3QgSW5kZXhFeHByZXNzaW9uJikgPSBkZWxldGU7CiAgICAgSW5kZXhFeHBy
ZXNzaW9uKEluZGV4RXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzSW5kZXhF
eHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgU3RyaW5n
IGdldEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4g
U3RyaW5nKCJvcGVyYXRvcltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
fQorCisgICAgU3RyaW5nIHNldEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICByZXR1cm4gU3RyaW5nKCJvcGVyYXRvciZbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOworICAgIH0KKworICAgIFN0cmluZyBhbmRGdW5jdGlvbk5hbWUoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZygib3BlcmF0b3JbXT0iLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uJiBpbmRl
eEV4cHJlc3Npb24oKSB7IHJldHVybiAqbV9pbmRleDsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6
dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2luZGV4OwogfTsKQEAgLTU5LDQgKzc4LDYgQEAgcHJp
dmF0ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJT04oSW5k
ZXhFeHByZXNzaW9uLCBpc0luZGV4RXhwcmVzc2lvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRl
cmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTElu
dGVnZXJMaXRlcmFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
YjkxMWQzZjdmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAKQEAgLTAsMCArMSw1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oIgorCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVU
eXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsK
KworaW50NjRfdCBJbnRlZ2VyTGl0ZXJhbDo6dmFsdWVGb3JTZWxlY3RlZFR5cGUoKSBjb25zdAor
eworICAgIEFTU0VSVChtX3R5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8mIHR5cGVSZWZl
cmVuY2UgPSBkb3duY2FzdDxUeXBlUmVmZXJlbmNlPigqbV90eXBlLnJlc29sdmVkVHlwZSgpKTsK
KyAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byYgbmF0
aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgcmV0dXJuIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5mb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKCkobV92YWx1ZSk7Cit9CisKK30KKworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmgKaW5kZXggNjg1NGRkMjdmMGMuLmNi
MTJkNWQ3ZDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmgKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDIxICs0MCwzNyBAQCBuYW1lc3BhY2UgQVNU
IHsKIGNsYXNzIEludGVnZXJMaXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgog
ICAgIEludGVnZXJMaXRlcmFsKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgaW50IHZhbHVlKQotICAg
ICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICA6IEV4cHJlc3Npb24o
TGV4ZXI6OlRva2VuKG9yaWdpbikpCisgICAgICAgICwgbV90eXBlKFdURk1vdmUob3JpZ2luKSwg
dmFsdWUpCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+SW50ZWdlckxpdGVyYWwoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBJbnRlZ2Vy
TGl0ZXJhbChjb25zdCBJbnRlZ2VyTGl0ZXJhbCYpID0gZGVmYXVsdDsKKyAgICBJbnRlZ2VyTGl0
ZXJhbChjb25zdCBJbnRlZ2VyTGl0ZXJhbCYpID0gZGVsZXRlOwogICAgIEludGVnZXJMaXRlcmFs
KEludGVnZXJMaXRlcmFsJiYpID0gZGVmYXVsdDsKIAorICAgIEludGVnZXJMaXRlcmFsJiBvcGVy
YXRvcj0oY29uc3QgSW50ZWdlckxpdGVyYWwmKSA9IGRlbGV0ZTsKKyAgICBJbnRlZ2VyTGl0ZXJh
bCYgb3BlcmF0b3I9KEludGVnZXJMaXRlcmFsJiYpID0gZGVmYXVsdDsKKworICAgIEludGVnZXJM
aXRlcmFsVHlwZSYgdHlwZSgpIHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGludCB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAogICAgIGJvb2wgaXNJbnRlZ2VyTGl0ZXJhbCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIEludGVnZXJMaXRlcmFsIGNsb25l
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEludGVnZXJMaXRlcmFsIHJlc3VsdChMZXhlcjo6VG9r
ZW4ob3JpZ2luKCkpLCBtX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5tX3R5cGUucmVzb2x2
ZWRUeXBlKCkpCisgICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVzdWx0Lm1fdHlw
ZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgaW50NjRfdCB2YWx1ZUZvclNlbGVjdGVkVHlwZSgpIGNvbnN0OworCiBwcml2YXRl
OgorICAgIEludGVnZXJMaXRlcmFsVHlwZSBtX3R5cGU7CiAgICAgaW50IG1fdmFsdWU7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNWZjMjFhY2JkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5
cGUuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWxUeXBl
LmgiCisKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworSW50ZWdlckxpdGVy
YWxUeXBlOjpJbnRlZ2VyTGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBpbnQgdmFs
dWUpCisgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICwgbV9wcmVmZXJyZWRUeXBlKHN0ZDo6bWFr
ZV91bmlxdWU8VHlwZVJlZmVyZW5jZT4oV1RGTW92ZShvcmlnaW4pLCBTdHJpbmcoImludCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBUeXBlQXJndW1lbnRzKCkpKQoreworfQorCitJ
bnRlZ2VyTGl0ZXJhbFR5cGU6On5JbnRlZ2VyTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKK2Jv
b2wgSW50ZWdlckxpdGVyYWxUeXBlOjpjYW5SZXNvbHZlKGNvbnN0IFR5cGUmIHR5cGUpIGNvbnN0
Cit7CisgICAgaWYgKCFpczxOYW1lZFR5cGU+KHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8TmFtZWRUeXBlPih0eXBlKTsKKyAgICBp
ZiAoIWlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFuYXRpdmVU
eXBlRGVjbGFyYXRpb24uY2FuUmVwcmVzZW50SW50ZWdlcigpKG1fdmFsdWUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIEludGVnZXJMaXRl
cmFsVHlwZTo6Y29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSBj
b25zdAoreworICAgIGlmIChtYXRjaGVzKHVubmFtZWRUeXBlLCAqbV9wcmVmZXJyZWRUeXBlKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7Cit9CisKK30KKworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNWYwMDIyYzZiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5
cGUuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBUeXBlUmVmZXJlbmNlOwor
CitjbGFzcyBJbnRlZ2VyTGl0ZXJhbFR5cGUgOiBwdWJsaWMgUmVzb2x2YWJsZVR5cGUgeworcHVi
bGljOgorICAgIEludGVnZXJMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIGludCB2
YWx1ZSk7CisKKyAgICB2aXJ0dWFsIH5JbnRlZ2VyTGl0ZXJhbFR5cGUoKTsKKworICAgIEludGVn
ZXJMaXRlcmFsVHlwZShjb25zdCBJbnRlZ2VyTGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBJ
bnRlZ2VyTGl0ZXJhbFR5cGUoSW50ZWdlckxpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKworICAg
IEludGVnZXJMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KGNvbnN0IEludGVnZXJMaXRlcmFsVHlwZSYp
ID0gZGVsZXRlOworICAgIEludGVnZXJMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KEludGVnZXJMaXRl
cmFsVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzSW50ZWdlckxpdGVyYWxUeXBlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgVHlwZVJlZmVyZW5jZSYgcHJl
ZmVycmVkVHlwZSgpIHsgcmV0dXJuICptX3ByZWZlcnJlZFR5cGU7IH0KKworICAgIGJvb2wgY2Fu
UmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQgY29udmVy
c2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBpbnQgbV92YWx1ZTsKKyAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZl
IGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCisgICAgLy8gQ29uc3RhbnRFeHByZXNzaW9u
IC0+IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2UgLT4gVHlwZUFyZ3VtZW50cyAtPiBDb25z
dGFudEV4cHJlc3Npb24KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gbV9wcmVm
ZXJyZWRUeXBlOworfTsKKworfQorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
SExTTF9SRVNPTFZBQkxFX1RZUEUoSW50ZWdlckxpdGVyYWxUeXBlLCBpc0ludGVnZXJMaXRlcmFs
VHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjY3ZGIwMDAxNmEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKQEAgLTAsMCAr
MSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNpbmNs
dWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsK
KworY2xhc3MgTmFtZWRUeXBlIDogcHVibGljIFR5cGUgeworcHVibGljOgorICAgIE5hbWVkVHlw
ZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUpCisgICAgICAgIDogbV9vcmln
aW4oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5OYW1lZFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBO
YW1lZFR5cGUoY29uc3QgTmFtZWRUeXBlJikgPSBkZWxldGU7CisgICAgTmFtZWRUeXBlKE5hbWVk
VHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9u
YW1lOyB9CisKKyAgICBib29sIGlzTmFtZWRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1R5cGVEZWZpbml0aW9uKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTdHJ1Y3R1cmVEZWZpbml0aW9uKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGlvbkRlZmlu
aXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2
ZVR5cGVEZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFs
IGNvbnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgdmly
dHVhbCBUeXBlJiB1bmlmeU5vZGUoKSB7IHJldHVybiAqdGhpczsgfQorCitwcml2YXRlOgorICAg
IExleGVyOjpUb2tlbiBtX29yaWdpbjsKKyAgICBTdHJpbmcgbV9uYW1lOworfTsKKworfQorCit9
CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUo
VG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVH
SU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6Ok5hbWVkVHlwZSYgdHlwZSkgeyBy
ZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZUEUoTmFtZWRUeXBlLCBpc05hbWVkVHlw
ZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24uaAppbmRleCAwMTBlNmViYTcwMC4uYTgxNGJlNjhlMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgKQEAgLTM3LDggKzM3LDggQEAgbmFtZXNwYWNl
IEFTVCB7CiAKIGNsYXNzIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwdWJsaWMgRnVuY3Rp
b25EZWNsYXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihM
ZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9w
dGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBvaW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFT
VDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycywg
T3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1hbnRpYywgYm9vbCByZXN0cmljdGVkKQotICAg
ICAgICA6IEZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGF0dHJp
YnV0ZUJsb2NrKSwgV1RGTW92ZShlbnRyeVBvaW50VHlwZSksIFdURk1vdmUodHlwZSksIFdURk1v
dmUobmFtZSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoc2VtYW50aWMpKQorICAgIE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiYmIGZ1bmN0aW9uRGVj
bGFyYXRpb24sIGJvb2wgcmVzdHJpY3RlZCkKKyAgICAgICAgOiBGdW5jdGlvbkRlY2xhcmF0aW9u
KFdURk1vdmUoZnVuY3Rpb25EZWNsYXJhdGlvbikpCiAgICAgICAgICwgbV9yZXN0cmljdGVkKHJl
c3RyaWN0ZWQpCiAgICAgewogICAgIH0KQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oY29uc3QgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYp
ID0gZGVsZXRlOwogICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzTmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIGJvb2wgcmVz
dHJpY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3RlZDsgfQogCiBwcml2YXRlOgpAQCAt
NjAsNCArNjIsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hM
U0xfRlVOQ1RJT05fREVDTEFSQVRJT04oTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXNOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVU
eXBlRGVjbGFyYXRpb24uaAppbmRleCAzMjBhYmMzYzQ3NS4uMmI4OTQ2MWYzODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYg
RU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExT
TFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlw
ZUFyZ3VtZW50LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM4LDEx
ICszOCwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3Mg
TmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHVibGljIFR5cGUgeworY2xhc3MgTmF0aXZlVHlwZURl
Y2xhcmF0aW9uIDogcHVibGljIE5hbWVkVHlwZSB7CiBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgVHlwZUFyZ3Vt
ZW50cyYmIHR5cGVBcmd1bWVudHMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4p
KQotICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgICAgICA6IE5hbWVkVHlwZShX
VEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlQXJndW1lbnRz
KFdURk1vdmUodHlwZUFyZ3VtZW50cykpCiAgICAgewogICAgIH0KQEAgLTUyLDE4ICs1MSw1NiBA
QCBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURlY2xhcmF0aW9uKGNvbnN0IE5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5hdGl2ZVR5cGVEZWNsYXJhdGlvbihOYXRpdmVUeXBl
RGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OwogCisgICAgYm9vbCBpc05hdGl2ZVR5cGVEZWNsYXJh
dGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsg
cmV0dXJuIG1fbmFtZTsgfQogICAgIFR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMoKSB7IHJl
dHVybiBtX3R5cGVBcmd1bWVudHM7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9u
ZSgpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGJvb2wgaXNJbnQoKSBjb25zdCB7
IHJldHVybiBtX2lzSW50OyB9CisgICAgYm9vbCBpc051bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
aXNOdW1iZXI7IH0KKyAgICBib29sIGlzRmxvYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzRmxv
YXRpbmc7IH0KKyAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZlY3Rvcjsg
fQorICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiBtX2lzTWF0cml4OyB9CisgICAg
Ym9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2lzVGV4dHVyZTsgfQorICAgIGJvb2wg
aXNTaWduZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2lnbmVkOyB9CisgICAgY29uc3Qgc3RkOjpm
dW5jdGlvbjxib29sKGludCk+JiBjYW5SZXByZXNlbnRJbnRlZ2VyKCkgY29uc3QgeyByZXR1cm4g
bV9jYW5SZXByZXNlbnRJbnRlZ2VyOyB9CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKHVu
c2lnbmVkKT4mIGNhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyOyB9CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxi
b29sKGZsb2F0KT4mIGNhblJlcHJlc2VudEZsb2F0KCkgY29uc3QgeyByZXR1cm4gbV9jYW5SZXBy
ZXNlbnRGbG9hdDsgfQorICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248aW50NjRfdChpbnQ2NF90KT4m
IHN1Y2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yOyB9CisgICAgY29uc3Qgc3Rk
OjpmdW5jdGlvbjxpbnQ2NF90KGludCk+JiBmb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKCkgY29uc3Qg
eyByZXR1cm4gbV9mb3JtYXRWYWx1ZUZyb21JbnRlZ2VyOyB9CisgICAgY29uc3Qgc3RkOjpmdW5j
dGlvbjxpbnQ2NF90KHVuc2lnbmVkKT4mIGZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcigp
IGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyOyB9CisKKyAg
ICB2b2lkIHNldElzSW50KCkgeyBtX2lzSW50ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0SXNOdW1i
ZXIoKSB7IG1faXNOdW1iZXIgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRJc0Zsb2F0aW5nKCkgeyBt
X2lzRmxvYXRpbmcgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRJc1ZlY3RvcigpIHsgbV9pc1ZlY3Rv
ciA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzTWF0cml4KCkgeyBtX2lzTWF0cml4ID0gdHJ1ZTsg
fQorICAgIHZvaWQgc2V0SXNUZXh0dXJlKCkgeyBtX2lzVGV4dHVyZSA9IHRydWU7IH0KKyAgICB2
b2lkIHNldElzU2lnbmVkKCkgeyBtX2lzU2lnbmVkID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0Q2Fu
UmVwcmVzZW50SW50ZWdlcihzdGQ6OmZ1bmN0aW9uPGJvb2woaW50KT4mJiBjYW5SZXByZXNlbnQp
IHsgbV9jYW5SZXByZXNlbnRJbnRlZ2VyID0gV1RGTW92ZShjYW5SZXByZXNlbnQpOyB9CisgICAg
dm9pZCBzZXRDYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoc3RkOjpmdW5jdGlvbjxib29sKHVu
c2lnbmVkKT4mJiBjYW5SZXByZXNlbnQpIHsgbV9jYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIg
PSBXVEZNb3ZlKGNhblJlcHJlc2VudCk7IH0KKyAgICB2b2lkIHNldENhblJlcHJlc2VudEZsb2F0
KHN0ZDo6ZnVuY3Rpb248Ym9vbChmbG9hdCk+JiYgY2FuUmVwcmVzZW50KSB7IG1fY2FuUmVwcmVz
ZW50RmxvYXQgPSBXVEZNb3ZlKGNhblJlcHJlc2VudCk7IH0KKyAgICB2b2lkIHNldFN1Y2Nlc3Nv
cihzdGQ6OmZ1bmN0aW9uPGludDY0X3QoaW50NjRfdCk+JiYgc3VjY2Vzc29yKSB7IG1fc3VjY2Vz
c29yID0gV1RGTW92ZShzdWNjZXNzb3IpOyB9CisgICAgdm9pZCBzZXRGb3JtYXRWYWx1ZUZyb21J
bnRlZ2VyKHN0ZDo6ZnVuY3Rpb248aW50NjRfdChpbnQpPiYmIGZvcm1hdFZhbHVlKSB7IG1fZm9y
bWF0VmFsdWVGcm9tSW50ZWdlciA9IFdURk1vdmUoZm9ybWF0VmFsdWUpOyB9CisgICAgdm9pZCBz
ZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIoc3RkOjpmdW5jdGlvbjxpbnQ2NF90KHVu
c2lnbmVkKT4mJiBmb3JtYXRWYWx1ZSkgeyBtX2Zvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdl
ciA9IFdURk1vdmUoZm9ybWF0VmFsdWUpOyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2Vu
IG1fb3JpZ2luOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgVHlwZUFyZ3VtZW50cyBtX3R5cGVB
cmd1bWVudHM7CisgICAgc3RkOjpmdW5jdGlvbjxib29sKGludCk+IG1fY2FuUmVwcmVzZW50SW50
ZWdlcjsKKyAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wodW5zaWduZWQpPiBtX2NhblJlcHJlc2VudFVu
c2lnbmVkSW50ZWdlcjsKKyAgICBzdGQ6OmZ1bmN0aW9uPGJvb2woZmxvYXQpPiBtX2NhblJlcHJl
c2VudEZsb2F0OworICAgIHN0ZDo6ZnVuY3Rpb248aW50NjRfdChpbnQ2NF90KT4gbV9zdWNjZXNz
b3I7CisgICAgc3RkOjpmdW5jdGlvbjxpbnQ2NF90KGludCk+IG1fZm9ybWF0VmFsdWVGcm9tSW50
ZWdlcjsKKyAgICBzdGQ6OmZ1bmN0aW9uPGludDY0X3QodW5zaWduZWQpPiBtX2Zvcm1hdFZhbHVl
RnJvbVVuc2lnbmVkSW50ZWdlcjsKKyAgICBib29sIG1faXNJbnQgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9pc051bWJlciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzRmxvYXRpbmcgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9pc1ZlY3RvciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzTWF0cml4IHsg
ZmFsc2UgfTsKKyAgICBib29sIG1faXNUZXh0dXJlIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNT
aWduZWQgeyBmYWxzZSB9OwogfTsKIAogfQpAQCAtNzIsNCArMTA5LDYgQEAgcHJpdmF0ZToKIAog
fQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoTmF0aXZlVHlwZURl
Y2xhcmF0aW9uLCBpc05hdGl2ZVR5cGVEZWNsYXJhdGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5vZGUuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5vZGUuaAppbmRl
eCBmNmM0ZjAwNjBjMC4uYzhmZGMxMzg2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOb2RlLmgKQEAgLTQyLDYgKzQyLDkgQEAgcHVi
bGljOgogICAgIGV4cGxpY2l0IE5vZGUoY29uc3QgTm9kZSYpID0gZGVmYXVsdDsKICAgICBOb2Rl
KE5vZGUmJikgPSBkZWZhdWx0OwogCisgICAgTm9kZSYgb3BlcmF0b3I9KGNvbnN0IE5vZGUmKSA9
IGRlZmF1bHQ7CisgICAgTm9kZSYgb3BlcmF0b3I9KE5vZGUmJikgPSBkZWZhdWx0OworCiBwcml2
YXRlOgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgKaW5kZXggZWU2NDdjZjlkMzkuLjU0YWY4YWZh
OGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xOdWxsTGl0ZXJhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUg
IldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJX
SExTTE51bGxMaXRlcmFsVHlwZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ1LDEy
ICs0NiwyNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5OdWxsTGl0ZXJhbCgpID0gZGVmYXVs
dDsKIAotICAgIGV4cGxpY2l0IE51bGxMaXRlcmFsKGNvbnN0IE51bGxMaXRlcmFsJikgPSBkZWZh
dWx0OworICAgIE51bGxMaXRlcmFsKGNvbnN0IE51bGxMaXRlcmFsJikgPSBkZWxldGU7CiAgICAg
TnVsbExpdGVyYWwoTnVsbExpdGVyYWwmJikgPSBkZWZhdWx0OwogCisgICAgTnVsbExpdGVyYWwm
IG9wZXJhdG9yPShjb25zdCBOdWxsTGl0ZXJhbCYpID0gZGVsZXRlOworICAgIE51bGxMaXRlcmFs
JiBvcGVyYXRvcj0oTnVsbExpdGVyYWwmJikgPSBkZWZhdWx0OworCisgICAgTnVsbExpdGVyYWxU
eXBlJiB0eXBlKCkgeyByZXR1cm4gbV90eXBlOyB9CisKICAgICBib29sIGlzTnVsbExpdGVyYWwo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBOdWxsTGl0ZXJhbCBjbG9u
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIHJlc3VsdCA9IE51bGxMaXRlcmFsKExleGVy
OjpUb2tlbihvcmlnaW4oKSkpOworICAgICAgICBpZiAocmVzdWx0Lm1fdHlwZS5yZXNvbHZlZFR5
cGUoKSkKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUucmVzb2x2ZShyZXN1bHQubV90eXBlLnJl
c29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
IHByaXZhdGU6CisgICAgTnVsbExpdGVyYWxUeXBlIG1fdHlwZTsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRl
cmFsVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xOdWxsTGl0ZXJhbFR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi42MWViZGMxYjQzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5jcHAKQEAgLTAsMCArMSw1
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworYm9vbCBOdWxs
TGl0ZXJhbFR5cGU6OmNhblJlc29sdmUoY29uc3QgVHlwZSYgdHlwZSkgY29uc3QKK3sKKyAgICBp
ZiAoIWlzPFVubmFtZWRUeXBlPih0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1
dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8VW5uYW1lZFR5cGU+KHR5cGUpOworICAgIGlmICgh
aXM8UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIE51bGxMaXRlcmFsVHlwZTo6Y29udmVyc2lv
bkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit9
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWxUeXBlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgzMTI1MTAxYzZmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExp
dGVyYWxUeXBlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5cGUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2Ug
QVNUIHsKKworY2xhc3MgTnVsbExpdGVyYWxUeXBlIDogcHVibGljIFJlc29sdmFibGVUeXBlIHsK
K3B1YmxpYzoKKyAgICBOdWxsTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFs
IH5OdWxsTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBOdWxsTGl0ZXJhbFR5cGUoY29u
c3QgTnVsbExpdGVyYWxUeXBlJikgPSBkZWxldGU7CisgICAgTnVsbExpdGVyYWxUeXBlKE51bGxM
aXRlcmFsVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBOdWxsTGl0ZXJhbFR5cGUmIG9wZXJhdG9y
PShjb25zdCBOdWxsTGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBOdWxsTGl0ZXJhbFR5cGUm
IG9wZXJhdG9yPShOdWxsTGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc051
bGxMaXRlcmFsVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJv
b2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQg
Y29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdCBvdmVycmlkZTsKKworcHJp
dmF0ZToKK307CisKK30KKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xf
UkVTT0xWQUJMRV9UWVBFKE51bGxMaXRlcmFsVHlwZSwgaXNOdWxsTGl0ZXJhbFR5cGUoKSkKKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xQb2ludGVyVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAppbmRleCAxNTI5NDI2YTJlZC4uNjNjMjA5M2M1MGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFBvaW50ZXJUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUG9pbnRlclR5cGUuaApAQCAtMzksOCArMzksOCBAQCBuYW1lc3BhY2UgQVNUIHsK
IAogY2xhc3MgUG9pbnRlclR5cGUgOiBwdWJsaWMgUmVmZXJlbmNlVHlwZSB7CiBwdWJsaWM6Ci0g
ICAgUG9pbnRlclR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBhZGRyZXNzU3Bh
Y2UsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBlbGVtZW50VHlwZSkKLSAgICAgICAgOiBSZWZlcmVu
Y2VUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShhZGRyZXNzU3BhY2UpLCBXVEZNb3ZlKGVs
ZW1lbnRUeXBlKSkKKyAgICBQb2ludGVyVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEFkZHJl
c3NTcGFjZSBhZGRyZXNzU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4gZWxlbWVu
dFR5cGUpCisgICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdpbiksIGFkZHJlc3NT
cGFjZSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCiAgICAgewogICAgIH0KIApAQCAtNDksMTEgKzQ5
LDExIEBAIHB1YmxpYzoKICAgICBQb2ludGVyVHlwZShjb25zdCBQb2ludGVyVHlwZSYpID0gZGVs
ZXRlOwogICAgIFBvaW50ZXJUeXBlKFBvaW50ZXJUeXBlJiYpID0gZGVmYXVsdDsKIAotICAgIGJv
b2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
Ym9vbCBpc1BvaW50ZXJUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0g
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4o
b3JpZ2luKCkpLCBTdHJpbmcoYWRkcmVzc1NwYWNlKCkpLCBlbGVtZW50VHlwZSgpLmNsb25lKCkp
OworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQb2ludGVyVHlwZT4oTGV4ZXI6OlRv
a2VuKG9yaWdpbigpKSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAg
ICAgfQogCiBwcml2YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShQb2ludGVyVHlwZSwgaXNQb2ludGVyVHlwZSgp
KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoUG9pbnRlclR5cGUs
IGlzUG9pbnRlclR5cGUoKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5oCmluZGV4IGJhMzhhNWMwMWVhLi5kMDVhNzJjMWZjNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKQEAgLTUxLDEwICs1MSwzMCBA
QCBwdWJsaWM6CiAKICAgICBib29sIGlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0RnVuY3Rp
b25OYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHNldEZ1bmN0aW9uTmFtZSgp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBhbmRGdW5jdGlvbk5hbWUoKSBjb25zdCA9
IDA7CisKKyAgICB2b2lkIHNldFBvc3NpYmxlR2V0T3ZlcmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRzKQor
ICAgIHsKKyAgICAgICAgbV9wb3NzaWJsZUdldE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKKyAgICB9
CisgICAgdm9pZCBzZXRQb3NzaWJsZVNldE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykKKyAgICB7
CisgICAgICAgIG1fcG9zc2libGVTZXRPdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAgfQorICAg
IHZvaWQgc2V0UG9zc2libGVBbmRPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMpCisgICAgeworICAg
ICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAgIH0KKwogICAgIEV4
cHJlc3Npb24mIGJhc2UoKSB7IHJldHVybiAqbV9iYXNlOyB9CiAKIHByaXZhdGU6CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fYmFzZTsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZUdldE92ZXJsb2Fk
czsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9u
PiwgMT4gbV9wb3NzaWJsZVNldE92ZXJsb2FkczsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZUFuZE92ZXJsb2FkczsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFF1YWxpZmllci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUXVhbGlmaWVyLmgKaW5kZXggMzMzZjA1MjI0NDEuLmY3Y2QyZmRmZmEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xR
dWFsaWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xRdWFsaWZpZXIuaApAQCAtNDYsNyArNDYsNyBAQCBlbnVtIGNsYXNzIFF1YWxpZmllciB7
CiAgICAgU2FtcGxlCiB9OwogCi10eXBlZGVmIFZlY3RvcjxRdWFsaWZpZXI+IFF1YWxpZmllcnM7
Cit1c2luZyBRdWFsaWZpZXJzID0gVmVjdG9yPFF1YWxpZmllcj47CiAKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCmluZGV4IGE0YzE0Y2UxY2YzLi5j
ZDU1NjMyMGRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24uaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUg
IldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFy
aWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1
ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCkBA
IC01Miw4ICs1Miw4IEBAIHB1YmxpYzoKICAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKExl
eGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IGxWYWx1ZSkK
ICAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQogICAgICAgICAsIG1f
bFZhbHVlKFdURk1vdmUobFZhbHVlKSkKLSAgICAgICAgLCBtX29sZFZhbHVlKExleGVyOjpUb2tl
bihvcmlnaW4pKQotICAgICAgICAsIG1fbmV3VmFsdWUoV1RGTW92ZShvcmlnaW4pKQorICAgICAg
ICAsIG1fb2xkVmFsdWUoTGV4ZXI6OlRva2VuKG9yaWdpbiksIFF1YWxpZmllcnMoKSwgbnVsbHB0
ciwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cikKKyAgICAgICAgLCBtX25ld1ZhbHVl
KFdURk1vdmUob3JpZ2luKSwgUXVhbGlmaWVycygpLCBudWxscHRyLCBTdHJpbmcoKSwgV1RGOjpu
dWxsb3B0LCBudWxscHRyKQogICAgIHsKICAgICB9CiAKQEAgLTg3LDE1ICs4NywxNSBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc1JlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJldHVybiAq
bV9sVmFsdWU7IH0KLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJiBvbGRWYWx1ZSgp
IHsgcmV0dXJuIG1fb2xkVmFsdWU7IH0KLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9u
JiBuZXdWYWx1ZSgpIHsgcmV0dXJuIG1fbmV3VmFsdWU7IH0KKyAgICBWYXJpYWJsZURlY2xhcmF0
aW9uJiBvbGRWYWx1ZSgpIHsgcmV0dXJuIG1fb2xkVmFsdWU7IH0KKyAgICBWYXJpYWJsZURlY2xh
cmF0aW9uJiBuZXdWYWx1ZSgpIHsgcmV0dXJuIG1fbmV3VmFsdWU7IH0KICAgICBFeHByZXNzaW9u
JiBuZXdWYWx1ZUV4cHJlc3Npb24oKSB7IHJldHVybiAqbV9uZXdWYWx1ZUV4cHJlc3Npb247IH0K
ICAgICBFeHByZXNzaW9uJiByZXN1bHRFeHByZXNzaW9uKCkgeyByZXR1cm4gKm1fcmVzdWx0RXhw
cmVzc2lvbjsgfQogCiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBt
X2xWYWx1ZTsKLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uIG1fb2xkVmFsdWU7Ci0g
ICAgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiBtX25ld1ZhbHVlOworICAgIFZhcmlhYmxl
RGVjbGFyYXRpb24gbV9vbGRWYWx1ZTsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG1fbmV3VmFs
dWU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fbmV3VmFsdWVFeHByZXNzaW9u
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX3Jlc3VsdEV4cHJlc3Npb247CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMUmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oCmluZGV4IDIyNTdmOWJlMjQwLi41ZDI5ZmZkNWI3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVmZXJlbmNlVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaApAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShX
RUJHUFUpCiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNywxMSArMzcsMTggQEAgbmFtZXNw
YWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFJlZmVyZW5jZVR5cGUgOiBw
dWJsaWMgVHlwZSB7CitjbGFzcyBSZWZlcmVuY2VUeXBlIDogcHVibGljIFVubmFtZWRUeXBlIHsK
IHB1YmxpYzoKLSAgICBSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5n
JiYgYWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4mJiBlbGVtZW50VHlwZSkKLSAg
ICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9hZGRyZXNzU3Bh
Y2UoV1RGTW92ZShhZGRyZXNzU3BhY2UpKQorICAgIGVudW0gY2xhc3MgQWRkcmVzc1NwYWNlIHsK
KyAgICAgICAgQ29uc3RhbnQsCisgICAgICAgIERldmljZSwKKyAgICAgICAgVGhyZWFkZ3JvdXAs
CisgICAgICAgIFRocmVhZAorICAgIH07CisKKyAgICBSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tl
biYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAgICAgICA6IFVubmFtZWRUeXBlKFdURk1vdmUo
b3JpZ2luKSkKKyAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCiAgICAgICAg
ICwgbV9lbGVtZW50VHlwZShXVEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICB7CiAgICAgfQpAQCAt
NTAsMTggKzU3LDE1IEBAIHB1YmxpYzoKIAogICAgIFJlZmVyZW5jZVR5cGUoY29uc3QgUmVmZXJl
bmNlVHlwZSYpID0gZGVsZXRlOwogICAgIFJlZmVyZW5jZVR5cGUoUmVmZXJlbmNlVHlwZSYmKSA9
IGRlZmF1bHQ7Ci0gICAgCi0gICAgVHlwZSYgZWxlbWVudFR5cGUoKSB7IHJldHVybiAqbV9lbGVt
ZW50VHlwZTsgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4o
KSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQotICAgIGNvbnN0IFN0cmluZyYgYWRkcmVzc1Nw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KLSAgICBjb25zdCBUeXBlJiBl
bGVtZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9CisgICAgYm9vbCBp
c1JlZmVyZW5jZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAg
QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNl
OyB9CisgICAgVW5uYW1lZFR5cGUmIGVsZW1lbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gKm1fZWxl
bWVudFR5cGU7IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAg
U3RyaW5nIG1fYWRkcmVzc1NwYWNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX2VsZW1l
bnRUeXBlOworICAgIEFkZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFjZTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8VW5uYW1lZFR5cGU+IG1fZWxlbWVudFR5cGU7CiB9OwogCiB9CkBAIC03MCw0ICs3NCw2
IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVE
X1RZUEUoUmVmZXJlbmNlVHlwZSwgaXNSZWZlcmVuY2VUeXBlKCkpCisKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb2x2
YWJsZVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFJlc29sdmFibGVUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjU4YTY4ZWEzYzlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb2x2YWJsZVR5cGUuaApAQCAtMCwwICsxLDg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVk
ZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgorI2luY2x1ZGUg
PG1lbW9yeT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitu
YW1lc3BhY2UgQVNUIHsKKworY2xhc3MgUmVzb2x2YWJsZVR5cGUgOiBwdWJsaWMgVHlwZSB7Citw
dWJsaWM6CisgICAgUmVzb2x2YWJsZVR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5S
ZXNvbHZhYmxlVHlwZSgpID0gZGVmYXVsdDsKKworICAgIFJlc29sdmFibGVUeXBlKGNvbnN0IFJl
c29sdmFibGVUeXBlJikgPSBkZWxldGU7CisgICAgUmVzb2x2YWJsZVR5cGUoUmVzb2x2YWJsZVR5
cGUmJikgPSBkZWZhdWx0OworCisgICAgUmVzb2x2YWJsZVR5cGUmIG9wZXJhdG9yPShjb25zdCBS
ZXNvbHZhYmxlVHlwZSYpID0gZGVsZXRlOworICAgIFJlc29sdmFibGVUeXBlJiBvcGVyYXRvcj0o
UmVzb2x2YWJsZVR5cGUmJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc1Jlc29sdmFibGVUeXBl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0Zs
b2F0TGl0ZXJhbFR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0ludGVnZXJMaXRlcmFsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzTnVsbExpdGVyYWxUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoY29uc3QgVW5u
YW1lZFR5cGUmKSBjb25zdCA9IDA7CisKKyAgICBVbm5hbWVkVHlwZSogcmVzb2x2ZWRUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZFR5cGUuZ2V0KCk7IH0KKyAgICBVbm5hbWVkVHlwZSog
cmVzb2x2ZWRUeXBlKCkgeyByZXR1cm4gbV9yZXNvbHZlZFR5cGUuZ2V0KCk7IH0KKworICAgIHZv
aWQgcmVzb2x2ZShzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+JiYgdHlwZSkKKyAgICB7Cisg
ICAgICAgIG1fcmVzb2x2ZWRUeXBlID0gV1RGTW92ZSh0eXBlKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBtX3Jlc29sdmVkVHlwZTsKK307CisK
K30KKworfQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9SRVNP
TFZBQkxFX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlc29sdmFi
bGVUeXBlJiB0eXBlKSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShSZXNv
bHZhYmxlVHlwZSwgaXNSZXNvbHZhYmxlVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50
aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVz
b3VyY2VTZW1hbnRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmVhOGU4YTFkZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAKQEAgLTAsMCArMSw5MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGljLmgiCisKKyNpbmNsdWRlICJXSExTTEFy
cmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgIldITFNM
SW50cmluc2ljcy5oIgorI2luY2x1ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUg
IldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitib29sIFJlc291cmNlU2VtYW50aWM6Omlz
QWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0
IEludHJpbnNpY3MmIGludHJpbnNpY3MpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX21vZGUpIHsK
KyAgICBjYXNlIE1vZGU6OlVub3JkZXJlZEFjY2Vzc1ZpZXc6CisgICAgICAgIGlmIChpczxSZWZl
cmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHJlZmVyZW5jZVR5
cGUgPSBkb3duY2FzdDxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVmZXJlbmNlVHlwZS5hZGRyZXNzU3BhY2UoKSA9PSBSZWZlcmVuY2VUeXBlOjpBZGRy
ZXNzU3BhY2U6OkNvbnN0YW50IHx8IHJlZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkgPT0gUmVm
ZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGlzPEFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmIChpczxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAg
IGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlw
ZSk7CisgICAgICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7Cisg
ICAgICAgICAgICBpZiAoaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5y
ZXNvbHZlZFR5cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5
cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpLmlzVGV4dHVyZSgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIE1vZGU6OlRleHR1
cmU6CisgICAgICAgIGlmIChpczxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmFkZHJlc3NT
cGFjZSgpID09IFJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAgICAg
IGlmIChpczxBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBpZiAoaXM8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAg
ICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1l
ZFR5cGUpOworICAgICAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkp
OworICAgICAgICAgICAgaWYgKGlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVu
Y2UucmVzb2x2ZWRUeXBlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxOYXRp
dmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKS5pc1RleHR1
cmUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBNb2RlOjpC
dWZmZXI6CisgICAgICAgIGlmIChpczxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCisgICAg
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmFkZHJl
c3NTcGFjZSgpID09IFJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAg
ICAgIHJldHVybiBpczxBcnJheVR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICBjYXNlIE1vZGU6OlNh
bXBsZXI6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnNh
bXBsZXJUeXBlKCkpOworICAgIH0KK30KKworYm9vbCBSZXNvdXJjZVNlbWFudGljOjppc0FjY2Vw
dGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKFNoYWRlckl0ZW1EaXJlY3Rpb24gZGlyZWN0aW9u
LCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSBjb25zdAoreworICAgIHJldHVybiBkaXJlY3Rp
b24gPT0gU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ7Cit9CisKK30KKworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUmVzb3VyY2VTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5oCmluZGV4IGFiM2I0MzBmNDQyLi42YWUz
MTdhMzU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuaApAQCAtNjIsNiArNjIsMTkg
QEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsg
fQogICAgIHVuc2lnbmVkIHNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZTsgfQogCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFJlc291cmNlU2VtYW50aWMmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fbW9kZSA9PSBvdGhlci5tX21vZGUgJiYgbV9pbmRleCA9PSBv
dGhlci5tX2luZGV4ICYmIG1fc3BhY2UgPT0gb3RoZXIubV9zcGFjZTsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgUmVzb3VyY2VTZW1hbnRpYyYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBp
c0FjY2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNz
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGly
ZWN0aW9uKFNoYWRlckl0ZW1EaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpIGNv
bnN0IG92ZXJyaWRlOworCiBwcml2YXRlOgogICAgIE1vZGUgbV9tb2RlOwogICAgIHVuc2lnbmVk
IG1faW5kZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xSZXR1cm4uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFJldHVybi5oCmluZGV4IGM1YmZjOWU0Mjg2Li41ZDMxOGNkMjMyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJu
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0
dXJuLmgKQEAgLTU0LDggKzU0LDEyIEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb24qIHZhbHVl
KCkgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQogCisgICAgRnVuY3Rpb25EZWZpbml0aW9uKiBm
dW5jdGlvbigpIHsgcmV0dXJuIG1fZnVuY3Rpb247IH0KKyAgICB2b2lkIHNldEZ1bmN0aW9uKEZ1
bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25EZWZpbml0aW9uKSB7IG1fZnVuY3Rpb24gPSBmdW5j
dGlvbkRlZmluaXRpb247IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVz
c2lvbj4gbV92YWx1ZTsgLy8gbnVsbGFibGUKKyAgICBGdW5jdGlvbkRlZmluaXRpb24qIG1fZnVu
Y3Rpb247CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMU2VtYW50aWMuaAppbmRleCBiMDUyYjkyZWEyNi4uYjJjMDkwYmYx
YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFNlbWFudGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMU2VtYW50aWMuaApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV0hMU0wgewog
CiBuYW1lc3BhY2UgQVNUIHsKIAotdHlwZWRlZiBWYXJpYW50PEJ1aWx0SW5TZW1hbnRpYywgUmVz
b3VyY2VTZW1hbnRpYywgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLCBTdGFnZUluT3V0
U2VtYW50aWM+IFNlbWFudGljOwordXNpbmcgU2VtYW50aWMgPSBWYXJpYW50PEJ1aWx0SW5TZW1h
bnRpYywgUmVzb3VyY2VTZW1hbnRpYywgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLCBT
dGFnZUluT3V0U2VtYW50aWM+OwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRp
Yy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVj
aWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5mMjRiYWVjYzA0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRT
ZW1hbnRpYy5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWMuaCIKKworI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorI2lu
Y2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFj
ZSBBU1QgeworCitib29sIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYzo6aXNBY2NlcHRh
YmxlVHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgSW50cmlu
c2ljcyYpIGNvbnN0Cit7CisgICAgaWYgKCFpczxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNh
c3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpOworICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNl
LnJlc29sdmVkVHlwZSgpKTsKKyAgICBpZiAoIWlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5
cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVz
b2x2ZWRUeXBlKCkpLmlzTnVtYmVyKCk7Cit9CisKK2Jvb2wgU3BlY2lhbGl6YXRpb25Db25zdGFu
dFNlbWFudGljOjppc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKFNoYWRlckl0ZW1E
aXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSBjb25zdAorewor
ICAgIHJldHVybiBkaXJlY3Rpb24gPT0gU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ7Cit9CisK
K30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMuaAppbmRleCA5YTdjNTNmZDRiNi4uOWE4NGFiOWNmYmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNw
ZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5o
CkBAIC00OCw2ICs0OCwxOSBAQCBwdWJsaWM6CiAgICAgU3BlY2lhbGl6YXRpb25Db25zdGFudFNl
bWFudGljKGNvbnN0IFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpID0gZGVsZXRlOwog
ICAgIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyhTcGVjaWFsaXphdGlvbkNvbnN0YW50
U2VtYW50aWMmJikgPSBkZWZhdWx0OwogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNwZWNp
YWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3BlY2lhbGl6YXRpb25D
b25zdGFudFNlbWFudGljJikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBib29sIGlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYs
IGNvbnN0IEludHJpbnNpY3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQWNjZXB0YWJs
ZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29uc3QgRnVuY3Rp
b25EZWZpbml0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisKIHByaXZhdGU6CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUlu
T3V0U2VtYW50aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uMjAzYzQ2MDg4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuY3BwCkBA
IC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3RhZ2VJbk91dFNlbWFudGljLmgiCisKKyNp
bmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZp
bml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRl
ICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKyNpbmNs
dWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworYm9vbCBTdGFnZUluT3V0U2VtYW50
aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUs
IGNvbnN0IEludHJpbnNpY3MmKSBjb25zdAoreworICAgIGlmIChpczxBcnJheVR5cGU+KHVubmFt
ZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFpczxUeXBlUmVmZXJlbmNl
Pih1bm5hbWVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiB0eXBlUmVm
ZXJlbmNlID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpOworICAgIEFTU0VS
VCh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvJiByZXNvbHZlZFR5cGUg
PSAqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKTsKKyAgICBpZiAoaXM8RW51bWVyYXRpb25E
ZWZpbml0aW9uPihyZXNvbHZlZFR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
IWlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocmVzb2x2ZWRUeXBlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgIHJl
dHVybiBuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNOdW1iZXIoKQorICAgICAgICB8fCBuYXRpdmVU
eXBlRGVjbGFyYXRpb24uaXNWZWN0b3IoKQorICAgICAgICB8fCBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uaXNNYXRyaXgoKTsKK30KKworYm9vbCBTdGFnZUluT3V0U2VtYW50aWM6OmlzQWNjZXB0YWJs
ZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiBkaXJlY3Rpb24sIGNv
bnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKSBjb25zdAoreworICAg
IHN3aXRjaCAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CisgICAgY2Fz
ZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6VmVydGV4OgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEZ1bmN0aW9uRGVjbGFyYXRpb246OkVudHJ5UG9pbnRUeXBl
OjpGcmFnbWVudDoKKyAgICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBTaGFkZXJJdGVtRGlyZWN0
aW9uOjpJbnB1dDsKKyAgICBjYXNlIEZ1bmN0aW9uRGVjbGFyYXRpb246OkVudHJ5UG9pbnRUeXBl
OjpDb21wdXRlOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit9CisKK30KKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmgKaW5kZXggYTM5OTI3
ODFlM2EuLjI5OWI5MWJkOTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaApA
QCAtNTEsNiArNTEsMTkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4OyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RhZ2VJbk91
dFNlbWFudGljJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luZGV4ID09
IG90aGVyLm1faW5kZXg7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFN0YWdl
SW5PdXRTZW1hbnRpYyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBpc0FjY2VwdGFibGVUeXBlKGNvbnN0IEFT
VDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNzJikgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Ym9vbCBpc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKFNoYWRlckl0ZW1EaXJlY3Rp
b24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpIGNvbnN0IG92ZXJyaWRlOworCiBwcml2YXRl
OgogICAgIHVuc2lnbmVkIG1faW5kZXg7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1lbnQuaAppbmRleCA0MzRkMjFh
MDQzMi4uZmVkZDA2OGY4YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5oCkBAIC02Nyw3ICs2Nyw3IEBAIHBy
aXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogfTsKIAotdHlwZWRlZiBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFN0YXRlbWVudD4+IFN0YXRlbWVudHM7Cit1c2luZyBTdGF0ZW1lbnRz
ID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGF0ZW1lbnQ+PjsKIAogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVE
ZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKaW5kZXggODdjYzYyZjIzNTYuLmE4Yzk4ZTk5YjRjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xT
dHJ1Y3R1cmVEZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCkBAIC0yOSw3ICsyOSw3IEBACiAK
ICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50
LmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIK
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTM5LDExICszOSwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNU
IHsKIAotY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlvbiA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFN0
cnVjdHVyZURlZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsKIHB1YmxpYzoKICAgICBTdHJ1
Y3R1cmVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgU3Ry
dWN0dXJlRWxlbWVudHMmJiBzdHJ1Y3R1cmVFbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihX
VEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgICAg
IDogTmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBt
X3N0cnVjdHVyZUVsZW1lbnRzKFdURk1vdmUoc3RydWN0dXJlRWxlbWVudHMpKQogICAgIHsKICAg
ICB9CkBAIC01MywxNyArNTIsMTEgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZURlZmluaXRpb24o
Y29uc3QgU3RydWN0dXJlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFN0cnVjdHVyZURlZmlu
aXRpb24oU3RydWN0dXJlRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBTdHJ1Y3R1cmVF
bGVtZW50cyYgc3RydWN0dXJlRWxlbWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRz
OyB9CisgICAgYm9vbCBpc1N0cnVjdHVyZURlZmluaXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCBv
dmVycmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KKyAgICBTdHJ1Y3R1cmVFbGVtZW50cyYgc3RydWN0dXJlRWxl
bWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9CiAKIHByaXZhdGU6Ci0gICAg
TGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX25hbWU7CiAgICAgU3RydWN0dXJl
RWxlbWVudHMgbV9zdHJ1Y3R1cmVFbGVtZW50czsKIH07CiAKQEAgLTczLDQgKzY2LDYgQEAgcHJp
dmF0ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoU3Ry
dWN0dXJlRGVmaW5pdGlvbiwgaXNTdHJ1Y3R1cmVEZWZpbml0aW9uKCkpCisKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3Ry
dWN0dXJlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMU3RydWN0dXJlRWxlbWVudC5oCmluZGV4IDE0YmU0MWM3Mjk4Li42YTY0YjA5YzA0MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
U3RydWN0dXJlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3Bh
Y2UgQVNUIHsKIAogY2xhc3MgU3RydWN0dXJlRWxlbWVudCA6IHB1YmxpYyBOb2RlIHsKIHB1Ymxp
YzoKLSAgICBTdHJ1Y3R1cmVFbGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVy
cyYmIHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5h
bWUsIE9wdGlvbmFsPFNlbWFudGljPiBzZW1hbnRpYykKKyAgICBTdHJ1Y3R1cmVFbGVtZW50KExl
eGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVl
X3B0cjxVbm5hbWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRp
Yz4gc2VtYW50aWMpCiAgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAg
ICAsIG1fcXVhbGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShX
VEZNb3ZlKHR5cGUpKQpAQCAtNTUsMTggKzU1LDIwIEBAIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVF
bGVtZW50KGNvbnN0IFN0cnVjdHVyZUVsZW1lbnQmKSA9IGRlbGV0ZTsKICAgICBTdHJ1Y3R1cmVF
bGVtZW50KFN0cnVjdHVyZUVsZW1lbnQmJikgPSBkZWZhdWx0OwogCi0gICAgVHlwZSYgdHlwZSgp
IHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVy
biAqbV90eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9
CiAgICAgT3B0aW9uYWw8U2VtYW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7
IH0KIAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgUXVhbGlmaWVy
cyBtX3F1YWxpZmllcnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IG1fdHlwZTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAgICBTdHJpbmcgbV9uYW1lOwog
ICAgIE9wdGlvbmFsPFNlbWFudGljPiBtX3NlbWFudGljOwogfTsKIAotdHlwZWRlZiBWZWN0b3I8
U3RydWN0dXJlRWxlbWVudD4gU3RydWN0dXJlRWxlbWVudHM7Cit1c2luZyBTdHJ1Y3R1cmVFbGVt
ZW50cyA9IFZlY3RvcjxTdHJ1Y3R1cmVFbGVtZW50PjsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgKaW5kZXggY2Y0Y2Jj
ODg3OTAuLjI4NDFkOTUwOGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZS5oCkBAIC00MiwxNSArNDIsMTUgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB+VHlwZSgpID0gZGVmYXVsdDsKIAotICAgIFR5cGUoY29uc3QgVHlwZSYp
ID0gZGVsZXRlOworICAgIGV4cGxpY2l0IFR5cGUoY29uc3QgVHlwZSYpID0gZGVsZXRlOwogICAg
IFR5cGUoVHlwZSYmKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNUeXBlUmVmZXJl
bmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludGVy
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzQXJyYXlS
ZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
aXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIFR5cGUmIG9wZXJhdG9y
PShjb25zdCBUeXBlJikgPSBkZWxldGU7CisgICAgVHlwZSYgb3BlcmF0b3I9KFR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzTmFtZWRUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNVbm5hbWVkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVzb2x2YWJsZVR5cGUoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogCiBwcml2YXRlOgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCmluZGV4
IDdlNTgwMWUzYjU2Li45ODA4NjY0ZDFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCkBA
IC0yMywxNCArMjMsMTQgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi0jcHJhZ21hIG9uY2UKLQogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1l
bnQuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgIldITFNMQ29uc3Rh
bnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVk
ZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OSw3ICs0OSw3
IEBAIFR5cGVBcmd1bWVudHMgY2xvbmUoY29uc3QgVHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50
cykKIFR5cGVBcmd1bWVudCBjbG9uZShjb25zdCBUeXBlQXJndW1lbnQmIHR5cGVBcmd1bWVudCkK
IHsKICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKGNvbnN0IENvbnN0
YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKSAtPiBUeXBlQXJndW1lbnQgewotICAg
ICAgICByZXR1cm4gY29uc3RhbnRFeHByZXNzaW9uOworICAgICAgICByZXR1cm4gY29uc3RhbnRF
eHByZXNzaW9uLmNsb25lKCk7CiAgICAgfSwgW10oY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFR5cGVS
ZWZlcmVuY2U+JiB0eXBlUmVmZXJlbmNlKSAtPiBUeXBlQXJndW1lbnQgewogICAgICAgICByZXR1
cm4gdHlwZVJlZmVyZW5jZS0+Y2xvbmVUeXBlUmVmZXJlbmNlKCk7CiAgICAgfSksIHR5cGVBcmd1
bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xUeXBlQXJndW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5oCmluZGV4IGUzODVkNTBkNWVmLi4zYjAzN2JhMzUx
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVHlwZUFyZ3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmgKQEAgLTQwLDggKzQwLDggQEAgbmFtZXNwYWNlIEFT
VCB7CiAKIGNsYXNzIFR5cGVSZWZlcmVuY2U7CiAKLXR5cGVkZWYgVmFyaWFudDxDb25zdGFudEV4
cHJlc3Npb24sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUmVmZXJlbmNlPj4gVHlwZUFyZ3VtZW50Owot
dHlwZWRlZiBWZWN0b3I8VHlwZUFyZ3VtZW50PiBUeXBlQXJndW1lbnRzOwordXNpbmcgVHlwZUFy
Z3VtZW50ID0gVmFyaWFudDxDb25zdGFudEV4cHJlc3Npb24sIHN0ZDo6dW5pcXVlX3B0cjxUeXBl
UmVmZXJlbmNlPj47Cit1c2luZyBUeXBlQXJndW1lbnRzID0gVmVjdG9yPFR5cGVBcmd1bWVudD47
CiAKIFR5cGVBcmd1bWVudCBjbG9uZShjb25zdCBUeXBlQXJndW1lbnQmKTsKIFR5cGVBcmd1bWVu
dHMgY2xvbmUoY29uc3QgVHlwZUFyZ3VtZW50cyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9uLmgK
aW5kZXggZjczNjI5ZTI5YjEuLmVkMWM0NzVhODI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0aW9u
LmgKQEAgLTI5LDcgKzI5LDggQEAKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRl
ICJXSExTTE5vZGUuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5h
bWVkVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTEgKzM5LDEw
IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBUeXBlRGVm
aW5pdGlvbiA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFR5cGVEZWZpbml0aW9uIDogcHVibGljIE5h
bWVkVHlwZSB7CiBwdWJsaWM6Ci0gICAgVHlwZURlZmluaXRpb24oTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBTdHJpbmcmJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5cGUpCi0g
ICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShXVEZN
b3ZlKG5hbWUpKQorICAgIFR5cGVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3Ry
aW5nJiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlwZSkKKyAg
ICAgICAgOiBOYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKG5hbWUpKQogICAgICAg
ICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQogICAgIHsKICAgICB9CkBAIC01MiwxOCArNTIsMjQg
QEAgcHVibGljOgogICAgIFR5cGVEZWZpbml0aW9uKGNvbnN0IFR5cGVEZWZpbml0aW9uJikgPSBk
ZWxldGU7CiAgICAgVHlwZURlZmluaXRpb24oVHlwZURlZmluaXRpb24mJikgPSBkZWZhdWx0Owog
Ci0gICAgQVNUOjpUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIGJvb2wgaXNU
eXBlRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgQVNUOjpVbm5h
bWVkVHlwZSogdHlwZSgpIHsgcmV0dXJuIG1fdHlwZS5nZXQoKTsgfQorCisgICAgY29uc3QgVHlw
ZSYgdW5pZnlOb2RlKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgQVNTRVJUKG1fdHlw
ZSk7CisgICAgICAgIHJldHVybiBtX3R5cGUtPnVuaWZ5Tm9kZSgpOworICAgIH0KKworICAgIFR5
cGUmIHVuaWZ5Tm9kZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV90eXBlKTsK
KyAgICAgICAgcmV0dXJuIG1fdHlwZS0+dW5pZnlOb2RlKCk7CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpV
bm5hbWVkVHlwZT4gbV90eXBlOwogfTsKIAogfQpAQCAtNzIsNCArNzgsNiBAQCBwcml2YXRlOgog
CiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShUeXBlRGVmaW5p
dGlvbiwgaXNUeXBlRGVmaW5pdGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5j
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU2ODliNGE3N2Y5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZVJlZmVyZW5jZS5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlUmVmZXJlbmNlLmgiCisKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVz
cGFjZSBBU1QgeworCitzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gVHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBlKQor
eworICAgIFR5cGVBcmd1bWVudHMgdHlwZUFyZ3VtZW50czsKKyAgICBpZiAoaXM8TmF0aXZlVHlw
ZURlY2xhcmF0aW9uPihyZXNvbHZlZFR5cGUpKQorICAgICAgICB0eXBlQXJndW1lbnRzID0gQVNU
OjpjbG9uZShkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHJlc29sdmVkVHlwZSkudHlw
ZUFyZ3VtZW50cygpKTsKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8VHlwZVJl
ZmVyZW5jZT4oV1RGTW92ZShvcmlnaW4pLCBTdHJpbmcocmVzb2x2ZWRUeXBlLm5hbWUoKSksIFdU
Rk1vdmUodHlwZUFyZ3VtZW50cykpOworICAgIHJlc3VsdC0+c2V0UmVzb2x2ZWRUeXBlKHJlc29s
dmVkVHlwZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfQorCit9CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xUeXBlUmVmZXJlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKaW5kZXggNDk0NDFkOGI1YzcuLjAyODQyZjZmOWQ3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xU
eXBlUmVmZXJlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCkBAIC0yOCw4ICsyOCw4IEBACiAjaWYgRU5BQkxFKFdF
QkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIK
ICNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5
cGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtMzgsMTAgKzM4LDEyIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBB
U1QgewogCi1jbGFzcyBUeXBlUmVmZXJlbmNlIDogcHVibGljIFR5cGUgeworY2xhc3MgTmFtZWRU
eXBlOworCitjbGFzcyBUeXBlUmVmZXJlbmNlIDogcHVibGljIFVubmFtZWRUeXBlIHsKIHB1Ymxp
YzoKICAgICBUeXBlUmVmZXJlbmNlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFt
ZSwgVHlwZUFyZ3VtZW50cyYmIHR5cGVBcmd1bWVudHMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RG
TW92ZShvcmlnaW4pKQorICAgICAgICA6IFVubmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSkKICAg
ICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGVBcmd1bWVudHMo
V1RGTW92ZSh0eXBlQXJndW1lbnRzKSkKICAgICB7CkBAIC01MiwyNCArNTQsNDUgQEAgcHVibGlj
OgogICAgIFR5cGVSZWZlcmVuY2UoY29uc3QgVHlwZVJlZmVyZW5jZSYpID0gZGVsZXRlOwogICAg
IFR5cGVSZWZlcmVuY2UoVHlwZVJlZmVyZW5jZSYmKSA9IGRlZmF1bHQ7CiAKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPFR5cGVSZWZlcmVuY2U+IHdyYXAoTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
LCBOYW1lZFR5cGUmIHJlc29sdmVkVHlwZSk7CisKICAgICBib29sIGlzVHlwZVJlZmVyZW5jZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIFN0cmluZyYgbmFtZSgpIHsg
cmV0dXJuIG1fbmFtZTsgfQogICAgIFR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMoKSB7IHJl
dHVybiBtX3R5cGVBcmd1bWVudHM7IH0KKyAgICBOYW1lZFR5cGUqIHJlc29sdmVkVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRUeXBlOyB9CisKKyAgICBjb25zdCBUeXBlJiB1bmlmeU5v
ZGUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmVzb2x2ZWRUeXBl
KTsKKyAgICAgICAgcmV0dXJuIG1fcmVzb2x2ZWRUeXBlLT51bmlmeU5vZGUoKTsKKyAgICB9CisK
KyAgICBUeXBlJiB1bmlmeU5vZGUoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
cmVzb2x2ZWRUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1fcmVzb2x2ZWRUeXBlLT51bmlmeU5vZGUo
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRSZXNvbHZlZFR5cGUoTmFtZWRUeXBlJiByZXNv
bHZlZFR5cGUpCisgICAgeworICAgICAgICBtX3Jlc29sdmVkVHlwZSA9ICZyZXNvbHZlZFR5cGU7
CisgICAgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVSZWZlcmVuY2U+IGNsb25lVHlwZVJl
ZmVyZW5jZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxU
eXBlUmVmZXJlbmNlPihMZXhlcjo6VG9rZW4obV9vcmlnaW4pLCBTdHJpbmcobV9uYW1lKSwgQVNU
OjpjbG9uZShtX3R5cGVBcmd1bWVudHMpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8VHlwZVJlZmVyZW5jZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgU3RyaW5nKG1fbmFtZSks
IEFTVDo6Y2xvbmUobV90eXBlQXJndW1lbnRzKSk7CiAgICAgfQogCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5u
YW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVybiBj
bG9uZVR5cGVSZWZlcmVuY2UoKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2Vu
IG1fb3JpZ2luOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgVHlwZUFyZ3VtZW50cyBtX3R5cGVB
cmd1bWVudHM7CisgICAgTmFtZWRUeXBlKiBtX3Jlc29sdmVkVHlwZSB7IG51bGxwdHIgfTsKIH07
CiAKIH0KQEAgLTc4LDYgKzEwMSw2IEBAIHByaXZhdGU6CiAKIH0KIAotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19XSExTTF9UWVBFKFR5cGVSZWZlcmVuY2UsIGlzVHlwZVJlZmVyZW5jZSgpKQorU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoVHlwZVJlZmVyZW5jZSwgaXNU
eXBlUmVmZXJlbmNlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5ZTMyOWYxMjM1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5
cGUuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNM
Tm9kZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25h
bWVzcGFjZSBBU1QgeworCitjbGFzcyBVbm5hbWVkVHlwZSA6IHB1YmxpYyBUeXBlIHsKK3B1Ymxp
YzoKKyAgICBVbm5hbWVkVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4pCisgICAgICAgIDogbV9v
cmlnaW4oV1RGTW92ZShvcmlnaW4pKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Vbm5h
bWVkVHlwZSgpID0gZGVmYXVsdDsKKworICAgIFVubmFtZWRUeXBlKGNvbnN0IFVubmFtZWRUeXBl
JikgPSBkZWxldGU7CisgICAgVW5uYW1lZFR5cGUoVW5uYW1lZFR5cGUmJikgPSBkZWZhdWx0Owor
CisgICAgYm9vbCBpc1VubmFtZWRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1R5cGVSZWZlcmVuY2UoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1BvaW50ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGUoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5VHlwZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVmZXJlbmNlVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNv
bnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgdmlydHVhbCBUeXBlJiB1bmlmeU5vZGUoKSB7IHJl
dHVybiAqdGhpczsgfQorCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+
IGNsb25lKCkgY29uc3QgPSAwOworCisgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBj
b25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorCitwcml2YXRlOgorICAgIExleGVyOjpUb2tlbiBt
X29yaWdpbjsKK307CisKK30KKworfQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19XSExTTF9VTk5BTUVEX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5
cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpB
U1Q6OlVubmFtZWRUeXBlJiB0eXBlKSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xf
VFlQRShVbm5hbWVkVHlwZSwgaXNVbm5hbWVkVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50
ZWdlckxpdGVyYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmIxY2E5NjJmNzc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bC5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJMaXRl
cmFsLmgiCisKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitpbnQ2NF90IFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWw6OnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV90
eXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8
VHlwZVJlZmVyZW5jZT4oKm1fdHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgQVNTRVJUKHR5cGVS
ZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
biA9IGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2
ZWRUeXBlKCkpOworICAgIHJldHVybiBuYXRpdmVUeXBlRGVjbGFyYXRpb24uZm9ybWF0VmFsdWVG
cm9tVW5zaWduZWRJbnRlZ2VyKCkobV92YWx1ZSk7Cit9CisKK30KKworfQorCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oCmluZGV4IDU4ZDZlMjMw
NzVlLi4xYTZjMWUzZTg4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVy
YWwuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAj
aW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbFR5cGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSwyMSArNDAsMzcgQEAg
bmFtZXNwYWNlIEFTVCB7CiBjbGFzcyBVbnNpZ25lZEludGVnZXJMaXRlcmFsIDogcHVibGljIEV4
cHJlc3Npb24gewogcHVibGljOgogICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luLCB1bnNpZ25lZCB2YWx1ZSkKLSAgICAgICAgOiBFeHByZXNzaW9uKFdURk1v
dmUob3JpZ2luKSkKKyAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQor
ICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKG9yaWdpbiksIHZhbHVlKQogICAgICAgICAsIG1fdmFs
dWUodmFsdWUpCiAgICAgewogICAgIH0KIAogICAgIHZpcnR1YWwgflVuc2lnbmVkSW50ZWdlckxp
dGVyYWwoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBVbnNpZ25lZEludGVnZXJMaXRlcmFs
KGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKSA9IGRlZmF1bHQ7CisgICAgVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbChjb25zdCBVbnNpZ25lZEludGVnZXJMaXRlcmFsJikgPSBkZWxldGU7CiAg
ICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbChVbnNpZ25lZEludGVnZXJMaXRlcmFsJiYpID0gZGVm
YXVsdDsKIAorICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIG9wZXJhdG9yPShjb25zdCBVbnNp
Z25lZEludGVnZXJMaXRlcmFsJikgPSBkZWxldGU7CisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCYgb3BlcmF0b3I9KFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmJikgPSBkZWZhdWx0OworCisgICAg
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KICAg
ICB1bnNpZ25lZCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAogICAgIGJvb2wg
aXNVbnNpZ25lZEludGVnZXJMaXRlcmFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQogCisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCBjbG9uZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsIHJlc3VsdChMZXhlcjo6VG9rZW4ob3JpZ2luKCkp
LCBtX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5tX3R5cGUucmVzb2x2ZWRUeXBlKCkpCisg
ICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVzdWx0Lm1fdHlwZS5yZXNvbHZlZFR5
cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgaW50
NjRfdCB2YWx1ZUZvclNlbGVjdGVkVHlwZSgpIGNvbnN0OworCiBwcml2YXRlOgorICAgIFVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlIG1fdHlwZTsKICAgICB1bnNpZ25lZCBtX3ZhbHVlOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45MzM2MzI0ZTg2ZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcApAQCAtMCwwICsxLDc3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgiCisKKyNpbmNsdWRlICJXSExTTElu
ZmVyVHlwZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CituYW1lc3BhY2UgQVNUIHsKKworVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OlVuc2lnbmVk
SW50ZWdlckxpdGVyYWxUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgdW5zaWduZWQgdmFsdWUp
CisgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICwgbV9wcmVmZXJyZWRUeXBlKHN0ZDo6bWFrZV91
bmlxdWU8VHlwZVJlZmVyZW5jZT4oV1RGTW92ZShvcmlnaW4pLCBTdHJpbmcoInVpbnQiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgVHlwZUFyZ3VtZW50cygpKSkKK3sKK30KKworVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6On5VbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSgpID0g
ZGVmYXVsdDsKKworYm9vbCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShj
b25zdCBUeXBlJiB0eXBlKSBjb25zdAoreworICAgIGlmICghaXM8TmFtZWRUeXBlPih0eXBlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PE5h
bWVkVHlwZT4odHlwZSk7CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVk
VHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24gPSBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAg
aWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNJbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzU2lnbmVkKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5jYW5SZXByZXNlbnRV
bnNpZ25lZEludGVnZXIoKShtX3ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJl
dHVybiB0cnVlOworfQorCit1bnNpZ25lZCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZTo6Y29u
dmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSBjb25zdAoreworICAg
IGlmIChtYXRjaGVzKHVubmFtZWRUeXBlLCAqbV9wcmVmZXJyZWRUeXBlKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgcmV0dXJuIDE7Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ5NTU0NmNhZGE5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGUuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlw
ZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBUeXBl
UmVmZXJlbmNlOworCitjbGFzcyBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSA6IHB1YmxpYyBS
ZXNvbHZhYmxlVHlwZSB7CitwdWJsaWM6CisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUo
TGV4ZXI6OlRva2VuJiYgb3JpZ2luLCB1bnNpZ25lZCB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIH5V
bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSgpOworCisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bFR5cGUoY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBV
bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZShVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYmKSA9
IGRlZmF1bHQ7CisKKyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KGNv
bnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJikgPSBkZWxldGU7CisgICAgVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbFR5cGUmIG9wZXJhdG9yPShVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYm
KSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBUeXBlUmVmZXJlbmNlJiBwcmVm
ZXJyZWRUeXBlKCkgeyByZXR1cm4gKm1fcHJlZmVycmVkVHlwZTsgfQorCisgICAgYm9vbCBjYW5S
ZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICB1bnNpZ25lZCBjb252ZXJz
aW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIHVuc2lnbmVkIG1fdmFsdWU7CisgICAgLy8gVGhpcyBpcyBhIHVuaXF1ZV9wdHIgdG8gcmVz
b2x2ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbgorICAgIC8vIENvbnN0YW50RXhwcmVz
c2lvbiAtPiBMaXRlcmFsVHlwZSAtPiBUeXBlUmVmZXJlbmNlIC0+IFR5cGVBcmd1bWVudHMgLT4g
Q29uc3RhbnRFeHByZXNzaW9uCisgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVSZWZlcmVuY2U+IG1f
cHJlZmVycmVkVHlwZTsKK307CisKK30KKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfUkVTT0xWQUJMRV9UWVBFKFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLCBpc1Vu
c2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFsdWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhbHVlLmgKaW5kZXggNmUwZWE5
MWZjMWQuLmFmMjljODExODg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFZhbHVlLmgKQEAgLTQ2LDYgKzQ2LDkgQEAgcHVibGljOgog
ICAgIGV4cGxpY2l0IFZhbHVlKGNvbnN0IFZhbHVlJikgPSBkZWZhdWx0OwogICAgIFZhbHVlKFZh
bHVlJiYpID0gZGVmYXVsdDsKIAorICAgIFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgVmFsdWUmKSA9
IGRlZmF1bHQ7CisgICAgVmFsdWUmIG9wZXJhdG9yPShWYWx1ZSYmKSA9IGRlZmF1bHQ7CisKIHBy
aXZhdGU6CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKaW5kZXggZmYw
MzY4MTkzYmQuLjdmNGEzNWI2MGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlv
bi5oCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBWYXJpYWJsZURl
Y2xhcmF0aW9uIDogcHVibGljIFZhbHVlIHsKIHB1YmxpYzoKLSAgICBWYXJpYWJsZURlY2xhcmF0
aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgT3B0aW9uYWw8U2Vt
YW50aWM+JiYgc2VtYW50aWMsIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIGluaXRpYWxp
emVyKQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBRdWFs
aWZpZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYg
dHlwZSwgU3RyaW5nJiYgbmFtZSwgT3B0aW9uYWw8U2VtYW50aWM+JiYgc2VtYW50aWMsIHN0ZDo6
dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIGluaXRpYWxpemVyKQogICAgICAgICA6IG1fb3JpZ2lu
KFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX3F1YWxpZmllcnMoV1RGTW92ZShxdWFsaWZp
ZXJzKSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkKQEAgLTU5LDIxICs1OSwyNCBA
QCBwdWJsaWM6CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbihjb25zdCBWYXJpYWJsZURlY2xhcmF0
aW9uJikgPSBkZWxldGU7CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0
aW9uJiYpID0gZGVmYXVsdDsKIAotICAgIExleGVyOjpUb2tlbiBvcmlnaW4oKSBjb25zdCB7IHJl
dHVybiBtX29yaWdpbjsgfQorICAgIGNvbnN0IExleGVyOjpUb2tlbiYgb3JpZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7
IH0KIAotICAgIFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CisgICAgVW5uYW1lZFR5
cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiAqbV90eXBlOyB9CiAgICAgT3B0aW9uYWw8U2VtYW50
aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KICAgICBFeHByZXNzaW9uKiBp
bml0aWFsaXplcigpIHsgcmV0dXJuIG1faW5pdGlhbGl6ZXIuZ2V0KCk7IH0KIAogcHJpdmF0ZToK
ICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgUXVhbGlmaWVycyBtX3F1YWxpZmllcnM7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gbV90eXBlOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiBtX3R5cGU7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBP
cHRpb25hbDxTZW1hbnRpYz4gbV9zZW1hbnRpYzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVz
c2lvbj4gbV9pbml0aWFsaXplcjsKIH07CiAKK3VzaW5nIFZhcmlhYmxlRGVjbGFyYXRpb25zID0g
VmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+OworCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJs
ZVJlZmVyZW5jZS5oCmluZGV4IDJhZTgyOGQ1Mjk1Li5lMzllY2Y1YzU5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZl
cmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xWYXJpYWJsZVJlZmVyZW5jZS5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xFeHBy
ZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMVmFyaWFi
bGVEZWNsYXJhdGlvbi5oIgpAQCAtNTUsMTkgKzU1LDIxIEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
VmFyaWFibGVSZWZlcmVuY2Ugd3JhcChWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xh
cmF0aW9uKQogICAgIHsKICAgICAgICAgVmFyaWFibGVSZWZlcmVuY2UgcmVzdWx0KExleGVyOjpU
b2tlbih2YXJpYWJsZURlY2xhcmF0aW9uLm9yaWdpbigpKSk7Ci0gICAgICAgIHJlc3VsdC5tX3Zh
cmlhYmxlID0geyAmdmFyaWFibGVEZWNsYXJhdGlvbiB9OworICAgICAgICByZXN1bHQubV92YXJp
YWJsZSA9ICZ2YXJpYWJsZURlY2xhcmF0aW9uOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAotICAgIHN0YXRpYyBWYXJpYWJsZVJlZmVyZW5jZSB3cmFwKEFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24mIGFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24pCisgICAgYm9vbCBpc1Zh
cmlhYmxlUmVmZXJlbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
U3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICBWYXJpYWJsZURlY2xhcmF0
aW9uKiB2YXJpYWJsZSgpIHsgcmV0dXJuIG1fdmFyaWFibGU7IH0KKworICAgIHZvaWQgc2V0VmFy
aWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKICAgICB7Ci0g
ICAgICAgIFZhcmlhYmxlUmVmZXJlbmNlIHJlc3VsdChMZXhlcjo6VG9rZW4oYW5vbnltb3VzVmFy
aWFibGVEZWNsYXJhdGlvbi5vcmlnaW4oKSkpOwotICAgICAgICByZXN1bHQubV92YXJpYWJsZSA9
IHsgJmFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24gfTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgbV92YXJpYWJsZSA9ICZ2YXJpYWJsZURlY2xhcmF0aW9uOwogICAgIH0KIAot
ICAgIGJvb2wgaXNWYXJpYWJsZVJlZmVyZW5jZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KLQogcHJpdmF0ZToKICAgICBWYXJpYWJsZVJlZmVyZW5jZShMZXhlcjo6VG9rZW4mJiBv
cmlnaW4pCiAgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCkBAIC03NSw3ICs3
Nyw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICBPcHRpb25h
bDxWYXJpYW50PFZhcmlhYmxlRGVjbGFyYXRpb24qLCBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0
aW9uKj4+IG1fdmFyaWFibGU7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiogbV92YXJpYWJsZTsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZkNWVmMzc1Njc1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxp
Y2F0ZUZ1bmN0aW9ucy5jcHAKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMQ2hlY2tE
dXBsaWNhdGVGdW5jdGlvbnMuaCIKKworI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBl
LmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEluZmVyVHlw
ZXMuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rpb25z
KGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPj4gZnVuY3Rpb25zOworICAgIGZvciAoYXV0
byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpCisg
ICAgICAgIGZ1bmN0aW9ucy5hcHBlbmQoKmZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgZm9yIChh
dXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9ucygpKQorICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKTsKKworICAgIHN0ZDo6c29ydChmdW5jdGlvbnMuYmVnaW4oKSwgZnVuY3Rpb25z
LmVuZCgpLCBbXShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGEsIGNvbnN0IEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbiYgYikgLT4gYm9vbCB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdGQ6Om1pbihhLm5hbWUoKS5sZW5ndGgoKSwgYi5uYW1lKCkubGVuZ3RoKCkp
OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChhLm5hbWUoKVtpXSA8IGIubmFtZSgpW2ldKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKGEubmFtZSgpW2ldID4g
Yi5uYW1lKClbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBhLm5hbWUoKS5sZW5ndGgoKSA8IGIubmFtZSgpLmxlbmd0aCgpOworICAg
IH0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25zLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGZ1bmN0aW9ucy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgIT0gZnVuY3Rp
b25zW2pdLmdldCgpLm5hbWUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmIChpczxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KGZ1bmN0aW9uc1tpXS5nZXQo
KSkgJiYgaXM8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihmdW5jdGlvbnNbal0uZ2V0
KCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGZ1bmN0aW9u
c1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IGZ1bmN0aW9uc1tqXS5nZXQoKS5wYXJh
bWV0ZXJzKCkuc2l6ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
aWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5pc0Nhc3QoKSkgeworICAgICAgICAgICAgICAgIGJvb2wg
c2FtZSA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9uc1tpXS5n
ZXQoKS50eXBlKCksIGZ1bmN0aW9uc1tqXS5nZXQoKS50eXBlKCkpKQorICAgICAgICAgICAgICAg
ICAgICBzYW1lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRl
cnMoKS5zaXplKCk7ICsraykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVz
KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgpLCBmdW5jdGlvbnNbal0u
Z2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzYW1lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNhbWUpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYm9v
bCBzYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGZ1
bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2spIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClba10u
dHlwZSgpLCBmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChzYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChmdW5jdGlv
bnNbaV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRvciZbXSIgJiYgZnVuY3Rpb25zW2ldLmdldCgp
LnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMgorICAgICAgICAgICAgJiYgaXM8QVNUOjpBcnJheVJl
ZmVyZW5jZVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkg
eworICAgICAgICAgICAgYXV0byYgdHlwZSA9IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJz
KClbMV0udHlwZSgpOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odHlw
ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcmVzb2x2ZWRUeXBlID0gZG93bmNhc3Q8
QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKS5yZXNvbHZlZFR5cGUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCpyZXNvbHZlZFR5cGUp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24g
PSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnJlc29sdmVkVHlwZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9
PSAidWludCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yLmxl
bmd0aCIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMQorICAg
ICAgICAgICAgJiYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihmdW5jdGlvbnNbaV0uZ2V0
KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkKKyAgICAgICAgICAgIHx8IGlzPEFTVDo6QXJyYXlU
eXBlPihmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBlbHNlIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCku
bmFtZSgpID09ICJvcGVyYXRvcj09IgorICAgICAgICAgICAgJiYgZnVuY3Rpb25zW2ldLmdldCgp
LnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMgorICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVu
Y2VUeXBlPihmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkKKyAgICAg
ICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFt
ZXRlcnMoKVsxXS50eXBlKCkpCisgICAgICAgICAgICAmJiBtYXRjaGVzKGZ1bmN0aW9uc1tpXS5n
ZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVy
cygpWzFdLnR5cGUoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRl
RnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdlY2Vl
NzgyYzVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJXSExTTFByb2dyYW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hM
U0wgeworCitib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0mKTsKKwor
fQorCit9CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uZWYwNmZlNTUwODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC0wLDAgKzEsMTE5MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV0hMU0xDaGVja2VyLmgiCisKKyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNl
VHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBc3Np
Z25tZW50RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIKKyNp
bmNsdWRlICJXSExTTENvbW1hRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRGVyZWZlcmVu
Y2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgorI2luY2x1ZGUg
IldITFNMRm9yTG9vcC5oIgorI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgi
CisjaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMSW5mZXJUeXBl
cy5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgi
CisjaW5jbHVkZSAiV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2ZU92ZXJsb2FkSW1w
bC5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2aW5nVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUmV0
dXJuLmgiCisjaW5jbHVkZSAiV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMVmlzaXRvci5oIgorI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3Mg
UE9EQ2hlY2tlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBQT0RDaGVja2VyKCkg
PSBkZWZhdWx0OworCisgICAgdmlydHVhbCB+UE9EQ2hlY2tlcigpID0gZGVmYXVsdDsKKworICAg
IHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KGVudW1lcmF0aW9u
RGVmaW5pdGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNOdW1iZXIoKQorICAgICAgICAgICAgJiYgIW5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5pc1ZlY3RvcigpCisgICAgICAgICAgICAmJiAhbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmlzTWF0cml4KCkpCisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZp
bml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoc3RydWN0dXJl
RGVmaW5pdGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9u
JiB0eXBlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0
KHR5cGVEZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBl
JiBhcnJheVR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdChhcnJh
eVR5cGUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBzZXRFcnJvcigpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQo
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJl
ZmVyZW5jZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJl
c29sdmVkVHlwZSgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlUmVmZXJlbmNl
LnJlc29sdmVkVHlwZSgpKTsKKyAgICB9Cit9OworCitzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uPiByZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKEFT
VDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uLCBBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZSYgZmlyc3RBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3sKKyAgICBi
b29sIGlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7Cisg
ICAgYXV0byByZXR1cm5UeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlBvaW50ZXJUeXBlPihM
ZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBmaXJzdEFyZ3VtZW50LmFkZHJl
c3NTcGFjZSgpLCBmaXJzdEFyZ3VtZW50LmVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMuYXBwZW5k
KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3Jp
Z2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZmlyc3RBcmd1bWVudC5jbG9uZSgpLCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBudWxscHRyKSk7CisgICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2Vu
KGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKSwgU3RyaW5n
KCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cikpOworICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxs
RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0
LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yJltdIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNP
cGVyYXRvciksIGlzUmVzdHJpY3RlZCk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVXaXRoT3BlcmF0b3JMZW5ndGgoQVNUOjpDYWxs
RXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24sIEFTVDo6VW5uYW1lZFR5cGUmIGZpcnN0QXJndW1l
bnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7CisgICAgYm9vbCBpc1Jlc3RyaWN0
ZWQgPSBmYWxzZTsKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGF1dG8gcmV0dXJu
VHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAgIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNU
OjpRdWFsaWZpZXJzKCksIGZpcnN0QXJndW1lbnQuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVs
bG9wdCwgbnVsbHB0cikpOworICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5v
cmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJl
dHVyblR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yLmxlbmd0aCIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3Ip
LCBpc1Jlc3RyaWN0ZWQpOworfQorCitzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uPiByZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3IoQVNUOjpDYWxsRXhw
cmVzc2lvbiYgY2FsbEV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUmIGZpcnN0QXJndW1lbnQsIFJl
c29sdmluZ1R5cGUmIHNlY29uZEFyZ3VtZW50LCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNz
KQoreworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisgICAgYm9vbCBpc09wZXJhdG9y
ID0gdHJ1ZTsKKyAgICBhdXRvIHJldHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAo
TGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy5ib29sVHlw
ZSgpKTsKKyAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICByZXR1cm4gdW5uYW1l
ZFR5cGUtPmNsb25lKCk7CisgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4m
KSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICByZXR1cm4g
V1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFt
ZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBl
PiB7CisgICAgICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7CisgICAgICAgIH0s
IFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JikgLT4gc3RkOjp1bmlxdWVfcHRyPEFT
VDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgICAgIC8vIFdlIGVuY291bnRlcmVkICJudWxsID09
IG51bGwiLgorICAgICAgICAgICAgLy8gVGhlIHR5cGUgaXNuJ3Qgb2JzZXJ2YWJsZSwgc28gd2Ug
Y2FuIHBpY2sgd2hhdGV2ZXIgd2Ugd2FudC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNh
biBwcm9iYWJseSBiZSBnZW5lcmFsaXplZCwgdXNpbmcgdGhlICJwcmVmZXJyZWQgdHlwZSIgaW5m
cmFzdHJ1Y3R1cmUgdXNlZCBieSBnZW5lcmljIGxpdGVyYWxzCisgICAgICAgICAgICByZXR1cm4g
QVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmln
aW4oKSksIGludHJpbnNpY3MuaW50VHlwZSgpKTsKKyAgICAgICAgfSksIHNlY29uZEFyZ3VtZW50
KTsKKyAgICB9KSwgZmlyc3RBcmd1bWVudCk7CisgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
cyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmll
cnMoKSwgYXJndW1lbnRUeXBlLT5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxs
cHRyKSk7CisgICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExl
eGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBX
VEZNb3ZlKGFyZ3VtZW50VHlwZSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpKTsK
KyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0
dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5n
KCJvcGVyYXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFy
YW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7Cit9CisK
K3N0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVC
eUluc3RhbnRpYXRpb24oQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24sIGNvbnN0
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgdHlwZXMsIGNv
bnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7CisgICAgaWYgKGNhbGxFeHByZXNzaW9uLm5h
bWUoKSA9PSAib3BlcmF0b3ImW10iICYmIHR5cGVzLnNpemUoKSA9PSAyKSB7CisgICAgICAgIGF1
dG8qIGZpcnN0QXJndW1lbnRBcnJheVJlZiA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
XShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZSogeworICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlPigqdW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNh
c3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KCp1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
PiYpIC0+IEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlKiB7CisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgfSksIHR5cGVzWzBdLmdldCgpKTsKKyAgICAgICAgYm9vbCBzZWNvbmRB
cmd1bWVudElzVWludCA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlx
dWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAgICAg
ICAgICByZXR1cm4gbWF0Y2hlcygqdW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWludFR5cGUoKSk7
CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY2FuUmVzb2x2ZShpbnRyaW5zaWNzLnVpbnRU
eXBlKCkpOworICAgICAgICB9KSwgdHlwZXNbMV0uZ2V0KCkpOworICAgICAgICBpZiAoZmlyc3RB
cmd1bWVudEFycmF5UmVmICYmIHNlY29uZEFyZ3VtZW50SXNVaW50KQorICAgICAgICAgICAgcmV0
dXJuIHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIoY2FsbEV4cHJlc3Npb24sICpmaXJz
dEFyZ3VtZW50QXJyYXlSZWYsIGludHJpbnNpY3MpOworICAgIH0gZWxzZSBpZiAoY2FsbEV4cHJl
c3Npb24ubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiICYmIHR5cGVzLnNpemUoKSA9PSAxKSB7
CisgICAgICAgIGF1dG8qIGZpcnN0QXJndW1lbnRSZWZlcmVuY2UgPSBXVEY6OnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoW10oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVk
VHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJy
YXlSZWZlcmVuY2VUeXBlPigqdW5uYW1lZFR5cGUpIHx8IGlzPEFTVDo6QXJyYXlUeXBlPigqdW5u
YW1lZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS5nZXQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9LCBbXShSZWY8UmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2U+JikgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIH0pLCB0eXBlc1swXS5nZXQoKSk7CisgICAgICAgIGlmIChmaXJz
dEFyZ3VtZW50UmVmZXJlbmNlKQorICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVXaXRoT3BlcmF0
b3JMZW5ndGgoY2FsbEV4cHJlc3Npb24sICpmaXJzdEFyZ3VtZW50UmVmZXJlbmNlLCBpbnRyaW5z
aWNzKTsKKyAgICB9IGVsc2UgaWYgKGNhbGxFeHByZXNzaW9uLm5hbWUoKSA9PSAib3BlcmF0b3I9
PSIgJiYgdHlwZXMuc2l6ZSgpID09IDIpIHsKKyAgICAgICAgYXV0byBpc0FjY2VwdGFibGUgPSBb
XShSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJl
dHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oc3RkOjp1bmlxdWVfcHRyPEFTVDo6
VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oKnVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgIH0s
IFtdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNl
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXM8QVNUOjpOdWxsTGl0ZXJhbFR5
cGU+KHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAg
ICAgIH0pLCByZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKGlzQWNjZXB0
YWJsZSh0eXBlc1swXS5nZXQoKSkgJiYgaXNBY2NlcHRhYmxlKHR5cGVzWzFdLmdldCgpKSkKKyAg
ICAgICAgICAgIHJldHVybiByZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3IoY2FsbEV4cHJl
c3Npb24sIHR5cGVzWzBdLmdldCgpLCB0eXBlc1sxXS5nZXQoKSwgaW50cmluc2ljcyk7CisgICAg
fQorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK2NsYXNzIENoZWNrZXIgOiBwdWJsaWMg
VmlzaXRvciB7CitwdWJsaWM6CisgICAgQ2hlY2tlcihjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5z
aWNzLCBQcm9ncmFtJiBwcm9ncmFtKQorICAgICAgICA6IG1faW50cmluc2ljcyhpbnRyaW5zaWNz
KQorICAgICAgICAsIG1fcHJvZ3JhbShwcm9ncmFtKQorICAgIHsKKyAgICB9CisKKyAgICB+Q2hl
Y2tlcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgdHlwZURlZmluaXRpb24gOiBwcm9ncmFt
LnR5cGVEZWZpbml0aW9ucygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp0eXBl
RGVmaW5pdGlvbik7CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHBy
b2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdCgqc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRp
b25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpCisgICAgICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAg
IGZvciAoYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVUeXBlRGVj
bGFyYXRpb25zKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKm5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbik7CisKKyAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBw
cm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdCgqZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKQor
ICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBjaGVja1NoYWRlclR5cGUoY29uc3QgQVNU
OjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CisgICAgICAg
IGNhc2UgQVNUOjpGdW5jdGlvbkRlZmluaXRpb246OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6Cisg
ICAgICAgICAgICByZXR1cm4gIW1fdmVydGV4RW50cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkpLmlzTmV3RW50cnk7CisgICAgICAgIGNhc2UgQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb246OkVudHJ5UG9pbnRUeXBlOjpGcmFnbWVudDoKKyAgICAgICAgICAgIHJldHVybiAhbV9m
cmFnbWVudEVudHJ5UG9pbnRzLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKS5pc05ld0Vu
dHJ5OworICAgICAgICBjYXNlIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uOjpFbnRyeVBvaW50VHlw
ZTo6Q29tcHV0ZToKKyAgICAgICAgICAgIHJldHVybiAhbV9jb21wdXRlRW50cnlQb2ludHMuYWRk
KGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpLmlzTmV3RW50cnk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBib29sIGNoZWNrU2VtYW50aWNzKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5j
dGlvbkRlZmluaXRpb24pCisgICAgeworICAgICAgICBhdXRvIGVudHJ5UG9pbnRJdGVtcyA9IGdh
dGhlckVudHJ5UG9pbnRJdGVtcyhtX2ludHJpbnNpY3MsIGZ1bmN0aW9uRGVmaW5pdGlvbik7Cisg
ICAgICAgIGlmICghZW50cnlQb2ludEl0ZW1zKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBhdXRvIGlucHV0SXRlbXMgPSBXVEZNb3ZlKGVudHJ5UG9pbnRJdGVtcy0+aW5wdXRz
KTsKKyAgICAgICAgYXV0byBvdXRwdXRJdGVtcyA9IFdURk1vdmUoZW50cnlQb2ludEl0ZW1zLT5v
dXRwdXRzKTsKKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGNoZWNrRHVwbGljYXRlU2Vt
YW50aWNzID0gWyZdKGNvbnN0IFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGl0ZW1zKSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGZhc3RlciB0aGFuIE8obl4y
KS4KKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGl0
ZW1zLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXNbaV0u
c2VtYW50aWMgPT0gaXRlbXNbal0uc2VtYW50aWMpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGlmICghY2hlY2tEdXBsaWNhdGVTZW1hbnRpY3MoaW5wdXRJdGVtcykpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFjaGVja0R1cGxpY2F0ZVNlbWFu
dGljcyhvdXRwdXRJdGVtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBjaGVja1NlbWFudGljVHlwZXMgPSBb
Jl0oY29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMpIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgICAgICAgICAgICAg
IGF1dG8gYWNjZXB0YWJsZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3Qg
QVNUOjpCYXNlU2VtYW50aWMmIHNlbWFudGljKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzZW1hbnRpYy5pc0FjY2VwdGFibGVUeXBlKGl0ZW0udW5uYW1lZFR5cGUs
IG1faW50cmluc2ljcyk7CisgICAgICAgICAgICAgICAgICAgIH0pLCBpdGVtLnNlbWFudGljKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFhY2NlcHRhYmxlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50
aWNUeXBlcyhpbnB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNUeXBlcyhvdXRwdXRJdGVtcykpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAg
YXV0byBjaGVja1NlbWFudGljRm9yU2hhZGVyVHlwZSA9IFsmXShjb25zdCBWZWN0b3I8RW50cnlQ
b2ludEl0ZW0+JiBpdGVtcywgQVNUOjpCYXNlU2VtYW50aWM6OlNoYWRlckl0ZW1EaXJlY3Rpb24g
ZGlyZWN0aW9uKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBp
dGVtcykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGFjY2VwdGFibGUgPSBXVEY6OnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEFTVDo6QmFzZVNlbWFudGljJiBzZW1hbnRpYykg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VtYW50aWMuaXNBY2Nl
cHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihkaXJlY3Rpb24sIGZ1bmN0aW9uRGVmaW5pdGlv
bik7CisgICAgICAgICAgICAgICAgICAgIH0pLCBpdGVtLnNlbWFudGljKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFhY2NlcHRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNGb3JTaGFkZXJU
eXBlKGlucHV0SXRlbXMsIEFTVDo6QmFzZVNlbWFudGljOjpTaGFkZXJJdGVtRGlyZWN0aW9uOjpJ
bnB1dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFj
aGVja1NlbWFudGljRm9yU2hhZGVyVHlwZShvdXRwdXRJdGVtcywgQVNUOjpCYXNlU2VtYW50aWM6
OlNoYWRlckl0ZW1EaXJlY3Rpb246Ok91dHB1dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBjaGVja1BPRERh
dGEgPSBbJl0oY29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMpIC0+IGJvb2wgewor
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgICAgICAg
ICAgICAgIFBPRENoZWNrZXIgcG9kQ2hlY2tlcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlz
PEFTVDo6UG9pbnRlclR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcG9kQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVy
VHlwZT4oaXRlbS51bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihpdGVtLnVubmFtZWRUeXBl
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0
KGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihpdGVtLnVubmFtZWRUeXBlKS5lbGVt
ZW50VHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVR5
cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tl
ci5jaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KGl0ZW0udW5uYW1l
ZFR5cGUpLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAocG9kQ2hlY2tlci5l
cnJvcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBpZiAoIWNoZWNrUE9ERGF0YShpbnB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWNoZWNrUE9ERGF0YShvdXRwdXRJdGVt
cykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29u
c3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7Cisg
ICAgICAgIGVudW0gY2xhc3MgQ2hlY2tLaW5kIHsKKyAgICAgICAgICAgIEluZGV4LAorICAgICAg
ICAgICAgRG90CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBjaGVja0dldHRlciA9IFsmXShD
aGVja0tpbmQga2luZCkgLT4gYm9vbCB7CisgICAgICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQ
YXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6OkluZGV4ID8gMiA6IDE7CisgICAgICAgICAg
ICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0
ZWRQYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGF1dG8mIHVuaWZ5Tm9kZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpLnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVu
aWZ5Tm9kZSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0
PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKGlzPEFT
VDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH07CisKKyAgICAgICAgYXV0byBjaGVja1NldHRlciA9IFsmXShDaGVja0tpbmQga2luZCkgLT4g
Ym9vbCB7CisgICAgICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9
PSBDaGVja0tpbmQ6OkluZGV4ID8gMyA6IDI7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZp
bml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8mIGZpcnN0QXJndW1l
bnRVbmlmeU5vZGUgPSBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKS51
bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdEFy
Z3VtZW50VW5pZnlOb2RlKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0g
ZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSk7CisgICAg
ICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKCFtYXRjaGVzKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCksIGZ1bmN0aW9uRGVmaW5pdGlv
bi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBhdXRvJiB2YWx1ZVR5cGUgPSBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpW251bUV4cGVjdGVkUGFyYW1ldGVycyAtIDFdLnR5cGUoKTsKKyAgICAgICAgICAgIGF1
dG8gZ2V0dGVyTmFtZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkuc3Vic3RyaW5nKDAsIGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgICAgIGF1dG8q
IGdldHRlckZ1bmNzID0gbV9wcm9ncmFtLm5hbWVDb250ZXh0KCkuZ2V0RnVuY3Rpb25zKGdldHRl
ck5hbWUpOworICAgICAgICAgICAgaWYgKCFnZXR0ZXJGdW5jcykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBWZWN0b3I8UmVzb2x2aW5nVHlwZT4gYXJndW1lbnRU
eXBlczsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmlu
Z1R5cGU+PiBhcmd1bWVudFR5cGVSZWZlcmVuY2VzOworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxOyArK2kpCisgICAgICAgICAgICAg
ICAgYXJndW1lbnRUeXBlcy5hcHBlbmQoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtp
XS50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50VHlwZSA6
IGFyZ3VtZW50VHlwZXMpCisgICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlUmVmZXJlbmNlcy5h
cHBlbmQoYXJndW1lbnRUeXBlKTsKKyAgICAgICAgICAgIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiBjYXN0UmV0dXJuVHlwZSA9IFdURjo6bnVsbG9wdDsK
KyAgICAgICAgICAgIGF1dG8qIG92ZXJsb2FkID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBs
KCpnZXR0ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVmZXJlbmNlcywgY2FzdFJldHVyblR5cGUpOwor
ICAgICAgICAgICAgaWYgKCFvdmVybG9hZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBhdXRvJiByZXN1bHRUeXBlID0gb3ZlcmxvYWQtPnR5cGUoKTsKKyAgICAg
ICAgICAgIGlmICghbWF0Y2hlcyhyZXN1bHRUeXBlLCB2YWx1ZVR5cGUpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Owor
CisgICAgICAgIGF1dG8gY2hlY2tBbmRlciA9IFsmXShDaGVja0tpbmQga2luZCkgLT4gYm9vbCB7
CisgICAgICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBDaGVj
a0tpbmQ6OkluZGV4ID8gMiA6IDE7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9u
LnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRv
JiB1bmlmeU5vZGUgPSBmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpLnVuaWZ5Tm9kZSgpOworICAg
ICAgICAgICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGF1dG8mIHVubmFt
ZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMF0udHlwZSgpLnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghaXM8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNU
OjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6
UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSAmJiAhaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+
KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fTsKKworICAgICAgICBpZiAoIWZ1bmN0aW9uRGVmaW5pdGlvbi5pc09wZXJhdG9yKCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5pc0Nh
c3QoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoZnVuY3Rpb25EZWZp
bml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IrKyIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLS0iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rp
b25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25EZWZpbml0aW9u
LnBhcmFtZXRlcnMoKVswXS50eXBlKCksIGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRv
cisiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRv
ci0iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5z
aXplKCkgIT0gMQorICAgICAgICAgICAgICAgICYmIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpICE9IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yKiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLyIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yJSIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yJiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yfCIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yXiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPDwiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmlu
aXRpb24ubmFtZSgpID09ICJvcHJlYXRvcj4+IikgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9u
RGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IDIpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yfiIpIHsKKyAgICAgICAg
ICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSAxKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRv
cj09IgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0
b3I8IgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0
b3I8PSIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yPiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yPj0iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSwgbV9pbnRyaW5zaWNzLmJv
b2xUeXBlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFt
ZSgpID09ICJvcGVyYXRvcltdIikgeworICAgICAgICAgICAgaWYgKCFjaGVja0dldHRlcihDaGVj
a0tpbmQ6OkluZGV4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9u
Lm5hbWUoKSA9PSAib3BlcmF0b3JbXT0iKSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrU2V0dGVy
KENoZWNrS2luZDo6SW5kZXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmlu
aXRpb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIpIHsKKyAgICAgICAgICAgIGlmICghY2hlY2tB
bmRlcihDaGVja0tpbmQ6OkluZGV4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25E
ZWZpbml0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvci4iKSkgeworICAgICAgICAgICAg
aWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkuZW5kc1dpdGgoIj0iKSkgeworICAgICAgICAg
ICAgICAgIGlmICghY2hlY2tTZXR0ZXIoQ2hlY2tLaW5kOjpEb3QpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGlmICghY2hlY2tHZXR0ZXIoQ2hlY2tLaW5kOjpEb3QpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5zdGFydHNXaXRo
KCJvcGVyYXRvciYuIikpIHsKKyAgICAgICAgICAgIGlmICghY2hlY2tBbmRlcihDaGVja0tpbmQ6
OkRvdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5
cGUoKSkgeworICAgICAgICAgICAgaWYgKCFjaGVja1NoYWRlclR5cGUoZnVuY3Rpb25EZWZpbml0
aW9uKSkgeworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFjaGVja1NlbWFudGljcyhmdW5j
dGlvbkRlZmluaXRpb24pKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFj
aGVja09wZXJhdG9yT3ZlcmxvYWQoZnVuY3Rpb25EZWZpbml0aW9uKSkgeworICAgICAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24pOworICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlbnVtZXJhdGlvbkRl
ZmluaXRpb24udHlwZSgpKTsKKworICAgICAgICBhdXRvJiBiYXNlVHlwZSA9IGVudW1lcmF0aW9u
RGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7CisKKyAgICAgICAgaWYgKCFpczxBU1Q6OlVu
bmFtZWRUeXBlPihiYXNlVHlwZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byYgdW5uYW1lZEJhc2UgPSBkb3du
Y2FzdDxBU1Q6OlVubmFtZWRUeXBlPihiYXNlVHlwZSk7CisgICAgICAgIGlmICghaXM8QVNUOjpU
eXBlUmVmZXJlbmNlPih1bm5hbWVkQmFzZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5j
ZUJhc2UgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRCYXNlKTsKKyAgICAg
ICAgQVNTRVJUKHR5cGVSZWZlcmVuY2VCYXNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgaWYg
KCFpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2VCYXNlLnJlc29s
dmVkVHlwZSgpKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3du
Y2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2VCYXNlLnJlc29s
dmVkVHlwZSgpKTsKKyAgICAgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNJbnQoKSkg
eworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGF1dG8gZW51bWVyYXRpb25NZW1iZXJzID0gZW51bWVyYXRpb25EZWZpbml0
aW9uLmVudW1lcmF0aW9uTWVtYmVycygpOworCisgICAgICAgIGZvciAoYXV0byYgbWVtYmVyIDog
ZW51bWVyYXRpb25NZW1iZXJzKSB7CisgICAgICAgICAgICBpZiAoIW1lbWJlci5nZXQoKS52YWx1
ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBib29sIHN1Y2Nl
c3M7CisgICAgICAgICAgICBtZW1iZXIuZ2V0KCkudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlz
aXRvcihbJl0oYXV0byYgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQodmFsdWUpOworICAgICAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3R5cGVNYXAuZmlu
ZCgmdmFsdWUpOworICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3R5cGVNYXAu
ZW5kKCkpOworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygqdW5uYW1lZFR5
cGUsIGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAgICAgICAgICAgfSwgWyZdKFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlJiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1p
dChlbnVtZXJhdGlvbkRlZmluaXRpb24sIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLnJlc29sdmFi
bGVUeXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9KSwgaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAg
ICAgICAgIH0pKTsKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaW50NjRfdCBuZXh0VmFsdWUgPSAwOworICAgICAgICBmb3IgKGF1
dG8mIG1lbWJlciA6IGVudW1lcmF0aW9uTWVtYmVycykgeworICAgICAgICAgICAgaWYgKG1lbWJl
ci5nZXQoKS52YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAgICAg
ICAgICAgICAgICBtZW1iZXIuZ2V0KCkudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZUZvclNlbGVjdGVkVHlwZSgpOworICAg
ICAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVk
SW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bnNpZ25lZElu
dGVnZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCk7CisgICAgICAgICAgICAgICAgfSwg
WyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAg
ICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikgeworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9KSk7CisgICAgICAg
ICAgICAgICAgbmV4dFZhbHVlID0gbmF0aXZlVHlwZURlY2xhcmF0aW9uLnN1Y2Nlc3NvcigpKHZh
bHVlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWVtYmVyLmdldCgp
LnNldFZhbHVlKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKEFTVDo6SW50ZWdlckxpdGVyYWwoTGV4
ZXI6OlRva2VuKG1lbWJlci5nZXQoKS5vcmlnaW4oKSksIG5leHRWYWx1ZSkpKTsKKyAgICAgICAg
ICAgICAgICBuZXh0VmFsdWUgPSBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc3VjY2Vzc29yKCkobmV4
dFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZW51bWVyYXRpb25NZW1iZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBhdXRvJiBtZW1iZXIgPSBlbnVtZXJhdGlvbk1lbWJlcnNbaV0uZ2V0KCk7CisgICAgICAgICAg
ICBBU1NFUlQobWVtYmVyLnZhbHVlKCkpOworICAgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAg
ICAgICAgICAgIG1lbWJlci52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6
OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIHZhbHVl
ID0gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAg
IH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSwgWyZdKEFT
VDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsg
aiA8IGVudW1lcmF0aW9uTWVtYmVycy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGF1
dG8mIG90aGVyTWVtYmVyID0gZW51bWVyYXRpb25NZW1iZXJzW2pdLmdldCgpOworICAgICAgICAg
ICAgICAgIEFTU0VSVChvdGhlck1lbWJlci52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBib29s
IGZhaWwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBvdGhlck1lbWJlci52YWx1ZSgpLT52aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJh
bCkgeworICAgICAgICAgICAgICAgICAgICBmYWlsID0gdmFsdWUgPT0gaW50ZWdlckxpdGVyYWwu
dmFsdWUoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgIGZhaWwg
PSB2YWx1ZSA9PSB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJh
bCYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikgeworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9KSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGZhaWwpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZm91bmRaZXJvID0gZmFsc2U7Cisg
ICAgICAgIGZvciAoYXV0byYgbWVtYmVyIDogZW51bWVyYXRpb25NZW1iZXJzKSB7CisgICAgICAg
ICAgICBBU1NFUlQobWVtYmVyLmdldCgpLnZhbHVlKCkpOworICAgICAgICAgICAgbWVtYmVyLmdl
dCgpLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVy
YWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgaWYgKGludGVnZXJMaXRlcmFs
LnZhbHVlKCkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgZm91bmRaZXJvID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50
ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAodW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bC52YWx1ZSgpID09IDApCisgICAgICAgICAgICAgICAgICAgIGZvdW5kWmVybyA9IHRydWU7Cisg
ICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJh
bCYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJikgeworICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFm
b3VuZFplcm8pIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYg
dHlwZVJlZmVyZW5jZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJl
bmNlLnJlc29sdmVkVHlwZSgpKTsKKworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZVJl
ZmVyZW5jZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24mIHZhcmlhYmxlRGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgICAgICBpZiAodmFy
aWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKSB7CisgICAgICAgICAgICBhdXRvJiBsaHNU
eXBlID0gdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCk7CisgICAgICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSk7CisgICAgICAgICAg
ICBhdXRvIGl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0
aWFsaXplcigpKTsKKyAgICAgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5k
KCkpOworICAgICAgICAgICAgYXV0byYgcmhzID0gaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAg
ICAgYXV0byBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhsaHNUeXBlLCAqdW5uYW1lZFR5cGUpOworICAgICAg
ICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBl
UmVmZXJlbmNlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Ym9vbD4obWF0Y2hBbmRDb21taXQobGhzVHlwZSwgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJl
c29sdmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgIH0pLCByaHMpOworICAgICAgICAgICAgaWYg
KCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNz
aW9uLmxlZnQoKSk7CisgICAgICAgIGF1dG8gbGVmdEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQo
JmFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgICAgIEFTU0VSVChsZWZ0SXRlcmF0
b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgbGhzVHlwZSA9IGxlZnRJdGVy
YXRvci0+dmFsdWU7CisgICAgICAgIC8vIEZJWE1FOiBIb3cgdG8gZG8gbHZhbHVlIGFuZCBhZGRy
ZXNzIHNwYWNlIGFuYWx5c2lzPworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVu
dEV4cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIGF1dG8gcmlnaHRJdGVyYXRvciA9IG1fdHlw
ZU1hcC5maW5kKCZhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICAgICAgQVNTRVJU
KHJpZ2h0SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgcmhzVHlw
ZSA9IHJpZ2h0SXRlcmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvIHJlc3VsdFR5cGUgPSBXVEY6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRU
eXBlPiYgbGVmdCkgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYgcmlnaHQpIC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVu
bmFtZWRUeXBlPiB7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMoKmxlZnQsICpyaWdodCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LT5jbG9uZSgpOworICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4g
eworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdCgqbGVmdCwgcmlnaHQtPnJl
c29sdmFibGVUeXBlKCkpOworICAgICAgICAgICAgfSksIHJoc1R5cGUpOworICAgICAgICB9LCBb
Jl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGVmdCkgLT4gc3RkOjp1bmlxdWVfcHRy
PEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYgcmlnaHQp
IC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1hdGNoQW5kQ29tbWl0KCpyaWdodCwgbGVmdC0+cmVzb2x2YWJsZVR5cGUoKSk7Cisg
ICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmlnaHQpIC0+
IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1hdGNoQW5kQ29tbWl0KGxlZnQtPnJlc29sdmFibGVUeXBlKCksIHJpZ2h0LT5yZXNvbHZh
YmxlVHlwZSgpKTsKKyAgICAgICAgICAgIH0pLCByaHNUeXBlKTsKKyAgICAgICAgfSksIGxoc1R5
cGUpOworICAgICAgICBpZiAoIXJlc3VsdFR5cGUpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX3R5cGVNYXAuYWRkKCZhc3NpZ25tZW50RXhwcmVzc2lvbiwgV1RGTW92ZShyZXN1bHRUeXBl
KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Cisg
ICAgICAgIGF1dG8gbFZhbHVlSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmcmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgICAgIEFTU0VSVChsVmFsdWVJdGVyYXRvciAh
PSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBsaHNUeXBlID0gbFZhbHVlSXRlcmF0
b3ItPnZhbHVlOworICAgICAgICAvLyBGSVhNRTogSG93IHRvIGRvIGx2YWx1ZSBhbmQgYWRkcmVz
cyBzcGFjZSBhbmFseXNpcz8KKyAgICAgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hhdCB0byBk
byB3aXRoIHRoZSBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJ3MgQW5vbnltb3VzVmFyaWFibGVz
LgorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5u
ZXdWYWx1ZUV4cHJlc3Npb24oKSk7CisgICAgICAgIGF1dG8gbmV3VmFsdWVJdGVyYXRvciA9IG1f
dHlwZU1hcC5maW5kKCZyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lv
bigpKTsKKyAgICAgICAgQVNTRVJUKG5ld1ZhbHVlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgp
KTsKKyAgICAgICAgYXV0byYgbmV3VmFsdWVUeXBlID0gbmV3VmFsdWVJdGVyYXRvci0+dmFsdWU7
CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiBsZWZ0KSAtPiBib29sIHsKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYgcmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAg
IHJldHVybiBtYXRjaGVzKCpsZWZ0LCAqcmlnaHQpOworICAgICAgICAgICAgfSwgWyZdKFJlZjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoKmxlZnQsIHJpZ2h0LT5y
ZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgICAgICAgICB9KSwgbmV3VmFsdWVUeXBlKTsKKyAgICAg
ICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxlZnQpIC0+IGJvb2wgewor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1
bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiByaWdodCkgLT4gYm9vbCB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KCpyaWdodCwgbGVm
dC0+cmVzb2x2YWJsZVR5cGUoKSkpOworICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQobGVmdC0+cmVzb2x2YWJsZVR5cGUoKSwg
cmlnaHQtPnJlc29sdmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgIH0pLCBuZXdWYWx1ZVR5cGUp
OworICAgICAgICB9KSwgbGhzVHlwZSk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAg
ICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHBy
ZXNzaW9uKCkpOworICAgICAgICBhdXRvIHJlc3VsdEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQo
JnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucmVzdWx0RXhwcmVzc2lvbigpKTsKKyAgICAgICAg
QVNTRVJUKHJlc3VsdEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8m
IHJlc3VsdFR5cGUgPSByZXN1bHRJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIFdURjo6dmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiBy
ZXN1bHQpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmcmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiwgcmVzdWx0LT5jbG9uZSgpKTsKKyAgICAgICAgICAgIEFT
U0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIH0s
IFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXN1bHQpIHsKKyAgICAgICAgICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
biwgcmVzdWx0LmNvcHlSZWYoKSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3Vs
dCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICB9KSwgcmVzdWx0VHlwZSk7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVu
Y2VFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkpOworICAgICAgICBhdXRvIHBvaW50ZXJJ
dGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZkZXJlZmVyZW5jZUV4cHJlc3Npb24ucG9pbnRlcigp
KTsKKyAgICAgICAgQVNTRVJUKHBvaW50ZXJJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOwor
ICAgICAgICBhdXRvJiB0eXBlID0gcG9pbnRlckl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0
byogcG9pbnRlclR5cGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oc3RkOjp1bmlx
dWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiB0eXBlKSAtPiBBU1Q6OlBvaW50ZXJUeXBlKiB7Cisg
ICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSB0eXBlLT51bmlmeU5vZGUoKTsKKyAgICAgICAg
ICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNh
c3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgIGlmICghaXM8QVNU
OjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAgICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5h
bWVkVHlwZSk7CisgICAgICAgIH0sIFtdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHR5
cGUpIC0+IEFTVDo6UG9pbnRlclR5cGUqIHsKKyAgICAgICAgICAgIGF1dG8qIHJlc29sdmVkVHlw
ZSA9IHR5cGUtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCk7CisgICAgICAgICAgICBp
ZiAoIXJlc29sdmVkVHlwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IHJlc29sdmVkVHlwZS0+dW5pZnlOb2RlKCk7CisgICAg
ICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRv
d25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICBpZiAoIWlz
PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpOworICAgICAgICB9KSwgdHlwZSk7CisgICAgICAgIGlmICghcG9pbnRlclR5
cGUpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgLy8gRklYTUU6IEhvdyB0byBkbyBsdmFsdWUgYW5kIGFkZHJlc3Mgc3Bh
Y2UgYW5hbHlzaXM/CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZGVy
ZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVyVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNz
aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2lu
dGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgICAgIGF1dG8gbFZhbHVlSXRlcmF0b3IgPSBt
X3R5cGVNYXAuZmluZCgmbWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICAgICAg
QVNTRVJUKGxWYWx1ZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8m
IGVsZW1lbnRUeXBlID0gbFZhbHVlSXRlcmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvKiBsVmFs
dWVUeXBlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlVubmFtZWRUeXBlPiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICAg
ICAgcmV0dXJuIHR5cGUuZ2V0KCk7CisgICAgICAgIH0sIFtdKFJlZjxSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZT4mIHR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgICAgIHJldHVy
biB0eXBlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpOworICAgICAgICB9KSwgZWxl
bWVudFR5cGUpOworICAgICAgICAvLyBGSVhNRTogSG93IHRvIGRvIGx2YWx1ZSBhbmQgYWRkcmVz
cyBzcGFjZSBhbmFseXNpcz8KKyAgICAgICAgQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3Bh
Y2UgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmlj
ZTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZtYWtlUG9pbnRlckV4
cHJlc3Npb24sIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2Vu
KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgbFZhbHVlVHlw
ZS0+Y2xvbmUoKSkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0
LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24ubFZhbHVlKCkpOworICAgICAgICBhdXRvIGxWYWx1ZUl0ZXJhdG9yID0gbV90eXBlTWFw
LmZpbmQoJm1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgICAgICBB
U1NFUlQobFZhbHVlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYg
ZWxlbWVudFR5cGUgPSBsVmFsdWVJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1dG8qIHVubmFt
ZWRUeXBlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlVubmFtZWRUeXBlPiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICAg
ICAgcmV0dXJuIHR5cGUuZ2V0KCk7CisgICAgICAgIH0sIFtdKFJlZjxSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZT4mIHR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgICAgIHJldHVy
biB0eXBlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpOworICAgICAgICB9KSwgZWxl
bWVudFR5cGUpOworICAgICAgICBpZiAoIXVubmFtZWRUeXBlKSB7CisgICAgICAgICAgICBzZXRF
cnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8mIHVu
aWZ5Tm9kZSA9IHVubmFtZWRUeXBlLT51bmlmeU5vZGUoKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6
VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBl
ID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgIGlm
IChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgICAgICBh
dXRvJiBwb2ludGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBl
KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQmVjb21lIGEgQ29udmVydFBvaW50ZXJUb0Fy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbgorICAgICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV90eXBlTWFwLmFkZCgmbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgc3RkOjptYWtlX3Vu
aXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCBwb2ludGVyVHlwZS5hZGRyZXNzU3BhY2UoKSwgcG9p
bnRlclR5cGUuZWxlbWVudFR5cGUoKS5jbG9uZSgpKSk7CisgICAgICAgICAgICAgICAgQVNTRVJU
X1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBIb3cgdG8g
ZG8gbHZhbHVlIGFuZCBhZGRyZXNzIHNwYWNlIGFuYWx5c2lzPworICAgICAgICAgICAgaWYgKGlz
PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBh
cnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpOworICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBIb3cgdG8gZG8gbHZhbHVlIGFuZCBhZGRyZXNzIHNwYWNlIGFu
YWx5c2lzPworICAgICAgICAgICAgICAgIEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNl
IGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNhdmUgdGhlIG51bWJlciBvZiBlbGVtZW50cy4K
KyAgICAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJm1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24sIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlLCBhcnJheVR5cGUudHlwZSgpLmNsb25lKCkpKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IC8vIEZJWE1FOiBIb3cgdG8gZG8gbHZhbHVlIGFuZCBhZGRyZXNzIHNwYWNlIGFuYWx5c2lzPwor
ICAgICAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UgPSBB
U1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJm1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIHN0
ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigpKSwgYWRkcmVzc1NwYWNlLCB1bm5hbWVk
VHlwZS0+Y2xvbmUoKSkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVz
dWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNz
aW9uJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUKKyAg
ICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpOworICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJnZhcmlhYmxlUmVmZXJlbmNlLCB2
YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCkuY2xvbmUoKSk7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHJldHVyblN0YXRlbWVudC5mdW5jdGlvbigpKTsKKyAgICAgICAg
aWYgKHJldHVyblN0YXRlbWVudC52YWx1ZSgpKSB7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoKnJldHVyblN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICAgICAgICAgIGF1dG8gdmFsdWVJ
dGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKHJldHVyblN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICAg
ICAgICAgIEFTU0VSVCh2YWx1ZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAg
ICAgICBhdXRvJiByZXN1bHRUeXBlID0gdmFsdWVJdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAg
ICBhdXRvIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0VHlwZSkgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoZXMocmV0dXJuU3RhdGVtZW50LmZ1bmN0aW9uKCktPnR5cGUo
KSwgKnJlc3VsdFR5cGUpOworICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZT4mIHJlc3VsdFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdChyZXR1cm5TdGF0ZW1lbnQuZnVuY3Rpb24o
KS0+dHlwZSgpLCByZXN1bHRUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgICAgICAgICB9
KSwgcmVzdWx0VHlwZSk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghbWF0Y2hlcyhyZXR1cm5TdGF0ZW1lbnQuZnVuY3Rpb24oKS0+dHlwZSgpLCBtX2ludHJp
bnNpY3Mudm9pZFR5cGUoKSkpCisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAv
LyBGb2xsb3dpbmcgcG9pbnRlciB0eXBlcyBjYW4gY2F1c2UgaW5maW5pdGUgbG9vcHMgYmVjYXVz
ZSBvZiBkYXRhIHN0cnVjdHVyZXMKKyAgICAgICAgLy8gbGlrZSBsaW5rZWQgbGlzdHMuCisgICAg
ICAgIC8vIEZJWE1FOiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW1wdHkKKyAg
ICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIC8vIEZvbGxvd2luZyBhcnJheSByZWZlcmVuY2UgdHlwZXMgY2FuIGNh
dXNlIGluZmluaXRlIGxvb3BzIGJlY2F1c2Ugb2YgZGF0YQorICAgICAgICAvLyBzdHJ1Y3R1cmVz
IGxpa2UgbGlua2VkIGxpc3RzLgorICAgICAgICAvLyBGSVhNRTogTWFrZSBzdXJlIHRoaXMgZnVu
Y3Rpb24gc2hvdWxkIGJlIGVtcHR5CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkludGVn
ZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8g
cmVmID0gYWRvcHRSZWYoKm5ldyBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShpbnRlZ2VyTGl0ZXJh
bC50eXBlKCkpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZpbnRl
Z2VyTGl0ZXJhbCwgV1RGTW92ZShyZWYpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1
bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGF1dG8gcmVmID0gYWRvcHRSZWYoKm5ldyBSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZSh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnR5cGUoKSkpOworICAgICAgICBhdXRvIGFk
ZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJnVuc2lnbmVkSW50ZWdlckxpdGVyYWwsIFdURk1vdmUo
cmVmKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdF
bnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRM
aXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byByZWYgPSBhZG9wdFJlZigqbmV3
IFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKGZsb2F0TGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZmbG9hdExpdGVyYWwsIFdURk1vdmUocmVm
KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJh
bCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gcmVmID0gYWRvcHRSZWYoKm5ldyBSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZShudWxsTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZudWxsTGl0ZXJhbCwgV1RGTW92ZShyZWYpKTsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAg
ICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFs
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRk
KCZib29sZWFuTGl0ZXJhbCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihi
b29sZWFuTGl0ZXJhbC5vcmlnaW4oKSksIG1faW50cmluc2ljcy5ib29sVHlwZSgpKSk7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVt
YmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5j
ZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChjb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAg
IGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9ICpjb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbkRlZmluaXRpb24oKTsKKyAgICAgICAgYXV0
byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihj
b25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5vcmlnaW4oKSksIGVu
dW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIGJvb2wgaXNCb29sVHlwZShSZXNv
bHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
JiBsZWZ0KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKCpsZWZ0LCBtX2lu
dHJpbnNpY3MuYm9vbFR5cGUoKSk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2U+JiBsZWZ0KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxib29sPihtYXRjaEFuZENvbW1pdChtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSwgbGVmdC0+cmVz
b2x2YWJsZVR5cGUoKSkpOworICAgICAgICB9KSwgcmVzb2x2aW5nVHlwZSk7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVz
c2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2Fs
Tm90RXhwcmVzc2lvbi5vcGVyYW5kKCkpOworICAgICAgICBhdXRvIG9wZXJhbmRJdGVyYXRvciA9
IG1fdHlwZU1hcC5maW5kKCZsb2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkpOworICAgICAg
ICBBU1NFUlQob3BlcmFuZEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1
dG8mIG9wZXJhbmRUeXBlID0gb3BlcmFuZEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKCFp
c0Jvb2xUeXBlKG9wZXJhbmRUeXBlKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlw
ZU1hcC5hZGQoJmxvZ2ljYWxOb3RFeHByZXNzaW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAo
TGV4ZXI6OlRva2VuKGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgbV9pbnRyaW5zaWNz
LmJvb2xUeXBlKCkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbEV4cHJl
c3Npb24mIGxvZ2ljYWxFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgICAgIGF1dG8gbGVm
dEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmxvZ2ljYWxFeHByZXNzaW9uLmxlZnQoKSk7Cisg
ICAgICAgIEFTU0VSVChsZWZ0SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAg
YXV0byYgbGVmdFR5cGUgPSBsZWZ0SXRlcmF0b3ItPnZhbHVlOworCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICAgICAgYXV0byByaWdo
dEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmxvZ2ljYWxFeHByZXNzaW9uLnJpZ2h0KCkpOwor
ICAgICAgICBBU1NFUlQocmlnaHRJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAg
ICBhdXRvJiByaWdodFR5cGUgPSByaWdodEl0ZXJhdG9yLT52YWx1ZTsKKworICAgICAgICBpZiAo
IWlzQm9vbFR5cGUobGVmdFR5cGUpIHx8ICFpc0Jvb2xUeXBlKHJpZ2h0VHlwZSkpIHsKKyAgICAg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZsb2dpY2FsRXhwcmVzc2lvbiwgQVNU
OjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihsb2dpY2FsRXhwcmVzc2lvbi5vcmln
aW4oKSksIG1faW50cmluc2ljcy5ib29sVHlwZSgpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAg
YXV0byBjb25kaXRpb25hbEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmlmU3RhdGVtZW50LmNv
bmRpdGlvbmFsKCkpOworICAgICAgICBBU1NFUlQoY29uZGl0aW9uYWxJdGVyYXRvciAhPSBtX3R5
cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBjb25kaXRpb25hbFR5cGUgPSBjb25kaXRpb25h
bEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKCFpc0Jvb2xUeXBlKGNvbmRpdGlvbmFsVHlw
ZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7Cisg
ICAgICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgpKQorICAgICAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApIG92ZXJyaWRlCisgICAgeworICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgICAgICBhdXRv
IGNvbmRpdGlvbmFsSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmd2hpbGVMb29wLmNvbmRpdGlv
bmFsKCkpOworICAgICAgICBBU1NFUlQoY29uZGl0aW9uYWxJdGVyYXRvciAhPSBtX3R5cGVNYXAu
ZW5kKCkpOworICAgICAgICBhdXRvJiBjb25kaXRpb25hbFR5cGUgPSBjb25kaXRpb25hbEl0ZXJh
dG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKCFpc0Jvb2xUeXBlKGNvbmRpdGlvbmFsVHlwZSkpIHsK
KyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAg
ICAgICBhdXRvIGNvbmRpdGlvbmFsSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmZG9XaGlsZUxv
b3AuY29uZGl0aW9uYWwoKSk7CisgICAgICAgIEFTU0VSVChjb25kaXRpb25hbEl0ZXJhdG9yICE9
IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIGNvbmRpdGlvbmFsVHlwZSA9IGNvbmRp
dGlvbmFsSXRlcmF0b3ItPnZhbHVlOworICAgICAgICBpZiAoIWlzQm9vbFR5cGUoY29uZGl0aW9u
YWxUeXBlKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29w
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudCkgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50KTsKKyAgICAgICAgfSwgWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoKmV4cHJlc3Npb24pOworICAgICAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsK
KyAgICAgICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkpIHsKKyAgICAgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7CisgICAgICAgICAgICBhdXRvIGNvbmRp
dGlvbkl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoZm9yTG9vcC5jb25kaXRpb24oKSk7CisgICAg
ICAgICAgICBBU1NFUlQoY29uZGl0aW9uSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAg
ICAgICAgICAgIGF1dG8mIGNvbmRpdGlvblR5cGUgPSBjb25kaXRpb25JdGVyYXRvci0+dmFsdWU7
CisgICAgICAgICAgICBpZiAoIWlzQm9vbFR5cGUoY29uZGl0aW9uVHlwZSkpIHsKKyAgICAgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZm9yTG9vcC5pbmNyZW1lbnQoKSkKKyAgICAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wLmJvZHkoKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OlN3aXRjaFN0YXRlbWVudCYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IG1lCisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbW1hRXhwcmVz
c2lvbiYgY29tbWFFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNv
bW1hRXhwcmVzc2lvbi5saXN0KCkuc2l6ZSgpID4gMCk7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0
KGNvbW1hRXhwcmVzc2lvbik7CisgICAgICAgIGF1dG8gbGFzdEl0ZXJhdG9yID0gbV90eXBlTWFw
LmZpbmQoY29tbWFFeHByZXNzaW9uLmxpc3QoKS5sYXN0KCkuZ2V0KCkpOworICAgICAgICBBU1NF
UlQobGFzdEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIGxhc3RU
eXBlID0gbGFzdEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VW
aXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIGxhc3RUeXBlKSB7
CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmNvbW1hRXhwcmVz
c2lvbiwgbGFzdFR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRS
ZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mIGxhc3RUeXBlKSB7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdHlwZU1hcC5hZGQoJmNvbW1hRXhwcmVzc2lvbiwgbGFzdFR5cGUuY29weVJlZigpKTsK
KyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgICAgIH0pLCBsYXN0VHlwZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7
CisgICAgICAgIGF1dG8gcHJlZGljYXRlSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmdGVybmFy
eUV4cHJlc3Npb24ucHJlZGljYXRlKCkpOworICAgICAgICBBU1NFUlQocHJlZGljYXRlSXRlcmF0
b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgcHJlZGljYXRlVHlwZSA9IHBy
ZWRpY2F0ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKCFpc0Jvb2xUeXBlKHByZWRpY2F0
ZVR5cGUpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9u
LmJvZHlFeHByZXNzaW9uKCkpOworICAgICAgICBhdXRvIGJvZHlJdGVyYXRvciA9IG1fdHlwZU1h
cC5maW5kKCZ0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKKyAgICAgICAgQVNT
RVJUKGJvZHlJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBib2R5
VHlwZSA9IGJvZHlJdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkpOworICAgICAgICBhdXRvIGVsc2VJ
dGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZ0ZXJuYXJ5RXhwcmVzc2lvbi5lbHNlRXhwcmVzc2lv
bigpKTsKKyAgICAgICAgQVNTRVJUKGVsc2VJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOwor
ICAgICAgICBhdXRvJiBlbHNlVHlwZSA9IGVsc2VJdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAg
YXV0byByZXN1bHRUeXBlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIGJvZHlUeXBlKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjpt
YWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiBlbHNlVHlw
ZSkgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgICAgICAg
ICBpZiAobWF0Y2hlcygqYm9keVR5cGUsICplbHNlVHlwZSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBib2R5VHlwZS0+Y2xvbmUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBlbHNl
VHlwZSkgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQoKmJvZHlUeXBlLCBlbHNlVHlwZS0+cmVzb2x2YWJs
ZVR5cGUoKSk7CisgICAgICAgICAgICB9KSwgZWxzZVR5cGUpOworICAgICAgICB9LCBbJl0oUmVm
PFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgYm9keVR5cGUpIC0+IHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIGVsc2VUeXBl
KSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICAgICAgICAg
IHJldHVybiBtYXRjaEFuZENvbW1pdCgqZWxzZVR5cGUsIGJvZHlUeXBlLT5yZXNvbHZhYmxlVHlw
ZSgpKTsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBl
bHNlVHlwZSkgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQoYm9keVR5cGUtPnJlc29sdmFibGVUeXBlKCks
IGVsc2VUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAgICAgIH0pLCBlbHNlVHlwZSk7
CisgICAgICAgIH0pLCBib2R5VHlwZSk7CisgICAgICAgIGlmICghcmVzdWx0VHlwZSkgeworICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJnRlcm5hcnlFeHByZXNzaW9uLCBX
VEZNb3ZlKHJlc3VsdFR5cGUpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4
cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZm9yIChh
dXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygpKQorICAgICAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KCphcmd1bWVudCk7CisgICAgICAgIGlmIChjYWxsRXhwcmVzc2lv
bi5jYXN0UmV0dXJuVHlwZSgpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGNhbGxF
eHByZXNzaW9uLmNhc3RSZXR1cm5UeXBlKCktPmdldCgpKTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHR5cGVzOworICAgICAgICB0eXBlcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygpLnNpemUoKSk7
CisgICAgICAgIGZvciAoYXV0byYgYXJndW1lbnQgOiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMo
KSkgeworICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKGFyZ3VtZW50
LmdldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkp
OworICAgICAgICAgICAgdHlwZXMudW5jaGVja2VkQXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBBU1NFUlQoY2FsbEV4cHJlc3Npb24uaGFzT3ZlcmxvYWRzKCkp
OworICAgICAgICBhdXRvKiBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbCgq
Y2FsbEV4cHJlc3Npb24ub3ZlcmxvYWRzKCksIHR5cGVzLCBjYWxsRXhwcmVzc2lvbi5jYXN0UmV0
dXJuVHlwZSgpKTsKKyAgICAgICAgaWYgKCFmdW5jdGlvbikgeworICAgICAgICAgICAgaWYgKGF1
dG8gbmV3RnVuY3Rpb24gPSByZXNvbHZlQnlJbnN0YW50aWF0aW9uKGNhbGxFeHByZXNzaW9uLCB0
eXBlcywgbV9pbnRyaW5zaWNzKSkgeworICAgICAgICAgICAgICAgIG1fcHJvZ3JhbS5hcHBlbmQo
V1RGTW92ZSgqbmV3RnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IG1fcHJv
Z3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpLmxhc3QoKS5nZXQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZnVuY3Rpb24pIHsKKyAgICAgICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLT5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JikgLT4gYm9vbCB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdChmdW5j
dGlvbi0+cGFyYW1ldGVycygpW2ldLnR5cGUoKSwgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJl
c29sdmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgIH0pLCB0eXBlc1tpXS5nZXQoKSk7CisgICAg
ICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGNhbGxFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCpmdW5jdGlvbik7CisKKyAgICAgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZjYWxsRXhwcmVzc2lvbiwgZnVuY3Rpb24tPnR5cGUo
KS5jbG9uZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKKyAgICB9CisKK3ByaXZhdGU6CisKKyAgICAvKmNsYXNzIFJlc29sdmluZ1R5
cGVIYXNoVHJhaXRzIDogcHVibGljIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxSZXNvbHZpbmdUeXBl
PgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBSZXNvbHZpbmdUeXBlJiBlbXB0
eVZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVzb2x2aW5nVHlwZT4gZW1wdHlWYWx1
ZTsKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVZhbHVlLmdldCgpOworICAgICAgICB9CisKKyAg
ICAgICAgdHlwZWRlZiBSZXNvbHZpbmdUeXBlJiBQZWVrVHlwZTsKKyAgICAgICAgc3RhdGljIFBl
ZWtUeXBlIHBlZWsoUmVzb2x2aW5nVHlwZSYgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CisgICAg
ICAgIHR5cGVkZWYgUmVzb2x2aW5nVHlwZSYmIFRha2VUeXBlOworICAgICAgICBzdGF0aWMgVGFr
ZVR5cGUgdGFrZShSZXNvbHZpbmdUeXBlJiYgdmFsdWUpIHsgcmV0dXJuIFdURk1vdmUodmFsdWUp
OyB9CisgICAgfTsqLworCisgICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBSZXNvbHZpbmdU
eXBlIC8qLCBXVEY6OlB0ckhhc2g8QVNUOjpFeHByZXNzaW9uKj4sIFdURjo6SGFzaFRyYWl0czxB
U1Q6OkV4cHJlc3Npb24qPiwgUmVzb2x2aW5nVHlwZUhhc2hUcmFpdHMqLz4gbV90eXBlTWFwOwor
ICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3ZlcnRleEVudHJ5UG9pbnRzOworICAgIEhhc2hTZXQ8U3Ry
aW5nPiBtX2ZyYWdtZW50RW50cnlQb2ludHM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fY29tcHV0
ZUVudHJ5UG9pbnRzOworICAgIGNvbnN0IEludHJpbnNpY3MmIG1faW50cmluc2ljczsKKyAgICBQ
cm9ncmFtJiBtX3Byb2dyYW07Cit9OworCitib29sIGNoZWNrKFByb2dyYW0mIHByb2dyYW0pCit7
CisgICAgQ2hlY2tlciBjaGVja2VyKHByb2dyYW0uaW50cmluc2ljcygpLCBwcm9ncmFtKTsKKyAg
ICBjaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtKTsKKyAgICByZXR1cm4gIWNoZWNr
ZXIuZXJyb3IoKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uZWQyNjhkNzM0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuaApAQCAtMCwwICsx
LDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dy
YW07CisKK2Jvb2wgY2hlY2soUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5
UG9pbnRJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjhiNWI0YjNmNTVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwCkBAIC0w
LDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oIgorCisj
aW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK2NsYXNzIEdhdGhlcmVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGlj
OgorICAgIEdhdGhlcmVyKGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MsIEFTVDo6U2VtYW50
aWMqIHNlbWFudGljID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2ludHJpbnNpY3MoaW50cmluc2lj
cykKKyAgICAgICAgLCBtX2N1cnJlbnRTZW1hbnRpYyhzZW1hbnRpYykKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB+R2F0aGVyZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHJlc2V0KCkK
KyAgICB7CisgICAgICAgIG1fY3VycmVudFNlbWFudGljID0gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiYgdGFrZUVudHJ5UG9pbnRJdGVtcygpCisgICAgewor
ICAgICAgICByZXR1cm4gV1RGTW92ZShtX2VudHJ5UG9pbnRJdGVtcyk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpCisgICAgeworICAgICAgICBp
ZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVu
ZChFbnRyeVBvaW50SXRlbShtX3R5cGVSZWZlcmVuY2VzLmxhc3QoKS5nZXQoKSwgKm1fY3VycmVu
dFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1
cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobWF0Y2hlcyhuYXRpdmVUeXBlRGVjbGFyYXRp
b24sIG1faW50cmluc2ljcy52b2lkVHlwZSgpKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fZW50cnlQb2ludEl0
ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShtX3R5cGVSZWZlcmVuY2VzLmxhc3QoKS5nZXQoKSwg
Km1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVj
dHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCisgICAgeworICAgICAgICBpZiAo
bV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1l
bnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpIHsKKyAgICAgICAg
ICAgIGlmIChzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkpCisgICAgICAgICAgICAgICAgbV9j
dXJyZW50U2VtYW50aWMgPSAmKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKTsKKyAgICAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24p
CisgICAgeworICAgICAgICBBU1NFUlQodHlwZURlZmluaXRpb24udHlwZSgpKTsKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlRGVmaW5pdGlvbi50eXBlKCkpOworICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBtX3R5
cGVSZWZlcmVuY2VzLmFwcGVuZCh0eXBlUmVmZXJlbmNlKTsKKyAgICAgICAgYXV0byBkZXB0aCA9
IG1fdHlwZVJlZmVyZW5jZXMuc2l6ZSgpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnR5
cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGRlcHRo
LCBtX3R5cGVSZWZlcmVuY2VzLnNpemUoKSA9PSBkZXB0aCk7CisgICAgfQorCisgICAgdm9pZCB2
aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkKKyAgICB7CisgICAgICAgIGlmICgh
bV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVu
dHJ5UG9pbnRJdGVtKHBvaW50ZXJUeXBlLCAqbV9jdXJyZW50U2VtYW50aWMpKTsKKyAgICB9CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5
cGUpCisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1f
ZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShhcnJheVJlZmVyZW5jZVR5cGUs
ICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJh
eVR5cGUmIGFycmF5VHlwZSkKKyAgICB7CisgICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMp
IHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5
VHlwZSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCisgICAgeworICAgICAg
ICBBU1NFUlQoIW1fY3VycmVudFNlbWFudGljKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFy
YXRpb24uc2VtYW50aWMoKSkKKyAgICAgICAgICAgIG1fY3VycmVudFNlbWFudGljID0gJip2YXJp
YWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2
YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0
IEludHJpbnNpY3MmIG1faW50cmluc2ljczsKKyAgICBBU1Q6OlNlbWFudGljKiBtX2N1cnJlbnRT
ZW1hbnRpYyB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxB
U1Q6OlR5cGVSZWZlcmVuY2U+PiBtX3R5cGVSZWZlcmVuY2VzOworICAgIFZlY3RvcjxFbnRyeVBv
aW50SXRlbT4gbV9lbnRyeVBvaW50SXRlbXM7Cit9OworCitPcHRpb25hbDxFbnRyeVBvaW50SXRl
bXM+IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIEFTU0VS
VChmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSk7CisgICAgR2F0aGVyZXIgaW5w
dXRHYXRoZXJlcihpbnRyaW5zaWNzKTsKKyAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1bmN0
aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkpIHsKKyAgICAgICAgaW5wdXRHYXRoZXJlci5yZXNl
dCgpOworICAgICAgICBpbnB1dEdhdGhlcmVyLmNoZWNrRXJyb3JBbmRWaXNpdChwYXJhbWV0ZXIp
OworICAgICAgICBpZiAoaW5wdXRHYXRoZXJlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICB9CisgICAgR2F0aGVyZXIgb3V0cHV0R2F0aGVyZXIoaW50cmlu
c2ljcywgZnVuY3Rpb25EZWZpbml0aW9uLnNlbWFudGljKCkgPyAmKmZ1bmN0aW9uRGVmaW5pdGlv
bi5zZW1hbnRpYygpIDogbnVsbHB0cik7CisgICAgb3V0cHV0R2F0aGVyZXIuY2hlY2tFcnJvckFu
ZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgIGlmIChvdXRwdXRHYXRoZXJl
ci5lcnJvcigpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHt7
IGlucHV0R2F0aGVyZXIudGFrZUVudHJ5UG9pbnRJdGVtcygpLCBvdXRwdXRHYXRoZXJlci50YWtl
RW50cnlQb2ludEl0ZW1zKCkgfX07Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBhcmFtZXRlci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBv
aW50SXRlbXMuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQYXJhbWV0ZXIuaApyZW5hbWUgdG8gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRl
bXMuaAppbmRleCA5MjU4NmY4NjkxZi4uZTFlYjgyOTIxYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBhcmFtZXRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0
ZW1zLmgKQEAgLTI3LDEzICsyNyw5IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVk
ZSAiV0hMU0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgiCiAjaW5jbHVkZSAi
V0hMU0xTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgotI2luY2x1ZGUgIldITFNM
VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDEsMzYgKzM3LDMwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBB
U1QgewogCi1jbGFzcyBQYXJhbWV0ZXIgOiBwdWJsaWMgVmFsdWUgewotcHVibGljOgotICAgIFBh
cmFtZXRlcihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5cGUsIE9wdGlvbmFsPFN0cmluZz4mJiBuYW1l
LCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFudGljKQotICAgICAgICA6IG1fb3JpZ2lu
KFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX3F1YWxpZmllcnMoV1RGTW92ZShxdWFsaWZp
ZXJzKSkKLSAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkKLSAgICAgICAgLCBtX25hbWUo
V1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBtX3NlbWFudGljKFdURk1vdmUoc2VtYW50aWMpKQot
ICAgIHsKLSAgICB9CitjbGFzcyBGdW5jdGlvbkRlZmluaXRpb247CiAKLSAgICB2aXJ0dWFsIH5Q
YXJhbWV0ZXIoKSA9IGRlZmF1bHQ7Cit9CiAKLSAgICBQYXJhbWV0ZXIoY29uc3QgUGFyYW1ldGVy
JikgPSBkZWxldGU7Ci0gICAgUGFyYW1ldGVyKFBhcmFtZXRlciYmKSA9IGRlZmF1bHQ7CitjbGFz
cyBJbnRyaW5zaWNzOworY2xhc3MgVW5uYW1lZFR5cGU7CiAKLSAgICBUeXBlJiB0eXBlKCkgeyBy
ZXR1cm4gKm1fdHlwZTsgfQotICAgIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+JiBzZW1hbnRpYygp
IHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KK3N0cnVjdCBFbnRyeVBvaW50SXRlbSB7CisgICAgRW50
cnlQb2ludEl0ZW0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIEFTVDo6U2VtYW50aWMm
IHNlbWFudGljKQorICAgICAgICA6IHVubmFtZWRUeXBlKHVubmFtZWRUeXBlKQorICAgICAgICAs
IHNlbWFudGljKHNlbWFudGljKQorICAgIHsKKyAgICB9CiAKLXByaXZhdGU6Ci0gICAgTGV4ZXI6
OlRva2VuIG1fb3JpZ2luOwotICAgIFF1YWxpZmllcnMgbV9xdWFsaWZpZXJzOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKLSAgICBPcHRpb25hbDxTdHJpbmc+IG1fbmFt
ZTsKLSAgICBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiBtX3NlbWFudGljOworICAgIEFTVDo6VW5u
YW1lZFR5cGUmIHVubmFtZWRUeXBlOworICAgIEFTVDo6U2VtYW50aWMmIHNlbWFudGljOwogfTsK
IAotdHlwZWRlZiBWZWN0b3I8UGFyYW1ldGVyPiBQYXJhbWV0ZXJzOworc3RydWN0IEVudHJ5UG9p
bnRJdGVtcyB7CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBpbnB1dHM7CisgICAgVmVjdG9y
PEVudHJ5UG9pbnRJdGVtPiBvdXRwdXRzOworfTsKIAotfQorT3B0aW9uYWw8RW50cnlQb2ludEl0
ZW1zPiBnYXRoZXJFbnRyeVBvaW50SXRlbXMoY29uc3QgSW50cmluc2ljcyYsIEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmRkMDFhM2Y1MDdmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcApAQCAtMCww
ICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisKKyNpbmNsdWRlICJXSExT
TFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK3N0YXRpYyBib29sIG1hdGNo
ZXMoY29uc3QgQVNUOjpUeXBlJiB1bmlmeVRoaXMsIGNvbnN0IEFTVDo6VHlwZSYgdW5pZnlPdGhl
cikKK3sKKyAgICBpZiAoJnVuaWZ5VGhpcyA9PSAmdW5pZnlPdGhlcikKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5VGhpcykgJiYgaXM8QVNU
OjpOYW1lZFR5cGU+KHVuaWZ5T3RoZXIpKSB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAg
ICBhdXRvJiBuYW1lZFRoaXMgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlUaGlzKTsK
KyAgICAgICAgYXV0byYgbmFtZWRPdGhlciA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlm
eU90aGVyKTsKKyAgICAgICAgQVNTRVJUKCFpczxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZFRo
aXMpICYmICFpczxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZE90aGVyKSk7CisjZW5kaWYKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4o
dW5pZnlUaGlzKSAmJiBpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU90aGVyKSkgeworICAgICAg
ICBhdXRvJiB1bm5hbWVkVGhpcyA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5VGhp
cyk7CisgICAgICAgIGF1dG8mIHVubmFtZWRPdGhlciA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5
cGU+KHVuaWZ5T3RoZXIpOworICAgICAgICBBU1NFUlQoIWlzPEFTVDo6VHlwZVJlZmVyZW5jZT4o
dW5uYW1lZFRoaXMpICYmICFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRPdGhlcikpOwor
ICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFRoaXMpICYmIGlzPEFTVDo6
UG9pbnRlclR5cGU+KHVubmFtZWRPdGhlcikpIHsKKyAgICAgICAgICAgIGF1dG8mIHBvaW50ZXJU
aGlzID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFRoaXMpOworICAgICAgICAg
ICAgYXV0byYgcG9pbnRlck90aGVyID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1l
ZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChwb2ludGVyVGhpcy5hZGRyZXNzU3BhY2UoKSAhPSBw
b2ludGVyT3RoZXIuYWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMocG9pbnRlclRoaXMuZWxlbWVudFR5cGUoKSwg
cG9pbnRlck90aGVyLmVsZW1lbnRUeXBlKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChpczxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFRoaXMpICYmIGlzPEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlPih1bm5hbWVkT3RoZXIpKXsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5UmVmZXJl
bmNlVGhpcyA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVGhpcyk7
CisgICAgICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZU90aGVyID0gZG93bmNhc3Q8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhlcik7CisgICAgICAgICAgICBpZiAoYXJyYXlS
ZWZlcmVuY2VUaGlzLmFkZHJlc3NTcGFjZSgpICE9IGFycmF5UmVmZXJlbmNlT3RoZXIuYWRkcmVz
c1NwYWNlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0
dXJuIG1hdGNoZXMoYXJyYXlSZWZlcmVuY2VUaGlzLmVsZW1lbnRUeXBlKCksIGFycmF5UmVmZXJl
bmNlT3RoZXIuZWxlbWVudFR5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEFTVDo6
QXJyYXlUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRPdGhl
cikpIHsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5VGhpcyA9IGRvd25jYXN0PEFTVDo6QXJyYXlU
eXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRvJiBhcnJheU90aGVyID0gZG93bmNh
c3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRPdGhlcik7CisgICAgICAgICAgICBpZiAoYXJyYXlU
aGlzLm51bUVsZW1lbnRzKCkgIT0gYXJyYXlPdGhlci5udW1FbGVtZW50cygpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKGFycmF5VGhp
cy50eXBlKCksIGFycmF5T3RoZXIudHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBtYXRjaGVzKGNvbnN0
IEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiBv
dGhlcikKK3sKKyAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZS51bmlmeU5vZGUoKSwgb3Ro
ZXIudW5pZnlOb2RlKCkpOworfQorCitib29sIG1hdGNoZXMoY29uc3QgQVNUOjpOYW1lZFR5cGUm
IG5hbWVkVHlwZSwgY29uc3QgQVNUOjpOYW1lZFR5cGUmIG90aGVyKQoreworICAgIHJldHVybiBt
YXRjaGVzKG5hbWVkVHlwZS51bmlmeU5vZGUoKSwgb3RoZXIudW5pZnlOb2RlKCkpOworfQorCiti
b29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0IEFT
VDo6TmFtZWRUeXBlJiBvdGhlcikKK3sKKyAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZS51
bmlmeU5vZGUoKSwgb3RoZXIudW5pZnlOb2RlKCkpOworfQorCitzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6VHlwZSYgdW5pZnlOb2Rl
LCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKK3sKKyAgICBpZiAoIXJlc29s
dmFibGVUeXBlLmNhblJlc29sdmUodW5pZnlOb2RlKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHJlc3VsdDsKKyAgICBpZiAo
aXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgbmFtZWRVbmlm
eU5vZGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgcmVz
dWx0ID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFVuaWZ5Tm9k
ZS5vcmlnaW4oKSksIG5hbWVkVW5pZnlOb2RlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVzdWx0
ID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKS5jbG9uZSgpOworICAgIEFT
U0VSVCghcmVzb2x2YWJsZVR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIHJlc29sdmFibGVUeXBl
LnJlc29sdmUocmVzdWx0LT5jbG9uZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpVbm5hbWVk
VHlwZSYgdW5uYW1lZFR5cGUsIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKQor
eworICAgIHJldHVybiBtYXRjaEFuZENvbW1pdCh1bm5hbWVkVHlwZS51bmlmeU5vZGUoKSwgcmVz
b2x2YWJsZVR5cGUpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0
Y2hBbmRDb21taXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSwgQVNUOjpSZXNvbHZhYmxlVHlw
ZSYgcmVzb2x2YWJsZVR5cGUpCit7CisgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KG5hbWVkVHlw
ZS51bmlmeU5vZGUoKSwgcmVzb2x2YWJsZVR5cGUpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2
YWJsZVR5cGUxLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZTIpCit7CisgICAg
QVNTRVJUKCFyZXNvbHZhYmxlVHlwZTEucmVzb2x2ZWRUeXBlKCkpOworICAgIEFTU0VSVCghcmVz
b2x2YWJsZVR5cGUyLnJlc29sdmVkVHlwZSgpKTsKKyAgICBpZiAoaXM8QVNUOjpGbG9hdExpdGVy
YWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpICYmIGlzPEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVz
b2x2YWJsZVR5cGUyKSkgeworICAgICAgICByZXNvbHZhYmxlVHlwZTEucmVzb2x2ZShkb3duY2Fz
dDxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkucHJlZmVycmVkVHlwZSgp
LmNsb25lKCkpOworICAgICAgICByZXNvbHZhYmxlVHlwZTIucmVzb2x2ZShkb3duY2FzdDxBU1Q6
OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikucHJlZmVycmVkVHlwZSgpLmNsb25l
KCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNv
bHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgIH0KKyAgICBpZiAoaXM8
QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpJbnRl
Z2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikpIHsKKyAgICAgICAgcmVzb2x2YWJsZVR5
cGUxLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVU
eXBlMSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXNvbHZhYmxlVHlwZTIu
cmVzb2x2ZShkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUy
KS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6
OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCkuY2xv
bmUoKTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+
KHJlc29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4o
cmVzb2x2YWJsZVR5cGUyKSkgeworICAgICAgICByZXNvbHZhYmxlVHlwZTEucmVzb2x2ZShkb3du
Y2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnBy
ZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUyLnJlc29sdmUo
ZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUy
KS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6
OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5
cGUoKS5jbG9uZSgpOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+KHJl
c29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBl
MikpIHsKKyAgICAgICAgLy8gRklYTUU6IFRyeWluZyB0byBtYXRjaCBudWxscHRyIGFuZCBudWxs
cHRyIGZhaWxzLgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK2Jvb2wgaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMoQVNUOjpOYW1lZFR5
cGUmIHBvc3NpYmxlVHlwZSwgQVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKQorewor
ICAgIGlmIChpczxBU1Q6OlR5cGVEZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpCisgICAgICAgIHx8
IGlzPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4ocG9zc2libGVUeXBlKQorICAgICAgICB8fCBp
czxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4ocG9zc2libGVUeXBlKSkgeworICAgICAgICBy
ZXR1cm4gdHlwZUFyZ3VtZW50cy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgQVNTRVJUKGlzPEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihwb3NzaWJsZVR5cGUpKTsKKyAgICBhdXRvJiBuYXRp
dmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4o
cG9zc2libGVUeXBlKTsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVu
dHMoKS5zaXplKCkgIT0gdHlwZUFyZ3VtZW50cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBl
QXJndW1lbnRzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQVNUOjpDb25zdGFudEV4cHJlc3Np
b24qIHR5cGVBcmd1bWVudEV4cHJlc3Npb24gPSBudWxscHRyOworICAgICAgICBBU1Q6OlR5cGVS
ZWZlcmVuY2UqIHR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UgPSBudWxscHRyOworICAgICAgICBB
U1Q6OkNvbnN0YW50RXhwcmVzc2lvbiogbmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVzc2lvbiA9IG51
bGxwdHI7CisgICAgICAgIEFTVDo6VHlwZVJlZmVyZW5jZSogbmF0aXZlVHlwZUFyZ3VtZW50VHlw
ZVJlZmVyZW5jZSA9IG51bGxwdHI7CisKKyAgICAgICAgYXV0byBhc3NpZ24gPSBbJl0oQVNUOjpU
eXBlQXJndW1lbnQmIHR5cGVBcmd1bWVudCwgQVNUOjpDb25zdGFudEV4cHJlc3Npb24qJiBleHBy
ZXNzaW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2UqJiB0eXBlUmVmZXJlbmNlKSB7CisgICAgICAgICAg
ICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
JiBjb25zdGFudEV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gJmNv
bnN0YW50RXhwcmVzc2lvbjsKKyAgICAgICAgICAgIH0sIFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpUeXBlUmVmZXJlbmNlPiYgdGhlVHlwZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgICAgIHR5
cGVSZWZlcmVuY2UgPSB0aGVUeXBlUmVmZXJlbmNlLmdldCgpOworICAgICAgICAgICAgfSksIHR5
cGVBcmd1bWVudCk7CisgICAgICAgIH07CisKKyAgICAgICAgYXNzaWduKHR5cGVBcmd1bWVudHNb
aV0sIHR5cGVBcmd1bWVudEV4cHJlc3Npb24sIHR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpOwor
ICAgICAgICBhc3NpZ24obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVtpXSwg
bmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVzc2lvbiwgbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVy
ZW5jZSk7CisKKyAgICAgICAgaWYgKHR5cGVBcmd1bWVudEV4cHJlc3Npb24gJiYgbmF0aXZlVHlw
ZUFyZ3VtZW50RXhwcmVzc2lvbikgeworICAgICAgICAgICAgaWYgKCF0eXBlQXJndW1lbnRFeHBy
ZXNzaW9uLT5tYXRjaGVzKCpuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZUFyZ3VtZW50VHlw
ZVJlZmVyZW5jZSAmJiBuYXRpdmVUeXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlKSB7CisgICAgICAg
ICAgICBpZiAoIW1hdGNoZXMoKnR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UsICpuYXRpdmVUeXBl
QXJndW1lbnRUeXBlUmVmZXJlbmNlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBpbmZlclR5cGVz
Rm9yQ2FsbChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rpb24sIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywg
T3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+JiBjYXN0UmV0
dXJuVHlwZSkKK3sKKyAgICBpZiAocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgp
ICE9IGFyZ3VtZW50VHlwZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7
ICsraSkgeworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+
IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMocG9zc2libGVGdW5jdGlvbi5wYXJh
bWV0ZXJzKClbaV0udHlwZSgpLCAqdW5uYW1lZFR5cGUpOworICAgICAgICB9LCBbJl0oUmVmPFJl
c29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wg
eworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxl
VHlwZSgpLmNhblJlc29sdmUocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgp
KTsKKyAgICAgICAgfSksIGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkpOworICAgICAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChjYXN0UmV0
dXJuVHlwZSAmJiAhbWF0Y2hlcyhjYXN0UmV0dXJuVHlwZS0+Z2V0KCksIHBvc3NpYmxlRnVuY3Rp
b24udHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQor
Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5iYmMxMDM5NzJjZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5oCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJXSExTTFJlc29sdmluZ1R5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5o
IgorI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
V0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbjsK
K2NsYXNzIE5hbWVkVHlwZTsKK2NsYXNzIFJlc29sdmFibGVUeXBlOworY2xhc3MgVW5uYW1lZFR5
cGU7CisKK30KKworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBB
U1Q6OlVubmFtZWRUeXBlJik7Citib29sIG1hdGNoZXMoY29uc3QgQVNUOjpOYW1lZFR5cGUmLCBj
b25zdCBBU1Q6Ok5hbWVkVHlwZSYpOworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5
cGUmLCBjb25zdCBBU1Q6Ok5hbWVkVHlwZSYpOworLy8gRklYTUU6IElzIGFueW9uZSBhY3R1YWxs
eSB1c2luZyB0aGUgcmV0dXJuIHR5cGUgaGVyZT8KK3N0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFt
ZWRUeXBlPiBtYXRjaEFuZENvbW1pdChBU1Q6OlVubmFtZWRUeXBlJiwgQVNUOjpSZXNvbHZhYmxl
VHlwZSYpOworc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0
KEFTVDo6TmFtZWRUeXBlJiwgQVNUOjpSZXNvbHZhYmxlVHlwZSYpOworc3RkOjp1bmlxdWVfcHRy
PEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmLCBB
U1Q6OlJlc29sdmFibGVUeXBlJik7Citib29sIGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFT
VDo6TmFtZWRUeXBlJiBwb3NzaWJsZVR5cGUsIEFTVDo6VHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3Vt
ZW50cyk7Citib29sIGluZmVyVHlwZXNGb3JDYWxsKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYg
cG9zc2libGVGdW5jdGlvbiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5n
VHlwZT4+JiBhcmd1bWVudFR5cGVzLCBPcHRpb25hbDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6TmFtZWRUeXBlPj4mIGNhc3RSZXR1cm5UeXBlKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5z
aWNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmlu
c2ljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE1YzAyYjQx
YThiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xJbnRyaW5zaWNzLmNwcApAQCAtMCwwICsxLDQxNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xJ
bnRyaW5zaWNzLmgiCisKKyNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIgorI2lu
Y2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNl
LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK0ludHJpbnNpY3M6OkludHJpbnNpY3MoKQorICAgIDogbV90ZXh0dXJl
VHlwZU5hbWVzIHsgU3RyaW5nKCJUZXh0dXJlMUQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiUldUZXh0dXJlMUQiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiVGV4dHVyZTFEQXJyYXkiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiUldUZXh0dXJl
MURBcnJheSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3Ry
aW5nKCJUZXh0dXJlMkQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAg
ICAgIFN0cmluZygiUldUZXh0dXJlMkQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwK
KyAgICAgICAgICAgIFN0cmluZygiVGV4dHVyZTJEQXJyYXkiLCBTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiUldUZXh0dXJlMkRBcnJheSIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJUZXh0dXJlM0Qi
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiUldU
ZXh0dXJlM0QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0
cmluZygiVGV4dHVyZUN1YmUiLCAgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgfQorICAg
ICwgbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMgeyBTdHJpbmcoInVjaGFyIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoInVzaG9ydCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJ1aW50IiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoImNoYXIiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygic2hvcnQiLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiaW50Iiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoImhhbGYi
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiZmxv
YXQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSB9CisgICAgLCBtX2RlcHRoVGV4dHVy
ZUlubmVyVHlwZXMgeyBTdHJpbmcoImhhbGYiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwKKyAgICAgICAgICAgIFN0cmluZygiZmxvYXQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSB9Cit7CisgICAgQVNTRVJUKG1fdGV4dHVyZVR5cGVOYW1lcy5zaXplKCkgPT0gMTEpOyAv
LyBmdWxsVGV4dHVyZXMgaGFyZGNvZGVzIHRoZSBsZW5ndGggb2YgdGhpcyBhcnJheS4KKyAgICBB
U1NFUlQobV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgpID09IDgpOyAvLyBmdWxsVGV4dHVy
ZXMgaGFyZGNvZGVzIHRoZSBsZW5ndGggb2YgdGhpcyBhcnJheS4KKyAgICBBU1NFUlQobV9kZXB0
aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKSA9PSAyKTsgLy8gdGV4dHVyZURlcHRoMkQgJiBmcmll
bmRzIGhhcmRjb2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkuCit9CisKK3ZvaWQgSW50cmlu
c2ljczo6YWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpCit7CisgICAgLy8gRklY
TUU6IFBvcHVsYXRlIHRoaXMuCit9CisKK2Jvb2wgSW50cmluc2ljczo6YWRkUHJpbWl0aXZlKEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAg
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpICE9IDApCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJ2b2lkIikKKyAgICAgICAgbV92b2lkVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRp
b247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYm9vbCIp
CisgICAgICAgIG1fYm9vbFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2Ug
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVjaGFyIikgeworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRD
YW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA+PSAw
ICYmIHggPD0gMHhGRjsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRDYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAgICAg
ICAgICAgcmV0dXJuIHggPD0gMHhGRjsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHgpKSA9PSB4
OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldFN1Y2Nlc3Nv
cihbXShpbnQ2NF90IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHggKyAxKTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBpbnQ2NF90IHsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pih4KTsKKyAgICAgICAgfSk7
CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25l
ZEludGVnZXIoW10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDhfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBtX3VjaGFyVHlw
ZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVj
bGFyYXRpb24ubmFtZSgpID09ICJ1c2hvcnQiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1i
ZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVn
ZXIoW10oaW50IHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4ID49IDAgJiYgeCA8PSAweEZGRkY7
CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVz
ZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4
IDw9IDB4RkZGRjsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PHVpbnQxNl90Pih4KSkgPT0geDsKKyAgICAgICAg
fSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3IoW10oaW50NjRf
dCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTZf
dD4oeCArIDEpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNl
dEZvcm1hdFZhbHVlRnJvbUludGVnZXIoW10oaW50IHgpIC0+IGludDY0X3QgeworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAg
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIo
W10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8dWludDE2X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbV91c2hvcnRUeXBlID0gJm5h
dGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5uYW1lKCkgPT0gInVpbnQiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJ
c0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIoKTsKKyAg
ICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50
IHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4ID49IDA7CisgICAgICAgIH0pOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVu
c2lnbmVkKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAg
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PHVpbnQz
Ml90Pih4KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRTdWNjZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oeCArIDEpOworICAgICAgICB9KTsKKyAgICAgICAg
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbUludGVnZXIoW10oaW50IHgp
IC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pih4
KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRW
YWx1ZUZyb21VbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHgpOworICAgICAgICB9KTsKKyAg
ICAgICAgbV91aW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlm
IChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJjaGFyIikgeworICAgICAgICBuYXRp
dmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc1Np
Z25lZCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50
ZWdlcihbXShpbnQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPj0gLTEyOCAmJiB4IDw9IDEy
NzsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXBy
ZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAgICAgICAgICAgcmV0dXJu
IHggPD0gMTI3OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNl
dENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50OF90Pih4KSkgPT0geDsKKyAgICAgICAgfSk7
CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3IoW10oaW50NjRfdCB4
KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHgg
KyAxKTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3Jt
YXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcihbXSh1bnNp
Z25lZCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ4
X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbV9jaGFyVHlwZSA9ICZuYXRpdmVUeXBlRGVj
bGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09
ICJzaG9ydCIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzSW50KCk7Cisg
ICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOworICAgICAgICBuYXRp
dmVUeXBlRGVjbGFyYXRpb24uc2V0SXNTaWduZWQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50IHgpIHsKKyAgICAgICAgICAgIHJl
dHVybiB4ID49IC0zMjc2OCAmJiB4IDw9IDMyNzY3OworICAgICAgICB9KTsKKyAgICAgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNp
Z25lZCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA8PSAzMjc2NzsKKyAgICAgICAgfSk7Cisg
ICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9h
dCB4KSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0
PGludDE2X3Q+KHgpKSA9PSB4OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldFN1Y2Nlc3NvcihbXShpbnQ2NF90IHgpIC0+IGludDY0X3QgeworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDE2X3Q+KHggKyAxKTsKKyAgICAgICAgfSk7CisgICAg
ICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGlu
dCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQxNl90
Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3Jt
YXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MTZfdD4oeCk7CisgICAgICAgIH0pOwor
ICAgICAgICBtX3Nob3J0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNl
IGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJpbnQiKSB7CisgICAgICAgIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFy
YXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElz
U2lnbmVkKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJ
bnRlZ2VyKFtdKGludCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOwor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRl
Z2VyKFtdKHVuc2lnbmVkIHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4IDw9IDIxNDc0ODM2NDc7
CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVz
ZW50RmxvYXQoW10oZmxvYXQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0PihzdGF0aWNfY2FzdDxpbnQzMl90Pih4KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAgICAg
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2
NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih4ICsgMSk7Cisg
ICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVG
cm9tSW50ZWdlcihbXShpbnQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgp
IC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHgp
OworICAgICAgICB9KTsKKyAgICAgICAgbV9pbnRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlv
bjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImhhbGYi
KSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOworICAgICAg
ICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNGbG9hdGluZygpOworICAgICAgICBuYXRpdmVU
eXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCkgeworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFy
YXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQpIHsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbV9oYWxmVHlwZSA9ICZuYXRpdmVUeXBlRGVj
bGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09
ICJmbG9hdCIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzTnVtYmVyKCk7
CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0Zsb2F0aW5nKCk7CisgICAgICAg
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkKSB7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBtX2Zsb2F0VHlwZSA9ICZuYXRp
dmVUeXBlRGVjbGFyYXRpb247CisgICAgfQorICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkgPT0gImF0b21pY19pbnQiKQorICAgICAgICBtX2F0b21pY0ludFR5cGUgPSAm
bmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5uYW1lKCkgPT0gImF0b21pY191aW50IikKKyAgICAgICAgbV9hdG9taWNVaW50VHlwZSA9ICZu
YXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9u
Lm5hbWUoKSA9PSAic2FtcGxlciIpCisgICAgICAgIG1fc2FtcGxlclR5cGUgPSAmbmF0aXZlVHlw
ZURlY2xhcmF0aW9uOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50cmluc2ljczo6YWRkVmVjdG9yKEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgIT0gInZlY3RvciIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygp
LnNpemUoKSA9PSAyKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVB
cmd1bWVudHMoKVswXSkpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6
Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygp
WzFdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlUG9pbnRlciA9IFdURjo6Z2V0PHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3Vt
ZW50cygpWzBdKTsKKyAgICBhdXRvJiBsZW5ndGhFeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNUOjpD
b25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClb
MV0pOworICAgIEFTU0VSVChpbm5lclR5cGVQb2ludGVyKTsKKyAgICBhdXRvJiBpbm5lclR5cGUg
PSAqaW5uZXJUeXBlUG9pbnRlcjsKKyAgICBBU1NFUlQoaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMo
KS5zaXplKCkgPT0gMCk7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qKiBhcnJheTsK
KyAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiYm9vbCIpCisgICAgICAgIGFycmF5ID0gbV92
ZWN0b3JCb29sOworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gInVjaGFyIikKKyAg
ICAgICAgYXJyYXkgPSBtX3ZlY3RvclVjaGFyOworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1l
KCkgPT0gInVzaG9ydCIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JVc2hvcnQ7CisgICAgZWxz
ZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAidWludCIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0
b3JVaW50OworICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImNoYXIiKQorICAgICAg
ICBhcnJheSA9IG1fdmVjdG9yQ2hhcjsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09
ICJzaG9ydCIpCisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JTaG9ydDsKKyAgICBlbHNlIGlmIChp
bm5lclR5cGUubmFtZSgpID09ICJpbnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9ySW50Owor
ICAgIGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImhhbGYiKQorICAgICAgICBhcnJheSA9
IG1fdmVjdG9ySGFsZjsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJmbG9hdCIp
CisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JGbG9hdDsKKyAgICBlbHNlCisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIGludCBsZW5ndGggPSBsZW5ndGhFeHByZXNzaW9uLmludGVn
ZXJMaXRlcmFsKCkudmFsdWUoKTsKKyAgICBBU1NFUlQobGVuZ3RoID49IDIgJiYgbGVuZ3RoIDw9
IDQpOworICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc1ZlY3RvcigpOworICAgIGFycmF5
W2xlbmd0aCAtIDJdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRNYXRyaXgoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0
aW9uLm5hbWUoKSAhPSAibWF0cml4IikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNT
RVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDMpOwor
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5
cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7
CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Np
b24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pKTsKKyAgICBBU1NF
UlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZl
VHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsyXSkpOworICAgIGF1dG8mIGlubmVyVHlw
ZVBvaW50ZXIgPSBXVEY6OmdldDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVmZXJlbmNlPj4o
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSk7CisgICAgYXV0byYgcm93
RXhwcmVzc2lvbiA9IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBl
RGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKTsKKyAgICBhdXRvJiBjb2x1bW5FeHByZXNz
aW9uID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi50eXBlQXJndW1lbnRzKClbMl0pOworICAgIEFTU0VSVChpbm5lclR5cGVQb2ludGVyKTsK
KyAgICBhdXRvJiBpbm5lclR5cGUgPSAqaW5uZXJUeXBlUG9pbnRlcjsKKyAgICBBU1NFUlQoaW5u
ZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMCk7CisgICAgQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24qICgqYXJyYXkpWzNdOworICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJo
YWxmIikKKyAgICAgICAgYXJyYXkgPSBtX21hdHJpeEhhbGY7CisgICAgaWYgKGlubmVyVHlwZS5u
YW1lKCkgPT0gImZsb2F0IikKKyAgICAgICAgYXJyYXkgPSBtX21hdHJpeEZsb2F0OworICAgIGlu
dCByb3cgPSByb3dFeHByZXNzaW9uLmludGVnZXJMaXRlcmFsKCkudmFsdWUoKTsKKyAgICBBU1NF
UlQocm93ID49IDIgJiYgcm93IDw9IDQpOworICAgIGludCBjb2x1bW4gPSBjb2x1bW5FeHByZXNz
aW9uLmludGVnZXJMaXRlcmFsKCkudmFsdWUoKTsKKyAgICBBU1NFUlQoY29sdW1uID49IDIgJiYg
Y29sdW1uIDw9IDQpOworICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc01hdHJpeCgpOwor
ICAgIGFycmF5W3JvdyAtIDJdW2NvbHVtbiAtIDJdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRGdWxsVGV4dHVyZShB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uLCBBU1Q6OlR5
cGVSZWZlcmVuY2UmIGlubmVyVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB0ZXh0dXJlVHlwZUluZGV4
ID0gbV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChuYXRpdmVU
eXBlRGVjbGFyYXRpb24ubmFtZSgpID09IG1fdGV4dHVyZVR5cGVOYW1lc1tpXSkKKyAgICAgICAg
ICAgIHRleHR1cmVUeXBlSW5kZXggPSBpOworICAgIH0KKyAgICBpZiAodGV4dHVyZVR5cGVJbmRl
eCA9PSBtX3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICB1bnNpZ25lZCBpbm5lclR5cGVJbmRleCA9IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNp
emUoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChpbm5lclR5cGUubmFtZSgpLnN0YXJ0c1dpdGgobV90ZXh0dXJlSW5uZXJUeXBlTmFtZXNbaV0p
KSB7CisgICAgICAgICAgICB0ZXh0dXJlVHlwZUluZGV4ID0gaTsKKyAgICAgICAgICAgIGlmIChp
bm5lclR5cGUubmFtZSgpID09IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzW2ldKQorICAgICAgICAg
ICAgICAgIHZlY3Rvckxlbmd0aCA9IDE7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSA9PSBtX3RleHR1cmVJbm5lclR5
cGVOYW1lc1tpXS5sZW5ndGgoKSArIDEpOworICAgICAgICAgICAgICAgIEFTU0VSVChpbm5lclR5
cGUubmFtZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSA9PSAnMicKKyAgICAgICAg
ICAgICAgICAgICAgfHwgaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgp
IC0gMV0gPT0gJzMnCisgICAgICAgICAgICAgICAgICAgIHx8IGlubmVyVHlwZS5uYW1lKClbaW5u
ZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAtIDFdID09ICc0Jyk7CisgICAgICAgICAgICAgICAgdmVj
dG9yTGVuZ3RoID0gaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpIC0g
MV0gLSAnMCc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKGlu
bmVyVHlwZUluZGV4ICE9IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKSk7CisgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldElzVGV4dHVyZSgpOworICAgIG1fZnVsbFRleHR1cmVzW3Rl
eHR1cmVUeXBlSW5kZXhdW2lubmVyVHlwZUluZGV4XVt2ZWN0b3JMZW5ndGggLSAxXSA9ICZuYXRp
dmVUeXBlRGVjbGFyYXRpb247CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50cmluc2lj
czo6YWRkRGVwdGhUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBl
RGVjbGFyYXRpb24sIEFTVDo6VHlwZVJlZmVyZW5jZSYgaW5uZXJUeXBlKQoreworICAgIEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uKiogdGV4dHVyZTsKKyAgICBpZiAobmF0aXZlVHlwZURlY2xh
cmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZURlcHRoMkQiKQorICAgICAgICB0ZXh0dXJlID0gbV90
ZXh0dXJlRGVwdGgyRDsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
ID09ICJSV1RleHR1cmVEZXB0aDJEIikKKyAgICAgICAgdGV4dHVyZSA9IG1fcndUZXh0dXJlRGVw
dGgyRDsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJUZXh0
dXJlRGVwdGgyREFycmF5IikKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZURlcHRoMkRBcnJh
eTsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJSV1RleHR1
cmVEZXB0aDJEQXJyYXkiKQorICAgICAgICB0ZXh0dXJlID0gbV9yd1RleHR1cmVEZXB0aDJEQXJy
YXk7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVy
ZURlcHRoQ3ViZSIpCisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVEZXB0aEN1YmU7CisgICAg
ZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB1bnNpZ25lZCBpbm5lclR5
cGVJbmRleCA9IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcy5zaXplKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXNb
aV0pCisgICAgICAgICAgICBpbm5lclR5cGVJbmRleCA9IGk7CisgICAgfQorICAgIEFTU0VSVChp
bm5lclR5cGVJbmRleCAhPSBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpKTsKKyAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNUZXh0dXJlKCk7CisgICAgdGV4dHVyZVtpbm5lclR5
cGVJbmRleF0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIEludHJpbnNpY3M6OmFkZFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24m
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0
aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMSk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGVQ
b2ludGVyID0gV1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgIEFTU0VSVChpbm5l
clR5cGVQb2ludGVyKTsKKyAgICBhdXRvJiBpbm5lclR5cGUgPSAqaW5uZXJUeXBlUG9pbnRlcjsK
KyAgICBBU1NFUlQoaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMCk7CisgICAg
aWYgKGFkZEZ1bGxUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgaW5uZXJUeXBlKSkgewor
ICAgICAgICBtX3RleHR1cmVTZXQuYWRkKCZuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmIChhZGREZXB0aFRleHR1cmUobmF0aXZlVHlwZURlY2xh
cmF0aW9uLCBpbm5lclR5cGUpKQorICAgICAgICBtX3RleHR1cmVTZXQuYWRkKCZuYXRpdmVUeXBl
RGVjbGFyYXRpb24pOworfQorCit2b2lkIEludHJpbnNpY3M6OmFkZChBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlmIChhZGRQcmltaXRp
dmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChhZGRW
ZWN0b3IobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChh
ZGRNYXRyaXgobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuOworICAgIGFk
ZFRleHR1cmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKK30KKworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRy
aW5zaWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJp
bnNpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzFhOThhYjNk
YjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEludHJpbnNpY3MuaApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMTmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNw
YWNlIFdITFNMIHsKKworY2xhc3MgSW50cmluc2ljcyB7CitwdWJsaWM6CisgICAgSW50cmluc2lj
cygpOworCisgICAgdm9pZCBhZGQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJik7Cisg
ICAgdm9pZCBhZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKworICAgIEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uJiB2b2lkVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQobV92b2lkVHlwZSk7CisgICAgICAgIHJldHVybiAqbV92b2lkVHlwZTsKKyAgICB9CisKKyAg
ICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgYm9vbFR5cGUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fYm9vbFR5cGUpOworICAgICAgICByZXR1cm4gKm1fYm9vbFR5cGU7Cisg
ICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIGludFR5cGUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1faW50VHlwZSk7CisgICAgICAgIHJldHVybiAqbV9pbnRU
eXBlOworICAgIH0KKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiB1aW50VHlwZSgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV91aW50VHlwZSk7CisgICAgICAgIHJldHVy
biAqbV91aW50VHlwZTsKKyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYg
c2FtcGxlclR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2FtcGxlclR5cGUp
OworICAgICAgICByZXR1cm4gKm1fc2FtcGxlclR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mIGZsb2F0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQobV9mbG9hdFR5cGUpOworICAgICAgICByZXR1cm4gKm1fZmxvYXRUeXBlOworICAgIH0KKwor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBmbG9hdDNUeXBlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3ZlY3RvckZsb2F0WzFdKTsKKyAgICAgICAgcmV0dXJuICptX3Zl
Y3RvckZsb2F0WzFdOworICAgIH0KKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBm
bG9hdDRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3ZlY3RvckZsb2F0WzJd
KTsKKyAgICAgICAgcmV0dXJuICptX3ZlY3RvckZsb2F0WzJdOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBib29sIGFkZFByaW1pdGl2ZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAg
IGJvb2wgYWRkVmVjdG9yKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBh
ZGRNYXRyaXgoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBib29sIGFkZEZ1bGxU
ZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiwgQVNUOjpUeXBlUmVmZXJlbmNlJik7
CisgICAgYm9vbCBhZGREZXB0aFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mLCBB
U1Q6OlR5cGVSZWZlcmVuY2UmKTsKKyAgICB2b2lkIGFkZFRleHR1cmUoQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24mKTsKKworICAgIEhhc2hTZXQ8Y29uc3QgQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24qPiBtX3RleHR1cmVTZXQ7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiog
bV92b2lkVHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9ib29sVHlwZTsK
KyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV91Y2hhclR5cGU7CisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdXNob3J0VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV91aW50VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiog
bV9jaGFyVHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9zaG9ydFR5cGU7
CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1faW50VHlwZTsKKyAgICBBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9oYWxmVHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiogbV9mbG9hdFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1f
YXRvbWljSW50VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9hdG9taWNV
aW50VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9zYW1wbGVyVHlwZTsK
KworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckJvb2xbM107CisgICAg
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yVWNoYXJbM107CisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yVXNob3J0WzNdOworICAgIEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvclVpbnRbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24qIG1fdmVjdG9yQ2hhclszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biogbV92ZWN0b3JTaG9ydFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92
ZWN0b3JJbnRbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9ySGFs
ZlszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JGbG9hdFszXTsK
KworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX21hdHJpeEhhbGZbM11bM107Cisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fbWF0cml4RmxvYXRbM11bM107CisKKyAg
ICBWZWN0b3I8U3RyaW5nPiBtX3RleHR1cmVUeXBlTmFtZXM7CisgICAgVmVjdG9yPFN0cmluZz4g
bV90ZXh0dXJlSW5uZXJUeXBlTmFtZXM7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biogbV9mdWxsVGV4dHVyZXNbMTFdWzhdWzRdOworCisgICAgVmVjdG9yPFN0cmluZz4gbV9kZXB0
aFRleHR1cmVJbm5lclR5cGVzOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3Rl
eHR1cmVEZXB0aDJEWzJdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3J3VGV4
dHVyZURlcHRoMkRbMl07CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdGV4dHVy
ZURlcHRoMkRBcnJheVsyXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9yd1Rl
eHR1cmVEZXB0aDJEQXJyYXlbMl07CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1f
dGV4dHVyZURlcHRoQ3ViZVsyXTsKK307CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKaW5kZXggM2Ix
OTM0ZTkzMTYuLmU5YWVhZTdiNTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcApAQCAtMjMsOCArMjMsNiBAQAogICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNwcmFnbWEgb25jZQotCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZTg2YmI5ODA0YQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFt
ZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0
LmgiCisKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUg
IldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIK
KyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5
cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworTmFtZUNvbnRleHQ6
Ok5hbWVDb250ZXh0KE5hbWVDb250ZXh0KiBwYXJlbnQpCisgICAgOiBtX3BhcmVudChwYXJlbnQp
Cit7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBl
RGVmaW5pdGlvbikKK3sKKyAgICBpZiAoZXhpc3RzKHR5cGVEZWZpbml0aW9uLm5hbWUoKSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKHR5cGVE
ZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1l
ZFR5cGU+LCAxPigpKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQodHlwZURlZmluaXRp
b24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpT
dHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQoreworICAgIGlmIChleGlz
dHMoc3RydWN0dXJlRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSwg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAg
ICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQoreworICAgIGlmIChleGlzdHMoZW51bWVy
YXRpb25EZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRv
IHJlc3VsdCA9IG1fdHlwZXMuYWRkKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlv
biYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIGlmIChtX3R5cGVzLmZpbmQoZnVuY3Rpb25E
ZWZpbml0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQorICAgICAgICB8fCBtX3ZhcmlhYmxl
cy5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX2Z1bmN0aW9ucy5hZGQo
ZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4oKSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZS5hcHBlbmQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobV90eXBlcy5maW5kKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAgIHx8IG1f
dmFyaWFibGVzLmZpbmQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdmFy
aWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBt
X2Z1bmN0aW9ucy5hZGQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCksIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkpOwor
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAo
bV9mdW5jdGlvbnMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX2Z1bmN0
aW9ucy5lbmQoKQorICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFt
ZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkp
OworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKGV4aXN0
cyh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBhdXRvIHJlc3VsdCA9IG1fdmFyaWFibGVzLmFkZChTdHJpbmcodmFyaWFibGVEZWNsYXJhdGlv
bi5uYW1lKCkpLCAmdmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgcmV0dXJuIHJlc3VsdC5pc05l
d0VudHJ5OworfQorCitWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlw
ZT4sIDE+KiBOYW1lQ29udGV4dDo6Z2V0VHlwZXMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGF1dG8gaXRlcmF0b3IgPSBtX3R5cGVzLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09
IG1fdHlwZXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKG1fcGFyZW50KQorICAgICAgICAgICAgcmV0
dXJuIG1fcGFyZW50LT5nZXRUeXBlcyhuYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorICAgIHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOworfQorCitWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiogTmFtZUNvbnRleHQ6
OmdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0byBpdGVyYXRvciA9
IG1fZnVuY3Rpb25zLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09IG1fZnVuY3Rpb25z
LmVuZCgpKSB7CisgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBtX3Bh
cmVudC0+Z2V0RnVuY3Rpb25zKG5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7Cit9CisKK0FTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbiogTmFtZUNvbnRleHQ6OmdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAg
ICBhdXRvIGl0ZXJhdG9yID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlcmF0
b3IgPT0gbV92YXJpYWJsZXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKG1fcGFyZW50KQorICAgICAg
ICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRWYXJpYWJsZShuYW1lKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7Cit9CisKK2Jvb2wg
TmFtZUNvbnRleHQ6OmV4aXN0cyhTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIG1fdHlwZXMu
ZmluZChuYW1lKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAgIHx8IG1fZnVuY3Rpb25zLmZpbmQo
bmFtZSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkKKyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChu
YW1lKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kM2RmODAwMTRhZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTmFtZUNvbnRleHQuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
V0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgTmFtZWRUeXBlOworY2xhc3MgRnVu
Y3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNzIFR5cGVEZWZpbml0aW9uOworY2xhc3MgU3RydWN0dXJl
RGVmaW5pdGlvbjsKK2NsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIEZ1bmN0aW9u
RGVmaW5pdGlvbjsKK2NsYXNzIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBOYXRp
dmVUeXBlRGVjbGFyYXRpb247CitjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uOworCit9CisKK2Ns
YXNzIE5hbWVDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBOYW1lQ29udGV4dChOYW1lQ29udGV4dCog
cGFyZW50ID0gbnVsbHB0cik7CisKKyAgICBib29sIGFkZChBU1Q6OlR5cGVEZWZpbml0aW9uJik7
CisgICAgYm9vbCBhZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQo
QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biYpOworICAgIGJvb2wgYWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9v
bCBhZGQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJik7CisKKyAgICBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KiBnZXRUeXBlcyhjb25zdCBTdHJpbmcm
KTsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24+LCAxPiogZ2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYpOworICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiogZ2V0VmFyaWFibGUoY29uc3QgU3RyaW5nJik7CisKK3ByaXZhdGU6Cisg
ICAgYm9vbCBleGlzdHMoU3RyaW5nJik7CisKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPj4gbV90eXBlczsKKyAgICBI
YXNoTWFwPFN0cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uPiwgMT4+IG1fZnVuY3Rpb25zOworICAgIEhhc2hNYXA8U3RyaW5nLCBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24qPiBtX3ZhcmlhYmxlczsKKyAgICBOYW1lQ29udGV4dCogbV9w
YXJlbnQ7Cit9OworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKaW5kZXggNzgw
ZDVjNTQyNWEuLmZiZjUwNTg1NDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCkBAIC0yOCwxOSArMjgs
MjUwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2ZXIu
aCIKIAotI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorI2luY2x1
ZGUgIldITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVy
ZW5jZS5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xJZlN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisjaW5jbHVk
ZSAiV0hMU0xEb1doaWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgorI2luY2x1
ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVS
ZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFJldHVybi5oIgorI2luY2x1ZGUgIldITFNMUHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb3RFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExT
TENhbGxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAotY2xhc3MgTmFtZVJlc29sdmVyIDog
cHVibGljIFZpc2l0b3IgewotICAgIH5OYW1lUmVzb2x2ZXIoKSA9IGRlZmF1bHQ7Ci19OworTmFt
ZVJlc29sdmVyOjpOYW1lUmVzb2x2ZXIoTmFtZUNvbnRleHQmIG5hbWVDb250ZXh0KQorICAgIDog
bV9uYW1lQ29udGV4dChuYW1lQ29udGV4dCkKK3sKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZp
c2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKK3sKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQodHlwZVJlZmVyZW5jZSk7CisgICAgaWYgKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRU
eXBlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGNhbmRpZGF0ZXMgPSBtX25hbWVD
b250ZXh0LmdldFR5cGVzKHR5cGVSZWZlcmVuY2UubmFtZSgpKTsKKyAgICBpZiAoY2FuZGlkYXRl
cyA9PSBudWxscHRyKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoKmNhbmRp
ZGF0ZXMsIHR5cGVSZWZlcmVuY2UudHlwZUFyZ3VtZW50cygpKSkKKyAgICAgICAgdHlwZVJlZmVy
ZW5jZS5zZXRSZXNvbHZlZFR5cGUoKnJlc3VsdCk7CisgICAgZWxzZSB7CisgICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2
aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAg
IE5hbWVDb250ZXh0IG5ld05hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICBOYW1lUmVz
b2x2ZXIgbmV3TmFtZVJlc29sdmVyKG5ld05hbWVDb250ZXh0KTsKKyAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7CisgICAgZm9yIChhdXRvJiBwYXJhbWV0
ZXIgOiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpKSB7CisgICAgICAgIG5ld05hbWVS
ZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQocGFyYW1ldGVyKTsKKyAgICAgICAgYXV0byBzdWNj
ZXNzID0gbmV3TmFtZUNvbnRleHQuYWRkKHBhcmFtZXRlcik7CisgICAgICAgIGlmICghc3VjY2Vz
cykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBuZXdOYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0
aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFT
VDo6QmxvY2smIGJsb2NrKQoreworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVD
b250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNp
dChibG9jayk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OklmU3RhdGVtZW50
JiBpZlN0YXRlbWVudCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuY29u
ZGl0aW9uYWwoKSk7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQp
OworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KGlmU3Rh
dGVtZW50LmJvZHkoKSk7CisgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpIHsKKyAgICAg
ICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgICAgICBOYW1l
UmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdCgqaWZTdGF0ZW1lbnQuZWxz
ZUJvZHkoKSk7CisgICAgfQorfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpXaGls
ZUxvb3AmIHdoaWxlTG9vcCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmNv
bmRpdGlvbmFsKCkpOworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0
KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdCh3aGls
ZUxvb3AuYm9keSgpKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RG9XaGls
ZUxvb3AmIHdoaWxlTG9vcCkKK3sKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1l
Q29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlz
aXQod2hpbGVMb29wLmJvZHkoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5j
b25kaXRpb25hbCgpKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Rm9yTG9v
cCYgZm9yTG9vcCkKK3sKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4
dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQoZm9y
TG9vcCk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgbV9uYW1lQ29udGV4dC5hZGQodmFy
aWFibGVEZWNsYXJhdGlvbik7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVjbGFy
YXRpb24pOworfQogCi12b2lkIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYpCit2b2lkIE5h
bWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVu
Y2UpCiB7CisgICAgaWYgKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChhdXRvKiB2YXJpYWJsZSA9IG1fbmFtZUNvbnRleHQuZ2V0VmFyaWFi
bGUodmFyaWFibGVSZWZlcmVuY2UubmFtZSgpKSkKKyAgICAgICAgdmFyaWFibGVSZWZlcmVuY2Uu
c2V0VmFyaWFibGUoKnZhcmlhYmxlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFT
VDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpCit7CisgICAgQVNTRVJUKG1fY3VycmVudEZ1bmN0
aW9uKTsKKyAgICByZXR1cm5TdGF0ZW1lbnQuc2V0RnVuY3Rpb24obV9jdXJyZW50RnVuY3Rpb24p
OworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZXR1cm5TdGF0ZW1lbnQpOworfQogCit2b2lkIE5h
bWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoYXV0byogZ2V0RnVuY3Rpb25zID0gbV9uYW1l
Q29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmdldEZ1bmN0aW9u
TmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldFBvc3NpYmxlR2V0
T3ZlcmxvYWRzKCpnZXRGdW5jdGlvbnMpOworICAgIGlmIChhdXRvKiBzZXRGdW5jdGlvbnMgPSBt
X25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0RnVu
Y3Rpb25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9zc2li
bGVTZXRPdmVybG9hZHMoKnNldEZ1bmN0aW9ucyk7CisgICAgaWYgKGF1dG8qIGFuZEZ1bmN0aW9u
cyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5h
bmRGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQ
b3NzaWJsZUFuZE92ZXJsb2FkcygqYW5kRnVuY3Rpb25zKTsKKyAgICBjaGVja0Vycm9yQW5kVmlz
aXQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZp
c2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICBpZiAoaXM8QVNU
OjpWYXJpYWJsZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5iYXNlKCkpKSB7CisgICAgICAgIGlm
IChhdXRvIGVudW1lcmF0aW9uVHlwZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKGRvd25jYXN0
PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGRvdEV4cHJlc3Npb24uYmFzZSgpKS5uYW1lKCkpKSB7
CisgICAgICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy0+c2l6ZSgpID09IDEpOworICAg
ICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVudW1lcmF0aW9uVHlwZXMpWzBdOwor
ICAgICAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPih0eXBlKSkgewor
ICAgICAgICAgICAgICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRl
ZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5t
ZW1iZXJCeU5hbWUoZG90RXhwcmVzc2lvbi5maWVsZE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwp
IDw9IHNpemVvZihBU1Q6OkRvdEV4cHJlc3Npb24pLCAiRG90IGV4cHJlc3Npb25zIG5lZWQgdG8g
YmUgYWJsZSB0byBiZWNvbWUgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFscyB3aXRob3V0IHVwZGF0
aW5nIGJhY2tyZWZlcmVuY2VzIik7CisgICAgICAgICAgICAgICAgICAgIExleGVyOjpUb2tlbiBv
cmlnaW4gPSBkb3RFeHByZXNzaW9uLm9yaWdpbigpOworICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogUGVyaGFwcyBkbyB0aGlzIHdpdGggdmFyaWFudHMgb3IgYSBSZXdyaXRlciBpbnN0ZWFk
LgorICAgICAgICAgICAgICAgICAgICBkb3RFeHByZXNzaW9uLn5Eb3RFeHByZXNzaW9uKCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5ldyAoJmRvdEV4cHJlc3Npb24pIEFTVDo6RW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsKFdURk1vdmUob3JpZ2luKSwgKm1lbWJlcik7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGRvdEV4cHJlc3Npb24pOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNU
OjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFjYWxsRXhwcmVz
c2lvbi5oYXNPdmVybG9hZHMoKSkgeworICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9u
YW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkKKyAgICAgICAg
ICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBpZiAoYXV0byogdHlwZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVz
KGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZXMtPnNp
emUoKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbnMgPSBt
X25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxF
eHByZXNzaW9uLnNldENhc3REYXRhKCgqdHlwZXMpWzBdLmdldCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldE92ZXJsb2FkcygqZnVuY3Rpb25zKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKSB7Cisg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGNhbGxFeHByZXNzaW9uKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0
KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0
YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKQoreworICAgIGlmIChhdXRv
IGVudW1lcmF0aW9uVHlwZXMgPSBtX25hbWVDb250ZXh0LmdldFR5cGVzKGNvbnN0YW50RXhwcmVz
c2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmxlZnQoKSkpIHsKKyAgICAgICAgQVNTRVJU
KGVudW1lcmF0aW9uVHlwZXMtPnNpemUoKSA9PSAxKTsKKyAgICAgICAgQVNUOjpOYW1lZFR5cGUm
IHR5cGUgPSAoKmVudW1lcmF0aW9uVHlwZXMpWzBdOworICAgICAgICBpZiAoaXM8QVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24+KHR5cGUpKSB7CisgICAgICAgICAgICBBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24+KHR5cGUpOworICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi5tZW1iZXJCeU5hbWUoY29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2UucmlnaHQoKSkpIHsKKyAgICAgICAgICAgICAgICBjb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5zZXRFbnVtZXJhdGlvbk1lbWJl
cihlbnVtZXJhdGlvbkRlZmluaXRpb24sICptZW1iZXIpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzZXRFcnJvcigp
OworfQorCisvLyBGSVhNRTogTWFrZSBzdXJlIGFsbCB0aGUgbmFtZXMgaGF2ZSBiZWVuIHJlc29s
dmVkLgorCitib29sIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSwgTmFtZVJl
c29sdmVyJiBuYW1lUmVzb2x2ZXIpCit7CisgICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6
IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNr
RXJyb3JBbmRWaXNpdCgqdHlwZURlZmluaXRpb24pOworICAgICAgICBpZiAobmFtZVJlc29sdmVy
LmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAoYXV0
byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKSkg
eworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KCpzdHJ1Y3R1cmVEZWZp
bml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlv
biA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNv
bHZlci5jaGVja0Vycm9yQW5kVmlzaXQoKmVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAg
IGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFu
ZFZpc2l0KCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworICAgICAgICBpZiAobmFtZVJlc29sdmVy
LmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitib29sIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0s
IE5hbWVSZXNvbHZlciYgbmFtZVJlc29sdmVyKQoreworICAgIGZvciAoYXV0byYgZnVuY3Rpb25E
ZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFt
ZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24oZnVuY3Rpb25EZWZpbml0aW9u
LmdldCgpKTsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCgqZnVuY3Rp
b25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBuYW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1
bmN0aW9uRGVmaW5pdGlvbihudWxscHRyKTsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpIHsKKyAg
ICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCgqbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZl
ci5oCmluZGV4IDQ3ZDRkNmE1NzkzLi4xNWFmZGUzZDAzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCkBAIC0y
NywxMyArMjcsNDkgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTFBy
b2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisjaW5jbHVkZSAiV0hMU0xW
aXNpdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAot
dm9pZCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYW0pOworY2xhc3MgUHJvZ3Jh
bTsKKworY2xhc3MgTmFtZVJlc29sdmVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAg
IE5hbWVSZXNvbHZlcihOYW1lQ29udGV4dCYpOworCisgICAgdmlydHVhbCB+TmFtZVJlc29sdmVy
KCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYg
ZnVuY3Rpb25EZWZpbml0aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0Q3VycmVudEZ1bmN0
aW9uRGVmaW5pdGlvbihBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25EZWZpbml0aW9u
KQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50RnVuY3Rpb24gPSBmdW5jdGlvbkRlZmluaXRpb247
CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6
OldoaWxlTG9vcCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYp
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lk
IHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0
KEFTVDo6UmV0dXJuJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNz
aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJikgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9u
TWVtYmVyUmVmZXJlbmNlJikgb3ZlcnJpZGU7CisKKyAgICBOYW1lQ29udGV4dCBtX25hbWVDb250
ZXh0OworICAgIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uKiBtX2N1cnJlbnRGdW5jdGlvbiB7IG51
bGxwdHIgfTsKK307CisKK2Jvb2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiwgTmFtZVJl
c29sdmVyJik7Citib29sIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mLCBOYW1lUmVz
b2x2ZXImKTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFBhcnNlci5jcHAKaW5kZXggYmM2ZTczZTZhMWYuLmE3ZGI1ZTUzNDdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIu
Y3BwCkBAIC0zOCw3ICszOCw4IEBAIFBhcnNlcjo6UGFyc2VyKCkKIHsKIH0KIAotYXV0byBQYXJz
ZXI6OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1v
ZGUpIC0+IE9wdGlvbmFsPEVycm9yPgorLy8gRklYTUU6IFJldHVybiBhIGJldHRlciBlcnJvciBj
b2RlIGZyb20gdGhpcywgYW5kIHJlcG9ydCBpdCB0byBKYXZhU2NyaXB0LgorYXV0byBQYXJzZXI6
OnBhcnNlKFByb2dyYW0mIHByb2dyYW0sIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2Rl
KSAtPiBPcHRpb25hbDxFcnJvcj4KIHsKICAgICBtX2xleGVyID0gTGV4ZXIoc3RyaW5nVmlldyk7
CiAgICAgbV9tb2RlID0gbW9kZTsKQEAgLTU0LDcgKzU1LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBP
cHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVHlwZURlZmluaXRpb24oKTsKICAg
ICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKHR5cGVEZWZpbml0aW9uKSB7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVmaW5pdGlvbikpOworICAgICAg
ICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKnR5cGVEZWZp
bml0aW9uKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAg
ICAgICAgIFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCB0eXBlRGVmaW5pdGlvbi0+bmFt
ZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtNjQsNyArNjksMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNl
KFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9w
dGlvbmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VTdHJ1Y3R1cmVEZWZpbml0aW9uKCk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVEZWZpbml0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpzdHJ1Y3R1cmVEZWZpbml0
aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RG
TW92ZSgqc3RydWN0dXJlRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2Vz
cykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwg
c3RydWN0dXJlRGVmaW5pdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNzQsNyArODMs
MTEgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJp
bmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlvbmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFy
c2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAg
aWYgKGVudW1lcmF0aW9uRGVmaW5pdGlvbikgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoV1RGTW92ZSgqZW51bWVyYXRpb25EZWZpbml0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0
byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqZW51bWVyYXRpb25EZWZpbml0aW9u
KSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAg
IFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPm5h
bWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTg1LDcgKzk4LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBP
cHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKCk7
CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24pIHsK
LSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKmZ1bmN0aW9uRGVmaW5pdGlv
bikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1v
dmUoKmZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzcykg
eworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgZnVu
Y3Rpb25EZWZpbml0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZXJyb3IgPSBmdW5jdGlv
bkRlZmluaXRpb24uZXJyb3IoKTsKQEAgLTk2LDcgKzExMywxMSBAQCBhdXRvIFBhcnNlcjo6cGFy
c2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4g
T3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3Mg
PSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAgIFdURkxv
Z0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLT5uYW1l
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0xMDYsNyArMTI3LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBP
cHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlTmF0aXZlVHlwZURlY2xhcmF0aW9u
KCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRp
b24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKm5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBw
ZW5kKFdURk1vdmUoKm5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIGlm
ICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJy
b3IhICVzIiwgbmF0aXZlVHlwZURlY2xhcmF0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC00NTQsMTYgKzQ3OSw1MiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2
aWF0ZWQoKSAtPiBFeHBlY3RlZDxUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZQogICAgICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHJpZ2h0U3F1YXJlQnJhY2tldC5lcnJvcigpKTsKICAg
ICAgICAgcmV0dXJuIHt7ICp0b2tlbiwgV1RGOjpudWxsb3B0LCAqbnVtRWxlbWVudHMgfX07CiAg
ICAgfQotICAgIGF1dG8gYWRkcmVzc1NwYWNlID0gY29uc3VtZVR5cGVzKHsgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2UsIExleGVyOjpUb2tl
bjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkfSk7Ci0gICAg
aWYgKCFhZGRyZXNzU3BhY2UpCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRy
ZXNzU3BhY2UuZXJyb3IoKSk7Ci0gICAgcmV0dXJuIHt7ICp0b2tlbiwgeyAqYWRkcmVzc1NwYWNl
IH0sIFdURjo6bnVsbG9wdCB9fTsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZVRva2VuID0gY29uc3Vt
ZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6OlRva2VuOjpUeXBl
OjpEZXZpY2UsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExleGVyOjpUb2tlbjo6
VHlwZTo6VGhyZWFkfSk7CisgICAgaWYgKCFhZGRyZXNzU3BhY2VUb2tlbikKKyAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZVRva2VuLmVycm9yKCkpOworICAgIEFT
VDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsKKyAgICBzd2l0Y2gg
KGFkZHJlc3NTcGFjZVRva2VuLT50eXBlKSB7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6
OkNvbnN0YW50OgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFk
ZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpEZXZpY2U6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNl
VHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGV4
ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNU
OjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkOgorICAgICAgICBhZGRyZXNz
U3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKFN0cmluZygiU29tZXRoaW5nIHJl
YWxseSBiYWQgaGFwcGVuZWQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkpOworICAg
IH0KKyAgICByZXR1cm4ge3sgKnRva2VuLCB7IGFkZHJlc3NTcGFjZSB9LCBXVEY6Om51bGxvcHQg
fX07CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+IHsKLSAgICBhdXRvIGFkZHJlc3NT
cGFjZSA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVy
OjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBM
ZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOwotICAgIGlmICghYWRkcmVzc1NwYWNlKQotICAg
ICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYWRkcmVzc1NwYWNlLmVycm9yKCkpOworYXV0
byBQYXJzZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZVRv
a2VuID0gY29uc3VtZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6
OlRva2VuOjpUeXBlOjpEZXZpY2UsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExl
eGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkfSk7CisgICAgaWYgKCFhZGRyZXNzU3BhY2VUb2tlbikK
KyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZVRva2VuLmVycm9y
KCkpOworICAgIEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsK
KyAgICBzd2l0Y2ggKGFkZHJlc3NTcGFjZVRva2VuLT50eXBlKSB7CisgICAgY2FzZSBMZXhlcjo6
VG9rZW46OlR5cGU6OkNvbnN0YW50OgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVy
ZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2U6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFT
VDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cDoKKyAgICAgICAgYWRkcmVz
c1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkOgorICAg
ICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhy
ZWFkOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKFN0cmluZygi
U29tZXRoaW5nIHJlYWxseSBiYWQgaGFwcGVuZWQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSkpOworICAgIH0KICAgICBhdXRvIG5hbWUgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46
OlR5cGU6OklkZW50aWZpZXIpOwogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CkBAIC00NzEsMTIgKzUzMiwxMiBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6VHlwZT4sIEVycgogICAgIGlmICghdHlwZUFyZ3VtZW50cykKICAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGVBcmd1bWVudHMuZXJyb3IoKSk7CiAKLSAgICBhdXRvIGNv
bnN0cnVjdFR5cGVGcm9tU3VmZml4QWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeEFi
YnJldmlhdGVkJiB0eXBlU3VmZml4QWJicmV2aWF0ZWQsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5
cGU+JiYgcHJldmlvdXMpIC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IHsKKyAgICBhdXRv
IGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4QWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZp
eEFiYnJldmlhdGVkJiB0eXBlU3VmZml4QWJicmV2aWF0ZWQsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlVubmFtZWRUeXBlPiYmIHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVk
VHlwZT4gewogICAgICAgICBzd2l0Y2ggKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbi50eXBl
KSB7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpTdGFyOgotICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5
cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZS0+c3RyaW5nVmlldy50b1N0
cmluZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeEFiYnJldmlh
dGVkLnRva2VuKSwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgIGNh
c2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpTcXVhcmVCcmFja2V0UGFpcjoKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9r
ZW4odHlwZVN1ZmZpeEFiYnJldmlhdGVkLnRva2VuKSwgYWRkcmVzc1NwYWNlLT5zdHJpbmdWaWV3
LnRvU3RyaW5nKCksIFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1
ZmZpeEFiYnJldmlhdGVkLnRva2VuKSwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSk7
CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldDoKICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlUeXBlPihMZXhlcjo6
VG9rZW4odHlwZVN1ZmZpeEFiYnJldmlhdGVkLnRva2VuKSwgV1RGTW92ZShwcmV2aW91cyksICp0
eXBlU3VmZml4QWJicmV2aWF0ZWQubnVtRWxlbWVudHMpOwogICAgICAgICBkZWZhdWx0OgpAQCAt
NDg4LDcgKzU0OSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyCiAgICAgYXV0byBmaXJzdFR5
cGVTdWZmaXhBYmJyZXZpYXRlZCA9IHBhcnNlVHlwZVN1ZmZpeEFiYnJldmlhdGVkKCk7CiAgICAg
aWYgKCFmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZCkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KGZpcnN0VHlwZVN1ZmZpeEFiYnJldmlhdGVkLmVycm9yKCkpOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBl
UmVmZXJlbmNlPihMZXhlcjo6VG9rZW4oKmFkZHJlc3NTcGFjZSksIG5hbWUtPnN0cmluZ1ZpZXcu
dG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlVubmFtZWRUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZVJl
ZmVyZW5jZT4oV1RGTW92ZSgqYWRkcmVzc1NwYWNlVG9rZW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRv
U3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKICAgICByZXN1bHQgPSBjb25zdHJ1
Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkKCpmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZCwg
V1RGTW92ZShyZXN1bHQpKTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBhdXRvIHR5cGVT
dWZmaXhBYmJyZXZpYXRlZCA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPFR5cGVTdWZmaXhB
YmJyZXZpYXRlZCwgRXJyb3I+PihbJl0oKSB7CkBAIC01MDMsNyArNTY0LDcgQEAgYXV0byBQYXJz
ZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlR5cGU+LCBFcnIKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCi1hdXRvIFBh
cnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEFTVDo6VHlwZT4sIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3Bh
Y2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBF
cnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygpOwogICAgIGlmICghb3JpZ2luKQogICAg
ICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwpAQCAtNTE0LDEy
ICs1NzUsMTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4
cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LAogICAgIGlmICghdHlwZUFyZ3VtZW50
cykKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGVBcmd1bWVudHMuZXJyb3Io
KSk7CiAKLSAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4Tm9uQWJicmV2aWF0ZWQgPSBb
Jl0oY29uc3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkJiB0eXBlU3VmZml4Tm9uQWJicmV2aWF0
ZWQsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgcHJldmlvdXMpIC0+IHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+IHsKKyAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4Tm9uQWJi
cmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkJiB0eXBlU3VmZml4
Tm9uQWJicmV2aWF0ZWQsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHByZXZp
b3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAgICBzd2l0
Y2ggKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbi50eXBlKSB7CiAgICAgICAgIGNhc2Ug
TGV4ZXI6OlRva2VuOjpUeXBlOjpTdGFyOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJyZXZp
YXRlZC50b2tlbiksIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2UtPnN0cmlu
Z1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZm
aXhOb25BYmJyZXZpYXRlZC50b2tlbiksICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVz
c1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpU
eXBlOjpTcXVhcmVCcmFja2V0UGFpcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeE5vbkFi
YnJldmlhdGVkLnRva2VuKSwgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NTcGFjZS0+
c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRv
a2VuKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbiksICp0eXBlU3VmZml4Tm9uQWJicmV2
aWF0ZWQuYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgIGNhc2UgTGV4
ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldDoKICAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeE5v
bkFiYnJldmlhdGVkLnRva2VuKSwgV1RGTW92ZShwcmV2aW91cyksICp0eXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQubnVtRWxlbWVudHMpOwogICAgICAgICBkZWZhdWx0OgpAQCAtNTI4LDcgKzU4OSw3
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwKICAgICAgICAgfQogICAgIH07CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlw
ZVJlZmVyZW5jZT4oV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygp
LCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5u
YW1lZFR5cGU+IHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBlUmVmZXJlbmNlPihX
VEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnR5
cGVBcmd1bWVudHMpKTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBhdXRvIHR5cGVTdWZm
aXhOb25BYmJyZXZpYXRlZCA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPFR5cGVTdWZmaXhO
b25BYmJyZXZpYXRlZCwgRXJyb3I+PihbJl0oKSB7CiAgICAgICAgICAgICByZXR1cm4gcGFyc2VU
eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQoKTsKQEAgLTU0MiwxNCArNjAzLDE0IEBAIGF1dG8gUGFy
c2VyOjpwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpUeXBlPiwKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCi1hdXRvIFBh
cnNlcjo6cGFyc2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4s
IEVycm9yPiB7Ci0gICAgYXV0byB0eXBlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPj4oWyZdKCkgeworYXV0byBQYXJzZXI6OnBh
cnNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwg
RXJyb3I+IHsKKyAgICBhdXRvIHR5cGUgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPj4oWyZdKCkgewogICAgICAgICBy
ZXR1cm4gcGFyc2VBZGRyZXNzU3BhY2VUeXBlKCk7CiAgICAgfSk7CiAgICAgaWYgKHR5cGUpCiAg
ICAgICAgIHJldHVybiB0eXBlOwogCi0gICAgdHlwZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKKyAgICB0eXBl
ID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1l
ZFR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKICAgICAgICAgcmV0dXJuIHBhcnNlTm9uQWRkcmVzc1Nw
YWNlVHlwZSgpOwogICAgIH0pOwogICAgIGlmICh0eXBlKQpAQCAtODQ3LDcgKzkwOCw3IEBAIGF1
dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uCiAgICAgaWYgKCFuYW1lKQogICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxFcnJvcj4obmFtZS5lcnJvcigpKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlR5cGU+IHR5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHR5cGU7
CiAgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb2xvbikpIHsKICAgICAgICAg
YXV0byBwYXJzZWRUeXBlID0gcGFyc2VUeXBlKCk7CiAgICAgICAgIGlmICghcGFyc2VkVHlwZSkK
QEAgLTg2MywyMSArOTI0LDI1IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5p
dGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uCiAgICAgaWYgKCFm
aXJzdEVudW1lcmF0aW9uTWVtYmVyKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
Zmlyc3RFbnVtZXJhdGlvbk1lbWJlci5lcnJvcigpKTsKIAotICAgIEFTVDo6RW51bWVyYXRpb25N
ZW1iZXJzIG1lbWJlcnM7Ci0gICAgbWVtYmVycy5hcHBlbmQoV1RGTW92ZSgqZmlyc3RFbnVtZXJh
dGlvbk1lbWJlcikpOworICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uIHJlc3VsdChXVEZN
b3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUodHlwZSkp
OworICAgIGF1dG8gc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgqZmlyc3RFbnVtZXJhdGlv
bk1lbWJlcikpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGZhaWwoU3RyaW5n
KCJDYW5ub3QgYWRkIGVudW1lcmF0aW9uIG1lbWJlciIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpKTsKIAogICAgIHdoaWxlICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29tbWEp
KSB7CiAgICAgICAgIGF1dG8gbWVtYmVyID0gcGFyc2VFbnVtZXJhdGlvbk1lbWJlcigpOwogICAg
ICAgICBpZiAoIW1lbWJlcikKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPiht
ZW1iZXIuZXJyb3IoKSk7Ci0gICAgICAgIG1lbWJlcnMuYXBwZW5kKFdURk1vdmUoKm1lbWJlcikp
OworICAgICAgICBzdWNjZXNzID0gcmVzdWx0LmFkZChXVEZNb3ZlKCptZW1iZXIpKTsKKyAgICAg
ICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuIGZhaWwoU3RyaW5nKCJDYW5ub3Qg
YWRkIGVudW1lcmF0aW9uIG1lbWJlciIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsK
ICAgICB9CiAKICAgICBhdXRvIHJpZ2h0Q3VybHlCcmFja2V0ID0gY29uc3VtZVR5cGUoTGV4ZXI6
OlRva2VuOjpUeXBlOjpSaWdodEN1cmx5QnJhY2tldCk7CiAgICAgaWYgKCFyaWdodEN1cmx5QnJh
Y2tldCkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHJpZ2h0Q3VybHlCcmFja2V0
LmVycm9yKCkpOwogCi0gICAgcmV0dXJuIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uKFdURk1v
dmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSh0eXBlKSwg
V1RGTW92ZShtZW1iZXJzKSk7CisgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAogYXV0
byBQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25NZW1iZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1l
cmF0aW9uTWVtYmVyLCBFcnJvcj4gewpAQCAtOTgxLDcgKzEwNDYsNyBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VBdHRyaWJ1dGVCbG9jaygpIC0+IEV4cGVjdGVkPEFTVDo6QXR0cmlidXRlQmxvY2ssIEVy
cm9yPiB7CiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQYXJzZXI6OnBh
cnNlUGFyYW1ldGVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXIsIEVycm9yPiB7CithdXRv
IFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24sIEVycm9yPiB7CiAgICAgYXV0byBvcmlnaW4gPSBwZWVrKCk7CiAgICAgaWYgKCFvcmln
aW4pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CkBA
IC05OTIsNyArMTA1Nyw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+IEV4cGVj
dGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4gewogICAgIGlmICghdHlwZSkKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7CiAKLSAgICBPcHRpb25hbDxTdHJp
bmc+IG5hbWU7CisgICAgU3RyaW5nIG5hbWU7CiAgICAgaWYgKGF1dG8gdG9rZW4gPSB0cnlUeXBl
KExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllcikpCiAgICAgICAgIG5hbWUgPSB0b2tlbi0+
c3RyaW5nVmlldy50b1N0cmluZygpOwogCkBAIC0xMDAwLDE4ICsxMDY1LDE4IEBAIGF1dG8gUGFy
c2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4g
ewogICAgICAgICBhdXRvIHNlbWFudGljID0gcGFyc2VTZW1hbnRpYygpOwogICAgICAgICBpZiAo
IXNlbWFudGljKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNlbWFudGlj
LmVycm9yKCkpOwotICAgICAgICByZXR1cm4gQVNUOjpQYXJhbWV0ZXIoV1RGTW92ZSgqb3JpZ2lu
KSwgV1RGTW92ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSgqdHlwZSksIFdURk1vdmUobmFtZSksIFdU
Rk1vdmUoKnNlbWFudGljKSk7CisgICAgICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSgqdHlwZSks
IFdURk1vdmUobmFtZSksIFdURk1vdmUoKnNlbWFudGljKSwgbnVsbHB0cik7CiAgICAgfQogCi0g
ICAgcmV0dXJuIEFTVDo6UGFyYW1ldGVyKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlm
aWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEY6Om51bGxvcHQpOworICAg
IHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92
ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSgqdHlwZSksIFdURk1vdmUobmFtZSksIFdURjo6bnVsbG9w
dCwgbnVsbHB0cik7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcnMoKSAtPiBFeHBl
Y3RlZDxBU1Q6OlBhcmFtZXRlcnMsIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0
ZXJzKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucywgRXJyb3I+IHsKICAg
ICBhdXRvIGxlZnRQYXJlbnRoZXNpcyA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6
TGVmdFBhcmVudGhlc2lzKTsKICAgICBpZiAoIWxlZnRQYXJlbnRoZXNpcykKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGxlZnRQYXJlbnRoZXNpcy5lcnJvcigpKTsKIAotICAgIEFT
VDo6UGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMg
cGFyYW1ldGVyczsKICAgICBpZiAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0UGFy
ZW50aGVzaXMpKQogICAgICAgICByZXR1cm4gV1RGTW92ZShwYXJhbWV0ZXJzKTsKIApAQCAtMTA5
NSwxNCArMTE2MCwxNiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnRyeVBvaW50RnVuY3Rpb25EZWNs
YXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYQogICAgIGlmICghcGFyYW1l
dGVycykKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHBhcmFtZXRlcnMuZXJyb3Io
KSk7CiAKKyAgICBib29sIGlzT3BlcmF0b3IgPSBmYWxzZTsKKwogICAgIGlmICh0cnlUeXBlKExl
eGVyOjpUb2tlbjo6VHlwZTo6Q29sb24pKSB7CiAgICAgICAgIGF1dG8gc2VtYW50aWMgPSBwYXJz
ZVNlbWFudGljKCk7CiAgICAgICAgIGlmICghc2VtYW50aWMpCiAgICAgICAgICAgICByZXR1cm4g
VW5leHBlY3RlZDxFcnJvcj4oc2VtYW50aWMuZXJyb3IoKSk7Ci0gICAgICAgIHJldHVybiBBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShhdHRyaWJ1dGVC
bG9jayksIGVudHJ5UG9pbnRUeXBlLCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50
b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsKKyAg
ICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBX
VEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSwgZW50cnlQb2ludFR5cGUsIFdURk1vdmUoKnR5cGUpLCBu
YW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3Zl
KCpzZW1hbnRpYyksIGlzT3BlcmF0b3IpOwogICAgIH0KIAotICAgIHJldHVybiBBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShhdHRyaWJ1dGVCbG9jayks
IGVudHJ5UG9pbnRUeXBlLCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmlu
ZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0KTsKKyAgICByZXR1cm4gQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoYXR0cmlidXRl
QmxvY2spLCBlbnRyeVBvaW50VHlwZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcu
dG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRv
cik7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0aW9uKCkg
LT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4gewpAQCAtMTExNyw2
ICsxMTg0LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24o
KSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXQKICAgICBhdXRvIG5hbWUgPSBjb25z
dW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIsIExleGVyOjpUb2tlbjo6
VHlwZTo6T3BlcmF0b3JOYW1lIH0pOwogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CisgICAgYXV0byBpc09wZXJhdG9yID0gbmFt
ZS0+dHlwZSA9PSBMZXhlcjo6VG9rZW46OlR5cGU6Ok9wZXJhdG9yTmFtZTsKIAogICAgIGF1dG8g
cGFyYW1ldGVycyA9IHBhcnNlUGFyYW1ldGVycygpOwogICAgIGlmICghcGFyYW1ldGVycykKQEAg
LTExMjYsMTAgKzExOTQsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVj
bGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXQKICAgICAgICAgYXV0
byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAgICAgaWYgKCFzZW1hbnRpYykKICAg
ICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5lcnJvcigpKTsKLSAg
ICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7
IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJp
bmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSk7CisgICAgICAg
IHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBX
VEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCks
IFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3IpOwog
ICAgIH0KIAotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3Jp
Z2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3
LnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQpOworICAgIHJl
dHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBXVEY6
Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdU
Rk1vdmUoKnBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpOwogfQogCiBhdXRv
IFBhcnNlcjo6cGFyc2VPcGVyYXRvckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiB7CkBAIC0xMTQ1LDE0ICsxMjEzLDE2IEBA
IGF1dG8gUGFyc2VyOjpwYXJzZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVj
dGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhCiAgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocGFyYW1ldGVycy5lcnJvcigpKTsKIAorICAgIGJvb2wg
aXNPcGVyYXRvciA9IHRydWU7CisKICAgICBpZiAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6
OkNvbG9uKSkgewogICAgICAgICBhdXRvIHNlbWFudGljID0gcGFyc2VTZW1hbnRpYygpOwogICAg
ICAgICBpZiAoIXNlbWFudGljKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KHNlbWFudGljLmVycm9yKCkpOwotICAgICAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwg
U3RyaW5nKCJPcGVyYXRvciBDYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdU
Rk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYykpOworICAgICAgICByZXR1cm4g
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpudWxs
b3B0LCBXVEZNb3ZlKCp0eXBlKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRp
YyksIGlzT3BlcmF0b3IpOwogICAgIH0KIAotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUp
LCBTdHJpbmcoIk9wZXJhdG9yIENhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwg
V1RGTW92ZSgqcGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCk7CisgICAgcmV0dXJuIEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RG
TW92ZSgqdHlwZSksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9y
KTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVj
dGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHsKQEAgLTEyMDAsNyArMTI3MCw3
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBl
Y3RlZDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjCiAgICAgaWYgKCFzZW1pY29sb24pCiAgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1pY29sb24uZXJyb3IoKSk7CiAKLSAgICByZXR1
cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKGZ1bmN0aW9uRGVjbGFyYXRpb24tPnRh
a2VPcmlnaW4oKSwgZnVuY3Rpb25EZWNsYXJhdGlvbi0+dGFrZUF0dHJpYnV0ZUJsb2NrKCksIGZ1
bmN0aW9uRGVjbGFyYXRpb24tPnRha2VFbnRyeVBvaW50VHlwZSgpLCBmdW5jdGlvbkRlY2xhcmF0
aW9uLT50YWtlVHlwZSgpLCBmdW5jdGlvbkRlY2xhcmF0aW9uLT50YWtlTmFtZSgpLCBmdW5jdGlv
bkRlY2xhcmF0aW9uLT50YWtlUGFyYW1ldGVycygpLCBmdW5jdGlvbkRlY2xhcmF0aW9uLT50YWtl
U2VtYW50aWMoKSwgcmVzdHJpY3RlZCk7CisgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbihXVEZNb3ZlKCpmdW5jdGlvbkRlY2xhcmF0aW9uKSwgcmVzdHJpY3RlZCk7CiB9
CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUJsb2NrKCkgLT4gRXhwZWN0ZWQ8QVNUOjpCbG9jaywgRXJy
b3I+IHsKQEAgLTEyNjEsNyArMTMzMSwxMCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VJZlN0YXRlbWVu
dCgpIC0+IEV4cGVjdGVkPEFTVDo6SWZTdGF0ZW1lbnQsIEVycm9yPiB7CiAgICAgICAgIGVsc2VC
b2R5ID0gV1RGTW92ZSgqcGFyc2VkRWxzZUJvZHkpOwogICAgIH0KIAotICAgIHJldHVybiBBU1Q6
OklmU3RhdGVtZW50KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoKmNvbmRpdGlvbmFsKSwgV1RG
TW92ZSgqYm9keSksIFdURk1vdmUoZWxzZUJvZHkpKTsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEFTVDo6RXhwcmVzc2lvbj4+IGNhc3RBcmd1bWVudHM7CisgICAgY2FzdEFyZ3VtZW50cy5h
cHBlbmQoV1RGTW92ZSgqY29uZGl0aW9uYWwpKTsKKyAgICBhdXRvIGJvb2xDYXN0ID0gc3RkOjpt
YWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKm9yaWdpbiksIFN0
cmluZygiYm9vbCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhc3RB
cmd1bWVudHMpKTsKKyAgICByZXR1cm4gQVNUOjpJZlN0YXRlbWVudChXVEZNb3ZlKCpvcmlnaW4p
LCBXVEZNb3ZlKGJvb2xDYXN0KSwgV1RGTW92ZSgqYm9keSksIFdURk1vdmUoZWxzZUJvZHkpKTsK
IH0KIAogYXV0byBQYXJzZXI6OnBhcnNlU3dpdGNoU3RhdGVtZW50KCkgLT4gRXhwZWN0ZWQ8QVNU
OjpTd2l0Y2hTdGF0ZW1lbnQsIEVycm9yPiB7CkBAIC0xNDQzLDcgKzE1MTYsNyBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VEb1doaWxlTG9vcCgpIC0+IEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxvb3AsIEVy
cm9yPiB7CiAgICAgcmV0dXJuIEFTVDo6RG9XaGlsZUxvb3AoV1RGTW92ZSgqb3JpZ2luKSwgV1RG
TW92ZSgqYm9keSksIFdURk1vdmUoKmNvbmRpdGlvbmFsKSk7CiB9CiAKLWF1dG8gUGFyc2VyOjpw
YXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBl
KSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiB7CithdXRvIFBh
cnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFt
ZWRUeXBlPiYmIHR5cGUpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJy
b3I+IHsKICAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKICAgICBpZiAoIW9yaWdpbikKICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKQEAgLTE0ODgsNyAr
MTU2MSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkgLT4gRXhw
ZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0CiAgICAgaWYgKCF0eXBlKQogICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odHlwZS5lcnJvcigpKTsKIAotICAgIGF1dG8gZmly
c3RWYXJpYWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlR5cGU+KCgqdHlwZSktPmNsb25lKCkpKTsKKyAgICBhdXRvIGZpcnN0VmFy
aWFibGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9u
ZSgpKTsKICAgICBpZiAoIWZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikKICAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsKIApA
QCAtMTQ5Niw3ICsxNTY5LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlv
bnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3QKICAgICByZXN1bHQu
YXBwZW5kKFdURk1vdmUoKmZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikpOwogCiAgICAgd2hpbGUg
KHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb21tYSkpIHsKLSAgICAgICAgYXV0byB2YXJp
YWJsZURlY2xhcmF0aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlR5cGU+KCgqdHlwZSktPmNsb25lKCkpKTsKKyAgICAgICAgYXV0byB2YXJpYWJsZURl
Y2xhcmF0aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKCgqdHlwZSktPmNsb25lKCkpOwog
ICAgICAgICBpZiAoIXZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxFcnJvcj4odmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsKICAgICAgICAgcmVz
dWx0LmFwcGVuZChXVEZNb3ZlKCp2YXJpYWJsZURlY2xhcmF0aW9uKSk7CkBAIC0xOTU5LDggKzIw
MzIsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlVGVybmFyeUNvbmRpdGlvbmFsKCkgLT4gRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2kKICAgICBpZiAoIWVsc2VFeHByZXNzaW9u
KQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZWxzZUV4cHJlc3Npb24uZXJyb3Io
KSk7CiAKLSAgICAvLyBGSVhNRTogQ2FzdCB0aGUgcHJlZGljYXRlIHRvIGEgYm9vbC4KLSAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxB
U1Q6OlRlcm5hcnlFeHByZXNzaW9uPihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKCpwcmVkaWNh
dGUpLCBXVEZNb3ZlKCpib2R5RXhwcmVzc2lvbiksIFdURk1vdmUoKmVsc2VFeHByZXNzaW9uKSkp
OworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPj4gY2FzdEFyZ3Vt
ZW50czsKKyAgICBjYXN0QXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpwcmVkaWNhdGUpKTsKKyAg
ICBhdXRvIGJvb2xDYXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNzaW9uPihM
ZXhlcjo6VG9rZW4oKm9yaWdpbiksIFN0cmluZygiYm9vbCIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLCBXVEZNb3ZlKGNhc3RBcmd1bWVudHMpKTsKKyAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlRlcm5hcnlFeHBy
ZXNzaW9uPihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKGJvb2xDYXN0KSwgV1RGTW92ZSgqYm9k
eUV4cHJlc3Npb24pLCBXVEZNb3ZlKCplbHNlRXhwcmVzc2lvbikpKTsKIH0KIAogYXV0byBQYXJz
ZXI6OnBhcnNlQXNzaWdubWVudCgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4
cHJlc3Npb24+LCBFcnJvcj4gewpAQCAtMjE3OCw3ICsyMjUzLDYgQEAgYXV0byBQYXJzZXI6OnBh
cnNlUG9zc2libGVSZWxhdGlvbmFsQmluYXJ5T3BlcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHQKICAgICAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUocHJldmlv
dXMpKTsKICAgICAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKm5leHQpKTsK
ICAgICAgICAgICAgIHByZXZpb3VzID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNz
aW9uPihMZXhlcjo6VG9rZW4oKnJlbGF0aW9uYWxCaW5hcnlPcGVyYXRpb24pLCBTdHJpbmcoIm9w
ZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYWxsQXJn
dW1lbnRzKSk7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQ2FzdCB0aGUgYXJndW1lbnQgdG8gYSBi
b29sCiAgICAgICAgICAgICBwcmV2aW91cyA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpMb2dpY2Fs
Tm90RXhwcmVzc2lvbj4oV1RGTW92ZSgqcmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbiksIFdURk1v
dmUocHJldmlvdXMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMzY0LDgg
KzI0MzgsMTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVQcmVmaXgoKSAtPiBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPiwKICAgICAgICAgICAgIGNhbGxBcmd1
bWVudHMuYXBwZW5kKFdURk1vdmUoKm5leHQpKTsKICAgICAgICAgICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6Q2FsbEV4cHJl
c3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwgU3RyaW5nKCJvcGVyYXRvcn4iLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYWxsQXJndW1lbnRzKSkpOwogICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpFeGNsYW1hdGlvblBvaW50Ogot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+KHN0ZDo6
bWFrZV91bmlxdWU8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpwcmVm
aXgpLCBXVEZNb3ZlKCpuZXh0KSkpOworICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6
RXhjbGFtYXRpb25Qb2ludDogeworICAgICAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OkV4cHJlc3Npb24+PiBjYXN0QXJndW1lbnRzOworICAgICAgICAgICAgY2FzdEFyZ3VtZW50
cy5hcHBlbmQoV1RGTW92ZSgqbmV4dCkpOworICAgICAgICAgICAgYXV0byBib29sQ2FzdCA9IHN0
ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpwcmVmaXgp
LCBTdHJpbmcoImJvb2wiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShj
YXN0QXJndW1lbnRzKSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6
RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uPihM
ZXhlcjo6VG9rZW4oKnByZWZpeCksIFdURk1vdmUoYm9vbENhc3QpKSk7CisgICAgICAgIH0KICAg
ICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkFuZDoKICAgICAgICAgICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6TWFr
ZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKnByZWZpeCksIFdURk1vdmUoKm5leHQp
KSk7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpBdDoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oCmluZGV4IGRhM2UwNmIw
MWU0Li44MDEzOTE0OTgwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFBhcnNlci5oCkBAIC0yNyw3ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoV0VC
R1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAj
aW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKICNpbmNsdWRlICJXSExTTEFycmF5
VHlwZS5oIgogI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKQEAgLTY4LDcg
KzY3LDYgQEAKICNpbmNsdWRlICJXSExTTE5vZGUuaCIKICNpbmNsdWRlICJXSExTTE51bGxMaXRl
cmFsLmgiCiAjaW5jbHVkZSAiV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNp
bmNsdWRlICJXSExTTFBhcmFtZXRlci5oIgogI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIK
ICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKICNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbi5oIgpAQCAtMTU0LDEzICsxNTIsMTMgQEAgcHJpdmF0ZToKICAgICBFeHBlY3Rl
ZDxUeXBlU3VmZml4QWJicmV2aWF0ZWQsIEVycm9yPiBwYXJzZVR5cGVTdWZmaXhBYmJyZXZpYXRl
ZCgpOwogICAgIHN0cnVjdCBUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQgewogICAgICAgICBMZXhl
cjo6VG9rZW4gdG9rZW47Ci0gICAgICAgIE9wdGlvbmFsPExleGVyOjpUb2tlbj4gYWRkcmVzc1Nw
YWNlOworICAgICAgICBPcHRpb25hbDxBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZT4g
YWRkcmVzc1NwYWNlOwogICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbnVtRWxlbWVudHM7CiAg
ICAgfTsKICAgICBFeHBlY3RlZDxUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQsIEVycm9yPiBwYXJz
ZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCgpOwotICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlR5cGU+LCBFcnJvcj4gcGFyc2VBZGRyZXNzU3BhY2VUeXBlKCk7Ci0gICAgRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiBwYXJzZU5vbkFkZHJlc3NTcGFj
ZVR5cGUoKTsKLSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+
IHBhcnNlVHlwZSgpOworICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRU
eXBlPiwgRXJyb3I+IHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOworICAgIEV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+IHBhcnNlTm9uQWRkcmVzc1NwYWNl
VHlwZSgpOworICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwg
RXJyb3I+IHBhcnNlVHlwZSgpOwogICAgIEV4cGVjdGVkPEFTVDo6VHlwZURlZmluaXRpb24sIEVy
cm9yPiBwYXJzZVR5cGVEZWZpbml0aW9uKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpCdWlsdEluU2Vt
YW50aWMsIEVycm9yPiBwYXJzZUJ1aWx0SW5TZW1hbnRpYygpOwogICAgIEV4cGVjdGVkPEFTVDo6
UmVzb3VyY2VTZW1hbnRpYywgRXJyb3I+IHBhcnNlUmVzb3VyY2VTZW1hbnRpYygpOwpAQCAtMTc1
LDggKzE3Myw4IEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24sIEVycm9yPiBwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlvbigpOwogICAgIEV4cGVjdGVk
PEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLCBFcnJvcj4gcGFyc2VOdW1UaHJlYWRz
RnVuY3Rpb25BdHRyaWJ1dGUoKTsKICAgICBFeHBlY3RlZDxBU1Q6OkF0dHJpYnV0ZUJsb2NrLCBF
cnJvcj4gcGFyc2VBdHRyaWJ1dGVCbG9jaygpOwotICAgIEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVy
LCBFcnJvcj4gcGFyc2VQYXJhbWV0ZXIoKTsKLSAgICBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlcnMs
IEVycm9yPiBwYXJzZVBhcmFtZXRlcnMoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24sIEVycm9yPiBwYXJzZVBhcmFtZXRlcigpOworICAgIEV4cGVjdGVkPEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbnMsIEVycm9yPiBwYXJzZVBhcmFtZXRlcnMoKTsKICAgICBFeHBlY3Rl
ZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZUVudHJ5UG9pbnRGdW5jdGlv
bkRlY2xhcmF0aW9uKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBF
cnJvcj4gcGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigpOwogICAgIEV4cGVjdGVkPEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlT3BlcmF0b3JGdW5jdGlvbkRlY2xh
cmF0aW9uKCk7CkBAIC0xOTIsNyArMTkwLDcgQEAgcHJpdmF0ZToKICAgICBFeHBlY3RlZDxBU1Q6
OkZvckxvb3AsIEVycm9yPiBwYXJzZUZvckxvb3AoKTsKICAgICBFeHBlY3RlZDxBU1Q6OldoaWxl
TG9vcCwgRXJyb3I+IHBhcnNlV2hpbGVMb29wKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpEb1doaWxl
TG9vcCwgRXJyb3I+IHBhcnNlRG9XaGlsZUxvb3AoKTsKLSAgICBFeHBlY3RlZDxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oc3RkOjp1bmlx
dWVfcHRyPEFTVDo6VHlwZT4mJik7CisgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uLCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlVubmFtZWRUeXBlPiYmKTsKICAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50LCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpOwogICAgIEV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0YXRlbWVudD4sIEVycm9yPiBwYXJzZVN0YXRlbWVu
dCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFByZXBhcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcmVwYXJlLmNwcAppbmRleCAwZWI2NGRlY2Q0ZC4uNDYwZTk0NmZkZGEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcApA
QCAtMjgsMTAgKzI4LDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0hMU0xQ
cmVwYXJlLmgiCiAKKyNpbmNsdWRlICJXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgiCisj
aW5jbHVkZSAiV0hMU0xDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xOYW1lUmVzb2x2ZXIuaCIK
ICNpbmNsdWRlICJXSExTTFBhcnNlci5oIgogI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2lu
Y2x1ZGUgIldITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCIKICNpbmNsdWRlICJXSExTTFN0YW5k
YXJkTGlicmFyeS5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5n
dGguaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCIKKyNpbmNsdWRl
ICJXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIldITFNM
U3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTUwLDggKzU3LDIzIEBAIE9wdGlvbmFsPFByZXBhcmF0aW9uUmVzdWx0PiBwcmVwYXJlKFN0
cmluZ1ZpZXcgc291cmNlKQogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAotICAgIHJlc29sdmVOYW1lc0luVHlwZXMocHJvZ3JhbSk7CisgICAgTmFtZVJl
c29sdmVyIG5hbWVSZXNvbHZlcihwcm9ncmFtLm5hbWVDb250ZXh0KCkpOworICAgIGlmICghcmVz
b2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpKQorICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgIGlmICghY2hlY2tSZWN1cnNpdmVUeXBlcyhwcm9ncmFtKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNz
b3JzKHByb2dyYW0pOworICAgIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhwcm9ncmFt
KTsKKyAgICBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChwcm9ncmFtKTsKKyAgICBzeW50
aGVzaXplQ29uc3RydWN0b3JzKHByb2dyYW0pOworICAgIGlmICghY2hlY2tEdXBsaWNhdGVGdW5j
dGlvbnMocHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgaWYgKCFy
ZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCiAKKyAgICBpZiAoY2hlY2socHJvZ3JhbSkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgcmV0dXJuIFByZXBhcmF0aW9uUmVzdWx0KCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9n
cmFtLmgKaW5kZXggNTYzMGZlNjllZTQuLjYwZWU0NzkwMTVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dyYW0uaApAQCAtMjksNiArMjks
OCBAQAogCiAjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKICNpbmNsdWRl
ICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5o
IgorI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKICNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5oIgogI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgpAQCAtNDQsNDUgKzQ2
LDY0IEBAIHB1YmxpYzoKICAgICBQcm9ncmFtKCkgPSBkZWZhdWx0OwogICAgIFByb2dyYW0oUHJv
Z3JhbSYmKSA9IGRlZmF1bHQ7CiAKLSAgICB2b2lkIGFwcGVuZChBU1Q6OlR5cGVEZWZpbml0aW9u
JiYgdHlwZURlZmluaXRpb24pCisgICAgYm9vbCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5pdGlvbiYm
IHR5cGVEZWZpbml0aW9uKQogICAgIHsKLSAgICAgICAgbV90eXBlRGVmaW5pdGlvbnMuYXBwZW5k
KFdURk1vdmUodHlwZURlZmluaXRpb24pKTsKKyAgICAgICAgbV90eXBlRGVmaW5pdGlvbnMuYXBw
ZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBlRGVmaW5pdGlvbj4oV1RGTW92ZSh0eXBlRGVm
aW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX3R5cGVEZWZp
bml0aW9ucy5sYXN0KCkpOwogICAgIH0KLSAgICB2b2lkIGFwcGVuZChBU1Q6OlN0cnVjdHVyZURl
ZmluaXRpb24mJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNUOjpT
dHJ1Y3R1cmVEZWZpbml0aW9uJiYgc3RydWN0dXJlRGVmaW5pdGlvbikKICAgICB7Ci0gICAgICAg
IG1fc3RydWN0dXJlRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoc3RydWN0dXJlRGVmaW5pdGlv
bikpOworICAgICAgICBtX3N0cnVjdHVyZURlZmluaXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5p
cXVlPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4oV1RGTW92ZShzdHJ1Y3R1cmVEZWZpbml0aW9u
KSkpOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fc3RydWN0dXJlRGVmaW5p
dGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpFbnVtZXJhdGlvbkRl
ZmluaXRpb24mJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCisKKyAgICBib29sIGFwcGVuZChBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYmIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKICAgICB7Ci0g
ICAgICAgIG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5hcHBlbmQoV1RGTW92ZShlbnVtZXJhdGlv
bkRlZmluaXRpb24pKTsKKyAgICAgICAgbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zLmFwcGVuZChz
dGQ6Om1ha2VfdW5pcXVlPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPihXVEZNb3ZlKGVudW1l
cmF0aW9uRGVmaW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCpt
X2VudW1lcmF0aW9uRGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQo
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mJiBmdW5jdGlvbkRlZmluaXRpb24pCisKKyAgICBib29s
IGFwcGVuZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYmIGZ1bmN0aW9uRGVmaW5pdGlvbikKICAg
ICB7Ci0gICAgICAgIG1fZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBlbmQoV1RGTW92ZShmdW5jdGlv
bkRlZmluaXRpb24pKTsKKyAgICAgICAgbV9mdW5jdGlvbkRlZmluaXRpb25zLmFwcGVuZChzdGQ6
Om1ha2VfdW5pcXVlPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihXVEZNb3ZlKGZ1bmN0aW9uRGVm
aW5pdGlvbikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX2Z1bmN0aW9u
RGVmaW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uJiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKKworICAgIGJv
b2wgYXBwZW5kKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pCiAgICAgewotICAgICAgICBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25z
LmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgbV9u
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bikpKTsKKyAgICAgICAgbV9pbnRyaW5zaWNzLmFkZCgqbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9ucy5sYXN0KCkpOworICAgICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoKm1fbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCisKKyAgICBi
b29sIGFwcGVuZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYmIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbikKICAgICB7Ci0gICAgICAgIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5hcHBlbmQoV1RG
TW92ZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgbV9uYXRpdmVUeXBlRGVjbGFy
YXRpb25zLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
PihXVEZNb3ZlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpKTsKKyAgICAgICAgbV9pbnRyaW5zaWNz
LmFkZCgqbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSk7CisgICAgICAgIHJldHVybiBt
X25hbWVDb250ZXh0LmFkZCgqbV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zLmxhc3QoKSk7CiAgICAg
fQogCi0gICAgVmVjdG9yPEFTVDo6VHlwZURlZmluaXRpb24+JiB0eXBlRGVmaW5pdGlvbnMoKSB7
IHJldHVybiBtX3R5cGVEZWZpbml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6OlN0cnVjdHVyZURl
ZmluaXRpb24+JiBzdHJ1Y3R1cmVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fc3RydWN0dXJlRGVm
aW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+JiBlbnVt
ZXJhdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb25zOyB9
Ci0gICAgVmVjdG9yPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPiYgZnVuY3Rpb25EZWZpbml0aW9u
cygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWZpbml0aW9uczsgfQotICAgIFZlY3RvcjxBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpIHsg
cmV0dXJuIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24+JiBuYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkgeyByZXR1cm4g
bV9uYXRpdmVUeXBlRGVjbGFyYXRpb25zOyB9CisgICAgTmFtZUNvbnRleHQmIG5hbWVDb250ZXh0
KCkgeyByZXR1cm4gbV9uYW1lQ29udGV4dDsgfQorICAgIEludHJpbnNpY3MmIGludHJpbnNpY3Mo
KSB7IHJldHVybiBtX2ludHJpbnNpY3M7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFT
VDo6VHlwZURlZmluaXRpb24+PiYgdHlwZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV90eXBlRGVm
aW5pdGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbj4+JiBzdHJ1Y3R1cmVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fc3RydWN0dXJlRGVm
aW5pdGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uPj4mIGVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX2VudW1lcmF0
aW9uRGVmaW5pdGlvbnM7IH0KKyAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uPj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMoKSBjb25zdCB7IHJldHVy
biBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uPj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMoKSB7IHJldHVybiBt
X2Z1bmN0aW9uRGVmaW5pdGlvbnM7IH0KKyAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4+JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnM7IH0KKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4+
JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbnM7IH0KKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uPj4mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX25hdGl2
ZVR5cGVEZWNsYXJhdGlvbnM7IH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8QVNUOjpUeXBlRGVm
aW5pdGlvbj4gbV90eXBlRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbj4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsKLSAgICBWZWN0b3I8QVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24+IG1fZW51bWVyYXRpb25EZWZpbml0aW9uczsKLSAgICBWZWN0b3I8QVNU
OjpGdW5jdGlvbkRlZmluaXRpb24+IG1fZnVuY3Rpb25EZWZpbml0aW9uczsKLSAgICBWZWN0b3I8
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b25zOwotICAgIFZlY3RvcjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4gbV9uYXRpdmVUeXBl
RGVjbGFyYXRpb25zOworICAgIE5hbWVDb250ZXh0IG1fbmFtZUNvbnRleHQ7CisgICAgSW50cmlu
c2ljcyBtX2ludHJpbnNpY3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVE
ZWZpbml0aW9uPj4gbV90eXBlRGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+PiBtX3N0cnVjdHVyZURlZmluaXRpb25zOworICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+PiBtX2Vu
dW1lcmF0aW9uRGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbj4+IG1fZnVuY3Rpb25EZWZpbml0aW9uczsKKyAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4+IG1fbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbj4+IG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJz
aXZlVHlwZUNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmQ2YjFiNGE5ODM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAKQEAg
LTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCIKKwor
I2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUmVjdXJzaXZl
VHlwZUNoZWNrZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgflJlY3Vyc2l2ZVR5
cGVDaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0
aW9uJiB0eXBlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV90eXBlcy5hZGQoJnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKGFkZFJlc3Vs
dC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVEZWZpbml0
aW9uKTsKKworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmdHlwZURlZmlu
aXRpb24pOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZp
bml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVz
LmFkZCgmc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdF
bnRyeSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9u
KTsKKworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmc3RydWN0dXJlRGVm
aW5pdGlvbik7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZXMuYWRkKCZ0eXBl
UmVmZXJlbmNlKTsKKyAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgZm9yIChhdXRvJiB0eXBlQXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMo
KSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlQXJndW1lbnQpOworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworCisg
ICAgICAgIGF1dG8gc3VjY2VzcyA9IG1fdHlwZXMucmVtb3ZlKCZ0eXBlUmVmZXJlbmNlKTsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9CisKKyAgICB2b2lk
IHZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgIH0KKworcHJp
dmF0ZToKKyAgICBIYXNoU2V0PEFTVDo6VHlwZSo+IG1fdHlwZXM7Cit9OworCitib29sIGNoZWNr
UmVjdXJzaXZlVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBSZWN1cnNpdmVUeXBlQ2hl
Y2tlciByZWN1cnNpdmVUeXBlQ2hlY2tlcjsKKyAgICByZWN1cnNpdmVUeXBlQ2hlY2tlci5jaGVj
a0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAgcmV0dXJuIHJlY3Vyc2l2ZVR5cGVDaGVja2Vy
LmVycm9yKCk7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNr
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWEzYTE5ZGNlMjAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
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
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2Fk
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29s
dmVPdmVybG9hZEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li4yMzUyODQ1ZWMxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKQEAgLTAsMCArMSwxMTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oIgorCisjaW5jbHVkZSAiV0hM
U0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSA8bGltaXRzPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK3N0YXRpYyB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdChB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGNhbmRpZGF0ZSwgY29uc3QgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzKQoreworICAgIHVu
c2lnbmVkIGNvbnZlcnNpb25Db3N0ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNh
bmRpZGF0ZS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29udmVyc2lvbkNv
c3QgKz0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpVbm5hbWVkVHlwZT4mKSAtPiB1bnNpZ25lZCB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBl
UmVmZXJlbmNlKSAtPiB1bnNpZ25lZCB7CisgICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY29udmVyc2lvbkNvc3QoY2FuZGlkYXRlLnBh
cmFtZXRlcnMoKVtpXS50eXBlKCkpOworICAgICAgICB9KSwgYXJndW1lbnRUeXBlc1tpXS5nZXQo
KSk7CisgICAgfQorICAgIC8vIFRoZSByZXR1cm4gdHlwZSBjYW4gbmV2ZXIgYmUgYSBsaXRlcmFs
IHR5cGUsIHNvIGl0cyBjb252ZXJzaW9uIGNvc3QgaXMgYWx3YXlzIDAuCisgICAgcmV0dXJuIGNv
bnZlcnNpb25Db3N0OworfQorCitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5j
dGlvbk92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgT3B0aW9uYWw8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+JiBjYXN0UmV0dXJuVHlwZSkKK3sK
KyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24+LCAxPiBjYW5kaWRhdGVzOworICAgIGZvciAoYXV0byYgcG9zc2libGVGdW5jdGlvbiA6IHBv
c3NpYmxlRnVuY3Rpb25zKSB7CisgICAgICAgIGlmIChwb3NzaWJsZUZ1bmN0aW9uLmdldCgpLmVu
dHJ5UG9pbnRUeXBlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGluZmVy
VHlwZXNGb3JDYWxsKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCksIGFyZ3VtZW50VHlwZXMsIGNhc3RS
ZXR1cm5UeXBlKSkKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKHBvc3NpYmxlRnVuY3Rp
b24uZ2V0KCkpOworICAgIH0KKworICAgIHVuc2lnbmVkIG1pbmltdW1Db252ZXJzaW9uQ29zdCA9
IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKKyAgICBmb3IgKGF1dG8mIGNh
bmRpZGF0ZSA6IGNhbmRpZGF0ZXMpCisgICAgICAgIG1pbmltdW1Db252ZXJzaW9uQ29zdCA9IHN0
ZDo6bWluKG1pbmltdW1Db252ZXJzaW9uQ29zdCwgY29udmVyc2lvbkNvc3QoY2FuZGlkYXRlLmdl
dCgpLCBhcmd1bWVudFR5cGVzKSk7CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtaW5pbXVtQ29zdENhbmRpZGF0ZXM7Cisg
ICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVzKSB7CisgICAgICAgIGlmIChjb252
ZXJzaW9uQ29zdChjYW5kaWRhdGUuZ2V0KCksIGFyZ3VtZW50VHlwZXMpID09IG1pbmltdW1Db252
ZXJzaW9uQ29zdCkKKyAgICAgICAgICAgIG1pbmltdW1Db3N0Q2FuZGlkYXRlcy5hcHBlbmQoY2Fu
ZGlkYXRlKTsKKyAgICB9CisKKyAgICBib29sIHJlc3RyaWN0ZWRDYW5kaWRhdGVFeGlzdHMgPSBm
YWxzZTsKKyAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IG1pbmltdW1Db3N0Q2FuZGlkYXRlcykg
eworICAgICAgICBpZiAoaXM8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KGNhbmRpZGF0ZS5nZXQo
KSkgJiYgZG93bmNhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KGNhbmRpZGF0ZS5nZXQoKSku
cmVzdHJpY3RlZCgpKSB7CisgICAgICAgICAgICByZXN0cmljdGVkQ2FuZGlkYXRlRXhpc3RzID0g
dHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgY2FuZGlk
YXRlcy5jbGVhcigpOworICAgIGlmIChyZXN0cmljdGVkQ2FuZGlkYXRlRXhpc3RzKSB7CisgICAg
ICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogbWluaW11bUNvc3RDYW5kaWRhdGVzKSB7CisgICAg
ICAgICAgICBpZiAoaXM8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KGNhbmRpZGF0ZS5nZXQoKSkg
JiYgZG93bmNhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KGNhbmRpZGF0ZS5nZXQoKSkucmVz
dHJpY3RlZCgpKQorICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGNhbmRpZGF0ZS5n
ZXQoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgY2FuZGlkYXRlcyA9IG1pbmlt
dW1Db3N0Q2FuZGlkYXRlczsKKworICAgIGlmIChjYW5kaWRhdGVzLnNpemUoKSA9PSAxKQorICAg
ICAgICByZXR1cm4gJmNhbmRpZGF0ZXNbMF0uZ2V0KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK0FTVDo6TmFtZWRUeXBlKiByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+JiBwb3NzaWJsZVR5cGVzLCBBU1Q6
OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMpCit7CisgICAgQVNUOjpOYW1lZFR5cGUqIHJl
c3VsdCA9IG51bGxwdHI7CisgICAgZm9yIChhdXRvJiBwb3NzaWJsZVR5cGUgOiBwb3NzaWJsZVR5
cGVzKSB7CisgICAgICAgIGlmIChpbmZlclR5cGVzRm9yVHlwZUFyZ3VtZW50cyhwb3NzaWJsZVR5
cGUsIHR5cGVBcmd1bWVudHMpKSB7CisgICAgICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmVzdWx0ID0gJnN0YXRpY19jYXN0
PEFTVDo6TmFtZWRUeXBlJj4ocG9zc2libGVUeXBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVzb2x2ZU92ZXJsb2FkSW1wbC5oCnNpbWlsYXJpdHkgaW5kZXggNzMlCnJlbmFtZSBmcm9tIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFub255bW91c1Zhcmlh
YmxlRGVjbGFyYXRpb24uaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKaW5kZXggZWY2MWVkMTI2MTkuLmFjNzkw
M2JhZmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKQEAgLTI3
LDggKzI3LDEwIEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhl
ci5oIgotI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmluZ1R5
cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgPGZ1bmN0aW9u
YWw+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTM2LDI2ICszOCwxNCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAot
Y2xhc3MgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBWYWx1ZSB7Ci1wdWJs
aWM6Ci0gICAgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmln
aW4pCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgIHsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIH5Bbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uKCkgPSBkZWZhdWx0Owot
Ci0gICAgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbihjb25zdCBBbm9ueW1vdXNWYXJpYWJs
ZURlY2xhcmF0aW9uJikgPSBkZWxldGU7Ci0gICAgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlv
bihBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJiYpID0gZGVmYXVsdDsKLQotICAgIExleGVy
OjpUb2tlbiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQotCi1wcml2YXRlOgot
ICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLX07CitjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9u
OworY2xhc3MgTmFtZWRUeXBlOwogCiB9CiAKK0FTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogcmVz
b2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUZ1bmN0aW9ucywgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1bWVudFR5cGVzLCBPcHRp
b25hbDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4mIGNhc3RSZXR1cm5U
eXBlKTsKK0FTVDo6TmFtZWRUeXBlKiByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbChWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+JiwgQVNUOjpUeXBlQXJndW1l
bnRzJik7CisKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uYjc5ZDJiMmE1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaApAQCAtMCwwICsx
LDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQor
CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIFJl
c29sdmFibGVUeXBlOworY2xhc3MgVW5uYW1lZFR5cGU7CisKK30KKworY2xhc3MgUmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZT4geworcHVibGljOgorICAgIFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKEFTVDo6UmVzb2x2YWJs
ZVR5cGUmIHJlc29sdmFibGVUeXBlKQorICAgICAgICA6IG1fcmVzb2x2YWJsZVR5cGUoJnJlc29s
dmFibGVUeXBlKQorICAgIHsKKyAgICB9CisKKyAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShj
b25zdCBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYpID0gZGVsZXRlOworICAgIFJlc29sdmFibGVU
eXBlUmVmZXJlbmNlKFJlc29sdmFibGVUeXBlUmVmZXJlbmNlJiYpID0gZGVsZXRlOworCisgICAg
QVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUoKSB7IHJldHVybiAqbV9yZXNvbHZh
YmxlVHlwZTsgfQorCitwcml2YXRlOgorICAgIEFTVDo6UmVzb2x2YWJsZVR5cGUqIG1fcmVzb2x2
YWJsZVR5cGU7Cit9OworCit1c2luZyBSZXNvbHZpbmdUeXBlID0gVmFyaWFudDxzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4+Owor
Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0
b3JMZW5ndGguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44Njlj
ZTI1NDE2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCkBAIC0wLDAgKzEs
NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBGaW5kQXJy
YXlUeXBlcyA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB+RmluZEFycmF5VHlwZXMo
KSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBtX2FycmF5VHlwZXMuYXBwZW5kKGFycmF5VHlwZSk7
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcnJheVR5cGUpOworICAgIH0KKworICAgIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6QXJyYXlUeXBlPj4mJiB0YWtlQXJyYXlU
eXBlcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX2FycmF5VHlwZXMpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkFy
cmF5VHlwZT4+IG1fYXJyYXlUeXBlczsKK307CisKK3ZvaWQgc3ludGhlc2l6ZUFycmF5T3BlcmF0
b3JMZW5ndGgoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBGaW5kQXJyYXlUeXBlcyBmaW5kQXJy
YXlUeXBlczsKKyAgICBmaW5kQXJyYXlUeXBlcy5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7
CisgICAgYXV0byBhcnJheVR5cGVzID0gZmluZEFycmF5VHlwZXMudGFrZUFycmF5VHlwZXMoKTsK
KworICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBm
YWxzZTsKKworICAgIGZvciAoYXV0byYgYXJyYXlUeXBlIDogYXJyYXlUeXBlcykgeworICAgICAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9r
ZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGFycmF5VHlw
ZS5nZXQoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkp
LCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKExleGVyOjpUb2tlbihhcnJheVR5cGUuZ2V0KCkub3JpZ2luKCkpLCBwcm9ncmFtLmlu
dHJpbnNpY3MoKS51aW50VHlwZSgpKSwgU3RyaW5nKCJvcGVyYXRvci5sZW5ndGgiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0
LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RG
TW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgfQorfQorCit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5YTlhMTE0ZjI3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50
aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVz
aXplQXJyYXlPcGVyYXRvckxlbmd0aChQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZUNvbnN0cnVjdG9ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi40MjIxZmEwMjJkNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5j
cHAKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9y
cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNz
IEZpbmRBbGxUeXBlcyA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB+RmluZEFsbFR5
cGVzKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2lu
dGVyVHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChw
b2ludGVyVHlwZSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChwb2ludGVyVHlwZSk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZl
cmVuY2VUeXBlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV91bm5hbWVkVHlwZXMuYXBwZW5k
KGFycmF5UmVmZXJlbmNlVHlwZSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcnJheVJl
ZmVyZW5jZVR5cGUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFy
cmF5VHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChh
cnJheVR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlUeXBlKTsKKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlv
bkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5k
KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlbnVt
ZXJhdGlvbkRlZmluaXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1
cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgbV9uYW1lZFR5cGVzLmFwcGVuZChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOworICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fbmFtZWRUeXBlcy5hcHBlbmQobmF0aXZlVHlwZURl
Y2xhcmF0aW9uKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbik7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpV
bm5hbWVkVHlwZT4+JiYgdGFrZVVubmFtZWRUeXBlcygpCisgICAgeworICAgICAgICByZXR1cm4g
V1RGTW92ZShtX3VubmFtZWRUeXBlcyk7CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiYmIHRha2VOYW1lZFR5cGVzKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBXVEZNb3ZlKG1fbmFtZWRUeXBlcyk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1lZFR5cGU+PiBtX3Vu
bmFtZWRUeXBlczsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVk
VHlwZT4+IG1fbmFtZWRUeXBlczsKK307CisKK3ZvaWQgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQ
cm9ncmFtJiBwcm9ncmFtKQoreworICAgIEZpbmRBbGxUeXBlcyBmaW5kQWxsVHlwZXM7CisgICAg
ZmluZEFsbFR5cGVzLmNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtKTsKKyAgICBhdXRvIG1fdW5u
YW1lZFR5cGVzID0gZmluZEFsbFR5cGVzLnRha2VVbm5hbWVkVHlwZXMoKTsKKyAgICBhdXRvIG1f
bmFtZWRUeXBlcyA9IGZpbmRBbGxUeXBlcy50YWtlTmFtZWRUeXBlcygpOworCisgICAgYm9vbCBp
c09wZXJhdG9yID0gdHJ1ZTsKKyAgICBib29sIGlzUmVzdHJpY3RlZCA9IGZhbHNlOworCisgICAg
Zm9yIChhdXRvJiB1bm5hbWVkVHlwZSA6IG1fdW5uYW1lZFR5cGVzKSB7CisgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbih1bm5h
bWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB1bm5hbWVkVHlwZS5n
ZXQoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJz
LmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuKHVubmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRy
aWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksIFN0
cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQp
OworICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGNvcHlDb25zdHJ1Y3RvcikpOworCisg
ICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWZhdWx0Q29uc3RydWN0b3Io
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQoKS5v
cmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlw
ZS5nZXQoKS5jbG9uZSgpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucygpLCBXVEY6Om51bGxvcHQs
IGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZN
b3ZlKGRlZmF1bHRDb25zdHJ1Y3RvcikpOworICAgIH0KKworICAgIGZvciAoYXV0byYgbmFtZWRU
eXBlIDogbV9uYW1lZFR5cGVzKSB7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2
YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkp
LCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tl
bihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpLCBTdHJpbmcoKSwg
V1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
cyBwYXJhbWV0ZXJzOworICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxl
RGVjbGFyYXRpb24pKTsKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNv
cHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKG5hbWVk
VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0
LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5v
cmlnaW4oKSksIG5hbWVkVHlwZS5nZXQoKSksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxv
cHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICBwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKGNvcHlDb25zdHJ1Y3RvcikpOworCisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiBkZWZhdWx0Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExl
eGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2Nr
KCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihu
YW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpLCBTdHJpbmcoIm9wZXJh
dG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9ucygpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOwor
ICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGRlZmF1bHRDb25zdHJ1Y3RvcikpOworICAg
IH0KK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODAwMjBkZDdjNzAKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhlc2l6
ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1l
cmF0aW9uRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGJhOTA1NjJiZGEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJh
dGlvbkZ1bmN0aW9ucy5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVz
aXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCIKKworI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgor
I2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK3ZvaWQgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25z
KFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKKyAgICBi
b29sIGlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZp
bml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24x
KExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRp
b25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmco
KSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCAqZW51
bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAg
ICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24xKSk7Cisg
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24y
KSk7CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJh
dGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgcHJvZ3JhbS5pbnRyaW5zaWNzKCkuYm9vbFR5cGUo
KSksIFN0cmluZygib3BlcmF0b3I9PSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0
ZWQpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKSk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2lu
KCkpLCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVs
bHB0cik7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7
CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRp
b24pKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4o
ZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwg
V1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCBTdHJp
bmcoIm9wZXJhdG9yLnZhbHVlIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1v
dmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7
CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlv
bkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVy
ZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSks
ICplbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRy
KTsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikp
OworICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6
Om51bGxvcHQsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+dHlwZSgpLmNsb25lKCksIFN0cmluZygi
b3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAg
ICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KSk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBlbnVtZXJhdGlvbkRlZmluaXRp
b24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAg
ICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAg
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAg
ICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJhdGlv
bkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxv
cHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24pLCBTdHJpbmcoIm9wZXJh
dG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0
ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAg
ICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOwor
ICAgICAgICB9CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlv
bkZ1bmN0aW9ucy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uYWMxMDc4NzJlZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0
aW9ucy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNM
IHsKKworY2xhc3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlv
bnMoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3Nv
cnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVz
aXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uZmU4MTNkYjM4MTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3Bw
CkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vz
c29ycy5oIgorCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNM
UHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldI
TFNMVHlwZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK3ZvaWQgc3lu
dGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIGJvb2wg
aXNPcGVyYXRvciA9IHRydWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAgICBm
b3IgKGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRp
b25zKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJl
RGVmaW5pdGlvbi0+c3RydWN0dXJlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIC8vIFRoZSBnZXR0ZXI6IG9wZXJhdG9yLmZpZWxkCisgICAgICAgICAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2Vu
KHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBl
UmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwg
KnN0cnVjdHVyZURlZmluaXRpb24pLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsK
KyAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Cisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0
aW9uKSk7CisgICAgICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpU
b2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBX
VEY6Om51bGxvcHQsIHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZzo6Zm9y
bWF0KCJvcGVyYXRvci4lcyIsIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkp
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3Ry
aWN0ZWQpOworICAgICAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgLy8gVGhlIHNldHRlcjogb3BlcmF0b3IuZmllbGQ9CisgICAgICAgICAgICAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24xKExleGVyOjpU
b2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6
VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4o
KSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0
cik7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVj
bGFyYXRpb24yKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpR
dWFsaWZpZXJzKCksIHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25lKCksIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChX
VEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24xKSk7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
cy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMikpOworICAgICAgICAgICAgICAg
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5v
cmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCAq
c3RydWN0dXJlRGVmaW5pdGlvbiksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0iLCBzdHJ1
Y3R1cmVFbGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwg
V1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgICAgICAg
ICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhlIGFuZGVyOiBvcGVyYXRvciYuZmllbGQK
KyAgICAgICAgICAgIGF1dG8gY3JlYXRlQW5kZXIgPSBbJl0oQVNUOjpSZWZlcmVuY2VUeXBlOjpB
ZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKSAtPiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24geworICAgICAgICAgICAgICAgIGF1dG8gYXJndW1lbnRUeXBlID0gc3RkOjptYWtlX3VuaXF1
ZTxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4o
KSksIGFkZHJlc3NTcGFjZSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihz
dHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgKnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAg
ICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihM
ZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygp
LCBXVEZNb3ZlKGFyZ3VtZW50VHlwZSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIp
OworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFy
YXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBzdGQ6Om1ha2VfdW5p
cXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdp
bigpKSwgYWRkcmVzc1NwYWNlLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpKTsKKyAg
ICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVj
dHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9w
dCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nOjpmb3JtYXQoIm9wZXJhdG9yJi4lcyIsIHN0
cnVjdHVyZUVsZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
LCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAgICAg
ICAgIHJldHVybiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uOworICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6
QWRkcmVzc1NwYWNlOjpDb25zdGFudCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3Jl
YXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmljZSkpOworICAg
ICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwKSk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChj
cmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkKSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFj
Y2Vzc29ycy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50
aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjRlOWI5ZmY3MGMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmgK
QEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitj
bGFzcyBQcm9ncmFtOworCit2b2lkIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3Jh
bSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uN2Y0MzkxMzZhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCkBAIC0wLDAgKzEsMTAz
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJXSExTTFByb2dyYW0u
aCIKKyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNM
QXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIgorI2lu
Y2x1ZGUgIldITFNMQmFzZUZ1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xCYXNl
U2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTEJsb2NrLmgiCisjaW5jbHVkZSAiV0hMU0xCb29s
ZWFuTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMQnJlYWsuaCIKKyNpbmNsdWRlICJXSExTTEJ1
aWx0SW5TZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIKKyNpbmNs
dWRlICJXSExTTENvbW1hRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHBy
ZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMQ29udGludWUuaCIKKyNpbmNsdWRlICJX
SExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG9XaGlsZUxvb3Au
aCIKKyNpbmNsdWRlICJXSExTTERvdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEVmZmVj
dGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVm
aW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKKyNpbmNsdWRl
ICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEZhbGx0aHJvdWdoLmgiCisjaW5j
bHVkZSAiV0hMU0xGbG9hdExpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNp
bmNsdWRlICJXSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlv
bkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNp
bmNsdWRlICJXSExTTElmU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xJbmRleEV4cHJlc3Np
b24uaCIKKyNpbmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xM
b2dpY2FsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbE5vdEV4cHJlc3Npb24u
aCIKKyNpbmNsdWRlICJXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNs
dWRlICJXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCisjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJh
bC5oIgorI2luY2x1ZGUgIldITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5j
bHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKKyNpbmNsdWRlICJXSExT
TFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5
cGUuaCIKKyNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExT
TFJldHVybi5oIgorI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFNw
ZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RhZ2VJbk91
dFNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExT
TFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaENhc2UuaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaFN0
YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTFRyYXAuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5
cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRl
ICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxp
dGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTFZhbHVlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudC5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJX
SExTTFdoaWxlTG9vcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExT
TCB7CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICAvLyBU
aGVzZSB2aXNpdGluZyBmdW5jdGlvbnMgbWlnaHQgYWRkIG5ldyBnbG9iYWwgc3RhdGVtZW50cywg
c28gZG9uJ3QgdXNlIGZvcmVhY2ggc3ludGF4LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KCpwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpW2ldKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKS5zaXplKCk7ICsraSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25z
KClbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5lbnVtZXJhdGlvbkRl
ZmluaXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcHJv
Z3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKClbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCgqcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKClbaV0pOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnByb2dyYW0u
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKVtpXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KCpwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKVtp
XSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5
cGUpCit7CisgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5h
bWVkVHlwZSkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBl
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+
KHVubmFtZWRUeXBlKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+
KHVubmFtZWRUeXBlKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpOworICAgIGVsc2UgeworICAgICAgICBB
U1NFUlQoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICB9
Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKK3sK
KyAgICBpZiAoaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSkp
OworICAgIGVsc2UgaWYgKGlzPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5p
dGlvbj4obmFtZWRUeXBlKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmlu
aXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4obmFtZWRUeXBlKSk7CisgICAgZWxzZSB7CisgICAg
ICAgIEFTU0VSVChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSk7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4obmFtZWRUeXBlKSk7CisgICAgfQorfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6
VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKQoreworICAgIGlmICh0eXBlRGVmaW5pdGlv
bi50eXBlKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdHlwZURlZmluaXRpb24udHlw
ZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24m
IHN0cnVjdHVyZURlZmluaXRpb24pCit7CisgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50
IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKQorICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRWxlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSk7Cisg
ICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5l
bnVtZXJhdGlvbk1lbWJlcnMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVudW1lcmF0
aW9uTWVtYmVyKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0
aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mPihmdW5jdGlvbkRlZmluaXRpb24pKTsK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOworfQor
Cit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGlj
X2Nhc3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bikpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
JiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgZm9yIChhdXRvJiB0eXBlQXJndW1lbnQg
OiBuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQodHlwZUFyZ3VtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCit7CisgICAgZm9yIChhdXRvJiB0eXBlQXJn
dW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KHR5cGVBcmd1bWVudCk7CisgICAgaWYgKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRU
eXBlKCkgJiYgaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRU
eXBlKCkpKSB7CisgICAgICAgIGF1dG8mIHR5cGVEZWZpbml0aW9uID0gZG93bmNhc3Q8QVNUOjpU
eXBlRGVmaW5pdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBp
ZiAodHlwZURlZmluaXRpb24udHlwZSgpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KCp0eXBlRGVmaW5pdGlvbi50eXBlKCkpOworICAgIH0KK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlz
aXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlJj4ocG9pbnRlclR5cGUpKTsKK30KKwor
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVu
Y2VUeXBlKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OlJlZmVy
ZW5jZVR5cGUmPihhcnJheVJlZmVyZW5jZVR5cGUpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChh
cnJheVR5cGUudHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN0cnVjdHVy
ZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0
cnVjdHVyZUVsZW1lbnQudHlwZSgpKTsKKyAgICBpZiAoc3RydWN0dXJlRWxlbWVudC5zZW1hbnRp
YygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50
aWMoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYg
ZW51bWVyYXRpb25NZW1iZXIpCit7CisgICAgaWYgKGVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZW51bWVyYXRpb25NZW1iZXIudmFsdWUoKSk7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5j
dGlvbkRlY2xhcmF0aW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlY2xh
cmF0aW9uLmF0dHJpYnV0ZUJsb2NrKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlv
bkRlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgZm9yIChhdXRvJiBwYXJhbWV0ZXIgOiBmdW5jdGlv
bkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHBh
cmFtZXRlcik7CisgICAgaWYgKGZ1bmN0aW9uRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmdW5jdGlvbkRlY2xhcmF0aW9uLnNlbWFudGljKCkpOwor
fQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBlQXJndW1lbnQp
Cit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkNvbnN0YW50RXhw
cmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChjb25zdGFudEV4cHJlc3Npb24pOworICAgIH0sIFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpU
eXBlUmVmZXJlbmNlPiYgdHlwZVJlZmVyZW5jZSkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoKnR5cGVSZWZlcmVuY2UpOworICAgIH0pLCB0eXBlQXJndW1lbnQpOworfQorCit2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYgcmVmZXJlbmNlVHlwZSkKK3sKKyAgICBj
aGVja0Vycm9yQW5kVmlzaXQocmVmZXJlbmNlVHlwZS5lbGVtZW50VHlwZSgpKTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlNlbWFudGljJiBzZW1hbnRpYykKK3sKKyAgICBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6QnVpbHRJblNlbWFudGljJiBidWlsdEluU2Vt
YW50aWMpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGJ1aWx0SW5TZW1hbnRpYyk7Cisg
ICAgfSwgWyZdKEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYgcmVzb3VyY2VTZW1hbnRpYykgeworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVzb3VyY2VTZW1hbnRpYyk7CisgICAgfSwgWyZdKEFT
VDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJiBzcGVjaWFsaXphdGlvbkNvbnN0YW50
U2VtYW50aWMpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHNwZWNpYWxpemF0aW9uQ29u
c3RhbnRTZW1hbnRpYyk7CisgICAgfSwgWyZdKEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJiBzdGFn
ZUluT3V0U2VtYW50aWMpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YWdlSW5PdXRT
ZW1hbnRpYyk7CisgICAgfSksIHNlbWFudGljKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKQoreworICAgIGNvbnN0
YW50RXhwcmVzc2lvbi52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRl
cmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoaW50ZWdl
ckxpdGVyYWwpOworICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHVuc2lnbmVk
SW50ZWdlckxpdGVyYWwpOworICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRl
cmFsKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmbG9hdExpdGVyYWwpOworICAgIH0s
IFsmXShBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgeworICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQobnVsbExpdGVyYWwpOworICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJiBi
b29sZWFuTGl0ZXJhbCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYm9vbGVhbkxpdGVy
YWwpOworICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVy
UmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkg
eworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UpOworICAgIH0pKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OkF0dHJpYnV0ZUJsb2NrJiBhdHRyaWJ1dGVCbG9jaykKK3sKKyAgICBmb3IgKGF1dG8mIGZ1
bmN0aW9uQXR0cmlidXRlIDogYXR0cmlidXRlQmxvY2spCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpC
dWlsdEluU2VtYW50aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UmVzb3Vy
Y2VTZW1hbnRpYyYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6
U3RhZ2VJbk91dFNlbWFudGljJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Oklu
dGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQo
aW50ZWdlckxpdGVyYWwudHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlVu
c2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpCit7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudHlwZSgpKTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKQoreworICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChmbG9hdExpdGVyYWwudHlwZSgpKTsKK30KKwordm9pZCBWaXNp
dG9yOjp2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkKK3sKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQobnVsbExpdGVyYWwudHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OkJvb2xlYW5MaXRlcmFsJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OkludGVnZXJMaXRlcmFsVHlwZSYgaW50ZWdlckxpdGVyYWxUeXBlKQoreworICAgIGlmIChpbnRl
Z2VyTGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCgqaW50ZWdlckxpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBjaGVja0Vycm9yQW5k
VmlzaXQoaW50ZWdlckxpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYgdW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGUpCit7CisgICAgaWYgKHVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLnJl
c29sdmVkVHlwZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnVuc2lnbmVkSW50ZWdl
ckxpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQodW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgpKTsKK30KKwordm9pZCBWaXNp
dG9yOjp2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbFR5cGUmIGZsb2F0TGl0ZXJhbFR5cGUpCit7Cisg
ICAgaWYgKGZsb2F0TGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqZmxvYXRMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGZsb2F0TGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgpKTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok51bGxMaXRlcmFsVHlwZSYgbnVsbExpdGVyYWxUeXBlKQor
eworICAgIGlmIChudWxsTGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCgqbnVsbExpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVy
UmVmZXJlbmNlJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkZ1bmN0aW9uQXR0
cmlidXRlJiBmdW5jdGlvbkF0dHJpYnV0ZSkKK3sKKyAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJiBudW1UaHJlYWRzRnVu
Y3Rpb25BdHRyaWJ1dGUpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG51bVRocmVhZHNG
dW5jdGlvbkF0dHJpYnV0ZSk7CisgICAgfSksIGZ1bmN0aW9uQXR0cmlidXRlKTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYpCit7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpCbG9jayYgYmxvY2spCit7CisgICAgZm9yIChh
dXRvJiBzdGF0ZW1lbnQgOiBibG9jay5zdGF0ZW1lbnRzKCkpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqc3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN0YXRl
bWVudCYgc3RhdGVtZW50KQoreworICAgIGlmIChpczxBU1Q6OkJsb2NrPihzdGF0ZW1lbnQpKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpCbG9jaz4oc3RhdGVtZW50
KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpCcmVhaz4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QnJlYWs+KHN0YXRlbWVudCkpOworICAgIGVs
c2UgaWYgKGlzPEFTVDo6Q29udGludWU+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChkb3duY2FzdDxBU1Q6OkNvbnRpbnVlPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlm
IChpczxBU1Q6OkRvV2hpbGVMb29wPihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpEb1doaWxlTG9vcD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBp
ZiAoaXM8QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50PihzdGF0ZW1lbnQpKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9u
U3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkZhbGx0aHJvdWdo
PihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpG
YWxsdGhyb3VnaD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpGb3JMb29wPihz
dGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpGb3JM
b29wPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OklmU3RhdGVtZW50PihzdGF0
ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpJZlN0YXRl
bWVudD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpSZXR1cm4+KHN0YXRlbWVu
dCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlJldHVybj4oc3Rh
dGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1lbnQpKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpTd2l0Y2hDYXNlPihzdGF0
ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlN3aXRjaFN0YXRlbWVudD4oc3RhdGVtZW50
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6U3dpdGNoU3RhdGVt
ZW50PihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlRyYXA+KHN0YXRlbWVudCkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlRyYXA+KHN0YXRlbWVu
dCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+
KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgQVNTRVJUKGlzPEFTVDo6V2hpbGVMb29wPihzdGF0ZW1lbnQpKTsKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6V2hpbGVMb29wPihzdGF0ZW1lbnQpKTsKKyAg
ICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpCcmVhayYpCit7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpDb250aW51ZSYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApCit7CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVM
b29wLmNvbmRpdGlvbmFsKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RXhwcmVz
c2lvbiYgZXhwcmVzc2lvbikKK3sKKyAgICBpZiAoaXM8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6
OkFzc2lnbm1lbnRFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNU
OjpCb29sZWFuTGl0ZXJhbD4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChkb3duY2FzdDxBU1Q6OkJvb2xlYW5MaXRlcmFsPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBp
ZiAoaXM8QVNUOjpDYWxsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkNhbGxFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Cisg
ICAgZWxzZSBpZiAoaXM8QVNUOjpDb21tYUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpDb21tYUV4cHJlc3Npb24+KGV4cHJl
c3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oZXhw
cmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkRlcmVm
ZXJlbmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6Rmxv
YXRMaXRlcmFsPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25j
YXN0PEFTVDo6RmxvYXRMaXRlcmFsPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNU
OjpJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBp
ZiAoaXM8QVNUOjpMb2dpY2FsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uPihleHByZXNzaW9u
KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oZXhwcmVzc2lv
bikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkxvZ2ljYWxOb3RF
eHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpNYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRvd25jYXN0PEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lv
bikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihleHByZXNz
aW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6TWFrZVBvaW50
ZXJFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpOdWxsTGl0
ZXJhbD4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxB
U1Q6Ok51bGxMaXRlcmFsPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpEb3RF
eHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25j
YXN0PEFTVDo6RG90RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFT
VDo6SW5kZXhFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRvd25jYXN0PEFTVDo6SW5kZXhFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxz
ZSBpZiAoaXM8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6VGVybmFyeUV4cHJl
c3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8
QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFT
VDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWw+KGV4cHJlc3Np
b24pKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6VmFyaWFibGVSZWZlcmVu
Y2U+KGV4cHJlc3Npb24pKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFT
VDo6VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24pKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
biY+KGRvdEV4cHJlc3Npb24pKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkluZGV4
RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChp
bmRleEV4cHJlc3Npb24uaW5kZXhFeHByZXNzaW9uKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChzdGF0aWNfY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiY+KGluZGV4RXhwcmVz
c2lvbikpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9u
LmJhc2UoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNz
aW9uU3RhdGVtZW50JiBlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KQoreworICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmVmZmVjdGZ1bEV4cHJl
c3Npb24oKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpCit7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKQoreworICAg
IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKKyAgICB9LCBb
Jl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24pIHsKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KCpleHByZXNzaW9uKTsKKyAgICB9KSwgZm9yTG9vcC5pbml0
aWFsaXphdGlvbigpKTsKKyAgICBpZiAoZm9yTG9vcC5jb25kaXRpb24oKSkKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KCpmb3JMb29wLmNvbmRpdGlvbigpKTsKKyAgICBpZiAoZm9yTG9vcC5p
bmNyZW1lbnQoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmb3JMb29wLmluY3JlbWVu
dCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZm9yTG9vcC5ib2R5KCkpOworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50KQoreworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKKyAgICBpZiAoaWZTdGF0ZW1lbnQuZWxz
ZUJvZHkoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCppZlN0YXRlbWVudC5lbHNlQm9k
eSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVt
ZW50KQoreworICAgIGlmIChyZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KCpyZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIGlmIChzd2l0Y2hD
YXNlLnZhbHVlKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqc3dpdGNoQ2FzZS52YWx1
ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZS5ibG9jaygpKTsKK30KKwor
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYgc3dpdGNoU3RhdGVtZW50
KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7Cisg
ICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hDYXNlKTsKK30KKwordm9pZCBWaXNp
dG9yOjp2aXNpdChBU1Q6OlRyYXAmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50KQoreworICAgIGZvciAoYXV0byYgdmFyaWFibGVEZWNsYXJhdGlvbiA6IHZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50LnZhcmlhYmxlRGVjbGFyYXRpb25zKCkpCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxl
TG9vcC5ib2R5KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQo
dmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9u
LnNlbWFudGljKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJh
dGlvbi5zZW1hbnRpYygpKTsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXpl
cigpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uaW5p
dGlhbGl6ZXIoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpBc3NpZ25tZW50RXhw
cmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFz
c2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQoreworICAgIGZvciAoYXV0byYgYXJn
dW1lbnQgOiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KCphcmd1bWVudCk7CisgICAgaWYgKGNhbGxFeHByZXNzaW9uLmNhc3RSZXR1cm5UeXBl
KCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChjYWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJu
VHlwZSgpLT5nZXQoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpDb21tYUV4cHJl
c3Npb24mIGNvbW1hRXhwcmVzc2lvbikKK3sKKyAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBj
b21tYUV4cHJlc3Npb24ubGlzdCgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmV4cHJl
c3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNz
aW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRl
cmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNzaW9uKQoreworICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5yaWdodCgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lvbikKK3sK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsK
K30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworfQorCit2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJl
c3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5s
VmFsdWUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vbGRWYWx1ZSgpKTsKKyAgICBj
aGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpKTsK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1
ZUV4cHJlc3Npb24oKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24ucmVzdWx0RXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24ucHJlZGljYXRlKCkpOworICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24uZWxzZUV4cHJlc3Npb24oKSk7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYpCit7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KFByb2dyYW0mIHByb2dyYW0pCit7CisgICAg
aWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChwcm9ncmFtKTsKK30KKwordm9pZCBWaXNpdG9y
OjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCit7Cisg
ICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh1bm5hbWVkVHlwZSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChuYW1lZFR5cGUpOworfQorCit2b2lk
IFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVm
aW5pdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHR5cGVEZWZpbml0
aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTdHJ1Y3R1
cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkK
KyAgICAgICAgdmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlv
bkRlZmluaXRpb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChlbnVtZXJh
dGlvbkRlZmluaXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIGlmICgh
ZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKK30KKwordm9pZCBW
aXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
JiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAg
ICAgdmlzaXQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBl
RGVjbGFyYXRpb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChuYXRpdmVU
eXBlRGVjbGFyYXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCit7CisgICAgaWYgKCFlcnJvcigpKQor
ICAgICAgICB2aXNpdCh0eXBlUmVmZXJlbmNlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRlclR5cGUpCit7CisgICAgaWYgKCFl
cnJvcigpKQorICAgICAgICB2aXNpdChwb2ludGVyVHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5j
ZVR5cGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChhcnJheVJlZmVyZW5j
ZVR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkFycmF5
VHlwZSYgYXJyYXlUeXBlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYXJy
YXlUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTdHJ1
Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1cmVFbGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAg
ICAgICAgdmlzaXQoc3RydWN0dXJlRWxlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQor
eworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZW51bWVyYXRpb25NZW1iZXIpOwor
fQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAg
ICB2aXNpdChmdW5jdGlvbkRlY2xhcmF0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpUeXBlQXJndW1lbnQmIHR5cGVBcmd1bWVudCkKK3sKKyAgICBpZiAo
IWVycm9yKCkpCisgICAgICAgIHZpc2l0KHR5cGVBcmd1bWVudCk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYgcmVmZXJlbmNlVHlwZSkK
K3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHJlZmVyZW5jZVR5cGUpOworfQor
Cit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlNlbWFudGljJiBzZW1hbnRp
YykKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHNlbWFudGljKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24m
IGNvbnN0YW50RXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0
KGNvbnN0YW50RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6QXR0cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJsb2NrKQoreworICAgIGlmICghZXJy
b3IoKSkKKyAgICAgICAgdmlzaXQoYXR0cmlidXRlQmxvY2spOworfQorCit2b2lkIFZpc2l0b3I6
OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYgYnVpbHRJblNlbWFudGlj
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYnVpbHRJblNlbWFudGljKTsK
K30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpSZXNvdXJjZVNlbWFu
dGljJiByZXNvdXJjZVNlbWFudGljKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQocmVzb3VyY2VTZW1hbnRpYyk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJiBzcGVjaWFsaXphdGlvbkNv
bnN0YW50U2VtYW50aWMpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzcGVj
aWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYgc3RhZ2VJbk91dFNlbWFudGljKQor
eworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoc3RhZ2VJbk91dFNlbWFudGljKTsK
K30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJh
bCYgaW50ZWdlckxpdGVyYWwpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChp
bnRlZ2VyTGl0ZXJhbCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkKK3sKKyAg
ICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpOwor
fQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYg
ZmxvYXRMaXRlcmFsKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZmxvYXRM
aXRlcmFsKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOdWxs
TGl0ZXJhbCYgbnVsbExpdGVyYWwpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNp
dChudWxsTGl0ZXJhbCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKQoreworICAgIGlmICghZXJyb3IoKSkK
KyAgICAgICAgdmlzaXQoYm9vbGVhbkxpdGVyYWwpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkludGVnZXJMaXRlcmFsVHlwZSYgaW50ZWdlckxpdGVyYWxUeXBl
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoaW50ZWdlckxpdGVyYWxUeXBl
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZSYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUpCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsVHlw
ZSYgZmxvYXRMaXRlcmFsVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0
KGZsb2F0TGl0ZXJhbFR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6Ok51bGxMaXRlcmFsVHlwZSYgbnVsbExpdGVyYWxUeXBlKQoreworICAgIGlmICghZXJy
b3IoKSkKKyAgICAgICAgdmlzaXQobnVsbExpdGVyYWxUeXBlKTsKK30KKwordm9pZCBWaXNpdG9y
OjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChjb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6RnVuY3Rpb25BdHRyaWJ1dGUmIGZ1bmN0aW9uQXR0cmlidXRlKQor
eworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZnVuY3Rpb25BdHRyaWJ1dGUpOwor
fQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok51bVRocmVhZHNGdW5j
dGlvbkF0dHJpYnV0ZSYgbnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKQoreworICAgIGlmICgh
ZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKTsKK30K
Kwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCbG9jayYgYmxvY2spCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChibG9jayk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RhdGVtZW50JiBzdGF0ZW1lbnQpCit7Cisg
ICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzdGF0ZW1lbnQpOworfQorCit2b2lkIFZp
c2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJyZWFrJiBicmVha1N0YXRlbWVudCkKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGJyZWFrU3RhdGVtZW50KTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDb250aW51ZSYgY29udGludWVT
dGF0ZW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChjb250aW51ZVN0
YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RG9X
aGlsZUxvb3AmIGRvV2hpbGVMb29wKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQoZG9XaGlsZUxvb3ApOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAg
ICB2aXNpdChleHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3Io
KSkKKyAgICAgICAgdmlzaXQoZG90RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24pCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChpbmRleEV4cHJlc3Npb24pOworfQor
Cit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkK
KyAgICAgICAgdmlzaXQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNp
dG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50
JiBlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAg
ICAgICAgdmlzaXQoZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RmFsbHRocm91Z2gmIGZhbGx0aHJvdWdoU3Rh
dGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZmFsbHRocm91Z2hT
dGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZv
ckxvb3AmIGZvckxvb3ApCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChmb3JM
b29wKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpJZlN0YXRl
bWVudCYgaWZTdGF0ZW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChp
ZlN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2
aXNpdChyZXR1cm5TdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OlN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7CisgICAgaWYgKCFlcnJvcigpKQor
ICAgICAgICB2aXNpdChzd2l0Y2hDYXNlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkKK3sKKyAgICBp
ZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHN3aXRjaFN0YXRlbWVudCk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VHJhcCYgdHJhcCkKK3sKKyAgICBpZiAo
IWVycm9yKCkpCisgICAgICAgIHZpc2l0KHRyYXApOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJs
ZURlY2xhcmF0aW9uc1N0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZp
c2l0KHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKK3sKKyAgICBpZiAo
IWVycm9yKCkpCisgICAgICAgIHZpc2l0KHdoaWxlTG9vcCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNs
YXJhdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHZhcmlhYmxlRGVj
bGFyYXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkFz
c2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uKTsKK30KKwordm9pZCBW
aXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJl
c3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChjYWxsRXhwcmVzc2lv
bik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29tbWFFeHBy
ZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2
aXNpdChjb21tYUV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQor
eworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZGVyZWZlcmVuY2VFeHByZXNzaW9u
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpMb2dpY2FsRXhw
cmVzc2lvbiYgbG9naWNhbEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAg
ICB2aXNpdChsb2dpY2FsRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9u
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobG9naWNhbE5vdEV4cHJlc3Np
b24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCit7Cisg
ICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpNYWtlUG9p
bnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9y
KCkpCisgICAgICAgIHZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYg
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAg
IHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lv
bikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHRlcm5hcnlFeHByZXNzaW9u
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpWYXJpYWJsZVJl
ZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAg
ICB2aXNpdCh2YXJpYWJsZVJlZmVyZW5jZSk7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKaW5k
ZXggNTE2ODU2ZTQxZDAuLjg1ZTc4ZmY1OTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaApAQCAtMjcsNTQzICsyNywyMzQgQEAK
IAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKLSNpbmNs
dWRlICJXSExTTEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIgotI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCi0jaW5j
bHVkZSAiV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMQmFzZUZ1
bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiV0hMU0xCYXNlU2VtYW50aWMuaCIKLSNpbmNs
dWRlICJXSExTTEJsb2NrLmgiCi0jaW5jbHVkZSAiV0hMU0xCb29sZWFuTGl0ZXJhbC5oIgotI2lu
Y2x1ZGUgIldITFNMQnJlYWsuaCIKLSNpbmNsdWRlICJXSExTTEJ1aWx0SW5TZW1hbnRpYy5oIgot
I2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTENvbW1hRXhw
cmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oIgot
I2luY2x1ZGUgIldITFNMQ29udGludWUuaCIKLSNpbmNsdWRlICJXSExTTERlcmVmZXJlbmNlRXhw
cmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMRG9XaGlsZUxvb3AuaCIKLSNpbmNsdWRlICJXSExT
TERvdEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0
ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgotI2luY2x1
ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKLSNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24u
aCIKLSNpbmNsdWRlICJXSExTTEZhbGx0aHJvdWdoLmgiCi0jaW5jbHVkZSAiV0hMU0xGbG9hdExp
dGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKICNpbmNsdWRlICJXSExTTEZ1bmN0
aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCi0j
aW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKLSNpbmNsdWRlICJXSExTTElmU3Rh
dGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xJbmRleEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJX
SExTTEludGVnZXJMaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5o
IgotI2luY2x1ZGUgIldITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExT
TE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTE1ha2VQb2lu
dGVyRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bi5oIgotI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAi
V0hMU0xOb2RlLmgiCi0jaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldI
TFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVkZSAiV0hMU0xQYXJhbWV0
ZXIuaCIKLSNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTFF1YWxpZmllci5oIgotI2lu
Y2x1ZGUgIldITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNM
UmVmZXJlbmNlVHlwZS5oIgotI2luY2x1ZGUgIldITFNMUmVzb3VyY2VTZW1hbnRpYy5oIgotI2lu
Y2x1ZGUgIldITFNMUmV0dXJuLmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgotI2luY2x1
ZGUgIldITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hM
U0xTdGFnZUluT3V0U2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgotI2lu
Y2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgotI2luY2x1ZGUgIldITFNMU3RydWN0
dXJlRWxlbWVudC5oIgotI2luY2x1ZGUgIldITFNMU3dpdGNoQ2FzZS5oIgotI2luY2x1ZGUgIldI
TFNMU3dpdGNoU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5o
IgotI2luY2x1ZGUgIldITFNMVHJhcC5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgogI2luY2x1
ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlvbi5o
IgotI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIldITFNMVW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKLSNpbmNsdWRlICJX
SExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFy
YXRpb25zU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIgot
I2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCi0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBu
YW1lc3BhY2UgV0hMU0wgewogCi1jbGFzcyBWaXNpdG9yIHsKLSAgICB+VmlzaXRvcigpID0gZGVm
YXVsdDsKLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChQcm9ncmFtJiBwcm9ncmFtKQotICAgIHsK
LSAgICAgICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRp
b25zKCkpCi0gICAgICAgICAgICB2aXNpdCh0eXBlRGVmaW5pdGlvbik7Ci0gICAgICAgIGZvciAo
YXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMo
KSkKLSAgICAgICAgICAgIHZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOwotICAgICAgICBmb3Ig
KGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0
aW9ucygpKQotICAgICAgICAgICAgdmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKLSAgICAg
ICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5p
dGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7Ci0gICAgICAg
IGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24pOwotICAgICAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA6IHBy
b2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQobmF0aXZl
VHlwZURlY2xhcmF0aW9uKTsKLSAgICB9Ci0KLSAgICB2b2lkIHZpc2l0VHlwZShBU1Q6OlR5cGUm
IHR5cGUpCi0gICAgewotICAgICAgICBpZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKSkK
LSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odHlwZSkpOwot
ICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih0eXBlKSkKLSAgICAgICAgICAg
IHZpc2l0KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHR5cGUpKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHR5cGUpKQotICAgICAgICAgICAgdmlzaXQo
ZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHR5cGUpKTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpBcnJheVR5cGU+KHR5cGUpKTsKLSAgICAgICAg
ICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih0eXBlKSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURl
ZmluaXRpb24pCi0gICAgewotICAgICAgICB2aXNpdFR5cGUodHlwZURlZmluaXRpb24udHlwZSgp
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0
aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBzdHJ1
Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKQot
ICAgICAgICAgICAgdmlzaXQoc3RydWN0dXJlRWxlbWVudCk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmlu
aXRpb24pCi0gICAgewotICAgICAgICB2aXNpdFR5cGUoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5
cGUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25NZW1iZXIgOiBlbnVtZXJhdGlv
bkRlZmluaXRpb24uZW51bWVyYXRpb25NZW1iZXJzKCkpCi0gICAgICAgICAgICB2aXNpdChlbnVt
ZXJhdGlvbk1lbWJlcik7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCi0gICAgewotICAgICAgICB2aXNp
dChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mPihmdW5jdGlvbkRlZmluaXRp
b24pKTsKLSAgICAgICAgdmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOwotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
IG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCi0gICAgewotICAgICAgICB2aXNpdChzdGF0aWNf
Y2FzdDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mPihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCi0gICAgewotICAgICAgICBmb3IgKGF1dG8m
IHR5cGVBcmd1bWVudCA6IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkpCi0g
ICAgICAgICAgICB2aXNpdCh0eXBlQXJndW1lbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCi0gICAgewotICAgICAg
ICBmb3IgKGF1dG8mIHR5cGVBcmd1bWVudCA6IHR5cGVSZWZlcmVuY2UudHlwZUFyZ3VtZW50cygp
KQotICAgICAgICAgICAgdmlzaXQodHlwZUFyZ3VtZW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRlclR5cGUpCi0gICAgewotICAgICAg
ICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGUmPihwb2ludGVyVHlwZSkpOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYg
YXJyYXlSZWZlcmVuY2VUeXBlKQotICAgIHsKLSAgICAgICAgdmlzaXQoc3RhdGljX2Nhc3Q8QVNU
OjpSZWZlcmVuY2VUeXBlJj4oYXJyYXlSZWZlcmVuY2VUeXBlKSk7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCi0gICAgewotICAgICAg
ICB2aXNpdFR5cGUoYXJyYXlUeXBlLnR5cGUoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6U3RydWN0dXJlRWxlbWVudCYgc3RydWN0dXJlRWxlbWVudCkKLSAgICB7Ci0g
ICAgICAgIHZpc2l0VHlwZShzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKSk7Ci0gICAgICAgIGlmIChz
dHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkpCi0gICAgICAgICAgICB2aXNpdCgqc3RydWN0dXJl
RWxlbWVudC5zZW1hbnRpYygpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCi0gICAgewotICAgICAgICBp
ZiAoZW51bWVyYXRpb25NZW1iZXIudmFsdWUoKSkKLSAgICAgICAgICAgIHZpc2l0KCplbnVtZXJh
dGlvbk1lbWJlci52YWx1ZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNsYXJhdGlvbikKLSAgICB7Ci0g
ICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVjbGFyYXRpb24uYXR0cmlidXRlQmxvY2soKSk7Ci0gICAg
ICAgIHZpc2l0VHlwZShmdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7Ci0gICAgICAgIGZvciAo
YXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkpCi0gICAg
ICAgICAgICB2aXNpdChwYXJhbWV0ZXIpOwotICAgICAgICBpZiAoZnVuY3Rpb25EZWNsYXJhdGlv
bi5zZW1hbnRpYygpKQotICAgICAgICAgICAgdmlzaXQoKmZ1bmN0aW9uRGVjbGFyYXRpb24uc2Vt
YW50aWMoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZUFyZ3Vt
ZW50JiB0eXBlQXJndW1lbnQpCi0gICAgewotICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pIHsK
LSAgICAgICAgICAgIHZpc2l0KGNvbnN0YW50RXhwcmVzc2lvbik7Ci0gICAgICAgIH0sIFsmXShz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVmZXJlbmNlPiYgdHlwZVJlZmVyZW5jZSkgewotICAg
ICAgICAgICAgdmlzaXQoKnR5cGVSZWZlcmVuY2UpOwotICAgICAgICB9KSwgdHlwZUFyZ3VtZW50
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJiBy
ZWZlcmVuY2VUeXBlKQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHJlZmVyZW5jZVR5cGUuZWxl
bWVudFR5cGUoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U2VtYW50
aWMmIHNlbWFudGljKQotICAgIHsKLSAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYgYnVpbHRJblNlbWFudGljKSB7Ci0gICAgICAgICAg
ICB2aXNpdChidWlsdEluU2VtYW50aWMpOwotICAgICAgICB9LCBbJl0oQVNUOjpSZXNvdXJjZVNl
bWFudGljJiByZXNvdXJjZVNlbWFudGljKSB7Ci0gICAgICAgICAgICB2aXNpdChyZXNvdXJjZVNl
bWFudGljKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFu
dGljJiBzcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMpIHsKLSAgICAgICAgICAgIHZpc2l0
KHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OlN0
YWdlSW5PdXRTZW1hbnRpYyYgc3RhZ2VJbk91dFNlbWFudGljKSB7Ci0gICAgICAgICAgICB2aXNp
dChzdGFnZUluT3V0U2VtYW50aWMpOwotICAgICAgICB9KSwgc2VtYW50aWMpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRF
eHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgY29uc3RhbnRFeHByZXNzaW9uLnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7Ci0g
ICAgICAgICAgICB2aXNpdChpbnRlZ2VyTGl0ZXJhbCk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OlVu
c2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKLSAgICAgICAg
ICAgIHZpc2l0KHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpOwotICAgICAgICB9LCBbJl0oQVNUOjpG
bG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgewotICAgICAgICAgICAgdmlzaXQoZmxvYXRMaXRl
cmFsKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRlcmFsKSB7Ci0g
ICAgICAgICAgICB2aXNpdChudWxsTGl0ZXJhbCk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OkJvb2xl
YW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkgewotICAgICAgICAgICAgdmlzaXQoYm9vbGVhbkxp
dGVyYWwpOwotICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UpIHsKLSAgICAgICAgICAgIHZpc2l0KGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9u
TWVtYmVyUmVmZXJlbmNlKTsKLSAgICAgICAgfSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkF0dHJpYnV0ZUJsb2NrJiBhdHRyaWJ1dGVCbG9jaykKLSAgICB7Ci0gICAg
ICAgIGZvciAoYXV0byYgZnVuY3Rpb25BdHRyaWJ1dGUgOiBhdHRyaWJ1dGVCbG9jaykKLSAgICAg
ICAgICAgIHZpc2l0KGZ1bmN0aW9uQXR0cmlidXRlKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpQYXJhbWV0ZXImIHBhcmFtZXRlcikKLSAgICB7Ci0gICAgICAgIHZpc2l0
VHlwZShwYXJhbWV0ZXIudHlwZSgpKTsKLSAgICAgICAgaWYgKHBhcmFtZXRlci5zZW1hbnRpYygp
KQotICAgICAgICAgICAgdmlzaXQoKnBhcmFtZXRlci5zZW1hbnRpYygpKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCdWlsdEluU2VtYW50aWMmKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZXNvdXJjZVNlbWFudGljJikKLSAgICB7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3BlY2lhbGl6YXRpb25Db25z
dGFudFNlbWFudGljJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6U3RhZ2VJbk91dFNlbWFudGljJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJikKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJikKLSAgICB7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TnVsbExpdGVyYWwmKQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYpCi0gICAg
ewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25BdHRyaWJ1dGUmIGZ1bmN0aW9uQXR0cmlidXRlKQot
ICAgIHsKLSAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6Ok51bVRo
cmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYgbnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKSB7Ci0g
ICAgICAgICAgICB2aXNpdChudW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUpOwotICAgICAgICB9
KSwgZnVuY3Rpb25BdHRyaWJ1dGUpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYpCi0gICAgewotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJiBibG9jaykKLSAgICB7Ci0gICAgICAgIGZvciAo
YXV0byYgc3RhdGVtZW50IDogYmxvY2suc3RhdGVtZW50cygpKQotICAgICAgICAgICAgdmlzaXQo
KnN0YXRlbWVudCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RhdGVt
ZW50JiBzdGF0ZW1lbnQpCi0gICAgewotICAgICAgICBpZiAoaXM8QVNUOjpCbG9jaz4oc3RhdGVt
ZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6QmxvY2s+KHN0YXRlbWVudCkp
OwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkJyZWFrPihzdGF0ZW1lbnQpKQotICAgICAgICAg
ICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpCcmVhaz4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzPEFTVDo6Q29udGludWU+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3du
Y2FzdDxBU1Q6OkNvbnRpbnVlPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNU
OjpEb1doaWxlTG9vcD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFT
VDo6RG9XaGlsZUxvb3A+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkVm
ZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNp
dChkb3duY2FzdDxBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+KHN0YXRlbWVudCkp
OwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkZhbGx0aHJvdWdoPihzdGF0ZW1lbnQpKQotICAg
ICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpGYWxsdGhyb3VnaD4oc3RhdGVtZW50KSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6Rm9yTG9vcD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAg
IHZpc2l0KGRvd25jYXN0PEFTVDo6Rm9yTG9vcD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzPEFTVDo6SWZTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChk
b3duY2FzdDxBU1Q6OklmU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAo
aXM8QVNUOjpSZXR1cm4+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxB
U1Q6OlJldHVybj4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6U3dpdGNo
Q2FzZT4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6U3dpdGNo
Q2FzZT4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6U3dpdGNoU3RhdGVt
ZW50PihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpTd2l0Y2hT
dGF0ZW1lbnQ+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlRyYXA+KHN0
YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlRyYXA+KHN0YXRlbWVu
dCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50PihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgQVNTRVJUKGlzPEFTVDo6V2hpbGVMb29wPihzdGF0ZW1lbnQpKTsKLSAgICAgICAg
ICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6V2hpbGVMb29wPihzdGF0ZW1lbnQpKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJyZWFrJikKLSAgICB7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29udGludWUmKQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxv
b3ApCi0gICAgewotICAgICAgICB2aXNpdChkb1doaWxlTG9vcC5ib2R5KCkpOwotICAgICAgICB2
aXNpdChkb1doaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgaWYg
KGlzPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAg
dmlzaXQoZG93bmNhc3Q8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwot
ICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkJvb2xlYW5MaXRlcmFsPihleHByZXNzaW9uKSkKLSAg
ICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6Qm9vbGVhbkxpdGVyYWw+KGV4cHJlc3Npb24p
KTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpDYWxsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
Ci0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkNhbGxFeHByZXNzaW9uPihleHByZXNz
aW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6Q29tbWFFeHByZXNzaW9uPihleHByZXNz
aW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6Q29tbWFFeHByZXNzaW9uPihl
eHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNz
aW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6RGVyZWZl
cmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6
RmxvYXRMaXRlcmFsPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFT
VDo6RmxvYXRMaXRlcmFsPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6
SW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8
QVNUOjpJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxB
U1Q6OkxvZ2ljYWxFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRv
d25jYXN0PEFTVDo6TG9naWNhbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxz
ZSBpZiAoaXM8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAg
ICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uPihleHByZXNzaW9u
KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8
QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlz
aXQoZG93bmNhc3Q8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAg
ICAgICAgZWxzZSBpZiAoaXM8QVNUOjpOdWxsTGl0ZXJhbD4oZXhwcmVzc2lvbikpCi0gICAgICAg
ICAgICB2aXNpdChkb3duY2FzdDxBU1Q6Ok51bGxMaXRlcmFsPihleHByZXNzaW9uKSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGlzPEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uPihleHByZXNzaW9u
KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6UmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxB
U1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxz
ZSBpZiAoaXM8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAg
ICB2aXNpdChkb3duY2FzdDxBU1Q6OlRlcm5hcnlFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lv
bikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVy
YWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8
QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZXhwcmVzc2lvbikpOwotICAgICAgICAgICAgdmlzaXQo
ZG93bmNhc3Q8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZXhwcmVzc2lvbikpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lv
blN0YXRlbWVudCYgZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkKLSAgICB7Ci0gICAgICAg
IHZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuZWZmZWN0ZnVsRXhwcmVzc2lvbigp
KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpCi0g
ICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxv
b3ApCi0gICAgewotICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50KSB7Ci0gICAgICAgICAgICB2aXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7
Ci0gICAgICAgIH0sIFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVz
c2lvbikgewotICAgICAgICAgICAgdmlzaXQoKmV4cHJlc3Npb24pOwotICAgICAgICB9KSwgZm9y
TG9vcC5pbml0aWFsaXphdGlvbigpKTsKLSAgICAgICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkp
Ci0gICAgICAgICAgICB2aXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7Ci0gICAgICAgIGlmIChm
b3JMb29wLmluY3JlbWVudCgpKQotICAgICAgICAgICAgdmlzaXQoKmZvckxvb3AuaW5jcmVtZW50
KCkpOwotICAgICAgICB2aXNpdChmb3JMb29wLmJvZHkoKSk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50KQotICAgIHsKLSAgICAg
ICAgdmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7Ci0gICAgICAgIHZpc2l0KGlmU3Rh
dGVtZW50LmJvZHkoKSk7Ci0gICAgICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgpKQotICAg
ICAgICAgICAgdmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpOwotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQotICAgIHsKLSAg
ICAgICAgaWYgKHJldHVyblN0YXRlbWVudC52YWx1ZSgpKQotICAgICAgICAgICAgdmlzaXQoKnJl
dHVyblN0YXRlbWVudC52YWx1ZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQotICAgIHsKLSAgICAgICAgaWYgKHN3aXRjaENh
c2UudmFsdWUoKSkKLSAgICAgICAgICAgIHZpc2l0KCpzd2l0Y2hDYXNlLnZhbHVlKCkpOwotICAg
ICAgICB2aXNpdChzd2l0Y2hDYXNlLmJsb2NrKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYgc3dpdGNoU3RhdGVtZW50KQotICAgIHsKLSAg
ICAgICAgdmlzaXQoc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkpOwotICAgICAgICBmb3IgKGF1dG8m
IHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkKLSAgICAgICAgICAg
IHZpc2l0KHN3aXRjaENhc2UpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlRyYXAmKQotICAgIHsKLSAgICB9CitjbGFzcyBQcm9ncmFtOworCituYW1lc3BhY2UgQVNUIHsK
KworY2xhc3MgVHlwZURlZmluaXRpb247CitjbGFzcyBTdHJ1Y3R1cmVEZWZpbml0aW9uOworY2xh
c3MgRW51bWVyYXRpb25EZWZpbml0aW9uOworY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworY2xh
c3MgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNzIE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bjsKK2NsYXNzIFR5cGVSZWZlcmVuY2U7CitjbGFzcyBQb2ludGVyVHlwZTsKK2NsYXNzIEFycmF5
UmVmZXJlbmNlVHlwZTsKK2NsYXNzIEFycmF5VHlwZTsKK2NsYXNzIFN0cnVjdHVyZUVsZW1lbnQ7
CitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlcjsKK2NsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb247Citj
bGFzcyBSZWZlcmVuY2VUeXBlOworY2xhc3MgQ29uc3RhbnRFeHByZXNzaW9uOworY2xhc3MgQnVp
bHRJblNlbWFudGljOworY2xhc3MgUmVzb3VyY2VTZW1hbnRpYzsKK2NsYXNzIFNwZWNpYWxpemF0
aW9uQ29uc3RhbnRTZW1hbnRpYzsKK2NsYXNzIFN0YWdlSW5PdXRTZW1hbnRpYzsKK2NsYXNzIElu
dGVnZXJMaXRlcmFsOworY2xhc3MgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbDsKK2NsYXNzIEZsb2F0
TGl0ZXJhbDsKK2NsYXNzIE51bGxMaXRlcmFsOworY2xhc3MgQm9vbGVhbkxpdGVyYWw7CitjbGFz
cyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZTsKK2NsYXNzIE51
bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZTsKK2NsYXNzIEJsb2NrOworY2xhc3MgU3RhdGVtZW50
OworY2xhc3MgQnJlYWs7CitjbGFzcyBDb250aW51ZTsKK2NsYXNzIERvV2hpbGVMb29wOworY2xh
c3MgRXhwcmVzc2lvbjsKK2NsYXNzIERvdEV4cHJlc3Npb247CitjbGFzcyBJbmRleEV4cHJlc3Np
b247CitjbGFzcyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb247CitjbGFzcyBFZmZlY3RmdWxFeHBy
ZXNzaW9uU3RhdGVtZW50OworY2xhc3MgRmFsbHRocm91Z2g7CitjbGFzcyBGb3JMb29wOworY2xh
c3MgSWZTdGF0ZW1lbnQ7CitjbGFzcyBSZXR1cm47CitjbGFzcyBTd2l0Y2hDYXNlOworY2xhc3Mg
U3dpdGNoU3RhdGVtZW50OworY2xhc3MgVHJhcDsKK2NsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50OworY2xhc3MgV2hpbGVMb29wOworY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbjsK
K2NsYXNzIEFzc2lnbm1lbnRFeHByZXNzaW9uOworY2xhc3MgQ2FsbEV4cHJlc3Npb247CitjbGFz
cyBDb21tYUV4cHJlc3Npb247CitjbGFzcyBEZXJlZmVyZW5jZUV4cHJlc3Npb247CitjbGFzcyBM
b2dpY2FsRXhwcmVzc2lvbjsKK2NsYXNzIExvZ2ljYWxOb3RFeHByZXNzaW9uOworY2xhc3MgTWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbjsKK2NsYXNzIE1ha2VQb2ludGVyRXhwcmVzc2lvbjsK
K2NsYXNzIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb247CitjbGFzcyBUZXJuYXJ5RXhwcmVzc2lv
bjsKK2NsYXNzIFZhcmlhYmxlUmVmZXJlbmNlOworY2xhc3MgVW5uYW1lZFR5cGU7CitjbGFzcyBO
YW1lZFR5cGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpCi0gICAgewotICAg
ICAgICBmb3IgKGF1dG8mIHZhcmlhYmxlRGVjbGFyYXRpb24gOiB2YXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudC52YXJpYWJsZURlY2xhcmF0aW9ucygpKQotICAgICAgICAgICAgdmlzaXQodmFy
aWFibGVEZWNsYXJhdGlvbik7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
V2hpbGVMb29wJiB3aGlsZUxvb3ApCi0gICAgewotICAgICAgICB2aXNpdCh3aGlsZUxvb3AuY29u
ZGl0aW9uYWwoKSk7Ci0gICAgICAgIHZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxl
RGVjbGFyYXRpb24pCi0gICAgewotICAgICAgICB2aXNpdFR5cGUodmFyaWFibGVEZWNsYXJhdGlv
bi50eXBlKCkpOwotICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKQot
ICAgICAgICAgICAgdmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSk7Ci0gICAg
ICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpCi0gICAgICAgICAgICB2
aXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4
cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0
KCkpOwotICAgICAgICB2aXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJl
c3Npb24pCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50IDogY2FsbEV4cHJlc3Np
b24uYXJndW1lbnRzKCkpCi0gICAgICAgICAgICB2aXNpdCgqYXJndW1lbnQpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNz
aW9uKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogY29tbWFFeHByZXNz
aW9uLmxpc3QoKSkKLSAgICAgICAgICAgIHZpc2l0KCpleHByZXNzaW9uKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJl
bmNlRXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lv
bi5wb2ludGVyKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkxvZ2lj
YWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KGxv
Z2ljYWxFeHByZXNzaW9uLmxlZnQoKSk7Ci0gICAgICAgIHZpc2l0KGxvZ2ljYWxFeHByZXNzaW9u
LnJpZ2h0KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxO
b3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0
KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KG1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24ubFZhbHVlKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQotICAgIHsK
LSAgICAgICAgdmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KHByb3BlcnR5QWNj
ZXNzRXhwcmVzc2lvbi5iYXNlKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24p
Ci0gICAgewotICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgp
KTsKLSAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5vbGRWYWx1ZSgpKTsK
LSAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZSgpKTsKLSAg
ICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24o
KSk7Ci0gICAgICAgIHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucmVzdWx0RXhwcmVz
c2lvbigpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUZXJuYXJ5RXhw
cmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdCh0ZXJuYXJ5
RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7Ci0gICAgICAgIHZpc2l0KHRlcm5hcnlFeHByZXNzaW9u
LmJvZHlFeHByZXNzaW9uKCkpOwotICAgICAgICB2aXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5lbHNl
RXhwcmVzc2lvbigpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJp
YWJsZVJlZmVyZW5jZSYpCi0gICAgewotICAgIH0KK30KIAotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OkFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24mKQotICAgIHsKLSAgICB9CitjbGFz
cyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5WaXNpdG9yKCkgPSBkZWZhdWx0Owor
CisgICAgLy8gRklYTUU6IEFkZCBhIHdheSB0byB2aXNpdCBhIGNvbnN0IFByb2dyYW0KKworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChQcm9ncmFtJik7CisgICAgdm9pZCB2aXNpdChBU1Q6OlVubmFt
ZWRUeXBlJiB1bm5hbWVkVHlwZSk7CisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hbWVkVHlwZSYgbmFt
ZWRUeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYpOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlBvaW50ZXJUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJik7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRWxlbWVudCYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlR5cGVBcmd1bWVudCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlZmVyZW5j
ZVR5cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTZW1hbnRpYyYpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OkF0dHJpYnV0ZUJsb2NrJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6QnVpbHRJblNlbWFudGljJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVz
b3VyY2VTZW1hbnRpYyYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlNwZWNpYWxpemF0
aW9uQ29uc3RhbnRTZW1hbnRpYyYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0YWdl
SW5PdXRTZW1hbnRpYyYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkludGVnZXJMaXRl
cmFsJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJ
bnRlZ2VyTGl0ZXJhbFR5cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25l
ZEludGVnZXJMaXRlcmFsVHlwZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZsb2F0
TGl0ZXJhbFR5cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbFR5
cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZ1
bmN0aW9uQXR0cmlidXRlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TnVtVGhyZWFk
c0Z1bmN0aW9uQXR0cmlidXRlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QmxvY2sm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdGF0ZW1lbnQmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpCcmVhayYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNv
bnRpbnVlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkluZGV4RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkVmZmVjdGZ1
bEV4cHJlc3Npb25TdGF0ZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGYWxs
dGhyb3VnaCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVudCYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OlJldHVybiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaENh
c2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUcmFwJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpXaGlsZUxvb3AmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVu
dEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lv
biYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYpOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKTsKKworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0
KFByb2dyYW0mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlVubmFtZWRUeXBl
JiB1bm5hbWVkVHlwZSk7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOYW1lZFR5
cGUmIG5hbWVkVHlwZSk7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUeXBlRGVm
aW5pdGlvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VHlw
ZVJlZmVyZW5jZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UG9pbnRlclR5
cGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXJyYXlUeXBlJik7CisgICAg
dm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50Jik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50Jik7CisgICAgdm9pZCBjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpTZW1hbnRpYyYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
Q29uc3RhbnRFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpB
dHRyaWJ1dGVCbG9jayYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QnVpbHRJ
blNlbWFudGljJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpSZXNvdXJjZVNl
bWFudGljJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWMmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0
YWdlSW5PdXRTZW1hbnRpYyYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SW50
ZWdlckxpdGVyYWwmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlVuc2lnbmVk
SW50ZWdlckxpdGVyYWwmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZsb2F0
TGl0ZXJhbCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TnVsbExpdGVyYWwm
KTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFsJik7Cisg
ICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGUmKTsKKyAg
ICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBl
Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGbG9hdExpdGVyYWxUeXBlJik7
CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOdWxsTGl0ZXJhbFR5cGUmKTsKKyAg
ICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0
aW9uTWVtYmVyUmVmZXJlbmNlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpG
dW5jdGlvbkF0dHJpYnV0ZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TnVt
VGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpCbG9jayYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RhdGVtZW50
Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCcmVhayYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29udGludWUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkRvV2hpbGVMb29wJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpEb3RF
eHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpJbmRleEV4cHJl
c3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlByb3BlcnR5QWNjZXNz
RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RWZmZWN0ZnVs
RXhwcmVzc2lvblN0YXRlbWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
RmFsbHRocm91Z2gmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZvckxvb3Am
KTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OklmU3RhdGVtZW50Jik7CisgICAg
dm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpSZXR1cm4mKTsKKyAgICB2b2lkIGNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6OlN3aXRjaENhc2UmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OlN3aXRjaFN0YXRlbWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6VHJhcCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Oldo
aWxlTG9vcCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXNzaWdubWVudEV4
cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNhbGxFeHByZXNz
aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24m
KTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lv
biYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24m
KTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9u
Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpNYWtlUG9pbnRl
ckV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlRl
cm5hcnlFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpWYXJp
YWJsZVJlZmVyZW5jZSYpOworCisgICAgdm9pZCBzZXRFcnJvcigpCisgICAgeworICAgICAgICBB
U1NFUlQoIW1fZXJyb3IpOworICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKKyAgICB9CisKKyAgICBi
b29sIGVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvcjsgfQorCitwcml2YXRlOgorICAgIGJv
b2wgbV9lcnJvciB7IGZhbHNlIH07IC8vIEZJWE1FOiBNaWdyYXRlIHRoaXMgdG8gYmUgc29tZSBz
b3J0IG9mIGRlc2NyaXB0aXZlIHN0cmluZy4KIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggM2Mw
ZTM2NDcwNTQuLmQ0MGMzNGYwNGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMzA2LDggKzMwNiwzMiBA
QCBNb2R1bGVzL3dlYmdwdS9ET01XaW5kb3dXZWJHUFUuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTExleGVyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEludHJpbnNpY3MuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIu
Y3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTmFtZUNvbnRleHQuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5
cGVDaGVja2VyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1
bmN0aW9ucy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVy
ZUFjY2Vzc29ycy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1l
cmF0aW9uRnVuY3Rpb25zLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXpl
QXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZUNvbnN0cnVjdG9ycy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5j
cHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKK01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHAKK01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwCitNb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwCitNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuY3BwCitNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcAorTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTnVsbExpdGVyYWxUeXBlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xS
ZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJF
bnRyeVBvaW50SXRlbXMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2Vy
TGl0ZXJhbC5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFUuY3BwCiBNb2R1bGVzL3dlYmdwdS9X
ZWJHUFVBZGFwdGVyLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVQmluZEdyb3VwTGF5b3V0LmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDA3YzE2ZWYxNzc1Li40ZjA1NmJiMWEzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQwMyw5ICs2NDAzLDIwIEBA
CiAJCTFDMjRFRUE3MUM3MkE3QjQwMDgwRjhGQyAvKiBKU0ZvbnRGYWNlU2V0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpTRm9udEZhY2VTZXQuaDsgcGF0aCA9IERlcml2ZWRT
b3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZVNldC5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OwogCQkxQzI2NDk3OTBEN0UyNDhBMDBCRDEwRjIgLyogRG9jdW1lbnRMb2FkZXJN
YWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRMb2Fk
ZXJNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzMyNDkxMDFDNkQ2QTNC
MDA3RURCMzIgLyogRm9udFZhcmlhbnRCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZvbnRWYXJpYW50QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDMzMyNzZDMjFDRURBNDIwMDBEQzlGMiAvKiBXSExTTEVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc2RTIxQ0VGRjc0MDAw
REM5RjIgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
UmVzb2x2ZU92ZXJsb2FkSW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMz
Mjc2RjIxQ0YwMTMxMDAwREM5RjIgLyogV0hMU0xJbmZlclR5cGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMSW5mZXJUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3
MTIxQ0YwQkUxMDAwREM5RjIgLyogV0hMU0xOYW1lZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xOYW1lZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzIyMUNG
MEQyRTAwMERDOUYyIC8qIFdITFNMVW5uYW1lZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xV
bm5hbWVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3NDIxRDVB
NzA2MDAwREM5RjIgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFDMzMyNzc1MjFENUIwRjgwMDBEQzlGMiAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rp
b25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzYyMUQ1QzA3RTAwMERDOUYyIC8qIFdI
TFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5
bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUMzMzI3NzcyMUQ1Q0E4MzAwMERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9u
RnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVu
Y3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc4MjFENUNFRDQw
MDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUMzOTY5Q0YxQjc0MjExRTAwMkJDRkE3IC8qIEZvbnRDYWNoZUNv
cmVUZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNo
ZUNvcmVUZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2NjI2MEUxQzZF
N0NBNjAwQUI1MjdDIC8qIEZvbnRGYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEZvbnRGYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2
NjI2MEYxQzZFN0NBNjAwQUI1MjdDIC8qIEZvbnRGYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEZvbnRGYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
N0NDMjFEMjFDREUxOTgwMEMxRkEyQyAvKiBXSExTTE5hbWVDb250ZXh0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdITFNMTmFtZUNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4
MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9y
Q29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNw
ZWN0b3JDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5
NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTY0MTUsNiArNjQyNiwxOCBAQAogCQkxQ0FGMzQ3RTBBNkM0MDUyMDBBQkUwNkUg
LyogV2ViU2NyaXB0T2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YlNjcmlwdE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ3RjBB
NkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQ0FGMzQ4MDBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0
UHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmpl
Y3RQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjJDMjFERDk2
RUYwMDZFODQ2QSAvKiBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDQjY5QjJEMjFERDk2RUYwMDZFODQ2QSAvKiBXSExTTEdhdGhlckVudHJ5
UG9pbnRJdGVtcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIzMjIxREVENDBCMDA2RTg0NkEg
LyogV0hMU0xSZXNvbHZhYmxlVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlc29sdmFibGVU
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjM0MjFERUQ2M0EwMDZF
ODQ2QSAvKiBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xGbG9h
dExpdGVyYWxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjM1MjFE
RUQ2NDkwMDZFODQ2QSAvKiBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQ0I2OUIzNjIxREVENjU3MDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUNCNjlCMzcyMURFRDY2QjAwNkU4NDZBIC8qIFdITFNMVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIzODIxREYwM0UxMDA2
RTg0NkEgLyogV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMRmxvYXRMaXRlcmFsVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
QjY5QjM5MjFERjAzRjMwMDZFODQ2QSAvKiBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjNBMjFERjA0MDMwMDZFODQ2QSAvKiBXSExTTE51bGxM
aXRlcmFsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTE51bGxMaXRlcmFsVHlwZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjNCMjFERjA0MUUwMDZFODQ2
QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQ0I2OUIzRTIxRTAzNUYzMDA2RTg0NkEgLyogV0hMU0xSZXNvbHZpbmdU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUmVzb2x2aW5nVHlwZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQ0I2QjRGODIxN0I4MzkzMDA5M0I5Q0QgLyogVGV4dERlY29yYXRp
b25UaGlja25lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dERlY29yYXRpb25UaGlja25lc3MuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNCNkI0RkIyMTdCODM5NDAwOTNCOUNEIC8q
IFRleHRVbmRlcmxpbmVPZmZzZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFVuZGVybGluZU9mZnNl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0NERjVCQjE5OTAzMzI0MDBCQ0VC
QUQgLyogU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdUb09URkZvbnRDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEzMjE0LDkgKzEzMjM3LDE5IEBACiAJCUMxMUE5RUNEMjE0MDNBNUMw
MENGQjIwQSAvKiBTd2l0Y2hpbmdHUFVDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3dpdGNoaW5n
R1BVQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMxMUE5RUQyMjE0MDU3
OEIwMENGQjIwQSAvKiBTd2l0Y2hpbmdHUFVDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U3dpdGNoaW5nR1BVQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzFF
MUQyMzUyMDNERjE1NDAwNTg0NjY1IC8qIFNjcmVlblByb3BlcnRpZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2NyZWVuUHJvcGVydGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjAx
MzM0NDIxREFDMDk1MDBCNjBDMjcgLyogV0hMU0xJbnRyaW5zaWNzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMSW50cmluc2ljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjAxMzM0
NjIxREFFRTZFMDBCNjBDMjcgLyogV0hMU0xJbnRyaW5zaWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdITFNMSW50cmluc2ljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MDEzMzQ3MjFEQjQzNjMwMEI2MEMyNyAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyMDE1QzA5MUJFNkZFMkMwMDgyMjM4OSAvKiBGb250VmFyaWFu
dEJ1aWxkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udFZhcmlhbnRCdWlsZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMEY0RjY0MjFERkJFNUMwMDcwQzQ1QSAvKiBXSExTTFR5
cGVSZWZlcmVuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xUeXBlUmVmZXJlbmNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwRjRGNjYyMURGRjIzNjAwNzBDNDVB
IC8qIFdITFNMSW50ZWdlckxpdGVyYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbnRl
Z2VyTGl0ZXJhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMEY0RjY3MjFE
RkYzQTcwMDcwQzQ1QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMEU5MTEyMUI0QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xMZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMTBFOTEyMjFCNEJEMTAwMEI3RjgzRCAvKiBXSExTTExleGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMTGV4ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIxMzhBMTMyMURERUNEMzAwRjUxNkJBIC8qIFdITFNMQnVpbHRJblNlbWFudGljLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdITFNMQnVpbHRJblNlbWFudGljLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQzIxMzhBMTUyMURERUNFOTAwRjUxNkJBIC8qIFdITFNMUmVzb3VyY2VT
ZW1hbnRpYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFJlc291cmNlU2VtYW50aWMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjEzOEExNjIxRERFQ0ZCMDBGNTE2QkEg
LyogV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMjEzOEExNzIxRERFRDBEMDBGNTE2QkEgLyogV0hMU0xTdGFn
ZUluT3V0U2VtYW50aWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTdGFnZUluT3V0U2Vt
YW50aWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjZGMzIxQ0Q4OUFE
MDAyMjc5NzkgLyogV0hMU0xUcmFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVHJhcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjZGNDIxQ0Q4OUIzMDAyMjc5NzkgLyogV0hM
U0xGdW5jdGlvbkRlZmluaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xGdW5jdGlvbkRlZmlu
aXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY2RjUyMUNEODlCNTAw
MjI3OTc5IC8qIFdITFNMQ29udGludWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xDb250aW51ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMyNDUsNyArMTMyNzgsNiBAQAogCQlD
MjFCRjcwQzIxQ0Q4OUNDMDAyMjc5NzkgLyogV0hMU0xFeHByZXNzaW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdITFNMRXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFC
RjcwRDIxQ0Q4OUNEMDAyMjc5NzkgLyogV0hMU0xSZWZlcmVuY2VUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdITFNMUmVmZXJlbmNlVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFCRjcwRTIxQ0Q4OUNFMDAyMjc5NzkgLyogV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQzIxQkY3MEYyMUNEODlDRjAwMjI3OTc5IC8qIFdITFNMQW5vbnltb3VzVmFy
aWFibGVEZWNsYXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MTAyMUNE
ODlEMDAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzIxQkY3MTEyMUNEODlEMTAwMjI3OTc5IC8qIFdITFNMVHlwZUFyZ3VtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMVHlwZUFyZ3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyMUJGNzEyMjFDRDg5RDEwMDIyNzk3OSAvKiBXSExTTFN0YXRlbWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTFN0YXRlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTMyNTMsNyArMTMyODUsNiBAQAogCQlDMjFCRjcxNDIxQ0Q4OUQzMDAyMjc5NzkgLyogV0hMU0xW
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFZhcmlh
YmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyMUJGNzE1MjFDRDg5RDQwMDIyNzk3OSAvKiBXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MTYyMUNEODlENTAwMjI3OTc5IC8qIFdITFNMQ2FsbEV4
cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xDYWxsRXhwcmVzc2lvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQlDMjFCRjcxNzIxQ0Q4OUQ2MDAyMjc5NzkgLyogV0hMU0xQ
YXJhbWV0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xQYXJhbWV0ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MTgyMUNEODlENzAwMjI3OTc5IC8qIFdITFNMRG90RXhw
cmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTERvdEV4cHJlc3Npb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MTkyMUNEODlENzAwMjI3OTc5IC8qIFdITFNMU3dp
dGNoQ2FzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN3aXRjaENhc2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MUEyMUNEODlEODAwMjI3OTc5IC8qIFdITFNMQnJlYWsu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xCcmVhay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTMyOTksMTUgKzEzMzMwLDI3IEBACiAJCUMyODA4MzNEMUM2REMyMkMwMDE0NTFCNiAv
KiBKU0ZvbnRGYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpT
Rm9udEZhY2UuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ZvbnRGYWNlLmNw
cDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJQzI4MDgzM0UxQzZEQzIy
QzAwMTQ1MUI2IC8qIEpTRm9udEZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gSlNGb250RmFjZS5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ZvbnRGYWNl
Lmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUMyODBCM0ZEMUVGNDYw
ODkwMEQzNTEzNSAvKiBGb250RmFtaWx5U3BlY2lmaWNhdGlvbk51bGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEZhbWlseVNwZWNpZmljYXRpb25OdWxsLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzI4NkVEOUUyMURCNUFCQTAwNzEzQzQw
IC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExT
TFJlc29sdmVPdmVybG9hZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
Mjg4QzcyNzIxQzhDNkVGMDAyREY1Q0EgLyogV0hMU0xWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMVmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyOTIx
QzhDQTUwMDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMUHJlcGFyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyODhDNzJBMjFD
OENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xQcmVw
YXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyODhDNzJCMjFDOENDQzIwMDJE
RjVDQSAvKiBXSExTTE5hbWVSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTE5h
bWVSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyODhDNzJDMjFD
OENDQzIwMDJERjVDQSAvKiBXSExTTE5hbWVSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TE5hbWVSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyRDIx
Qzk5MURBMDAyREY1Q0EgLyogV0hMU0xUeXBlQXJndW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0hMU0xUeXBlQXJndW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MkFCMEFGNDFFNkIzQzZDMDAxMzQ4QzUgLyogRm9udFNlbGVjdGlvbkFsZ29yaXRobS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250U2VsZWN0aW9uQWxnb3JpdGht
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJBQjBBRjUxRTZCM0M2QzAwMTM0
OEM1IC8qIEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMkFCMEIwMzFFNkRFOTJDMDAxMzQ4QzUgLyogRm9udFNlbGVjdGlvblZhbHVlSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb250U2VsZWN0aW9uVmFsdWVJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTcwMjFEQjRCNDgwMDRCRTI2RSAvKiBXSExT
TENoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xDaGVja2VyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzEyMURCNEI0ODAwNEJFMjZFIC8qIFdITFNM
Q2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzMyMURCNEJCRDAwNEJFMjZFIC8qIFdITFNMTmFtZVJlc29s
dmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTmFtZVJlc29sdmVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzQyMURCNTEwRjAwNEJFMjZFIC8qIFdITFNM
TmFtZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lQ29udGV4dC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc1MjFEQjUyNjYwMDRCRTI2RSAv
KiBXSExTTEluZmVyVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbmZlclR5cGVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzYyMURCNTM5NDAwNEJF
MjZFIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUMyQjU1MTc3MjFEQjU0MEYwMDRCRTI2RSAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rp
b25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3ODIxREI1NTc1MDA0QkUy
NkUgLyogV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc5MjFEQjU1OEYwMDRCRTI2RSAvKiBXSExTTFN5bnRo
ZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN5
bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyQjU1MTdBMjFEQjU1OUUwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVBcnJheU9w
ZXJhdG9yTGVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUFycmF5
T3BlcmF0b3JMZW5ndGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3
QjIxREI1NUFGMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTdDMjFEQjU3RUQwMDRCRTI2RSAvKiBXSExTTFZp
c2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xWaXNpdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJDMkNGNTUxRUYzNzYxQTAwNDI4MUE4IC8qIEZvbnRGYW1p
bHlTcGVjaWZpY2F0aW9uTnVsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
b250RmFtaWx5U3BlY2lmaWNhdGlvbk51bGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzJFMzhFRkIxRTgzOTZGRDAwQ0EzQURGIC8qIENTU0ZvbnRTdHlsZVZhbHVlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZvbnRTdHlsZVZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJFMzhFRkMxRTgzOTZGRDAwQ0EzQURGIC8q
IENTU0ZvbnRTdHlsZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENT
U0ZvbnRTdHlsZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTMzMiwx
MSArMjUzNzUsMzcgQEAKIAkJCQlDMjFCRjczNzIxQ0Q4QTAyMDAyMjc5NzkgLyogV0hMU0xQYXJz
ZXIuY3BwICovLAogCQkJCUMyMUJGNzM4MjFDRDhBMDMwMDIyNzk3OSAvKiBXSExTTFBhcnNlci5o
ICovLAogCQkJCUMyMUJGNzNBMjFDRDhENzAwMDIyNzk3OSAvKiBXSExTTFByb2dyYW0uaCAqLywK
LSAJCQkJQzI4OEM3MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5oICovLAotIAkJ
CQlDMjg4QzcyOTIxQzhDQTUwMDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmNwcCAqLywKLSAJCQkJ
QzI4OEM3MkEyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5oICovLAotIAkJCQlDMjg4
QzcyQjIxQzhDQ0MyMDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovLAotIAkJCQlD
Mjg4QzcyQzIxQzhDQ0MyMDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLywKKwkJCQlD
Mjg4QzcyNzIxQzhDNkVGMDAyREY1Q0EgLyogV0hMU0xWaXNpdG9yLmggKi8sCisJCQkJQzJCNTUx
N0MyMURCNTdFRDAwNEJFMjZFIC8qIFdITFNMVmlzaXRvci5jcHAgKi8sCisJCQkJQzI4OEM3Mjky
MUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8sCisJCQkJQzI4OEM3MkEyMUM4
Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5oICovLAorCQkJCUMyODhDNzJDMjFDOENDQzIw
MDJERjVDQSAvKiBXSExTTE5hbWVSZXNvbHZlci5oICovLAorCQkJCUMyQjU1MTczMjFEQjRCQkQw
MDRCRTI2RSAvKiBXSExTTE5hbWVSZXNvbHZlci5jcHAgKi8sCisJCQkJMUM3Q0MyMUQyMUNERTE5
ODAwQzFGQTJDIC8qIFdITFNMTmFtZUNvbnRleHQuaCAqLywKKwkJCQlDMkI1NTE3NDIxREI1MTBG
MDA0QkUyNkUgLyogV0hMU0xOYW1lQ29udGV4dC5jcHAgKi8sCisJCQkJMUMzMzI3NkUyMUNFRkY3
NDAwMERDOUYyIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oICovLAorCQkJCUMyODZFRDlF
MjFEQjVBQkEwMDcxM0M0MCAvKiBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwICovLAorCQkJ
CTFDMzMyNzZGMjFDRjAxMzEwMDBEQzlGMiAvKiBXSExTTEluZmVyVHlwZXMuaCAqLywKKwkJCQlD
MkI1NTE3NTIxREI1MjY2MDA0QkUyNkUgLyogV0hMU0xJbmZlclR5cGVzLmNwcCAqLywKKwkJCQkx
QzMzMjc3NDIxRDVBNzA2MDAwREM5RjIgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oICov
LAorCQkJCUMyQjU1MTc2MjFEQjUzOTQwMDRCRTI2RSAvKiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVj
a2VyLmNwcCAqLywKKwkJCQkxQzMzMjc3NTIxRDVCMEY4MDAwREM5RjIgLyogV0hMU0xDaGVja0R1
cGxpY2F0ZUZ1bmN0aW9ucy5oICovLAorCQkJCUMyQjU1MTc3MjFEQjU0MEYwMDRCRTI2RSAvKiBX
SExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCAqLywKKwkJCQkxQzMzMjc3NjIxRDVDMDdF
MDAwREM5RjIgLyogV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmggKi8sCisJCQkJ
QzJCNTUxNzgyMURCNTU3NTAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vz
c29ycy5jcHAgKi8sCisJCQkJMUMzMzI3NzcyMUQ1Q0E4MzAwMERDOUYyIC8qIFdITFNMU3ludGhl
c2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmggKi8sCisJCQkJQzJCNTUxNzkyMURCNTU4RjAwNEJF
MjZFIC8qIFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcCAqLywKKwkJCQkx
QzMzMjc3ODIxRDVDRUQ0MDAwREM5RjIgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxl
bmd0aC5oICovLAorCQkJCUMyQjU1MTdBMjFEQjU1OUUwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNp
emVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcCAqLywKKwkJCQlDMjAxMzM0NzIxREI0MzYzMDBCNjBD
MjcgLyogV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmggKi8sCisJCQkJQzJCNTUxN0IyMURC
NTVBRjAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAgKi8sCisJCQkJ
QzIwMTMzNDQyMURBQzA5NTAwQjYwQzI3IC8qIFdITFNMSW50cmluc2ljcy5oICovLAorCQkJCUMy
MDEzMzQ2MjFEQUVFNkUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNpY3MuY3BwICovLAorCQkJCUMy
QjU1MTcwMjFEQjRCNDgwMDRCRTI2RSAvKiBXSExTTENoZWNrZXIuY3BwICovLAorCQkJCUMyQjU1
MTcxMjFEQjRCNDgwMDRCRTI2RSAvKiBXSExTTENoZWNrZXIuaCAqLywKKwkJCQkxQ0I2OUIyQzIx
REQ5NkVGMDA2RTg0NkEgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwICovLAorCQkJ
CTFDQjY5QjJEMjFERDk2RUYwMDZFODQ2QSAvKiBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5o
ICovLAorCQkJCTFDQjY5QjNFMjFFMDM1RjMwMDZFODQ2QSAvKiBXSExTTFJlc29sdmluZ1R5cGUu
aCAqLywKIAkJCSk7CiAJCQlwYXRoID0gV0hMU0w7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwpAQCAtMjUzNDQsNyArMjU0MTMsNiBAQAogCQlDMjFCRjZGMTIxQ0Q4OThEMDAyMjc5NzkgLyog
QVNUICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlDMjFC
RjcwRjIxQ0Q4OUNGMDAyMjc5NzkgLyogV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9u
LmggKi8sCiAJCQkJQzIxQkY3MjUyMUNEODlFMjAwMjI3OTc5IC8qIFdITFNMQXJyYXlSZWZlcmVu
Y2VUeXBlLmggKi8sCiAJCQkJQzIxQkY3MDkyMUNEODlDQTAwMjI3OTc5IC8qIFdITFNMQXJyYXlU
eXBlLmggKi8sCiAJCQkJQzIxQkY3MzAyMUNEODlFRDAwMjI3OTc5IC8qIFdITFNMQXNzaWdubWVu
dEV4cHJlc3Npb24uaCAqLywKQEAgLTI1Mzg0LDcgKzI1NDUyLDYgQEAKIAkJCQlDMjFCRjcyNDIx
Q0Q4OUUxMDAyMjc5NzkgLyogV0hMU0xOb2RlLmggKi8sCiAJCQkJQzIxQkY3MDcyMUNEODlDODAw
MjI3OTc5IC8qIFdITFNMTnVsbExpdGVyYWwuaCAqLywKIAkJCQlDMjFCRjcyMTIxQ0Q4OURFMDAy
Mjc5NzkgLyogV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCAqLywKLQkJCQlDMjFC
RjcxNzIxQ0Q4OUQ2MDAyMjc5NzkgLyogV0hMU0xQYXJhbWV0ZXIuaCAqLywKIAkJCQlDMjFCRjcy
RjIxQ0Q4OUVDMDAyMjc5NzkgLyogV0hMU0xQb2ludGVyVHlwZS5oICovLAogCQkJCUMyMUJGNzJF
MjFDRDg5RUEwMDIyNzk3OSAvKiBXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oICovLAog
CQkJCUMyMUJGNzBCMjFDRDg5Q0MwMDIyNzk3OSAvKiBXSExTTFF1YWxpZmllci5oICovLApAQCAt
MjU0MTIsNyArMjU0NzksMjYgQEAKIAkJCQlDMjFCRjcxNDIxQ0Q4OUQzMDAyMjc5NzkgLyogV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oICovLAogCQkJCUMyMUJGNzEzMjFDRDg5
RDIwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmggKi8sCiAJCQkJQzIxQkY3MDQy
MUNEODlDNjAwMjI3OTc5IC8qIFdITFNMV2hpbGVMb29wLmggKi8sCi0gCQkJCUMyODhDNzJEMjFD
OTkxREEwMDJERjVDQSAvKiBXSExTTFR5cGVBcmd1bWVudC5jcHAgKi8sCisJCQkJQzI4OEM3MkQy
MUM5OTFEQTAwMkRGNUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLywKKwkJCQkxQzMzMjc2
QzIxQ0VEQTQyMDAwREM5RjIgLyogV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCAqLywK
KwkJCQkxQzMzMjc3MTIxQ0YwQkUxMDAwREM5RjIgLyogV0hMU0xOYW1lZFR5cGUuaCAqLywKKwkJ
CQkxQzMzMjc3MjIxQ0YwRDJFMDAwREM5RjIgLyogV0hMU0xVbm5hbWVkVHlwZS5oICovLAorCQkJ
CUMyMTM4QTEzMjFEREVDRDMwMEY1MTZCQSAvKiBXSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHAgKi8s
CisJCQkJQzIxMzhBMTUyMURERUNFOTAwRjUxNkJBIC8qIFdITFNMUmVzb3VyY2VTZW1hbnRpYy5j
cHAgKi8sCisJCQkJQzIxMzhBMTYyMURERUNGQjAwRjUxNkJBIC8qIFdITFNMU3BlY2lhbGl6YXRp
b25Db25zdGFudFNlbWFudGljLmNwcCAqLywKKwkJCQlDMjEzOEExNzIxRERFRDBEMDBGNTE2QkEg
LyogV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuY3BwICovLAorCQkJCTFDQjY5QjMyMjFERUQ0MEIw
MDZFODQ2QSAvKiBXSExTTFJlc29sdmFibGVUeXBlLmggKi8sCisJCQkJMUNCNjlCMzQyMURFRDYz
QTAwNkU4NDZBIC8qIFdITFNMRmxvYXRMaXRlcmFsVHlwZS5oICovLAorCQkJCTFDQjY5QjM1MjFE
RUQ2NDkwMDZFODQ2QSAvKiBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5oICovLAorCQkJCTFDQjY5
QjM2MjFERUQ2NTcwMDZFODQ2QSAvKiBXSExTTE51bGxMaXRlcmFsVHlwZS5oICovLAorCQkJCTFD
QjY5QjM3MjFERUQ2NkIwMDZFODQ2QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBl
LmggKi8sCisJCQkJMUNCNjlCMzgyMURGMDNFMTAwNkU4NDZBIC8qIFdITFNMRmxvYXRMaXRlcmFs
VHlwZS5jcHAgKi8sCisJCQkJMUNCNjlCMzkyMURGMDNGMzAwNkU4NDZBIC8qIFdITFNMSW50ZWdl
ckxpdGVyYWxUeXBlLmNwcCAqLywKKwkJCQkxQ0I2OUIzQTIxREYwNDAzMDA2RTg0NkEgLyogV0hM
U0xOdWxsTGl0ZXJhbFR5cGUuY3BwICovLAorCQkJCTFDQjY5QjNCMjFERjA0MUUwMDZFODQ2QSAv
KiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcCAqLywKKwkJCQlDMjBGNEY2NDIx
REZCRTVDMDA3MEM0NUEgLyogV0hMU0xUeXBlUmVmZXJlbmNlLmNwcCAqLywKKwkJCQlDMjBGNEY2
NjIxREZGMjM2MDA3MEM0NUEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAgKi8sCisJCQkJQzIw
RjRGNjcyMURGRjNBNzAwNzBDNDVBIC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IEFTVDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358582</attachid>
            <date>2019-01-08 00:59:02 -0800</date>
            <delta_ts>2019-01-08 12:35:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>436274</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXggMmQ1NjdmMDBlNzAuLmViMzkw
ZTQyZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaApAQCAtMzksOCArMzks
OCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVibGlj
IFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFR5
cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgQXJy
YXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAg
ICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJs
aWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYpID0g
ZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhh
ZGRyZXNzU3BhY2UoKSksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfVFlQRShBcnJheVJlZmVyZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBl
KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShBcnJheVJlZmVy
ZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAppbmRleCA0MGI1ZjhkZjZmZS4uYzQxNzcwNWYzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBBcnJh
eVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIEFycmF5VHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlLCB1
bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgQXJyYXlUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRz
KQogICAgIHsKQEAgLTUyLDIwICs1MiwxOCBAQCBwdWJsaWM6CiAgICAgQXJyYXlUeXBlKGNvbnN0
IEFycmF5VHlwZSYpID0gZGVsZXRlOwogICAgIEFycmF5VHlwZShBcnJheVR5cGUmJikgPSBkZWZh
dWx0OwogCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVs
ZW1lbnRzOyB9Ci0KLSAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsg
fQorICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1FbGVtZW50
czsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZT4oTGV4ZXI6
OlRva2VuKG1fb3JpZ2luKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7
CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZT4oTGV4ZXI6OlRva2Vu
KG9yaWdpbigpKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZT4gbV9lbGVtZW50VHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5
cGU+IG1fZWxlbWVudFR5cGU7CiAgICAgdW5zaWduZWQgbV9udW1FbGVtZW50czsKIH07CiAKQEAg
LTc1LDYgKzczLDYgQEAgcHJpdmF0ZToKIAogfQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dI
TFNMX1RZUEUoQXJyYXlUeXBlLCBpc0FycmF5VHlwZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19XSExTTF9VTk5BTUVEX1RZUEUoQXJyYXlUeXBlLCBpc0FycmF5VHlwZSgpKQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEJhc2VTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQmFzZVNlbWFudGljLmgKaW5kZXggNjU3MzM3MmYxMzcuLmM2YTJkMzlhMGMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNl
U2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCYXNlU2VtYW50aWMuaApAQCAtMzQsOCArMzQsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBuYW1lc3BhY2UgV0hMU0wgewogCitjbGFzcyBJbnRyaW5zaWNzOworCiBuYW1lc3BhY2Ug
QVNUIHsKIAorY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworY2xhc3MgVW5uYW1lZFR5cGU7CisK
IGNsYXNzIEJhc2VTZW1hbnRpYyA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKICAgICBCYXNlU2Vt
YW50aWMoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQpAQCAtNDgsNiArNTMsMTQgQEAgcHVibGljOgog
ICAgIEJhc2VTZW1hbnRpYyhjb25zdCBCYXNlU2VtYW50aWMmKSA9IGRlbGV0ZTsKICAgICBCYXNl
U2VtYW50aWMoQmFzZVNlbWFudGljJiYpID0gZGVmYXVsdDsKIAorICAgIHZpcnR1YWwgYm9vbCBp
c0FjY2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNz
JikgY29uc3QgPSAwOworCisgICAgZW51bSBjbGFzcyBTaGFkZXJJdGVtRGlyZWN0aW9uIHsKKyAg
ICAgICAgSW5wdXQsCisgICAgICAgIE91dHB1dAorICAgIH07CisgICAgdmlydHVhbCBib29sIGlz
QWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29u
c3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3QgPSAwOworCiBwcml2YXRlOgogICAgIExleGVy
OjpUb2tlbiBtX29yaWdpbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCb29sZWFuTGl0ZXJhbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaAppbmRleCAyMDBm
MzY0OTMyYi4uMTEwZDY1NWM0OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEJvb2xlYW5MaXRlcmFsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaApAQCAtNDYs
MTMgKzQ2LDIxIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkJvb2xlYW5MaXRlcmFsKCkgPSBk
ZWZhdWx0OwogCi0gICAgZXhwbGljaXQgQm9vbGVhbkxpdGVyYWwoY29uc3QgQm9vbGVhbkxpdGVy
YWwmKSA9IGRlZmF1bHQ7CisgICAgQm9vbGVhbkxpdGVyYWwoY29uc3QgQm9vbGVhbkxpdGVyYWwm
KSA9IGRlbGV0ZTsKICAgICBCb29sZWFuTGl0ZXJhbChCb29sZWFuTGl0ZXJhbCYmKSA9IGRlZmF1
bHQ7CiAKKyAgICBCb29sZWFuTGl0ZXJhbCYgb3BlcmF0b3I9KGNvbnN0IEJvb2xlYW5MaXRlcmFs
JikgPSBkZWxldGU7CisgICAgQm9vbGVhbkxpdGVyYWwmIG9wZXJhdG9yPShCb29sZWFuTGl0ZXJh
bCYmKSA9IGRlZmF1bHQ7CisKICAgICBib29sIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQogCiAgICAgYm9vbCBpc0Jvb2xlYW5MaXRlcmFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCisgICAgQm9vbGVhbkxpdGVyYWwgY2xvbmUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEJvb2xlYW5MaXRlcmFsKExleGVyOjpUb2tlbihvcmlnaW4oKSksIG1fdmFs
dWUpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBib29sIG1fdmFsdWU7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNl
bWFudGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEJ1aWx0SW5TZW1hbnRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjIxMjUzMjZmYjJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcApAQCAtMCwwICsxLDE0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKKworI2luY2x1ZGUgIldITFNM
RnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5j
bHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNl
IEFTVCB7CisKK2Jvb2wgQnVpbHRJblNlbWFudGljOjppc0FjY2VwdGFibGVUeXBlKGNvbnN0IEFT
VDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNz
KSBjb25zdAoreworICAgIHN3aXRjaCAobV92YXJpYWJsZSkgeworICAgIGNhc2UgVmFyaWFibGU6
OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJp
bnNpY3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZWZXJ0ZXhJRDoKKyAgICAg
ICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWludFR5cGUoKSk7Cisg
ICAgY2FzZSBWYXJpYWJsZTo6UFNpemU6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRU
eXBlLCBpbnRyaW5zaWNzLmZsb2F0VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVlBvc2l0
aW9uOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9h
dDRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAgICAgIHJl
dHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOworICAgIGNh
c2UgVmFyaWFibGU6OlNWU2FtcGxlSW5kZXg6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFt
ZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWSW5u
ZXJDb3ZlcmFnZToKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNp
Y3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAgICAgIHJl
dHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0NFR5cGUoKSk7CisgICAg
Y2FzZSBWYXJpYWJsZTo6U1ZEZXB0aDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5
cGUsIGludHJpbnNpY3MuZmxvYXRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWQ292ZXJh
Z2U6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRU
eXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoKKyAgICAgICAg
cmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQzVHlwZSgpKTsKKyAg
ICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwSUQ6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFt
ZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZH
cm91cEluZGV4OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2lj
cy51aW50VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwVGhyZWFkSUQ6CisgICAg
ICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7
CisgICAgfQorfQorCitib29sIEJ1aWx0SW5TZW1hbnRpYzo6aXNBY2NlcHRhYmxlRm9yU2hhZGVy
SXRlbURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIGNvbnN0Cit7CisgICAgc3dpdGNoICgq
ZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9u
RGVjbGFyYXRpb246OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgIHN3aXRjaCAoZGly
ZWN0aW9uKSB7CisgICAgICAgIGNhc2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6
OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWVmVydGV4SUQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBTaGFk
ZXJJdGVtRGlyZWN0aW9uOjpPdXRwdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUp
IHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlBTaXplOgorICAgICAgICAgICAgY2FzZSBW
YXJpYWJsZTo6U1ZQb3NpdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50
VHlwZTo6RnJhZ21lbnQ6CisgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNh
c2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFy
aWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAg
ICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVlBvc2l0aW9uOgorICAgICAgICAgICAgY2FzZSBWYXJp
YWJsZTo6U1ZTYW1wbGVJbmRleDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSW5uZXJD
b3ZlcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICBjYXNlIFNoYWRlckl0ZW1EaXJlY3Rpb246Ok91dHB1dDoKKyAgICAgICAgICAgIHN3aXRjaCAo
bV92YXJpYWJsZSkgeworICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAg
ICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkRlcHRoOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZDb3ZlcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6
Q29tcHV0ZToKKyAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBTaGFk
ZXJJdGVtRGlyZWN0aW9uOjpJbnB1dDoKKyAgICAgICAgICAgIHN3aXRjaCAobV92YXJpYWJsZSkg
eworICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZEaXNwYXRjaFRocmVhZElEOgorICAgICAg
ICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cElEOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZHcm91cEluZGV4OgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cFRocmVh
ZElEOgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIGNh
c2UgU2hhZGVySXRlbURpcmVjdGlvbjo6T3V0cHV0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorfQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5T
ZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QnVpbHRJblNlbWFudGljLmgKaW5kZXggNzA0NmRmMzJjZmEuLjhlNzA0MzAwMTU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdElu
U2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCdWlsdEluU2VtYW50aWMuaApAQCAtNzAsNiArNzAsMTkgQEAgcHVibGljOgogCiAgICAg
VmFyaWFibGUgdmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlOyB9CiAKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQnVpbHRJblNlbWFudGljJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IG90aGVyLm1fdmFyaWFibGUgJiYgbV90YXJn
ZXRJbmRleCA9PSBvdGhlci5tX3RhcmdldEluZGV4OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBCdWlsdEluU2VtYW50aWMmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJvb2wgaXNBY2NlcHRhYmxl
VHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgSW50cmluc2ljcyYpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFk
ZXJJdGVtRGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSBjb25zdCBvdmVycmlk
ZTsKKwogcHJpdmF0ZToKICAgICBWYXJpYWJsZSBtX3ZhcmlhYmxlOwogICAgIE9wdGlvbmFsPHVu
c2lnbmVkPiBtX3RhcmdldEluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKaW5kZXggNjRh
ZjcxMzI5OWMuLmMxOGUxZWViYThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKQEAgLTI4
LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAi
V0hMU0xMZXhlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw2ICszNyw4IEBAIG5h
bWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCitjbGFzcyBOYW1lZFR5cGU7CisK
IGNsYXNzIENhbGxFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgogICAg
IENhbGxFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4mJiBhcmd1bWVudHMpCkBAIC01NCw5ICs1
NywzNSBAQCBwdWJsaWM6CiAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
PiYgYXJndW1lbnRzKCkgeyByZXR1cm4gbV9hcmd1bWVudHM7IH0KIAorICAgIFN0cmluZyYgbmFt
ZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgdm9pZCBzZXRDYXN0RGF0YShBU1Q6Ok5hbWVk
VHlwZSYgbmFtZWRUeXBlKQorICAgIHsKKyAgICAgICAgbV9jYXN0UmV0dXJuVHlwZSA9IHsgbmFt
ZWRUeXBlIH07CisgICAgfQorCisgICAgYm9vbCBpc0Nhc3QoKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxib29sPihtX2Nhc3RSZXR1cm5UeXBlKTsgfQorICAgIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiYgY2FzdFJldHVyblR5cGUoKSB7IHJldHVybiBtX2Nh
c3RSZXR1cm5UeXBlOyB9CisgICAgYm9vbCBoYXNPdmVybG9hZHMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxib29sPihtX292ZXJsb2Fkcyk7IH0KKyAgICBPcHRpb25hbDxWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4+JiBvdmVybG9hZHMo
KSB7IHJldHVybiBtX292ZXJsb2FkczsgfQorICAgIHZvaWQgc2V0T3ZlcmxvYWRzKGNvbnN0IFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3Zl
cmxvYWRzKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KCFoYXNPdmVybG9hZHMoKSk7CisgICAgICAg
IG1fb3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAgIH0KKworICAgIHZvaWQgc2V0RnVuY3Rpb24o
RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNsYXJhdGlvbikKKyAgICB7CisgICAgICAg
IGFzc2VydCghbV9mdW5jdGlvbik7CisgICAgICAgIG1fZnVuY3Rpb24gPSAmZnVuY3Rpb25EZWNs
YXJhdGlvbjsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+PiBtX2FyZ3VtZW50czsKKyAgICBPcHRpb25h
bDxWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4+
IG1fb3ZlcmxvYWRzOworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fZnVuY3Rpb24geyBudWxs
cHRyIH07CisgICAgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlw
ZT4+IG1fY2FzdFJldHVyblR5cGUgeyBXVEY6Om51bGxvcHQgfTsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50
RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMQ29uc3RhbnRFeHByZXNzaW9uLmgKaW5kZXggYTM4YjBkNWIzYTEuLjcwY2ExMjhkNTVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xD
b25zdGFudEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaApAQCAtNzYsMTEgKzc2LDkyIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgQ29uc3RhbnRFeHByZXNzaW9uKGNvbnN0IENvbnN0
YW50RXhwcmVzc2lvbiYpID0gZGVsZXRlOworICAgIENvbnN0YW50RXhwcmVzc2lvbihDb25zdGFu
dEV4cHJlc3Npb24mJikgPSBkZWZhdWx0OworCisgICAgQ29uc3RhbnRFeHByZXNzaW9uJiBvcGVy
YXRvcj0oY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uJikgPSBkZWxldGU7CisgICAgQ29uc3RhbnRF
eHByZXNzaW9uJiBvcGVyYXRvcj0oQ29uc3RhbnRFeHByZXNzaW9uJiYpID0gZGVmYXVsdDsKKwor
ICAgIEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCgpCisgICAgeworICAgICAgICBBU1NF
UlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxJbnRlZ2VyTGl0ZXJhbD4obV92YXJpYW50KSk7Cisg
ICAgICAgIHJldHVybiBXVEY6OmdldDxJbnRlZ2VyTGl0ZXJhbD4obV92YXJpYW50KTsKKyAgICB9
CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHZpc2l0KFQmJiB0KQogICAgIHsKICAg
ICAgICAgV1RGOjp2aXNpdChXVEZNb3ZlKHQpLCBtX3ZhcmlhbnQpOwogICAgIH0KIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdmlzaXQoVCYmIHQpIGNvbnN0CisgICAgeworICAgICAg
ICBXVEY6OnZpc2l0KFdURk1vdmUodCksIG1fdmFyaWFudCk7CisgICAgfQorCisgICAgQ29uc3Rh
bnRFeHByZXNzaW9uIGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0
ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBpbnRlZ2Vy
TGl0ZXJhbC5jbG9uZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9uIHsKKyAg
ICAgICAgICAgIHJldHVybiB1bnNpZ25lZEludGVnZXJMaXRlcmFsLmNsb25lKCk7CisgICAgICAg
IH0sIFsmXShjb25zdCBGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHBy
ZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdExpdGVyYWwuY2xvbmUoKTsKKyAgICAg
ICAgfSwgWyZdKGNvbnN0IE51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHBy
ZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsTGl0ZXJhbC5jbG9uZSgpOworICAgICAg
ICB9LCBbJl0oY29uc3QgQm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSAtPiBDb25zdGFu
dEV4cHJlc3Npb24geworICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5MaXRlcmFsLmNsb25lKCk7
CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Up
IC0+IENvbnN0YW50RXhwcmVzc2lvbiB7CisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuY2xvbmUoKTsKKyAgICAgICAgfSksIG1f
dmFyaWFudCk7CisgICAgfQorCisgICAgYm9vbCBtYXRjaGVzKGNvbnN0IENvbnN0YW50RXhwcmVz
c2lvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBPcHRpb25hbDxib29sPiByZXN1bHQ7
CisgICAgICAgIGRvdWJsZSB2YWx1ZTsKKyAgICAgICAgdmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oY29uc3QgSW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICB2
YWx1ZSA9IGludGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0sIFsmXShjb25zdCBVbnNp
Z25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAg
ICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZd
KGNvbnN0IEZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAgICB2YWx1ZSA9
IGZsb2F0TGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgTnVsbExpdGVyYWwm
KSB7CisgICAgICAgICAgICByZXN1bHQgPSBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPE51bGxMaXRl
cmFsPihvdGhlci5tX3ZhcmlhbnQpOworICAgICAgICB9LCBbJl0oY29uc3QgQm9vbGVhbkxpdGVy
YWwmIGJvb2xlYW5MaXRlcmFsKSB7CisgICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxCb29sZWFuTGl0ZXJhbD4ob3RoZXIubV92YXJpYW50KSkgeworICAgICAgICAgICAgICAg
IGNvbnN0IGF1dG8mIG90aGVyQm9vbGVhbkxpdGVyYWwgPSBXVEY6OmdldDxCb29sZWFuTGl0ZXJh
bD4ob3RoZXIubV92YXJpYW50KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBib29sZWFuTGl0
ZXJhbC52YWx1ZSgpID09IG90aGVyQm9vbGVhbkxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9LCBbJl0o
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0
YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSB7CisgICAgICAgICAgICBp
ZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZT4ob3RoZXIubV92YXJpYW50KSkgeworICAgICAgICAgICAgICAgIGNvbnN0
IGF1dG8mIG90aGVyTWVtYmVyUmVmZXJlbmNlID0gV1RGOjpnZXQ8Q29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2U+KG90aGVyLm1fdmFyaWFudCk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UuZW51bWVyYXRpb25NZW1iZXIoKSA9PSBvdGhlck1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlv
bk1lbWJlcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
ZmFsc2U7CisgICAgICAgIH0pKTsKKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAg
cmV0dXJuICpyZXN1bHQ7CisKKyAgICAgICAgb3RoZXIudmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oY29uc3QgSW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICBy
ZXN1bHQgPSB2YWx1ZSA9PSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0o
Y29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgewor
ICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUgPT0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgRmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlID09IGZsb2F0TGl0ZXJhbC52YWx1ZSgpOworICAg
ICAgICB9LCBbJl0oY29uc3QgTnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICByZXN1bHQgPSBm
YWxzZTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEJvb2xlYW5MaXRlcmFsJikgeworICAgICAgICAg
ICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZh
bHNlOworICAgICAgICB9KSk7CisKKyAgICAgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgICAgIHJl
dHVybiAqcmVzdWx0OworICAgIH0KKwogcHJpdmF0ZToKICAgICBWYXJpYW50PAogICAgICAgICBJ
bnRlZ2VyTGl0ZXJhbCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25z
dGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oCmluZGV4IDJjMjRhOThi
MmNhLi42YzUzYzE0N2Y1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oCkBAIC0zNiwx
MCArMzYsMTMgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNz
IENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlIDogcHVibGljIE5v
ZGUgeworY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uOworY2xhc3MgRW51bWVyYXRpb25NZW1i
ZXI7CisKK2NsYXNzIENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
IDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgogICAgIENvbnN0YW50RXhwcmVzc2lvbkVu
dW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYg
bGVmdCwgU3RyaW5nJiYgcmlnaHQpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4p
KQorICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fbGVm
dChXVEZNb3ZlKGxlZnQpKQogICAgICAgICAsIG1fcmlnaHQoV1RGTW92ZShyaWdodCkpCiAgICAg
ewpAQCAtNTAsMTAgKzUzLDUwIEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZShjb25zdCBDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpID0gZGVmYXVsdDsKICAgICBDb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZShDb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZSYmKSA9IGRlZmF1bHQ7CiAKKyAgICBDb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IENvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikgPSBkZWxldGU7CisgICAgQ29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIG9wZXJhdG9yPShDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYmKSA9IGRlZmF1bHQ7CisKKyAg
ICBjb25zdCBTdHJpbmcmIGxlZnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnQ7IH0KKyAgICBjb25z
dCBTdHJpbmcmIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodDsgfQorCisgICAgQ29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UgY2xvbmUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZShMZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBTdHJpbmcobV9sZWZ0KSwgU3Ry
aW5nKG1fcmlnaHQpKTsKKyAgICAgICAgcmVzdWx0Lm1fZW51bWVyYXRpb25NZW1iZXIgPSBtX2Vu
dW1lcmF0aW9uTWVtYmVyOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uKiBlbnVtZXJhdGlvbkRlZmluaXRpb24oKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uOworICAgIH0KKworICAgIEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uKiBlbnVtZXJhdGlvbkRlZmluaXRpb24oKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uOworICAgIH0KKwor
ICAgIEFTVDo6RW51bWVyYXRpb25NZW1iZXIqIGVudW1lcmF0aW9uTWVtYmVyKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIEFTVDo6RW51
bWVyYXRpb25NZW1iZXIqIGVudW1lcmF0aW9uTWVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIHZvaWQgc2V0RW51bWVy
YXRpb25NZW1iZXIoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbiwgQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCisgICAgewor
ICAgICAgICBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbiA9ICZlbnVtZXJhdGlvbkRlZmluaXRpb247
CisgICAgICAgIG1fZW51bWVyYXRpb25NZW1iZXIgPSAmZW51bWVyYXRpb25NZW1iZXI7CisgICAg
fQorCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9s
ZWZ0OwogICAgIFN0cmluZyBtX3JpZ2h0OworICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
KiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbiB7IG51bGxwdHIgfTsKKyAgICBBU1Q6OkVudW1lcmF0
aW9uTWVtYmVyKiBtX2VudW1lcmF0aW9uTWVtYmVyIHsgbnVsbHB0ciB9OwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90
RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRG90RXhwcmVzc2lvbi5oCmluZGV4IGM0M2M2OWVlNTQxLi5lYmY3MjMyNmNkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhw
cmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTERvdEV4cHJlc3Npb24uaApAQCAtNDksNiArNDksMjUgQEAgcHVibGljOgogICAgIERvdEV4
cHJlc3Npb24oY29uc3QgRG90RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAgIERvdEV4cHJlc3Np
b24oRG90RXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRG90RXhwcmVzc2lv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5j
dGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6
Zm9ybWF0KCJvcGVyYXRvci4lcyIsIG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0K
KworICAgIFN0cmluZyBzZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0iLCBtX2ZpZWxkTmFtZS51
dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgib3BlcmF0
b3ImLiVzIiwgbV9maWVsZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgU3RyaW5n
JiBmaWVsZE5hbWUoKSB7IHJldHVybiBtX2ZpZWxkTmFtZTsgfQorCiBwcml2YXRlOgogICAgIFN0
cmluZyBtX2ZpZWxkTmFtZTsKIH07CkBAIC01OSw0ICs3OCw2IEBAIHByaXZhdGU6CiAKIH0KIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9FWFBSRVNTSU9OKERvdEV4cHJlc3Npb24sIGlz
RG90RXhwcmVzc2lvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZp
bml0aW9uLmgKaW5kZXggNzk3MGI1OWU1NGEuLjI0YThkNTlkYjNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmlu
aXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaApAQCAtMjksOCArMjksMTEgQEAKIAogI2luY2x1ZGUg
IldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCi0jaW5j
bHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNsdWRl
ICJXSExTTFVubmFtZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwx
MyArNDIsMTEgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNz
IEVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVudW1lcmF0aW9u
RGVmaW5pdGlvbiA6IHB1YmxpYyBOYW1lZFR5cGUgewogcHVibGljOgotICAgIEVudW1lcmF0aW9u
RGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5p
cXVlX3B0cjxUeXBlPiYmIHR5cGUsIEVudW1lcmF0aW9uTWVtYmVycyYmIG1lbWJlcnMpCi0gICAg
ICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShXVEZNb3Zl
KG5hbWUpKQorICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4s
IFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiB0eXBlKQorICAg
ICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAg
ICwgbV90eXBlKFdURk1vdmUodHlwZSkpCi0gICAgICAgICwgbV9tZW1iZXJzKFdURk1vdmUobWVt
YmVycykpCiAgICAgewogICAgIH0KIApAQCAtNTQsMTQgKzU1LDM1IEBAIHB1YmxpYzoKICAgICBF
bnVtZXJhdGlvbkRlZmluaXRpb24oY29uc3QgRW51bWVyYXRpb25EZWZpbml0aW9uJikgPSBkZWxl
dGU7CiAgICAgRW51bWVyYXRpb25EZWZpbml0aW9uKEVudW1lcmF0aW9uRGVmaW5pdGlvbiYmKSA9
IGRlZmF1bHQ7CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQotICAgIEVu
dW1lcmF0aW9uTWVtYmVycyYgZW51bWVyYXRpb25NZW1iZXJzKCkgeyByZXR1cm4gbV9tZW1iZXJz
OyB9CisgICAgYm9vbCBpc0VudW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KKworICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlw
ZTsgfQorCisgICAgYm9vbCBhZGQoRW51bWVyYXRpb25NZW1iZXImJiBtZW1iZXIpCisgICAgewor
ICAgICAgICBhdXRvIHJlc3VsdCA9IG1fbWVtYmVycy5hZGQobWVtYmVyLm5hbWUoKSwgc3RkOjpt
YWtlX3VuaXF1ZTxFbnVtZXJhdGlvbk1lbWJlcj4oV1RGTW92ZShtZW1iZXIpKSk7CisgICAgICAg
IHJldHVybiAhcmVzdWx0LmlzTmV3RW50cnk7CisgICAgfQorCisgICAgRW51bWVyYXRpb25NZW1i
ZXIqIG1lbWJlckJ5TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gbV9tZW1iZXJzLmZpbmQobmFtZSk7CisgICAgICAgIGlmIChpdGVyYXRvciA9
PSBtX21lbWJlcnMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxFbnVtZXJhdGlvbk1lbWJlcj4+IGVudW1lcmF0aW9uTWVtYmVycygp
CisgICAgeworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxFbnVtZXJhdGlv
bk1lbWJlcj4+IHJlc3VsdDsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9tZW1iZXJzKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqcGFpci52YWx1ZSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAg
ICBTdHJpbmcgbV9uYW1lOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX3R5cGU7Ci0gICAg
RW51bWVyYXRpb25NZW1iZXJzIG1fbWVtYmVyczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1l
ZFR5cGU+IG1fdHlwZTsKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEVudW1l
cmF0aW9uTWVtYmVyPj4gbV9tZW1iZXJzOwogfTsKIAogfQpAQCAtNzAsNCArOTIsNiBAQCBwcml2
YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShFbnVt
ZXJhdGlvbkRlZmluaXRpb24sIGlzRW51bWVyYXRpb25EZWZpbml0aW9uKCkpCisKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RW51bWVyYXRpb25NZW1iZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKaW5kZXggOWQ5ZDg1NDg4M2UuLmRlZmYxNGI1
ODUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKQEAgLTU0LDE1ICs1NCwyMyBA
QCBwdWJsaWM6CiAgICAgRW51bWVyYXRpb25NZW1iZXIoY29uc3QgRW51bWVyYXRpb25NZW1iZXIm
KSA9IGRlbGV0ZTsKICAgICBFbnVtZXJhdGlvbk1lbWJlcihFbnVtZXJhdGlvbk1lbWJlciYmKSA9
IGRlZmF1bHQ7CiAKKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAg
ICAgT3B0aW9uYWw8Q29uc3RhbnRFeHByZXNzaW9uPiYgdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVl
OyB9CiAKKyAgICB2b2lkIHNldFZhbHVlKENvbnN0YW50RXhwcmVzc2lvbiYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX3ZhbHVlKTsKKyAgICAgICAgbV92YWx1ZSA9IFdURk1vdmUo
dmFsdWUpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAg
ICAgU3RyaW5nIG1fbmFtZTsKICAgICBPcHRpb25hbDxDb25zdGFudEV4cHJlc3Npb24+IG1fdmFs
dWU7CiB9OwogCi10eXBlZGVmIFZlY3RvcjxFbnVtZXJhdGlvbk1lbWJlcj4gRW51bWVyYXRpb25N
ZW1iZXJzOwordXNpbmcgRW51bWVyYXRpb25NZW1iZXJzID0gVmVjdG9yPEVudW1lcmF0aW9uTWVt
YmVyPjsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNGJjMjBmZThlZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExT
TEVudW1lcmF0aW9uTWVtYmVyLmgiCisjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xMZXhlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBX
SExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CitwdWJsaWM6CisgICAgRW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgRW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0
aW9uTWVtYmVyKQorICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAg
ICAsIG1fZW51bWVyYXRpb25NZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgfkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCgpID0gZGVmYXVsdDsKKwor
ICAgIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChjb25zdCBFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwmKSA9IGRlbGV0ZTsKKyAgICBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoRW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNFbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBFbnVtZXJh
dGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIoKSB7IHJldHVybiBtX2VudW1lcmF0aW9uTWVt
YmVyOyB9CisKK3ByaXZhdGU6CisgICAgRW51bWVyYXRpb25NZW1iZXImIG1fZW51bWVyYXRpb25N
ZW1iZXI7Cit9OworCit9CisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNM
X0VYUFJFU1NJT04oRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLCBpc0VudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbCgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBlMzY4MzgzNjQ2ZC4u
ZmViNmNhNmIxZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKQEAgLTQ4LDE0ICs0OCwxOSBAQCBwdWJs
aWM6CiAgICAgZXhwbGljaXQgRXhwcmVzc2lvbihjb25zdCBFeHByZXNzaW9uJikgPSBkZWZhdWx0
OwogICAgIEV4cHJlc3Npb24oRXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBMZXhlcjo6
VG9rZW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBFeHByZXNzaW9u
JiBvcGVyYXRvcj0oY29uc3QgRXhwcmVzc2lvbiYpID0gZGVmYXVsdDsKKyAgICBFeHByZXNzaW9u
JiBvcGVyYXRvcj0oRXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CisKKyAgICBjb25zdCBMZXhlcjo6
VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNBc3NpZ25tZW50RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzQm9vbGVhbkxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc0NhbGxFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNDb21tYUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0RlcmVmZXJlbmNlRXhwcmVzc2lvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRG90RXhwcmVzc2lvbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRmxvYXRMaXRlcmFs
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmRleEV4cHJl
c3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ludGVn
ZXJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNM
b2dpY2FsRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzTG9naWNhbE5vdEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAt
NjcsNiArNzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzVGVybmFyeUV4cHJlc3Np
b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVk
SW50ZWdlckxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc1ZhcmlhYmxlUmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCiBwcml2YXRlOgogICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJh
bC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRM
aXRlcmFsLmgKaW5kZXggY2JmNTQ2OWRiZmEuLjI3ZDg4YmMwNTNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExp
dGVyYWwuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRl
ICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCIK
ICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDIx
ICs0MCwzNSBAQCBuYW1lc3BhY2UgQVNUIHsKIGNsYXNzIEZsb2F0TGl0ZXJhbCA6IHB1YmxpYyBF
eHByZXNzaW9uIHsKIHB1YmxpYzoKICAgICBGbG9hdExpdGVyYWwoTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBmbG9hdCB2YWx1ZSkKLSAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkK
KyAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQorICAgICAgICAsIG1f
dHlwZShXVEZNb3ZlKG9yaWdpbiksIHZhbHVlKQogICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAg
ICAgewogICAgIH0KIAogICAgIHZpcnR1YWwgfkZsb2F0TGl0ZXJhbCgpID0gZGVmYXVsdDsKIAot
ICAgIGV4cGxpY2l0IEZsb2F0TGl0ZXJhbChjb25zdCBGbG9hdExpdGVyYWwmKSA9IGRlZmF1bHQ7
CisgICAgRmxvYXRMaXRlcmFsKGNvbnN0IEZsb2F0TGl0ZXJhbCYpID0gZGVsZXRlOwogICAgIEZs
b2F0TGl0ZXJhbChGbG9hdExpdGVyYWwmJikgPSBkZWZhdWx0OwogCisgICAgRmxvYXRMaXRlcmFs
JiBvcGVyYXRvcj0oY29uc3QgRmxvYXRMaXRlcmFsJikgPSBkZWxldGU7CisgICAgRmxvYXRMaXRl
cmFsJiBvcGVyYXRvcj0oRmxvYXRMaXRlcmFsJiYpID0gZGVmYXVsdDsKKworICAgIEZsb2F0TGl0
ZXJhbFR5cGUmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KICAgICBmbG9hdCB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAogICAgIGJvb2wgaXNGbG9hdExpdGVyYWwoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBGbG9hdExpdGVyYWwgY2xvbmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgRmxvYXRMaXRlcmFsIHJlc3VsdChMZXhlcjo6VG9rZW4ob3Jp
Z2luKCkpLCBtX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5tX3R5cGUucmVzb2x2ZWRUeXBl
KCkpCisgICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVzdWx0Lm1fdHlwZS5yZXNv
bHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiBw
cml2YXRlOgorICAgIEZsb2F0TGl0ZXJhbFR5cGUgbV90eXBlOwogICAgIGZsb2F0IG1fdmFsdWU7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMzUxODM1Y2E4YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5
cGUuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsVHlwZS5o
IgorCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVm
ZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
bmFtZXNwYWNlIEFTVCB7CisKK0Zsb2F0TGl0ZXJhbFR5cGU6OkZsb2F0TGl0ZXJhbFR5cGUoTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBmbG9hdCB2YWx1ZSkKKyAgICA6IG1fdmFsdWUodmFsdWUpCisg
ICAgLCBtX3ByZWZlcnJlZFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihXVEZN
b3ZlKG9yaWdpbiksIFN0cmluZygiZmxvYXQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwgVHlwZUFyZ3VtZW50cygpKSkKK3sKK30KKworRmxvYXRMaXRlcmFsVHlwZTo6fkZsb2F0TGl0
ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgRmxvYXRMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2
ZShjb25zdCBUeXBlJiB0eXBlKSBjb25zdAoreworICAgIGlmICghaXM8TmFtZWRUeXBlPih0eXBl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0
PE5hbWVkVHlwZT4odHlwZSk7CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5h
bWVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24gPSBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7Cisg
ICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNGbG9hdGluZygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uY2FuUmVwcmVzZW50Rmxv
YXQoKShtX3ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
fQorCit1bnNpZ25lZCBGbG9hdExpdGVyYWxUeXBlOjpjb252ZXJzaW9uQ29zdChjb25zdCBVbm5h
bWVkVHlwZSYgdW5uYW1lZFR5cGUpIGNvbnN0Cit7CisgICAgaWYgKG1hdGNoZXModW5uYW1lZFR5
cGUsICptX3ByZWZlcnJlZFR5cGUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsK
K30KKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNlMzJiZjU2MDVmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRmxvYXRMaXRlcmFsVHlwZS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFJlc29sdmFi
bGVUeXBlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNz
IFR5cGVSZWZlcmVuY2U7CisKK2NsYXNzIEZsb2F0TGl0ZXJhbFR5cGUgOiBwdWJsaWMgUmVzb2x2
YWJsZVR5cGUgeworcHVibGljOgorICAgIEZsb2F0TGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBmbG9hdCB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIH5GbG9hdExpdGVyYWxUeXBlKCk7
CisKKyAgICBGbG9hdExpdGVyYWxUeXBlKGNvbnN0IEZsb2F0TGl0ZXJhbFR5cGUmKSA9IGRlbGV0
ZTsKKyAgICBGbG9hdExpdGVyYWxUeXBlKEZsb2F0TGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0Owor
CisgICAgRmxvYXRMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KGNvbnN0IEZsb2F0TGl0ZXJhbFR5cGUm
KSA9IGRlbGV0ZTsKKyAgICBGbG9hdExpdGVyYWxUeXBlJiBvcGVyYXRvcj0oRmxvYXRMaXRlcmFs
VHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzRmxvYXRMaXRlcmFsVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFR5cGVSZWZlcmVuY2UmIHByZWZlcnJl
ZFR5cGUoKSB7IHJldHVybiAqbV9wcmVmZXJyZWRUeXBlOyB9CisKKyAgICBib29sIGNhblJlc29s
dmUoY29uc3QgVHlwZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHVuc2lnbmVkIGNvbnZlcnNpb25D
b3N0KGNvbnN0IFVubmFtZWRUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZmxvYXQgbV92YWx1ZTsKKyAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEg
Y2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCisgICAgLy8gQ29uc3RhbnRFeHByZXNzaW9uIC0+
IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2UgLT4gVHlwZUFyZ3VtZW50cyAtPiBDb25zdGFu
dEV4cHJlc3Npb24KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJy
ZWRUeXBlOworfTsKKworfQorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExT
TF9SRVNPTFZBQkxFX1RZUEUoRmxvYXRMaXRlcmFsVHlwZSwgaXNGbG9hdExpdGVyYWxUeXBlKCkp
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgKaW5kZXggY2JkNzJkNGE5
MGMuLjZhYjY1OGUwZjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgKQEAgLTM3
LDggKzM3LDggQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLXR5cGVk
ZWYgVmFyaWFudDxOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGU+IEZ1bmN0aW9uQXR0cmlidXRl
OwotdHlwZWRlZiBWZWN0b3I8RnVuY3Rpb25BdHRyaWJ1dGU+IEF0dHJpYnV0ZUJsb2NrOwordXNp
bmcgRnVuY3Rpb25BdHRyaWJ1dGUgPSBWYXJpYW50PE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0
ZT47Cit1c2luZyBBdHRyaWJ1dGVCbG9jayA9IFZlY3RvcjxGdW5jdGlvbkF0dHJpYnV0ZT47CiAK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCmluZGV4IDdhN2UwYTA2NTZj
Li42NzY0OGY0OTM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaApAQCAt
MzAsOSArMzAsOSBAQAogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCi0jaW5jbHVkZSAiV0hM
U0xQYXJhbWV0ZXIuaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hM
U0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgorI2luY2x1ZGUgIldITFNM
VmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NiwxMCArNDYsMTEgQEAgcHVibGljOgogICAgIGVu
dW0gY2xhc3MgRW50cnlQb2ludFR5cGUgewogICAgICAgICBWZXJ0ZXgsCiAgICAgICAgIEZyYWdt
ZW50LAotICAgICAgICBDb21wdXRlCisgICAgICAgIENvbXB1dGUsCisgICAgICAgIC8vIEZJWE1F
OiBBZGQgYW4gZW50cnkgcG9pbnQgdHlwZSBmb3IgdGVzdGluZwogICAgIH07CiAKLSAgICBGdW5j
dGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQXR0cmlidXRlQmxvY2smJiBh
dHRyaWJ1dGVCbG9jaywgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IGVudHJ5UG9pbnRUeXBlLCBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIFBhcmFtZXRl
cnMmJiBwYXJhbWV0ZXJzLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFudGljKQorICAg
IEZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9j
ayYmIGF0dHJpYnV0ZUJsb2NrLCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5
cGUsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5h
bWUsIFZhcmlhYmxlRGVjbGFyYXRpb25zJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1h
bnRpYz4mJiBzZW1hbnRpYywgYm9vbCBpc09wZXJhdG9yKQogICAgICAgICA6IG1fb3JpZ2luKFdU
Rk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2F0dHJpYnV0ZUJsb2NrKFdURk1vdmUoYXR0cmli
dXRlQmxvY2spKQogICAgICAgICAsIG1fZW50cnlQb2ludFR5cGUoZW50cnlQb2ludFR5cGUpCkBA
IC01Nyw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkK
ICAgICAgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKICAgICAgICAgLCBt
X3NlbWFudGljKFdURk1vdmUoc2VtYW50aWMpKQorICAgICAgICAsIG1faXNPcGVyYXRvcihXVEZN
b3ZlKGlzT3BlcmF0b3IpKQogICAgIHsKICAgICB9CiAKQEAgLTY1LDI3ICs2NywyOCBAQCBwdWJs
aWM6CiAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbihjb25zdCBGdW5jdGlvbkRlY2xhcmF0aW9uJikg
PSBkZWxldGU7CiAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uJiYp
ID0gZGVmYXVsdDsKIAorICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uRGVmaW5pdGlvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICBBdHRyaWJ1dGVCbG9j
ayYgYXR0cmlidXRlQmxvY2soKSB7IHJldHVybiBtX2F0dHJpYnV0ZUJsb2NrOyB9Ci0gICAgQVNU
OjpUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQotICAgIFBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBjb25zdCBPcHRpb25hbDxFbnRy
eVBvaW50VHlwZT4mIGVudHJ5UG9pbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeVBvaW50
VHlwZTsgfQorICAgIEFTVDo6VW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiAqbV90
eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
CisgICAgYm9vbCBpc0Nhc3QoKSBjb25zdCB7IHJldHVybiBtX25hbWUgPT0gIm9wZXJhdG9yIGNh
c3QiOyB9CisgICAgY29uc3QgVmFyaWFibGVEZWNsYXJhdGlvbnMmIHBhcmFtZXRlcnMoKSBjb25z
dCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyYgcGFy
YW1ldGVycygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQogICAgIE9wdGlvbmFsPEFTVDo6U2Vt
YW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KLQotICAgIExleGVyOjpU
b2tlbiYmIHRha2VPcmlnaW4oKSB7IHJldHVybiBXVEZNb3ZlKG1fb3JpZ2luKTsgfQotICAgIEF0
dHJpYnV0ZUJsb2NrJiYgdGFrZUF0dHJpYnV0ZUJsb2NrKCkgeyByZXR1cm4gV1RGTW92ZShtX2F0
dHJpYnV0ZUJsb2NrKTsgfQotICAgIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiYmIHRha2VFbnRy
eVBvaW50VHlwZSgpIHsgcmV0dXJuIFdURk1vdmUobV9lbnRyeVBvaW50VHlwZSk7IH0KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHRha2VUeXBlKCkgeyByZXR1cm4gV1RGTW92ZSht
X3R5cGUpOyB9Ci0gICAgU3RyaW5nJiYgdGFrZU5hbWUoKSB7IHJldHVybiBXVEZNb3ZlKG1fbmFt
ZSk7IH0KLSAgICBQYXJhbWV0ZXJzJiYgdGFrZVBhcmFtZXRlcnMoKSB7IHJldHVybiBXVEZNb3Zl
KG1fcGFyYW1ldGVycyk7IH0KLSAgICBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHRha2VTZW1h
bnRpYygpIHsgcmV0dXJuIFdURk1vdmUobV9zZW1hbnRpYyk7IH0KKyAgICBib29sIGlzT3BlcmF0
b3IoKSBjb25zdCB7IHJldHVybiBtX2lzT3BlcmF0b3I7IH0KIAogcHJpdmF0ZToKICAgICBMZXhl
cjo6VG9rZW4gbV9vcmlnaW47CiAgICAgQXR0cmlidXRlQmxvY2sgbV9hdHRyaWJ1dGVCbG9jazsK
ICAgICBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gbV9lbnRyeVBvaW50VHlwZTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiBtX3R5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFt
ZWRUeXBlPiBtX3R5cGU7CiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICBQYXJhbWV0ZXJzIG1fcGFy
YW1ldGVyczsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyBtX3BhcmFtZXRlcnM7CiAgICAgT3B0
aW9uYWw8QVNUOjpTZW1hbnRpYz4gbV9zZW1hbnRpYzsKKyAgICBib29sIG1faXNPcGVyYXRvcjsK
IH07CiAKIH0KQEAgLTk0LDQgKzk3LDkgQEAgcHJpdmF0ZToKIAogfQogCisjZGVmaW5lIFNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRlVOQ1RJT05fREVDTEFSQVRJT04oVG9WYWx1ZVR5cGVO
YW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHR5cGUpIHsgcmV0
dXJuIHR5cGUucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oCmluZGV4IGE0OTA3YjBkMjk4
Li5iNmI3YmEwNzdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgKQEAgLTUw
LDYgKzUwLDggQEAgcHVibGljOgogICAgIEZ1bmN0aW9uRGVmaW5pdGlvbihjb25zdCBGdW5jdGlv
bkRlZmluaXRpb24mKSA9IGRlbGV0ZTsKICAgICBGdW5jdGlvbkRlZmluaXRpb24oRnVuY3Rpb25E
ZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKIAorICAgIGJvb2wgaXNGdW5jdGlvbkRlZmluaXRpb24o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKICAgICBCbG9jayYgYmxvY2soKSB7
IHJldHVybiBtX2Jsb2NrOyB9CiAgICAgYm9vbCByZXN0cmljdGVkKCkgY29uc3QgeyByZXR1cm4g
bV9yZXN0cmljdGVkOyB9CiAKQEAgLTY0LDQgKzY2LDYgQEAgcHJpdmF0ZToKIAogfQogCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OKEZ1bmN0aW9uRGVm
aW5pdGlvbiwgaXNGdW5jdGlvbkRlZmluaXRpb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Np
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4
RXhwcmVzc2lvbi5oCmluZGV4IDZiYjZhMGYwZGFiLi40M2U2MGExMDQ5OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNz
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
SW5kZXhFeHByZXNzaW9uLmgKQEAgLTQ5LDYgKzQ5LDI1IEBAIHB1YmxpYzoKICAgICBJbmRleEV4
cHJlc3Npb24oY29uc3QgSW5kZXhFeHByZXNzaW9uJikgPSBkZWxldGU7CiAgICAgSW5kZXhFeHBy
ZXNzaW9uKEluZGV4RXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzSW5kZXhF
eHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgU3RyaW5n
IGdldEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4g
U3RyaW5nKCJvcGVyYXRvcltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
fQorCisgICAgU3RyaW5nIHNldEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICByZXR1cm4gU3RyaW5nKCJvcGVyYXRvciZbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOworICAgIH0KKworICAgIFN0cmluZyBhbmRGdW5jdGlvbk5hbWUoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZygib3BlcmF0b3JbXT0iLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uJiBpbmRl
eEV4cHJlc3Npb24oKSB7IHJldHVybiAqbV9pbmRleDsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6
dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2luZGV4OwogfTsKQEAgLTU5LDQgKzc4LDYgQEAgcHJp
dmF0ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJT04oSW5k
ZXhFeHByZXNzaW9uLCBpc0luZGV4RXhwcmVzc2lvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRl
cmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTElu
dGVnZXJMaXRlcmFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
YjkxMWQzZjdmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAKQEAgLTAsMCArMSw1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oIgorCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVU
eXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsK
KworaW50NjRfdCBJbnRlZ2VyTGl0ZXJhbDo6dmFsdWVGb3JTZWxlY3RlZFR5cGUoKSBjb25zdAor
eworICAgIEFTU0VSVChtX3R5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8mIHR5cGVSZWZl
cmVuY2UgPSBkb3duY2FzdDxUeXBlUmVmZXJlbmNlPigqbV90eXBlLnJlc29sdmVkVHlwZSgpKTsK
KyAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byYgbmF0
aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgcmV0dXJuIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5mb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKCkobV92YWx1ZSk7Cit9CisKK30KKworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmgKaW5kZXggNjg1NGRkMjdmMGMuLmNi
MTJkNWQ3ZDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmgKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDIxICs0MCwzNyBAQCBuYW1lc3BhY2UgQVNU
IHsKIGNsYXNzIEludGVnZXJMaXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgog
ICAgIEludGVnZXJMaXRlcmFsKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgaW50IHZhbHVlKQotICAg
ICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICA6IEV4cHJlc3Npb24o
TGV4ZXI6OlRva2VuKG9yaWdpbikpCisgICAgICAgICwgbV90eXBlKFdURk1vdmUob3JpZ2luKSwg
dmFsdWUpCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+SW50ZWdlckxpdGVyYWwoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBJbnRlZ2Vy
TGl0ZXJhbChjb25zdCBJbnRlZ2VyTGl0ZXJhbCYpID0gZGVmYXVsdDsKKyAgICBJbnRlZ2VyTGl0
ZXJhbChjb25zdCBJbnRlZ2VyTGl0ZXJhbCYpID0gZGVsZXRlOwogICAgIEludGVnZXJMaXRlcmFs
KEludGVnZXJMaXRlcmFsJiYpID0gZGVmYXVsdDsKIAorICAgIEludGVnZXJMaXRlcmFsJiBvcGVy
YXRvcj0oY29uc3QgSW50ZWdlckxpdGVyYWwmKSA9IGRlbGV0ZTsKKyAgICBJbnRlZ2VyTGl0ZXJh
bCYgb3BlcmF0b3I9KEludGVnZXJMaXRlcmFsJiYpID0gZGVmYXVsdDsKKworICAgIEludGVnZXJM
aXRlcmFsVHlwZSYgdHlwZSgpIHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGludCB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAogICAgIGJvb2wgaXNJbnRlZ2VyTGl0ZXJhbCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIEludGVnZXJMaXRlcmFsIGNsb25l
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEludGVnZXJMaXRlcmFsIHJlc3VsdChMZXhlcjo6VG9r
ZW4ob3JpZ2luKCkpLCBtX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5tX3R5cGUucmVzb2x2
ZWRUeXBlKCkpCisgICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVzdWx0Lm1fdHlw
ZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgaW50NjRfdCB2YWx1ZUZvclNlbGVjdGVkVHlwZSgpIGNvbnN0OworCiBwcml2YXRl
OgorICAgIEludGVnZXJMaXRlcmFsVHlwZSBtX3R5cGU7CiAgICAgaW50IG1fdmFsdWU7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNWZjMjFhY2JkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5
cGUuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWxUeXBl
LmgiCisKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworSW50ZWdlckxpdGVy
YWxUeXBlOjpJbnRlZ2VyTGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBpbnQgdmFs
dWUpCisgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICwgbV9wcmVmZXJyZWRUeXBlKHN0ZDo6bWFr
ZV91bmlxdWU8VHlwZVJlZmVyZW5jZT4oV1RGTW92ZShvcmlnaW4pLCBTdHJpbmcoImludCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBUeXBlQXJndW1lbnRzKCkpKQoreworfQorCitJ
bnRlZ2VyTGl0ZXJhbFR5cGU6On5JbnRlZ2VyTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKK2Jv
b2wgSW50ZWdlckxpdGVyYWxUeXBlOjpjYW5SZXNvbHZlKGNvbnN0IFR5cGUmIHR5cGUpIGNvbnN0
Cit7CisgICAgaWYgKCFpczxOYW1lZFR5cGU+KHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8TmFtZWRUeXBlPih0eXBlKTsKKyAgICBp
ZiAoIWlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFuYXRpdmVU
eXBlRGVjbGFyYXRpb24uY2FuUmVwcmVzZW50SW50ZWdlcigpKG1fdmFsdWUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIEludGVnZXJMaXRl
cmFsVHlwZTo6Y29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSBj
b25zdAoreworICAgIGlmIChtYXRjaGVzKHVubmFtZWRUeXBlLCAqbV9wcmVmZXJyZWRUeXBlKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7Cit9CisKK30KKworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNWYwMDIyYzZiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5
cGUuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBUeXBlUmVmZXJlbmNlOwor
CitjbGFzcyBJbnRlZ2VyTGl0ZXJhbFR5cGUgOiBwdWJsaWMgUmVzb2x2YWJsZVR5cGUgeworcHVi
bGljOgorICAgIEludGVnZXJMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIGludCB2
YWx1ZSk7CisKKyAgICB2aXJ0dWFsIH5JbnRlZ2VyTGl0ZXJhbFR5cGUoKTsKKworICAgIEludGVn
ZXJMaXRlcmFsVHlwZShjb25zdCBJbnRlZ2VyTGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBJ
bnRlZ2VyTGl0ZXJhbFR5cGUoSW50ZWdlckxpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKworICAg
IEludGVnZXJMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KGNvbnN0IEludGVnZXJMaXRlcmFsVHlwZSYp
ID0gZGVsZXRlOworICAgIEludGVnZXJMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KEludGVnZXJMaXRl
cmFsVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzSW50ZWdlckxpdGVyYWxUeXBlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgVHlwZVJlZmVyZW5jZSYgcHJl
ZmVycmVkVHlwZSgpIHsgcmV0dXJuICptX3ByZWZlcnJlZFR5cGU7IH0KKworICAgIGJvb2wgY2Fu
UmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQgY29udmVy
c2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBpbnQgbV92YWx1ZTsKKyAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZl
IGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCisgICAgLy8gQ29uc3RhbnRFeHByZXNzaW9u
IC0+IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2UgLT4gVHlwZUFyZ3VtZW50cyAtPiBDb25z
dGFudEV4cHJlc3Npb24KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gbV9wcmVm
ZXJyZWRUeXBlOworfTsKKworfQorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
SExTTF9SRVNPTFZBQkxFX1RZUEUoSW50ZWdlckxpdGVyYWxUeXBlLCBpc0ludGVnZXJMaXRlcmFs
VHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjY3ZGIwMDAxNmEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKQEAgLTAsMCAr
MSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNpbmNs
dWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsK
KworY2xhc3MgTmFtZWRUeXBlIDogcHVibGljIFR5cGUgeworcHVibGljOgorICAgIE5hbWVkVHlw
ZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUpCisgICAgICAgIDogbV9vcmln
aW4oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5OYW1lZFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBO
YW1lZFR5cGUoY29uc3QgTmFtZWRUeXBlJikgPSBkZWxldGU7CisgICAgTmFtZWRUeXBlKE5hbWVk
VHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9u
YW1lOyB9CisKKyAgICBib29sIGlzTmFtZWRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1R5cGVEZWZpbml0aW9uKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTdHJ1Y3R1cmVEZWZpbml0aW9uKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGlvbkRlZmlu
aXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2
ZVR5cGVEZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFs
IGNvbnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgdmly
dHVhbCBUeXBlJiB1bmlmeU5vZGUoKSB7IHJldHVybiAqdGhpczsgfQorCitwcml2YXRlOgorICAg
IExleGVyOjpUb2tlbiBtX29yaWdpbjsKKyAgICBTdHJpbmcgbV9uYW1lOworfTsKKworfQorCit9
CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUo
VG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVH
SU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6Ok5hbWVkVHlwZSYgdHlwZSkgeyBy
ZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZUEUoTmFtZWRUeXBlLCBpc05hbWVkVHlw
ZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24uaAppbmRleCAwMTBlNmViYTcwMC4uYTgxNGJlNjhlMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgKQEAgLTM3LDggKzM3LDggQEAgbmFtZXNwYWNl
IEFTVCB7CiAKIGNsYXNzIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwdWJsaWMgRnVuY3Rp
b25EZWNsYXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihM
ZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9w
dGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBvaW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFT
VDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycywg
T3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1hbnRpYywgYm9vbCByZXN0cmljdGVkKQotICAg
ICAgICA6IEZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGF0dHJp
YnV0ZUJsb2NrKSwgV1RGTW92ZShlbnRyeVBvaW50VHlwZSksIFdURk1vdmUodHlwZSksIFdURk1v
dmUobmFtZSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoc2VtYW50aWMpKQorICAgIE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiYmIGZ1bmN0aW9uRGVj
bGFyYXRpb24sIGJvb2wgcmVzdHJpY3RlZCkKKyAgICAgICAgOiBGdW5jdGlvbkRlY2xhcmF0aW9u
KFdURk1vdmUoZnVuY3Rpb25EZWNsYXJhdGlvbikpCiAgICAgICAgICwgbV9yZXN0cmljdGVkKHJl
c3RyaWN0ZWQpCiAgICAgewogICAgIH0KQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oY29uc3QgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYp
ID0gZGVsZXRlOwogICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzTmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIGJvb2wgcmVz
dHJpY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3RlZDsgfQogCiBwcml2YXRlOgpAQCAt
NjAsNCArNjIsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hM
U0xfRlVOQ1RJT05fREVDTEFSQVRJT04oTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXNOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVU
eXBlRGVjbGFyYXRpb24uaAppbmRleCAzMjBhYmMzYzQ3NS4uMmYyMDBjZTBmNjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYg
RU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExT
TFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlw
ZUFyZ3VtZW50LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM4LDEx
ICszOCwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3Mg
TmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHVibGljIFR5cGUgeworY2xhc3MgTmF0aXZlVHlwZURl
Y2xhcmF0aW9uIDogcHVibGljIE5hbWVkVHlwZSB7CiBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgVHlwZUFyZ3Vt
ZW50cyYmIHR5cGVBcmd1bWVudHMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4p
KQotICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgICAgICA6IE5hbWVkVHlwZShX
VEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlQXJndW1lbnRz
KFdURk1vdmUodHlwZUFyZ3VtZW50cykpCiAgICAgewogICAgIH0KQEAgLTUyLDE4ICs1MSw1OSBA
QCBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURlY2xhcmF0aW9uKGNvbnN0IE5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5hdGl2ZVR5cGVEZWNsYXJhdGlvbihOYXRpdmVUeXBl
RGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OwogCisgICAgYm9vbCBpc05hdGl2ZVR5cGVEZWNsYXJh
dGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsg
cmV0dXJuIG1fbmFtZTsgfQogICAgIFR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMoKSB7IHJl
dHVybiBtX3R5cGVBcmd1bWVudHM7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9u
ZSgpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGJvb2wgaXNJbnQoKSBjb25zdCB7
IHJldHVybiBtX2lzSW50OyB9CisgICAgYm9vbCBpc051bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
aXNOdW1iZXI7IH0KKyAgICBib29sIGlzRmxvYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzRmxv
YXRpbmc7IH0KKyAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZlY3Rvcjsg
fQorICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiBtX2lzTWF0cml4OyB9CisgICAg
Ym9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2lzVGV4dHVyZTsgfQorICAgIGJvb2wg
aXNTaWduZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2lnbmVkOyB9CisgICAgY29uc3Qgc3RkOjpm
dW5jdGlvbjxib29sKGludCk+JiBjYW5SZXByZXNlbnRJbnRlZ2VyKCkgY29uc3QgeyByZXR1cm4g
bV9jYW5SZXByZXNlbnRJbnRlZ2VyOyB9CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKHVu
c2lnbmVkKT4mIGNhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyOyB9CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxi
b29sKGZsb2F0KT4mIGNhblJlcHJlc2VudEZsb2F0KCkgY29uc3QgeyByZXR1cm4gbV9jYW5SZXBy
ZXNlbnRGbG9hdDsgfQorICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248aW50NjRfdChpbnQ2NF90KT4m
IHN1Y2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yOyB9CisgICAgY29uc3Qgc3Rk
OjpmdW5jdGlvbjxpbnQ2NF90KGludCk+JiBmb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKCkgY29uc3Qg
eyByZXR1cm4gbV9mb3JtYXRWYWx1ZUZyb21JbnRlZ2VyOyB9CisgICAgY29uc3Qgc3RkOjpmdW5j
dGlvbjxpbnQ2NF90KHVuc2lnbmVkKT4mIGZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcigp
IGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyOyB9CisgICAg
dm9pZCBpdGVyYXRlQWxsVmFsdWVzKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2NF90KT4m
IGNhbGxiYWNrKSB7IG1faXRlcmF0ZUFsbFZhbHVlcyhjYWxsYmFjayk7IH0KKworICAgIHZvaWQg
c2V0SXNJbnQoKSB7IG1faXNJbnQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRJc051bWJlcigpIHsg
bV9pc051bWJlciA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzRmxvYXRpbmcoKSB7IG1faXNGbG9h
dGluZyA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzVmVjdG9yKCkgeyBtX2lzVmVjdG9yID0gdHJ1
ZTsgfQorICAgIHZvaWQgc2V0SXNNYXRyaXgoKSB7IG1faXNNYXRyaXggPSB0cnVlOyB9CisgICAg
dm9pZCBzZXRJc1RleHR1cmUoKSB7IG1faXNUZXh0dXJlID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0
SXNTaWduZWQoKSB7IG1faXNTaWduZWQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRDYW5SZXByZXNl
bnRJbnRlZ2VyKHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQpPiYmIGNhblJlcHJlc2VudCkgeyBtX2Nh
blJlcHJlc2VudEludGVnZXIgPSBXVEZNb3ZlKGNhblJlcHJlc2VudCk7IH0KKyAgICB2b2lkIHNl
dENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihzdGQ6OmZ1bmN0aW9uPGJvb2wodW5zaWduZWQp
PiYmIGNhblJlcHJlc2VudCkgeyBtX2NhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlciA9IFdURk1v
dmUoY2FuUmVwcmVzZW50KTsgfQorICAgIHZvaWQgc2V0Q2FuUmVwcmVzZW50RmxvYXQoc3RkOjpm
dW5jdGlvbjxib29sKGZsb2F0KT4mJiBjYW5SZXByZXNlbnQpIHsgbV9jYW5SZXByZXNlbnRGbG9h
dCA9IFdURk1vdmUoY2FuUmVwcmVzZW50KTsgfQorICAgIHZvaWQgc2V0U3VjY2Vzc29yKHN0ZDo6
ZnVuY3Rpb248aW50NjRfdChpbnQ2NF90KT4mJiBzdWNjZXNzb3IpIHsgbV9zdWNjZXNzb3IgPSBX
VEZNb3ZlKHN1Y2Nlc3Nvcik7IH0KKyAgICB2b2lkIHNldEZvcm1hdFZhbHVlRnJvbUludGVnZXIo
c3RkOjpmdW5jdGlvbjxpbnQ2NF90KGludCk+JiYgZm9ybWF0VmFsdWUpIHsgbV9mb3JtYXRWYWx1
ZUZyb21JbnRlZ2VyID0gV1RGTW92ZShmb3JtYXRWYWx1ZSk7IH0KKyAgICB2b2lkIHNldEZvcm1h
dFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcihzdGQ6OmZ1bmN0aW9uPGludDY0X3QodW5zaWduZWQp
PiYmIGZvcm1hdFZhbHVlKSB7IG1fZm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyID0gV1RG
TW92ZShmb3JtYXRWYWx1ZSk7IH0KKyAgICB2b2lkIHNldEl0ZXJhdGVBbGxWYWx1ZXMoc3RkOjpm
dW5jdGlvbjx2b2lkKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2NF90KT4mKT4mJiBpdGVy
YXRlQWxsVmFsdWVzKSB7IG1faXRlcmF0ZUFsbFZhbHVlcyA9IFdURk1vdmUoaXRlcmF0ZUFsbFZh
bHVlcyk7IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3Ry
aW5nIG1fbmFtZTsKICAgICBUeXBlQXJndW1lbnRzIG1fdHlwZUFyZ3VtZW50czsKKyAgICBzdGQ6
OmZ1bmN0aW9uPGJvb2woaW50KT4gbV9jYW5SZXByZXNlbnRJbnRlZ2VyOworICAgIHN0ZDo6ZnVu
Y3Rpb248Ym9vbCh1bnNpZ25lZCk+IG1fY2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyOworICAg
IHN0ZDo6ZnVuY3Rpb248Ym9vbChmbG9hdCk+IG1fY2FuUmVwcmVzZW50RmxvYXQ7CisgICAgc3Rk
OjpmdW5jdGlvbjxpbnQ2NF90KGludDY0X3QpPiBtX3N1Y2Nlc3NvcjsKKyAgICBzdGQ6OmZ1bmN0
aW9uPGludDY0X3QoaW50KT4gbV9mb3JtYXRWYWx1ZUZyb21JbnRlZ2VyOworICAgIHN0ZDo6ZnVu
Y3Rpb248aW50NjRfdCh1bnNpZ25lZCk+IG1fZm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2Vy
OworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woaW50NjRf
dCk+Jik+IG1faXRlcmF0ZUFsbFZhbHVlczsKKyAgICBib29sIG1faXNJbnQgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9pc051bWJlciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzRmxvYXRpbmcgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9pc1ZlY3RvciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzTWF0
cml4IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNUZXh0dXJlIHsgZmFsc2UgfTsKKyAgICBib29s
IG1faXNTaWduZWQgeyBmYWxzZSB9OwogfTsKIAogfQpAQCAtNzIsNCArMTEyLDYgQEAgcHJpdmF0
ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoTmF0aXZl
VHlwZURlY2xhcmF0aW9uLCBpc05hdGl2ZVR5cGVEZWNsYXJhdGlvbigpKQorCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5v
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5vZGUu
aAppbmRleCBmNmM0ZjAwNjBjMC4uYzhmZGMxMzg2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5vZGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOb2RlLmgKQEAgLTQyLDYgKzQyLDkg
QEAgcHVibGljOgogICAgIGV4cGxpY2l0IE5vZGUoY29uc3QgTm9kZSYpID0gZGVmYXVsdDsKICAg
ICBOb2RlKE5vZGUmJikgPSBkZWZhdWx0OwogCisgICAgTm9kZSYgb3BlcmF0b3I9KGNvbnN0IE5v
ZGUmKSA9IGRlZmF1bHQ7CisgICAgTm9kZSYgb3BlcmF0b3I9KE5vZGUmJikgPSBkZWZhdWx0Owor
CiBwcml2YXRlOgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgKaW5kZXggZWU2NDdjZjlkMzkuLjU0
YWY4YWZhOGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xOdWxsTGl0ZXJhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lu
Y2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNs
dWRlICJXSExTTE51bGxMaXRlcmFsVHlwZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQ1LDEyICs0NiwyNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5OdWxsTGl0ZXJhbCgpID0g
ZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0IE51bGxMaXRlcmFsKGNvbnN0IE51bGxMaXRlcmFsJikg
PSBkZWZhdWx0OworICAgIE51bGxMaXRlcmFsKGNvbnN0IE51bGxMaXRlcmFsJikgPSBkZWxldGU7
CiAgICAgTnVsbExpdGVyYWwoTnVsbExpdGVyYWwmJikgPSBkZWZhdWx0OwogCisgICAgTnVsbExp
dGVyYWwmIG9wZXJhdG9yPShjb25zdCBOdWxsTGl0ZXJhbCYpID0gZGVsZXRlOworICAgIE51bGxM
aXRlcmFsJiBvcGVyYXRvcj0oTnVsbExpdGVyYWwmJikgPSBkZWZhdWx0OworCisgICAgTnVsbExp
dGVyYWxUeXBlJiB0eXBlKCkgeyByZXR1cm4gbV90eXBlOyB9CisKICAgICBib29sIGlzTnVsbExp
dGVyYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBOdWxsTGl0ZXJh
bCBjbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIHJlc3VsdCA9IE51bGxMaXRlcmFs
KExleGVyOjpUb2tlbihvcmlnaW4oKSkpOworICAgICAgICBpZiAocmVzdWx0Lm1fdHlwZS5yZXNv
bHZlZFR5cGUoKSkKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUucmVzb2x2ZShyZXN1bHQubV90
eXBlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKIHByaXZhdGU6CisgICAgTnVsbExpdGVyYWxUeXBlIG1fdHlwZTsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51
bGxMaXRlcmFsVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi42MWViZGMxYjQzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5jcHAKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworYm9v
bCBOdWxsTGl0ZXJhbFR5cGU6OmNhblJlc29sdmUoY29uc3QgVHlwZSYgdHlwZSkgY29uc3QKK3sK
KyAgICBpZiAoIWlzPFVubmFtZWRUeXBlPih0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8VW5uYW1lZFR5cGU+KHR5cGUpOworICAg
IGlmICghaXM8UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIE51bGxMaXRlcmFsVHlwZTo6Y29u
dmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdAoreworICAgIHJldHVybiAwOwor
fQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWxUeXBlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgzMTI1MTAxYzZmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TnVsbExpdGVyYWxUeXBlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5
cGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1l
c3BhY2UgQVNUIHsKKworY2xhc3MgTnVsbExpdGVyYWxUeXBlIDogcHVibGljIFJlc29sdmFibGVU
eXBlIHsKK3B1YmxpYzoKKyAgICBOdWxsTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICB2
aXJ0dWFsIH5OdWxsTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBOdWxsTGl0ZXJhbFR5
cGUoY29uc3QgTnVsbExpdGVyYWxUeXBlJikgPSBkZWxldGU7CisgICAgTnVsbExpdGVyYWxUeXBl
KE51bGxMaXRlcmFsVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBOdWxsTGl0ZXJhbFR5cGUmIG9w
ZXJhdG9yPShjb25zdCBOdWxsTGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBOdWxsTGl0ZXJh
bFR5cGUmIG9wZXJhdG9yPShOdWxsTGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgYm9v
bCBpc051bGxMaXRlcmFsVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdW5z
aWduZWQgY29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKK307CisKK30KKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
V0hMU0xfUkVTT0xWQUJMRV9UWVBFKE51bGxMaXRlcmFsVHlwZSwgaXNOdWxsTGl0ZXJhbFR5cGUo
KSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAppbmRleCAxNTI5NDI2YTJlZC4uNjNjMjA5
M2M1MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFBvaW50ZXJUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaApAQCAtMzksOCArMzksOCBAQCBuYW1lc3BhY2Ug
QVNUIHsKIAogY2xhc3MgUG9pbnRlclR5cGUgOiBwdWJsaWMgUmVmZXJlbmNlVHlwZSB7CiBwdWJs
aWM6Ci0gICAgUG9pbnRlclR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBhZGRy
ZXNzU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBlbGVtZW50VHlwZSkKLSAgICAgICAgOiBS
ZWZlcmVuY2VUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShhZGRyZXNzU3BhY2UpLCBXVEZN
b3ZlKGVsZW1lbnRUeXBlKSkKKyAgICBQb2ludGVyVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4s
IEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4g
ZWxlbWVudFR5cGUpCisgICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdpbiksIGFk
ZHJlc3NTcGFjZSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCiAgICAgewogICAgIH0KIApAQCAtNDks
MTEgKzQ5LDExIEBAIHB1YmxpYzoKICAgICBQb2ludGVyVHlwZShjb25zdCBQb2ludGVyVHlwZSYp
ID0gZGVsZXRlOwogICAgIFBvaW50ZXJUeXBlKFBvaW50ZXJUeXBlJiYpID0gZGVmYXVsdDsKIAot
ICAgIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgYm9vbCBpc1BvaW50ZXJUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKICAg
ICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBvaW50ZXJUeXBlPihMZXhlcjo6
VG9rZW4ob3JpZ2luKCkpLCBTdHJpbmcoYWRkcmVzc1NwYWNlKCkpLCBlbGVtZW50VHlwZSgpLmNs
b25lKCkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQb2ludGVyVHlwZT4oTGV4
ZXI6OlRva2VuKG9yaWdpbigpKSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUo
KSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShQb2ludGVyVHlwZSwgaXNQb2ludGVy
VHlwZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoUG9pbnRl
clR5cGUsIGlzUG9pbnRlclR5cGUoKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5oCmluZGV4IGJhMzhhNWMwMWVhLi5kMDVhNzJjMWZjNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKQEAgLTUxLDEwICs1
MSwzMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0
RnVuY3Rpb25OYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHNldEZ1bmN0aW9u
TmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBhbmRGdW5jdGlvbk5hbWUoKSBj
b25zdCA9IDA7CisKKyAgICB2b2lkIHNldFBvc3NpYmxlR2V0T3ZlcmxvYWRzKGNvbnN0IFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3Zlcmxv
YWRzKQorICAgIHsKKyAgICAgICAgbV9wb3NzaWJsZUdldE92ZXJsb2FkcyA9IG92ZXJsb2FkczsK
KyAgICB9CisgICAgdm9pZCBzZXRQb3NzaWJsZVNldE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykK
KyAgICB7CisgICAgICAgIG1fcG9zc2libGVTZXRPdmVybG9hZHMgPSBvdmVybG9hZHM7CisgICAg
fQorICAgIHZvaWQgc2V0UG9zc2libGVBbmRPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMpCisgICAg
eworICAgICAgICBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAgIH0KKwog
ICAgIEV4cHJlc3Npb24mIGJhc2UoKSB7IHJldHVybiAqbV9iYXNlOyB9CiAKIHByaXZhdGU6CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fYmFzZTsKKyAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZUdldE92
ZXJsb2FkczsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4gbV9wb3NzaWJsZVNldE92ZXJsb2FkczsKKyAgICBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbV9wb3NzaWJsZUFuZE92ZXJs
b2FkczsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFF1YWxpZmllci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUXVhbGlmaWVyLmgKaW5kZXggMzMzZjA1MjI0NDEuLmY3Y2QyZmRm
ZmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xRdWFsaWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xRdWFsaWZpZXIuaApAQCAtNDYsNyArNDYsNyBAQCBlbnVtIGNsYXNzIFF1YWxp
ZmllciB7CiAgICAgU2FtcGxlCiB9OwogCi10eXBlZGVmIFZlY3RvcjxRdWFsaWZpZXI+IFF1YWxp
ZmllcnM7Cit1c2luZyBRdWFsaWZpZXJzID0gVmVjdG9yPFF1YWxpZmllcj47CiAKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCmluZGV4IGE0YzE0Y2Ux
Y2YzLi5jZDU1NjMyMGRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24uaApAQCAtMjcsNyArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2lu
Y2x1ZGUgIldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldI
TFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgog
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNl
LmgiCkBAIC01Miw4ICs1Miw4IEBAIHB1YmxpYzoKICAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IGxW
YWx1ZSkKICAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQogICAgICAg
ICAsIG1fbFZhbHVlKFdURk1vdmUobFZhbHVlKSkKLSAgICAgICAgLCBtX29sZFZhbHVlKExleGVy
OjpUb2tlbihvcmlnaW4pKQotICAgICAgICAsIG1fbmV3VmFsdWUoV1RGTW92ZShvcmlnaW4pKQor
ICAgICAgICAsIG1fb2xkVmFsdWUoTGV4ZXI6OlRva2VuKG9yaWdpbiksIFF1YWxpZmllcnMoKSwg
bnVsbHB0ciwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cikKKyAgICAgICAgLCBtX25l
d1ZhbHVlKFdURk1vdmUob3JpZ2luKSwgUXVhbGlmaWVycygpLCBudWxscHRyLCBTdHJpbmcoKSwg
V1RGOjpudWxsb3B0LCBudWxscHRyKQogICAgIHsKICAgICB9CiAKQEAgLTg3LDE1ICs4NywxNSBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc1JlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICBFeHByZXNzaW9uJiBsVmFsdWUoKSB7IHJl
dHVybiAqbV9sVmFsdWU7IH0KLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJiBvbGRW
YWx1ZSgpIHsgcmV0dXJuIG1fb2xkVmFsdWU7IH0KLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xh
cmF0aW9uJiBuZXdWYWx1ZSgpIHsgcmV0dXJuIG1fbmV3VmFsdWU7IH0KKyAgICBWYXJpYWJsZURl
Y2xhcmF0aW9uJiBvbGRWYWx1ZSgpIHsgcmV0dXJuIG1fb2xkVmFsdWU7IH0KKyAgICBWYXJpYWJs
ZURlY2xhcmF0aW9uJiBuZXdWYWx1ZSgpIHsgcmV0dXJuIG1fbmV3VmFsdWU7IH0KICAgICBFeHBy
ZXNzaW9uJiBuZXdWYWx1ZUV4cHJlc3Npb24oKSB7IHJldHVybiAqbV9uZXdWYWx1ZUV4cHJlc3Np
b247IH0KICAgICBFeHByZXNzaW9uJiByZXN1bHRFeHByZXNzaW9uKCkgeyByZXR1cm4gKm1fcmVz
dWx0RXhwcmVzc2lvbjsgfQogCiBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNz
aW9uPiBtX2xWYWx1ZTsKLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uIG1fb2xkVmFs
dWU7Ci0gICAgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiBtX25ld1ZhbHVlOworICAgIFZh
cmlhYmxlRGVjbGFyYXRpb24gbV9vbGRWYWx1ZTsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG1f
bmV3VmFsdWU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fbmV3VmFsdWVFeHBy
ZXNzaW9uOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX3Jlc3VsdEV4cHJlc3Np
b247CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oCmluZGV4IDIyNTdmOWJlMjQwLi41ZDI5ZmZk
NWI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUmVmZXJlbmNlVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFJlZmVyZW5jZVR5cGUuaApAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVO
QUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xU
eXBlLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNywxMSArMzcsMTggQEAg
bmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFJlZmVyZW5jZVR5
cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBSZWZlcmVuY2VUeXBlIDogcHVibGljIFVubmFtZWRU
eXBlIHsKIHB1YmxpYzoKLSAgICBSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwg
U3RyaW5nJiYgYWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4mJiBlbGVtZW50VHlw
ZSkKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9hZGRy
ZXNzU3BhY2UoV1RGTW92ZShhZGRyZXNzU3BhY2UpKQorICAgIGVudW0gY2xhc3MgQWRkcmVzc1Nw
YWNlIHsKKyAgICAgICAgQ29uc3RhbnQsCisgICAgICAgIERldmljZSwKKyAgICAgICAgVGhyZWFk
Z3JvdXAsCisgICAgICAgIFRocmVhZAorICAgIH07CisKKyAgICBSZWZlcmVuY2VUeXBlKExleGVy
OjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVf
cHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAgICAgICA6IFVubmFtZWRUeXBlKFdU
Rk1vdmUob3JpZ2luKSkKKyAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCiAg
ICAgICAgICwgbV9lbGVtZW50VHlwZShXVEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICB7CiAgICAg
fQpAQCAtNTAsMTggKzU3LDE1IEBAIHB1YmxpYzoKIAogICAgIFJlZmVyZW5jZVR5cGUoY29uc3Qg
UmVmZXJlbmNlVHlwZSYpID0gZGVsZXRlOwogICAgIFJlZmVyZW5jZVR5cGUoUmVmZXJlbmNlVHlw
ZSYmKSA9IGRlZmF1bHQ7Ci0gICAgCi0gICAgVHlwZSYgZWxlbWVudFR5cGUoKSB7IHJldHVybiAq
bV9lbGVtZW50VHlwZTsgfQogCi1wcm90ZWN0ZWQ6Ci0gICAgY29uc3QgTGV4ZXI6OlRva2VuJiBv
cmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQotICAgIGNvbnN0IFN0cmluZyYgYWRk
cmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KLSAgICBjb25zdCBU
eXBlJiBlbGVtZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9CisgICAg
Ym9vbCBpc1JlZmVyZW5jZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
CisgICAgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVz
c1NwYWNlOyB9CisgICAgVW5uYW1lZFR5cGUmIGVsZW1lbnRUeXBlKCkgY29uc3QgeyByZXR1cm4g
Km1fZWxlbWVudFR5cGU7IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47
Ci0gICAgU3RyaW5nIG1fYWRkcmVzc1NwYWNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBt
X2VsZW1lbnRUeXBlOworICAgIEFkZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFjZTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IG1fZWxlbWVudFR5cGU7CiB9OwogCiB9CkBAIC03MCw0
ICs3NCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9V
Tk5BTUVEX1RZUEUoUmVmZXJlbmNlVHlwZSwgaXNSZWZlcmVuY2VUeXBlKCkpCisKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVzb2x2YWJsZVR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFJlc29sdmFibGVUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjU4YTY4ZWEzYzlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb2x2YWJsZVR5cGUuaApAQCAtMCwwICsxLDg2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisj
aW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgorI2lu
Y2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wg
eworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgUmVzb2x2YWJsZVR5cGUgOiBwdWJsaWMgVHlw
ZSB7CitwdWJsaWM6CisgICAgUmVzb2x2YWJsZVR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0
dWFsIH5SZXNvbHZhYmxlVHlwZSgpID0gZGVmYXVsdDsKKworICAgIFJlc29sdmFibGVUeXBlKGNv
bnN0IFJlc29sdmFibGVUeXBlJikgPSBkZWxldGU7CisgICAgUmVzb2x2YWJsZVR5cGUoUmVzb2x2
YWJsZVR5cGUmJikgPSBkZWZhdWx0OworCisgICAgUmVzb2x2YWJsZVR5cGUmIG9wZXJhdG9yPShj
b25zdCBSZXNvbHZhYmxlVHlwZSYpID0gZGVsZXRlOworICAgIFJlc29sdmFibGVUeXBlJiBvcGVy
YXRvcj0oUmVzb2x2YWJsZVR5cGUmJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc1Jlc29sdmFi
bGVUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0Zsb2F0TGl0ZXJhbFR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc0ludGVnZXJMaXRlcmFsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzTnVsbExpdGVyYWxUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBU
eXBlJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoY29u
c3QgVW5uYW1lZFR5cGUmKSBjb25zdCA9IDA7CisKKyAgICBVbm5hbWVkVHlwZSogcmVzb2x2ZWRU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZFR5cGUuZ2V0KCk7IH0KKyAgICBVbm5hbWVk
VHlwZSogcmVzb2x2ZWRUeXBlKCkgeyByZXR1cm4gbV9yZXNvbHZlZFR5cGUuZ2V0KCk7IH0KKwor
ICAgIHZvaWQgcmVzb2x2ZShzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+JiYgdHlwZSkKKyAg
ICB7CisgICAgICAgIG1fcmVzb2x2ZWRUeXBlID0gV1RGTW92ZSh0eXBlKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBtX3Jlc29sdmVkVHlwZTsK
K307CisKK30KKworfQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExT
TF9SRVNPTFZBQkxFX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1l
KSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6OlJl
c29sdmFibGVUeXBlJiB0eXBlKSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQ
RShSZXNvbHZhYmxlVHlwZSwgaXNSZXNvbHZhYmxlVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNl
U2VtYW50aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmVhOGU4YTFkZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAKQEAgLTAsMCAr
MSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGljLmgiCisKKyNpbmNsdWRlICJX
SExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUg
IldITFNMSW50cmluc2ljcy5oIgorI2luY2x1ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgorI2lu
Y2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitib29sIFJlc291cmNlU2VtYW50
aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUs
IGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX21v
ZGUpIHsKKyAgICBjYXNlIE1vZGU6OlVub3JkZXJlZEFjY2Vzc1ZpZXc6CisgICAgICAgIGlmIChp
czxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHJlZmVy
ZW5jZVR5cGUgPSBkb3duY2FzdDxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAg
ICAgICByZXR1cm4gcmVmZXJlbmNlVHlwZS5hZGRyZXNzU3BhY2UoKSA9PSBSZWZlcmVuY2VUeXBl
OjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50IHx8IHJlZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkg
PT0gUmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGlzPEFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmIChpczxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAg
ICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxUeXBlUmVmZXJlbmNlPih1bm5h
bWVkVHlwZSk7CisgICAgICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUo
KSk7CisgICAgICAgICAgICBpZiAoaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVy
ZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PE5h
dGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpLmlzVGV4
dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIE1vZGU6
OlRleHR1cmU6CisgICAgICAgIGlmIChpczxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCisg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpLmFk
ZHJlc3NTcGFjZSgpID09IFJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7Cisg
ICAgICAgIGlmIChpczxBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpZiAoaXM8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKSB7Cisg
ICAgICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4o
dW5uYW1lZFR5cGUpOworICAgICAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRU
eXBlKCkpOworICAgICAgICAgICAgaWYgKGlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVS
ZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2Fz
dDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKS5p
c1RleHR1cmUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBN
b2RlOjpCdWZmZXI6CisgICAgICAgIGlmIChpczxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkp
CisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUp
LmFkZHJlc3NTcGFjZSgpID09IFJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7
CisgICAgICAgIHJldHVybiBpczxBcnJheVR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICBjYXNlIE1v
ZGU6OlNhbXBsZXI6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5z
aWNzLnNhbXBsZXJUeXBlKCkpOworICAgIH0KK30KKworYm9vbCBSZXNvdXJjZVNlbWFudGljOjpp
c0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKFNoYWRlckl0ZW1EaXJlY3Rpb24gZGly
ZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSBjb25zdAoreworICAgIHJldHVybiBk
aXJlY3Rpb24gPT0gU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ7Cit9CisKK30KKworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5oCmluZGV4IGFiM2I0MzBmNDQy
Li42YWUzMTdhMzU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuaApAQCAtNjIsNiAr
NjIsMTkgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleDsgfQogICAgIHVuc2lnbmVkIHNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZTsgfQog
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlc291cmNlU2VtYW50aWMmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbW9kZSA9PSBvdGhlci5tX21vZGUgJiYgbV9pbmRl
eCA9PSBvdGhlci5tX2luZGV4ICYmIG1fc3BhY2UgPT0gb3RoZXIubV9zcGFjZTsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVzb3VyY2VTZW1hbnRpYyYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAg
Ym9vbCBpc0FjY2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRy
aW5zaWNzJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0FjY2VwdGFibGVGb3JTaGFkZXJJ
dGVtRGlyZWN0aW9uKFNoYWRlckl0ZW1EaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlv
biYpIGNvbnN0IG92ZXJyaWRlOworCiBwcml2YXRlOgogICAgIE1vZGUgbV9tb2RlOwogICAgIHVu
c2lnbmVkIG1faW5kZXg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFJldHVybi5oCmluZGV4IGM1YmZjOWU0Mjg2Li41ZDMxOGNkMjMyYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmV0dXJuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMUmV0dXJuLmgKQEAgLTU0LDggKzU0LDEyIEBAIHB1YmxpYzoKIAogICAgIEV4cHJlc3Npb24q
IHZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQogCisgICAgRnVuY3Rpb25EZWZpbml0
aW9uKiBmdW5jdGlvbigpIHsgcmV0dXJuIG1fZnVuY3Rpb247IH0KKyAgICB2b2lkIHNldEZ1bmN0
aW9uKEZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25EZWZpbml0aW9uKSB7IG1fZnVuY3Rpb24g
PSBmdW5jdGlvbkRlZmluaXRpb247IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
RXhwcmVzc2lvbj4gbV92YWx1ZTsgLy8gbnVsbGFibGUKKyAgICBGdW5jdGlvbkRlZmluaXRpb24q
IG1fZnVuY3Rpb247CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU2VtYW50aWMuaAppbmRleCBiMDUyYjkyZWEyNi4uYjJj
MDkwYmYxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFNlbWFudGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMU2VtYW50aWMuaApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV0hM
U0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotdHlwZWRlZiBWYXJpYW50PEJ1aWx0SW5TZW1hbnRp
YywgUmVzb3VyY2VTZW1hbnRpYywgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLCBTdGFn
ZUluT3V0U2VtYW50aWM+IFNlbWFudGljOwordXNpbmcgU2VtYW50aWMgPSBWYXJpYW50PEJ1aWx0
SW5TZW1hbnRpYywgUmVzb3VyY2VTZW1hbnRpYywgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFu
dGljLCBTdGFnZUluT3V0U2VtYW50aWM+OwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRT
ZW1hbnRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5mMjRiYWVjYzA0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29u
c3RhbnRTZW1hbnRpYy5jcHAKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTcGVjaWFs
aXphdGlvbkNvbnN0YW50U2VtYW50aWMuaCIKKworI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5o
IgorI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVy
ZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25h
bWVzcGFjZSBBU1QgeworCitib29sIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYzo6aXNB
Y2NlcHRhYmxlVHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3Qg
SW50cmluc2ljcyYpIGNvbnN0Cit7CisgICAgaWYgKCFpczxUeXBlUmVmZXJlbmNlPih1bm5hbWVk
VHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0g
ZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpOworICAgIEFTU0VSVCh0eXBlUmVm
ZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBpZiAoIWlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVu
Y2UucmVzb2x2ZWRUeXBlKCkpLmlzTnVtYmVyKCk7Cit9CisKK2Jvb2wgU3BlY2lhbGl6YXRpb25D
b25zdGFudFNlbWFudGljOjppc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKFNoYWRl
ckl0ZW1EaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSBjb25z
dAoreworICAgIHJldHVybiBkaXJlY3Rpb24gPT0gU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ7
Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFu
dGljLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVj
aWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaAppbmRleCA5YTdjNTNmZDRiNi4uOWE4NGFiOWNm
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1h
bnRpYy5oCkBAIC00OCw2ICs0OCwxOSBAQCBwdWJsaWM6CiAgICAgU3BlY2lhbGl6YXRpb25Db25z
dGFudFNlbWFudGljKGNvbnN0IFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpID0gZGVs
ZXRlOwogICAgIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyhTcGVjaWFsaXphdGlvbkNv
bnN0YW50U2VtYW50aWMmJikgPSBkZWZhdWx0OwogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3BlY2lhbGl6
YXRpb25Db25zdGFudFNlbWFudGljJikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBib29sIGlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVk
VHlwZSYsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQWNj
ZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29uc3Qg
RnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisKIHByaXZhdGU6CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xT
dGFnZUluT3V0U2VtYW50aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uMjAzYzQ2MDg4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMu
Y3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3RhZ2VJbk91dFNlbWFudGljLmgi
CisKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRp
b25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNp
bmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIK
KyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworYm9vbCBTdGFnZUluT3V0
U2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1l
ZFR5cGUsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdAoreworICAgIGlmIChpczxBcnJheVR5cGU+
KHVubmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFpczxUeXBlUmVm
ZXJlbmNlPih1bm5hbWVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiB0
eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpOworICAg
IEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvJiByZXNvbHZl
ZFR5cGUgPSAqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKTsKKyAgICBpZiAoaXM8RW51bWVy
YXRpb25EZWZpbml0aW9uPihyZXNvbHZlZFR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAoIWlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocmVzb2x2ZWRUeXBlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0
PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwor
ICAgIHJldHVybiBuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNOdW1iZXIoKQorICAgICAgICB8fCBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uaXNWZWN0b3IoKQorICAgICAgICB8fCBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uaXNNYXRyaXgoKTsKK30KKworYm9vbCBTdGFnZUluT3V0U2VtYW50aWM6OmlzQWNj
ZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiBkaXJlY3Rp
b24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKSBjb25zdAor
eworICAgIHN3aXRjaCAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7Cisg
ICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6VmVydGV4OgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEZ1bmN0aW9uRGVjbGFyYXRpb246OkVudHJ5UG9p
bnRUeXBlOjpGcmFnbWVudDoKKyAgICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBTaGFkZXJJdGVt
RGlyZWN0aW9uOjpJbnB1dDsKKyAgICBjYXNlIEZ1bmN0aW9uRGVjbGFyYXRpb246OkVudHJ5UG9p
bnRUeXBlOjpDb21wdXRlOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit9CisK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmgKaW5kZXgg
YTM5OTI3ODFlM2EuLjI5OWI5MWJkOTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50
aWMuaApAQCAtNTEsNiArNTEsMTkgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3Rh
Z2VJbk91dFNlbWFudGljJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFN0YWdlSW5PdXRTZW1hbnRpYyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgYm9vbCBpc0FjY2VwdGFibGVUeXBlKGNv
bnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNzJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgYm9vbCBpc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKFNoYWRlckl0ZW1E
aXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpIGNvbnN0IG92ZXJyaWRlOworCiBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kZXg7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1lbnQuaAppbmRleCA0
MzRkMjFhMDQzMi4uZmVkZDA2OGY4YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5oCkBAIC02Nyw3ICs2Nyw3
IEBAIHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogfTsKIAotdHlwZWRlZiBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YXRlbWVudD4+IFN0YXRlbWVudHM7Cit1c2luZyBTdGF0
ZW1lbnRzID0gVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGF0ZW1lbnQ+PjsKIAogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1
Y3R1cmVEZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKaW5kZXggODdjYzYyZjIzNTYuLmE4Yzk4ZTk5
YjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCkBAIC0yOSw3ICsyOSw3
IEBACiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVF
bGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5
cGUuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKQEAgLTM5LDExICszOSwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3Bh
Y2UgQVNUIHsKIAotY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlvbiA6IHB1YmxpYyBUeXBlIHsKK2Ns
YXNzIFN0cnVjdHVyZURlZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsKIHB1YmxpYzoKICAg
ICBTdHJ1Y3R1cmVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFt
ZSwgU3RydWN0dXJlRWxlbWVudHMmJiBzdHJ1Y3R1cmVFbGVtZW50cykKLSAgICAgICAgOiBtX29y
aWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisg
ICAgICAgIDogTmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKICAgICAg
ICAgLCBtX3N0cnVjdHVyZUVsZW1lbnRzKFdURk1vdmUoc3RydWN0dXJlRWxlbWVudHMpKQogICAg
IHsKICAgICB9CkBAIC01MywxNyArNTIsMTEgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZURlZmlu
aXRpb24oY29uc3QgU3RydWN0dXJlRGVmaW5pdGlvbiYpID0gZGVsZXRlOwogICAgIFN0cnVjdHVy
ZURlZmluaXRpb24oU3RydWN0dXJlRGVmaW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBTdHJ1
Y3R1cmVFbGVtZW50cyYgc3RydWN0dXJlRWxlbWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVs
ZW1lbnRzOyB9CisgICAgYm9vbCBpc1N0cnVjdHVyZURlZmluaXRpb24oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBj
b25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KKyAgICBTdHJ1Y3R1cmVFbGVtZW50cyYgc3RydWN0
dXJlRWxlbWVudHMoKSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9CiAKIHByaXZhdGU6
Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFN0cmluZyBtX25hbWU7CiAgICAgU3Ry
dWN0dXJlRWxlbWVudHMgbV9zdHJ1Y3R1cmVFbGVtZW50czsKIH07CiAKQEAgLTczLDQgKzY2LDYg
QEAgcHJpdmF0ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZ
UEUoU3RydWN0dXJlRGVmaW5pdGlvbiwgaXNTdHJ1Y3R1cmVEZWZpbml0aW9uKCkpCisKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMU3RydWN0dXJlRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oCmluZGV4IDE0YmU0MWM3Mjk4Li42YTY0YjA5
YzA0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMU3RydWN0dXJlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaApAQCAtNDEsNyArNDEsNyBAQCBu
YW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgU3RydWN0dXJlRWxlbWVudCA6IHB1YmxpYyBOb2RlIHsK
IHB1YmxpYzoKLSAgICBTdHJ1Y3R1cmVFbGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVh
bGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIHR5cGUsIFN0cmlu
ZyYmIG5hbWUsIE9wdGlvbmFsPFNlbWFudGljPiBzZW1hbnRpYykKKyAgICBTdHJ1Y3R1cmVFbGVt
ZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6
dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxT
ZW1hbnRpYz4gc2VtYW50aWMpCiAgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQog
ICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1f
dHlwZShXVEZNb3ZlKHR5cGUpKQpAQCAtNTUsMTggKzU1LDIwIEBAIHB1YmxpYzoKICAgICBTdHJ1
Y3R1cmVFbGVtZW50KGNvbnN0IFN0cnVjdHVyZUVsZW1lbnQmKSA9IGRlbGV0ZTsKICAgICBTdHJ1
Y3R1cmVFbGVtZW50KFN0cnVjdHVyZUVsZW1lbnQmJikgPSBkZWZhdWx0OwogCi0gICAgVHlwZSYg
dHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7
IHJldHVybiAqbV90eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9u
YW1lOyB9CiAgICAgT3B0aW9uYWw8U2VtYW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2Vt
YW50aWM7IH0KIAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgUXVh
bGlmaWVycyBtX3F1YWxpZmllcnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IG1fdHlwZTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAgICBTdHJpbmcgbV9u
YW1lOwogICAgIE9wdGlvbmFsPFNlbWFudGljPiBtX3NlbWFudGljOwogfTsKIAotdHlwZWRlZiBW
ZWN0b3I8U3RydWN0dXJlRWxlbWVudD4gU3RydWN0dXJlRWxlbWVudHM7Cit1c2luZyBTdHJ1Y3R1
cmVFbGVtZW50cyA9IFZlY3RvcjxTdHJ1Y3R1cmVFbGVtZW50PjsKIAogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgKaW5kZXgg
Y2Y0Y2JjODg3OTAuLjI4NDFkOTUwOGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZS5oCkBAIC00MiwxNSArNDIsMTUgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB+VHlwZSgpID0gZGVmYXVsdDsKIAotICAgIFR5cGUoY29uc3Qg
VHlwZSYpID0gZGVsZXRlOworICAgIGV4cGxpY2l0IFR5cGUoY29uc3QgVHlwZSYpID0gZGVsZXRl
OwogICAgIFR5cGUoVHlwZSYmKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNUeXBl
UmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQ
b2ludGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlz
QXJyYXlSZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGJvb2wgaXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIFR5cGUmIG9w
ZXJhdG9yPShjb25zdCBUeXBlJikgPSBkZWxldGU7CisgICAgVHlwZSYgb3BlcmF0b3I9KFR5cGUm
JikgPSBkZWZhdWx0OwogCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzTmFtZWRUeXBlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNVbm5hbWVkVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVzb2x2YWJsZVR5cGUoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogCiBwcml2YXRlOgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3Bw
CmluZGV4IDdlNTgwMWUzYjU2Li45ODA4NjY0ZDFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQu
Y3BwCkBAIC0yMywxNCArMjMsMTQgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jcHJhZ21hIG9uY2UKLQogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBl
QXJndW1lbnQuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgIldITFNM
Q29uc3RhbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisj
aW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OSw3
ICs0OSw3IEBAIFR5cGVBcmd1bWVudHMgY2xvbmUoY29uc3QgVHlwZUFyZ3VtZW50cyYgdHlwZUFy
Z3VtZW50cykKIFR5cGVBcmd1bWVudCBjbG9uZShjb25zdCBUeXBlQXJndW1lbnQmIHR5cGVBcmd1
bWVudCkKIHsKICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKGNvbnN0
IENvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKSAtPiBUeXBlQXJndW1lbnQg
ewotICAgICAgICByZXR1cm4gY29uc3RhbnRFeHByZXNzaW9uOworICAgICAgICByZXR1cm4gY29u
c3RhbnRFeHByZXNzaW9uLmNsb25lKCk7CiAgICAgfSwgW10oY29uc3Qgc3RkOjp1bmlxdWVfcHRy
PFR5cGVSZWZlcmVuY2U+JiB0eXBlUmVmZXJlbmNlKSAtPiBUeXBlQXJndW1lbnQgewogICAgICAg
ICByZXR1cm4gdHlwZVJlZmVyZW5jZS0+Y2xvbmVUeXBlUmVmZXJlbmNlKCk7CiAgICAgfSksIHR5
cGVBcmd1bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5oCmluZGV4IGUzODVkNTBkNWVmLi4zYjAz
N2JhMzUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZUFyZ3VtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmgKQEAgLTQwLDggKzQwLDggQEAgbmFtZXNw
YWNlIEFTVCB7CiAKIGNsYXNzIFR5cGVSZWZlcmVuY2U7CiAKLXR5cGVkZWYgVmFyaWFudDxDb25z
dGFudEV4cHJlc3Npb24sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUmVmZXJlbmNlPj4gVHlwZUFyZ3Vt
ZW50OwotdHlwZWRlZiBWZWN0b3I8VHlwZUFyZ3VtZW50PiBUeXBlQXJndW1lbnRzOwordXNpbmcg
VHlwZUFyZ3VtZW50ID0gVmFyaWFudDxDb25zdGFudEV4cHJlc3Npb24sIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlUmVmZXJlbmNlPj47Cit1c2luZyBUeXBlQXJndW1lbnRzID0gVmVjdG9yPFR5cGVBcmd1
bWVudD47CiAKIFR5cGVBcmd1bWVudCBjbG9uZShjb25zdCBUeXBlQXJndW1lbnQmKTsKIFR5cGVB
cmd1bWVudHMgY2xvbmUoY29uc3QgVHlwZUFyZ3VtZW50cyYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVEZWZpbml0
aW9uLmgKaW5kZXggZjczNjI5ZTI5YjEuLmVkMWM0NzVhODI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVEZWZp
bml0aW9uLmgKQEAgLTI5LDcgKzI5LDggQEAKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNp
bmNsdWRlICJXSExTTE5vZGUuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJX
SExTTE5hbWVkVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTEg
KzM5LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBU
eXBlRGVmaW5pdGlvbiA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFR5cGVEZWZpbml0aW9uIDogcHVi
bGljIE5hbWVkVHlwZSB7CiBwdWJsaWM6Ci0gICAgVHlwZURlZmluaXRpb24oTGV4ZXI6OlRva2Vu
JiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5
cGUpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFt
ZShXVEZNb3ZlKG5hbWUpKQorICAgIFR5cGVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdp
biwgU3RyaW5nJiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlw
ZSkKKyAgICAgICAgOiBOYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKG5hbWUpKQog
ICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQogICAgIHsKICAgICB9CkBAIC01MiwxOCAr
NTIsMjQgQEAgcHVibGljOgogICAgIFR5cGVEZWZpbml0aW9uKGNvbnN0IFR5cGVEZWZpbml0aW9u
JikgPSBkZWxldGU7CiAgICAgVHlwZURlZmluaXRpb24oVHlwZURlZmluaXRpb24mJikgPSBkZWZh
dWx0OwogCi0gICAgQVNUOjpUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIGJv
b2wgaXNUeXBlRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgQVNU
OjpVbm5hbWVkVHlwZSogdHlwZSgpIHsgcmV0dXJuIG1fdHlwZS5nZXQoKTsgfQorCisgICAgY29u
c3QgVHlwZSYgdW5pZnlOb2RlKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgQVNTRVJU
KG1fdHlwZSk7CisgICAgICAgIHJldHVybiBtX3R5cGUtPnVuaWZ5Tm9kZSgpOworICAgIH0KKwor
ICAgIFR5cGUmIHVuaWZ5Tm9kZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV90
eXBlKTsKKyAgICAgICAgcmV0dXJuIG1fdHlwZS0+dW5pZnlOb2RlKCk7CiAgICAgfQogCiBwcml2
YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBTdHJpbmcgbV9uYW1lOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpVbm5hbWVkVHlwZT4gbV90eXBlOwogfTsKIAogfQpAQCAtNzIsNCArNzgsNiBAQCBwcml2
YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShUeXBl
RGVmaW5pdGlvbiwgaXNUeXBlRGVmaW5pdGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJl
ZmVyZW5jZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU2ODli
NGE3N2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K25hbWVzcGFjZSBBU1QgeworCitzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gVHlwZVJl
ZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIE5hbWVkVHlwZSYgcmVzb2x2ZWRU
eXBlKQoreworICAgIFR5cGVBcmd1bWVudHMgdHlwZUFyZ3VtZW50czsKKyAgICBpZiAoaXM8TmF0
aXZlVHlwZURlY2xhcmF0aW9uPihyZXNvbHZlZFR5cGUpKQorICAgICAgICB0eXBlQXJndW1lbnRz
ID0gQVNUOjpjbG9uZShkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHJlc29sdmVkVHlw
ZSkudHlwZUFyZ3VtZW50cygpKTsKKyAgICBhdXRvIHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8
VHlwZVJlZmVyZW5jZT4oV1RGTW92ZShvcmlnaW4pLCBTdHJpbmcocmVzb2x2ZWRUeXBlLm5hbWUo
KSksIFdURk1vdmUodHlwZUFyZ3VtZW50cykpOworICAgIHJlc3VsdC0+c2V0UmVzb2x2ZWRUeXBl
KHJlc29sdmVkVHlwZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfQorCit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xUeXBlUmVmZXJlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKaW5kZXggNDk0NDFkOGI1YzcuLjAyODQyZjZm
OWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xUeXBlUmVmZXJlbmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCkBAIC0yOCw4ICsyOCw4IEBACiAjaWYgRU5B
QkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFR5
cGUuaCIKICNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgIldITFNMVW5u
YW1lZFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMzgsMTAgKzM4LDEyIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBUeXBlUmVmZXJlbmNlIDogcHVibGljIFR5cGUgeworY2xhc3Mg
TmFtZWRUeXBlOworCitjbGFzcyBUeXBlUmVmZXJlbmNlIDogcHVibGljIFVubmFtZWRUeXBlIHsK
IHB1YmxpYzoKICAgICBUeXBlUmVmZXJlbmNlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5n
JiYgbmFtZSwgVHlwZUFyZ3VtZW50cyYmIHR5cGVBcmd1bWVudHMpCi0gICAgICAgIDogbV9vcmln
aW4oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICA6IFVubmFtZWRUeXBlKFdURk1vdmUob3JpZ2lu
KSkKICAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGVBcmd1
bWVudHMoV1RGTW92ZSh0eXBlQXJndW1lbnRzKSkKICAgICB7CkBAIC01MiwyNCArNTQsNDUgQEAg
cHVibGljOgogICAgIFR5cGVSZWZlcmVuY2UoY29uc3QgVHlwZVJlZmVyZW5jZSYpID0gZGVsZXRl
OwogICAgIFR5cGVSZWZlcmVuY2UoVHlwZVJlZmVyZW5jZSYmKSA9IGRlZmF1bHQ7CiAKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPFR5cGVSZWZlcmVuY2U+IHdyYXAoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBOYW1lZFR5cGUmIHJlc29sdmVkVHlwZSk7CisKICAgICBib29sIGlzVHlwZVJlZmVy
ZW5jZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIFN0cmluZyYgbmFt
ZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIFR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMo
KSB7IHJldHVybiBtX3R5cGVBcmd1bWVudHM7IH0KKyAgICBOYW1lZFR5cGUqIHJlc29sdmVkVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x2ZWRUeXBlOyB9CisKKyAgICBjb25zdCBUeXBlJiB1
bmlmeU5vZGUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fcmVzb2x2
ZWRUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1fcmVzb2x2ZWRUeXBlLT51bmlmeU5vZGUoKTsKKyAg
ICB9CisKKyAgICBUeXBlJiB1bmlmeU5vZGUoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fcmVzb2x2ZWRUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1fcmVzb2x2ZWRUeXBlLT51bmlm
eU5vZGUoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRSZXNvbHZlZFR5cGUoTmFtZWRUeXBl
JiByZXNvbHZlZFR5cGUpCisgICAgeworICAgICAgICBtX3Jlc29sdmVkVHlwZSA9ICZyZXNvbHZl
ZFR5cGU7CisgICAgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVSZWZlcmVuY2U+IGNsb25l
VHlwZVJlZmVyZW5jZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxUeXBlUmVmZXJlbmNlPihMZXhlcjo6VG9rZW4obV9vcmlnaW4pLCBTdHJpbmcobV9uYW1l
KSwgQVNUOjpjbG9uZShtX3R5cGVBcmd1bWVudHMpKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8VHlwZVJlZmVyZW5jZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgU3RyaW5nKG1f
bmFtZSksIEFTVDo6Y2xvbmUobV90eXBlQXJndW1lbnRzKSk7CiAgICAgfQogCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJl
dHVybiBjbG9uZVR5cGVSZWZlcmVuY2UoKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6
OlRva2VuIG1fb3JpZ2luOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgVHlwZUFyZ3VtZW50cyBt
X3R5cGVBcmd1bWVudHM7CisgICAgTmFtZWRUeXBlKiBtX3Jlc29sdmVkVHlwZSB7IG51bGxwdHIg
fTsKIH07CiAKIH0KQEAgLTc4LDYgKzEwMSw2IEBAIHByaXZhdGU6CiAKIH0KIAotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19XSExTTF9UWVBFKFR5cGVSZWZlcmVuY2UsIGlzVHlwZVJlZmVyZW5jZSgp
KQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoVHlwZVJlZmVyZW5j
ZSwgaXNUeXBlUmVmZXJlbmNlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5ZTMyOWYxMjM1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5u
YW1lZFR5cGUuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUg
IldITFNMTm9kZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7
CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBVbm5hbWVkVHlwZSA6IHB1YmxpYyBUeXBlIHsK
K3B1YmxpYzoKKyAgICBVbm5hbWVkVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4pCisgICAgICAg
IDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IH5Vbm5hbWVkVHlwZSgpID0gZGVmYXVsdDsKKworICAgIFVubmFtZWRUeXBlKGNvbnN0IFVubmFt
ZWRUeXBlJikgPSBkZWxldGU7CisgICAgVW5uYW1lZFR5cGUoVW5uYW1lZFR5cGUmJikgPSBkZWZh
dWx0OworCisgICAgYm9vbCBpc1VubmFtZWRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1R5cGVSZWZlcmVuY2UoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1BvaW50ZXJUeXBlKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5VHlwZSgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVmZXJlbmNlVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IFR5cGUmIHVuaWZ5Tm9k
ZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgdmlydHVhbCBUeXBlJiB1bmlmeU5vZGUo
KSB7IHJldHVybiAqdGhpczsgfQorCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1l
ZFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOworCisgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmln
aW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorCitwcml2YXRlOgorICAgIExleGVyOjpU
b2tlbiBtX29yaWdpbjsKK307CisKK30KKworfQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUp
IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9W
YWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldI
TFNMOjpBU1Q6OlVubmFtZWRUeXBlJiB0eXBlKSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBc
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
V0hMU0xfVFlQRShVbm5hbWVkVHlwZSwgaXNVbm5hbWVkVHlwZSgpKQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2ln
bmVkSW50ZWdlckxpdGVyYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIxY2E5NjJmNzc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbC5jcHAKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVn
ZXJMaXRlcmFsLmgiCisKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgor
I2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitpbnQ2NF90IFVuc2lnbmVk
SW50ZWdlckxpdGVyYWw6OnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCkgY29uc3QKK3sKKyAgICBBU1NF
UlQobV90eXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93
bmNhc3Q8VHlwZVJlZmVyZW5jZT4oKm1fdHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgQVNTRVJU
KHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiA9IGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2Uu
cmVzb2x2ZWRUeXBlKCkpOworICAgIHJldHVybiBuYXRpdmVUeXBlRGVjbGFyYXRpb24uZm9ybWF0
VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKCkobV92YWx1ZSk7Cit9CisKK30KKworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oCmluZGV4IDU4
ZDZlMjMwNzVlLi4xYTZjMWUzZTg4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9u
LmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMVW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSwyMSArNDAs
MzcgQEAgbmFtZXNwYWNlIEFTVCB7CiBjbGFzcyBVbnNpZ25lZEludGVnZXJMaXRlcmFsIDogcHVi
bGljIEV4cHJlc3Npb24gewogcHVibGljOgogICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwoTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCB1bnNpZ25lZCB2YWx1ZSkKLSAgICAgICAgOiBFeHByZXNzaW9u
KFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmln
aW4pKQorICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKG9yaWdpbiksIHZhbHVlKQogICAgICAgICAs
IG1fdmFsdWUodmFsdWUpCiAgICAgewogICAgIH0KIAogICAgIHZpcnR1YWwgflVuc2lnbmVkSW50
ZWdlckxpdGVyYWwoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBVbnNpZ25lZEludGVnZXJM
aXRlcmFsKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKSA9IGRlZmF1bHQ7CisgICAgVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbChjb25zdCBVbnNpZ25lZEludGVnZXJMaXRlcmFsJikgPSBkZWxl
dGU7CiAgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbChVbnNpZ25lZEludGVnZXJMaXRlcmFsJiYp
ID0gZGVmYXVsdDsKIAorICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIG9wZXJhdG9yPShjb25z
dCBVbnNpZ25lZEludGVnZXJMaXRlcmFsJikgPSBkZWxldGU7CisgICAgVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbCYgb3BlcmF0b3I9KFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmJikgPSBkZWZhdWx0Owor
CisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7
IH0KICAgICB1bnNpZ25lZCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAogICAg
IGJvb2wgaXNVbnNpZ25lZEludGVnZXJMaXRlcmFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQogCisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCBjbG9uZSgpIGNvbnN0CisgICAg
eworICAgICAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsIHJlc3VsdChMZXhlcjo6VG9rZW4ob3Jp
Z2luKCkpLCBtX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5tX3R5cGUucmVzb2x2ZWRUeXBl
KCkpCisgICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVzdWx0Lm1fdHlwZS5yZXNv
bHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgaW50NjRfdCB2YWx1ZUZvclNlbGVjdGVkVHlwZSgpIGNvbnN0OworCiBwcml2YXRlOgorICAg
IFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlIG1fdHlwZTsKICAgICB1bnNpZ25lZCBtX3ZhbHVl
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45MzM2MzI0ZTg2Zgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcApAQCAtMCwwICsxLDc3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgiCisKKyNpbmNsdWRlICJX
SExTTEluZmVyVHlwZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hM
U0wgeworCituYW1lc3BhY2UgQVNUIHsKKworVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OlVu
c2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgdW5zaWduZWQg
dmFsdWUpCisgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICwgbV9wcmVmZXJyZWRUeXBlKHN0ZDo6
bWFrZV91bmlxdWU8VHlwZVJlZmVyZW5jZT4oV1RGTW92ZShvcmlnaW4pLCBTdHJpbmcoInVpbnQi
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgVHlwZUFyZ3VtZW50cygpKSkKK3sKK30K
KworVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6On5VbnNpZ25lZEludGVnZXJMaXRlcmFsVHlw
ZSgpID0gZGVmYXVsdDsKKworYm9vbCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZTo6Y2FuUmVz
b2x2ZShjb25zdCBUeXBlJiB0eXBlKSBjb25zdAoreworICAgIGlmICghaXM8TmFtZWRUeXBlPih0
eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25j
YXN0PE5hbWVkVHlwZT4odHlwZSk7CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+
KG5hbWVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYXRpdmVUeXBl
RGVjbGFyYXRpb24gPSBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7
CisgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNJbnQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzU2lnbmVkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5jYW5SZXBy
ZXNlbnRVbnNpZ25lZEludGVnZXIoKShtX3ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlw
ZTo6Y29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSBjb25zdAor
eworICAgIGlmIChtYXRjaGVzKHVubmFtZWRUeXBlLCAqbV9wcmVmZXJyZWRUeXBlKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ5NTU0NmNhZGE5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZh
YmxlVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFz
cyBUeXBlUmVmZXJlbmNlOworCitjbGFzcyBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSA6IHB1
YmxpYyBSZXNvbHZhYmxlVHlwZSB7CitwdWJsaWM6CisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCB1bnNpZ25lZCB2YWx1ZSk7CisKKyAgICB2aXJ0
dWFsIH5VbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSgpOworCisgICAgVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbFR5cGUoY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsK
KyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZShVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlw
ZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYgb3BlcmF0
b3I9KGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJikgPSBkZWxldGU7CisgICAgVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmIG9wZXJhdG9yPShVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBUeXBlUmVmZXJlbmNl
JiBwcmVmZXJyZWRUeXBlKCkgeyByZXR1cm4gKm1fcHJlZmVycmVkVHlwZTsgfQorCisgICAgYm9v
bCBjYW5SZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICB1bnNpZ25lZCBj
b252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIHVuc2lnbmVkIG1fdmFsdWU7CisgICAgLy8gVGhpcyBpcyBhIHVuaXF1ZV9wdHIg
dG8gcmVzb2x2ZSBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbgorICAgIC8vIENvbnN0YW50
RXhwcmVzc2lvbiAtPiBMaXRlcmFsVHlwZSAtPiBUeXBlUmVmZXJlbmNlIC0+IFR5cGVBcmd1bWVu
dHMgLT4gQ29uc3RhbnRFeHByZXNzaW9uCisgICAgc3RkOjp1bmlxdWVfcHRyPFR5cGVSZWZlcmVu
Y2U+IG1fcHJlZmVycmVkVHlwZTsKK307CisKK30KKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfV0hMU0xfUkVTT0xWQUJMRV9UWVBFKFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBl
LCBpc1Vuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFsdWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhbHVlLmgKaW5kZXgg
NmUwZWE5MWZjMWQuLmFmMjljODExODg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhbHVlLmgKQEAgLTQ2LDYgKzQ2LDkgQEAgcHVi
bGljOgogICAgIGV4cGxpY2l0IFZhbHVlKGNvbnN0IFZhbHVlJikgPSBkZWZhdWx0OwogICAgIFZh
bHVlKFZhbHVlJiYpID0gZGVmYXVsdDsKIAorICAgIFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgVmFs
dWUmKSA9IGRlZmF1bHQ7CisgICAgVmFsdWUmIG9wZXJhdG9yPShWYWx1ZSYmKSA9IGRlZmF1bHQ7
CisKIHByaXZhdGU6CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKaW5k
ZXggZmYwMzY4MTkzYmQuLjdmNGEzNWI2MGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNs
YXJhdGlvbi5oCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBWYXJp
YWJsZURlY2xhcmF0aW9uIDogcHVibGljIFZhbHVlIHsKIHB1YmxpYzoKLSAgICBWYXJpYWJsZURl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMs
IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgT3B0aW9u
YWw8U2VtYW50aWM+JiYgc2VtYW50aWMsIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIGlu
aXRpYWxpemVyKQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
LCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5
cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgT3B0aW9uYWw8U2VtYW50aWM+JiYgc2VtYW50aWMs
IHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIGluaXRpYWxpemVyKQogICAgICAgICA6IG1f
b3JpZ2luKFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX3F1YWxpZmllcnMoV1RGTW92ZShx
dWFsaWZpZXJzKSkKICAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkKQEAgLTU5LDIxICs1
OSwyNCBAQCBwdWJsaWM6CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbihjb25zdCBWYXJpYWJsZURl
Y2xhcmF0aW9uJikgPSBkZWxldGU7CiAgICAgVmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURl
Y2xhcmF0aW9uJiYpID0gZGVmYXVsdDsKIAotICAgIExleGVyOjpUb2tlbiBvcmlnaW4oKSBjb25z
dCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIGNvbnN0IExleGVyOjpUb2tlbiYgb3JpZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBt
X25hbWU7IH0KIAotICAgIFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9CisgICAgVW5u
YW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiAqbV90eXBlOyB9CiAgICAgT3B0aW9uYWw8
U2VtYW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KICAgICBFeHByZXNz
aW9uKiBpbml0aWFsaXplcigpIHsgcmV0dXJuIG1faW5pdGlhbGl6ZXIuZ2V0KCk7IH0KIAogcHJp
dmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgUXVhbGlmaWVycyBtX3F1YWxp
ZmllcnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gbV90eXBlOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiBtX3R5cGU7CiAgICAgU3RyaW5nIG1fbmFtZTsK
ICAgICBPcHRpb25hbDxTZW1hbnRpYz4gbV9zZW1hbnRpYzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
RXhwcmVzc2lvbj4gbV9pbml0aWFsaXplcjsKIH07CiAKK3VzaW5nIFZhcmlhYmxlRGVjbGFyYXRp
b25zID0gVmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+OworCiB9CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVm
ZXJlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xW
YXJpYWJsZVJlZmVyZW5jZS5oCmluZGV4IDJhZTgyOGQ1Mjk1Li5lMzllY2Y1YzU5ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFi
bGVSZWZlcmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hM
U0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNM
VmFyaWFibGVEZWNsYXJhdGlvbi5oIgpAQCAtNTUsMTkgKzU1LDIxIEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgVmFyaWFibGVSZWZlcmVuY2Ugd3JhcChWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJs
ZURlY2xhcmF0aW9uKQogICAgIHsKICAgICAgICAgVmFyaWFibGVSZWZlcmVuY2UgcmVzdWx0KExl
eGVyOjpUb2tlbih2YXJpYWJsZURlY2xhcmF0aW9uLm9yaWdpbigpKSk7Ci0gICAgICAgIHJlc3Vs
dC5tX3ZhcmlhYmxlID0geyAmdmFyaWFibGVEZWNsYXJhdGlvbiB9OworICAgICAgICByZXN1bHQu
bV92YXJpYWJsZSA9ICZ2YXJpYWJsZURlY2xhcmF0aW9uOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAotICAgIHN0YXRpYyBWYXJpYWJsZVJlZmVyZW5jZSB3cmFwKEFub255bW91c1Zh
cmlhYmxlRGVjbGFyYXRpb24mIGFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24pCisgICAgYm9v
bCBpc1ZhcmlhYmxlUmVmZXJlbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQor
CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICBWYXJpYWJsZURl
Y2xhcmF0aW9uKiB2YXJpYWJsZSgpIHsgcmV0dXJuIG1fdmFyaWFibGU7IH0KKworICAgIHZvaWQg
c2V0VmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKICAg
ICB7Ci0gICAgICAgIFZhcmlhYmxlUmVmZXJlbmNlIHJlc3VsdChMZXhlcjo6VG9rZW4oYW5vbnlt
b3VzVmFyaWFibGVEZWNsYXJhdGlvbi5vcmlnaW4oKSkpOwotICAgICAgICByZXN1bHQubV92YXJp
YWJsZSA9IHsgJmFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24gfTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgbV92YXJpYWJsZSA9ICZ2YXJpYWJsZURlY2xhcmF0aW9uOwogICAg
IH0KIAotICAgIGJvb2wgaXNWYXJpYWJsZVJlZmVyZW5jZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLQogcHJpdmF0ZToKICAgICBWYXJpYWJsZVJlZmVyZW5jZShMZXhlcjo6VG9r
ZW4mJiBvcmlnaW4pCiAgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCkBAIC03
NSw3ICs3Nyw3IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICBP
cHRpb25hbDxWYXJpYW50PFZhcmlhYmxlRGVjbGFyYXRpb24qLCBBbm9ueW1vdXNWYXJpYWJsZURl
Y2xhcmF0aW9uKj4+IG1fdmFyaWFibGU7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiogbV92YXJp
YWJsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZkNWVmMzc1Njc1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVj
a0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNM
Q2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaCIKKworI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVu
Y2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTElu
ZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitib29sIGNoZWNrRHVwbGljYXRlRnVu
Y3Rpb25zKGNvbnN0IFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPj4gZnVuY3Rpb25zOworICAgIGZv
ciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25z
KCkpCisgICAgICAgIGZ1bmN0aW9ucy5hcHBlbmQoKmZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAg
Zm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9ucygpKQorICAgICAgICBmdW5jdGlvbnMuYXBwZW5kKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKTsKKworICAgIHN0ZDo6c29ydChmdW5jdGlvbnMuYmVnaW4oKSwgZnVu
Y3Rpb25zLmVuZCgpLCBbXShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGEsIGNvbnN0
IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgYikgLT4gYm9vbCB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzdGQ6Om1pbihhLm5hbWUoKS5sZW5ndGgoKSwgYi5uYW1lKCkubGVu
Z3RoKCkpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChhLm5hbWUoKVtpXSA8IGIubmFtZSgpW2ld
KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgaWYgKGEubmFtZSgp
W2ldID4gYi5uYW1lKClbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBhLm5hbWUoKS5sZW5ndGgoKSA8IGIubmFtZSgpLmxlbmd0aCgp
OworICAgIH0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb25zLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGZ1bmN0aW9ucy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgIT0g
ZnVuY3Rpb25zW2pdLmdldCgpLm5hbWUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+KGZ1bmN0aW9uc1tp
XS5nZXQoKSkgJiYgaXM8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihmdW5jdGlvbnNb
al0uZ2V0KCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGZ1
bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IGZ1bmN0aW9uc1tqXS5nZXQo
KS5wYXJhbWV0ZXJzKCkuc2l6ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5pc0Nhc3QoKSkgeworICAgICAgICAgICAgICAg
IGJvb2wgc2FtZSA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9u
c1tpXS5nZXQoKS50eXBlKCksIGZ1bmN0aW9uc1tqXS5nZXQoKS50eXBlKCkpKQorICAgICAgICAg
ICAgICAgICAgICBzYW1lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgZnVuY3Rpb25zW2ldLmdldCgpLnBh
cmFtZXRlcnMoKS5zaXplKCk7ICsraykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFt
YXRjaGVzKGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgpLCBmdW5jdGlv
bnNbal0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzYW1lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNhbWUpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgYm9vbCBzYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsg
ayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2spIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJz
KClba10udHlwZSgpLCBmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChzYW1lKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChm
dW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRvciZbXSIgJiYgZnVuY3Rpb25zW2ld
LmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMgorICAgICAgICAgICAgJiYgaXM8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpKSkgeworICAgICAgICAgICAgYXV0byYgdHlwZSA9IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJh
bWV0ZXJzKClbMV0udHlwZSgpOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5j
ZT4odHlwZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogcmVzb2x2ZWRUeXBlID0gZG93
bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKS5yZXNvbHZlZFR5cGUoKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCpyZXNvbHZl
ZFR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnJlc29sdmVkVHlw
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5h
bWUoKSA9PSAidWludCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJh
dG9yLmxlbmd0aCIgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
MQorICAgICAgICAgICAgJiYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihmdW5jdGlvbnNb
aV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkKKyAgICAgICAgICAgIHx8IGlzPEFTVDo6
QXJyYXlUeXBlPihmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBlbHNlIGlmIChmdW5jdGlvbnNbaV0u
Z2V0KCkubmFtZSgpID09ICJvcGVyYXRvcj09IgorICAgICAgICAgICAgJiYgZnVuY3Rpb25zW2ld
LmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMgorICAgICAgICAgICAgJiYgaXM8QVNUOjpS
ZWZlcmVuY2VUeXBlPihmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkK
KyAgICAgICAgICAgICYmIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdldCgp
LnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpCisgICAgICAgICAgICAmJiBtYXRjaGVzKGZ1bmN0aW9u
c1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCBmdW5jdGlvbnNbaV0uZ2V0KCkucGFy
YW1ldGVycygpWzFdLnR5cGUoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rp
b25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVw
bGljYXRlRnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjdlY2VlNzgyYzVmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oCkBAIC0wLDAgKzEsNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNp
bmNsdWRlICJXSExTTFByb2dyYW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCitib29sIGNoZWNrRHVwbGljYXRlRnVuY3Rpb25zKGNvbnN0IFByb2dyYW0m
KTsKKworfQorCit9CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uN2QwZDViNTExODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC0wLDAgKzEsMTM5
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xDaGVja2VyLmgiCisKKyNpbmNsdWRlICJXSExTTEFycmF5UmVm
ZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hM
U0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24u
aCIKKyNpbmNsdWRlICJXSExTTENvbW1hRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRGVy
ZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgorI2lu
Y2x1ZGUgIldITFNMRm9yTG9vcC5oIgorI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2ludEl0
ZW1zLmgiCisjaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMSW5m
ZXJUeXBlcy5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xNYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Np
b24uaCIKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9n
cmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2ZU92ZXJs
b2FkSW1wbC5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2aW5nVHlwZS5oIgorI2luY2x1ZGUgIldI
TFNMUmV0dXJuLmgiCisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hTdGF0ZW1lbnQuaCIKKyNpbmNsdWRl
ICJXSExTTFRlcm5hcnlFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisj
aW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQT0RDaGVja2VyIDogcHVi
bGljIFZpc2l0b3IgeworcHVibGljOgorICAgIFBPRENoZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAg
ICB2aXJ0dWFsIH5QT0RDaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAg
ICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVU
eXBlRGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5pc051bWJlcigpCisgICAgICAgICAgICAmJiAhbmF0aXZlVHlwZURlY2xhcmF0
aW9uLmlzVmVjdG9yKCkKKyAgICAgICAgICAgICYmICFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNN
YXRyaXgoKSkKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pIG92ZXJyaWRl
CisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAg
ICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9u
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQodHlwZURlZmluaXRpb24p
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KGFycmF5VHlwZSk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIHNldEVycm9yKCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJl
bmNlVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBzZXRFcnJvcigpOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkp
OworICAgIH0KK307CisKK3N0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24+IHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIoQVNUOjpDYWxsRXhwcmVzc2lv
biYgY2FsbEV4cHJlc3Npb24sIEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBmaXJzdEFyZ3VtZW50
LCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQoreworICAgIGJvb2wgaXNSZXN0cmljdGVk
ID0gZmFsc2U7CisgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKKyAgICBhdXRvIHJldHVyblR5
cGUgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihjYWxs
RXhwcmVzc2lvbi5vcmlnaW4oKSksIGZpcnN0QXJndW1lbnQuYWRkcmVzc1NwYWNlKCksIGZpcnN0
QXJndW1lbnQuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCBmaXJzdEFyZ3VtZW50LmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IG51bGxwdHIpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJz
KCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24u
b3JpZ2luKCkpLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0
LCBudWxscHRyKSk7CisgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdp
bigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJu
VHlwZSksIFN0cmluZygib3BlcmF0b3ImW10iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0
cmljdGVkKTsKK30KKworc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbj4gcmVzb2x2ZVdpdGhPcGVyYXRvckxlbmd0aChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxs
RXhwcmVzc2lvbiwgQVNUOjpVbm5hbWVkVHlwZSYgZmlyc3RBcmd1bWVudCwgY29uc3QgSW50cmlu
c2ljcyYgaW50cmluc2ljcykKK3sKKyAgICBib29sIGlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAg
IGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CisgICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBl
UmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGlu
dHJpbnNpY3MudWludFR5cGUoKSk7CisgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJh
bWV0ZXJzOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihM
ZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwg
Zmlyc3RBcmd1bWVudC5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKSk7
CisgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpB
dHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmlu
Zygib3BlcmF0b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1v
dmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7
Cit9CisKK3N0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJl
c29sdmVXaXRoUmVmZXJlbmNlQ29tcGFyYXRvcihBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhw
cmVzc2lvbiwgUmVzb2x2aW5nVHlwZSYgZmlyc3RBcmd1bWVudCwgUmVzb2x2aW5nVHlwZSYgc2Vj
b25kQXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7CisgICAgYm9vbCBp
c1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGF1
dG8gcmV0dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2Fs
bEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOworICAgIGF1dG8g
YXJndW1lbnRUeXBlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsK
KyAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYpIC0+IHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoW10oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVk
VHlwZSkgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgICAg
IHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4g
eworICAgICAgICAgICAgLy8gV2UgZW5jb3VudGVyZWQgIm51bGwgPT0gbnVsbCIuCisgICAgICAg
ICAgICAvLyBUaGUgdHlwZSBpc24ndCBvYnNlcnZhYmxlLCBzbyB3ZSBjYW4gcGljayB3aGF0ZXZl
ciB3ZSB3YW50LgorICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2FuIHByb2JhYmx5IGJlIGdl
bmVyYWxpemVkLCB1c2luZyB0aGUgInByZWZlcnJlZCB0eXBlIiBpbmZyYXN0cnVjdHVyZSB1c2Vk
IGJ5IGdlbmVyaWMgbGl0ZXJhbHMKKyAgICAgICAgICAgIHJldHVybiBBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2lj
cy5pbnRUeXBlKCkpOworICAgICAgICB9KSwgc2Vjb25kQXJndW1lbnQpOworICAgIH0pLCBmaXJz
dEFyZ3VtZW50KTsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Cisg
ICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tl
bihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBhcmd1bWVudFR5
cGUtPmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpKTsKKyAgICBwYXJh
bWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIFdURk1vdmUoYXJndW1lbnRU
eXBlKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cikpOworICAgIHJldHVybiBBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVy
OjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwg
V1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpu
dWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKK30KKworc3RhdGljIE9wdGlvbmFs
PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihB
U1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbiwgY29uc3QgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiB0eXBlcywgY29uc3QgSW50cmluc2ljcyYg
aW50cmluc2ljcykKK3sKKyAgICBpZiAoY2FsbEV4cHJlc3Npb24ubmFtZSgpID09ICJvcGVyYXRv
ciZbXSIgJiYgdHlwZXMuc2l6ZSgpID09IDIpIHsKKyAgICAgICAgYXV0byogZmlyc3RBcmd1bWVu
dEFycmF5UmVmID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlKiB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KCp1bm5h
bWVkVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4oKnVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICB9LCBbXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JikgLT4gQVNUOjpBcnJh
eVJlZmVyZW5jZVR5cGUqIHsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9
KSwgdHlwZXNbMF0uZ2V0KCkpOworICAgICAgICBib29sIHNlY29uZEFyZ3VtZW50SXNVaW50ID0g
V1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5h
bWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBtYXRj
aGVzKCp1bm5hbWVkVHlwZSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICAgICAgfSwgWyZd
KFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAt
PiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVz
b2x2YWJsZVR5cGUoKS5jYW5SZXNvbHZlKGludHJpbnNpY3MudWludFR5cGUoKSk7CisgICAgICAg
IH0pLCB0eXBlc1sxXS5nZXQoKSk7CisgICAgICAgIGlmIChmaXJzdEFyZ3VtZW50QXJyYXlSZWYg
JiYgc2Vjb25kQXJndW1lbnRJc1VpbnQpCisgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhP
cGVyYXRvckFuZGVySW5kZXhlcihjYWxsRXhwcmVzc2lvbiwgKmZpcnN0QXJndW1lbnRBcnJheVJl
ZiwgaW50cmluc2ljcyk7CisgICAgfSBlbHNlIGlmIChjYWxsRXhwcmVzc2lvbi5uYW1lKCkgPT0g
Im9wZXJhdG9yLmxlbmd0aCIgJiYgdHlwZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgYXV0byog
Zmlyc3RBcmd1bWVudFJlZmVyZW5jZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlVu
bmFtZWRUeXBlKiB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+
KCp1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVR5cGU+KCp1bm5hbWVkVHlwZSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLmdldCgpOworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIH0sIFtdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAt
PiBBU1Q6OlVubmFtZWRUeXBlKiB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgfSksIHR5cGVzWzBdLmdldCgpKTsKKyAgICAgICAgaWYgKGZpcnN0QXJndW1lbnRSZWZlcmVu
Y2UpCisgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhPcGVyYXRvckxlbmd0aChjYWxsRXhw
cmVzc2lvbiwgKmZpcnN0QXJndW1lbnRSZWZlcmVuY2UsIGludHJpbnNpY3MpOworICAgIH0gZWxz
ZSBpZiAoY2FsbEV4cHJlc3Npb24ubmFtZSgpID09ICJvcGVyYXRvcj09IiAmJiB0eXBlcy5zaXpl
KCkgPT0gMikgeworICAgICAgICBhdXRvIGlzQWNjZXB0YWJsZSA9IFtdKFJlc29sdmluZ1R5cGUm
IHJlc29sdmluZ1R5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHVu
bmFtZWRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXM8QVNUOjpSZWZl
cmVuY2VUeXBlPigqdW5uYW1lZFR5cGUpOworICAgICAgICAgICAgfSwgW10oUmVmPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgIHJldHVybiBpczxBU1Q6Ok51bGxMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkpOworICAgICAgICAgICAgfSksIHJlc29sdmlu
Z1R5cGUpOworICAgICAgICB9OworICAgICAgICBpZiAoaXNBY2NlcHRhYmxlKHR5cGVzWzBdLmdl
dCgpKSAmJiBpc0FjY2VwdGFibGUodHlwZXNbMV0uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJu
IHJlc29sdmVXaXRoUmVmZXJlbmNlQ29tcGFyYXRvcihjYWxsRXhwcmVzc2lvbiwgdHlwZXNbMF0u
Z2V0KCksIHR5cGVzWzFdLmdldCgpLCBpbnRyaW5zaWNzKTsKKyAgICB9CisgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKK30KKworY2xhc3MgQ2hlY2tlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1Ymxp
YzoKKyAgICBDaGVja2VyKGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MsIFByb2dyYW0mIHBy
b2dyYW0pCisgICAgICAgIDogbV9pbnRyaW5zaWNzKGludHJpbnNpY3MpCisgICAgICAgICwgbV9w
cm9ncmFtKHByb2dyYW0pCisgICAgeworICAgIH0KKworICAgIH5DaGVja2VyKCkgPSBkZWZhdWx0
OworCisgICAgdm9pZCB2aXNpdChQcm9ncmFtJiBwcm9ncmFtKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRpb25z
KCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnR5cGVEZWZpbml0aW9uKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVE
ZWZpbml0aW9ucygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpzdHJ1Y3R1cmVE
ZWZpbml0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBw
cm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBuYXRp
dmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkKKyAg
ICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKwor
ICAgICAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25E
ZWZpbml0aW9ucygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmdW5jdGlvbkRl
ZmluaXRpb24pOworICAgICAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
OiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCisgICAgICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBib29sIGNoZWNrU2hhZGVyVHlwZShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5p
dGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgc3dpdGNoICgqZnVuY3Rp
b25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbjo6RW50cnlQb2ludFR5cGU6OlZlcnRleDoKKyAgICAgICAgICAgIHJldHVy
biAhbV92ZXJ0ZXhFbnRyeVBvaW50cy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkuaXNO
ZXdFbnRyeTsKKyAgICAgICAgY2FzZSBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbjo6RW50cnlQb2lu
dFR5cGU6OkZyYWdtZW50OgorICAgICAgICAgICAgcmV0dXJuICFtX2ZyYWdtZW50RW50cnlQb2lu
dHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpLmlzTmV3RW50cnk7CisgICAgICAgIGNh
c2UgQVNUOjpGdW5jdGlvbkRlZmluaXRpb246OkVudHJ5UG9pbnRUeXBlOjpDb21wdXRlOgorICAg
ICAgICAgICAgcmV0dXJuICFtX2NvbXB1dGVFbnRyeVBvaW50cy5hZGQoZnVuY3Rpb25EZWZpbml0
aW9uLm5hbWUoKSkuaXNOZXdFbnRyeTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgY2hl
Y2tTZW1hbnRpY3MoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikK
KyAgICB7CisgICAgICAgIGF1dG8gZW50cnlQb2ludEl0ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0
ZW1zKG1faW50cmluc2ljcywgZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKCFlbnRy
eVBvaW50SXRlbXMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gaW5w
dXRJdGVtcyA9IFdURk1vdmUoZW50cnlQb2ludEl0ZW1zLT5pbnB1dHMpOworICAgICAgICBhdXRv
IG91dHB1dEl0ZW1zID0gV1RGTW92ZShlbnRyeVBvaW50SXRlbXMtPm91dHB1dHMpOworCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8gY2hlY2tEdXBsaWNhdGVTZW1hbnRpY3MgPSBbJl0oY29u
c3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgZmFzdGVyIHRoYW4gTyhuXjIpLgorICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgaXRlbXMuc2l6ZSgpOyArK2op
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtc1tpXS5zZW1hbnRpYyA9PSBpdGVt
c1tqXS5zZW1hbnRpYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKCFjaGVja0R1
cGxpY2F0ZVNlbWFudGljcyhpbnB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBpZiAoIWNoZWNrRHVwbGljYXRlU2VtYW50aWNzKG91dHB1dEl0ZW1z
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB7
CisgICAgICAgICAgICBhdXRvIGNoZWNrU2VtYW50aWNUeXBlcyA9IFsmXShjb25zdCBWZWN0b3I8
RW50cnlQb2ludEl0ZW0+JiBpdGVtcykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgZm9yIChh
dXRvJiBpdGVtIDogaXRlbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBhY2NlcHRhYmxl
ID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBBU1Q6OkJhc2VTZW1hbnRp
YyYgc2VtYW50aWMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNl
bWFudGljLmlzQWNjZXB0YWJsZVR5cGUoaXRlbS51bm5hbWVkVHlwZSwgbV9pbnRyaW5zaWNzKTsK
KyAgICAgICAgICAgICAgICAgICAgfSksIGl0ZW0uc2VtYW50aWMpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWFjY2VwdGFibGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY1R5cGVzKGlucHV0SXRl
bXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghY2hl
Y2tTZW1hbnRpY1R5cGVzKG91dHB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGNoZWNrU2VtYW50
aWNGb3JTaGFkZXJUeXBlID0gWyZdKGNvbnN0IFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGl0ZW1z
LCBBU1Q6OkJhc2VTZW1hbnRpYzo6U2hhZGVySXRlbURpcmVjdGlvbiBkaXJlY3Rpb24pIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gYWNjZXB0YWJsZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0oY29uc3QgQVNUOjpCYXNlU2VtYW50aWMmIHNlbWFudGljKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzZW1hbnRpYy5pc0FjY2VwdGFibGVGb3JTaGFkZXJJ
dGVtRGlyZWN0aW9uKGRpcmVjdGlvbiwgZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSksIGl0ZW0uc2VtYW50aWMpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWFj
Y2VwdGFibGUpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY0ZvclNoYWRlclR5cGUoaW5wdXRJdGVtcywg
QVNUOjpCYXNlU2VtYW50aWM6OlNoYWRlckl0ZW1EaXJlY3Rpb246OklucHV0KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNGb3JT
aGFkZXJUeXBlKG91dHB1dEl0ZW1zLCBBU1Q6OkJhc2VTZW1hbnRpYzo6U2hhZGVySXRlbURpcmVj
dGlvbjo6T3V0cHV0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGNoZWNrUE9ERGF0YSA9IFsmXShjb25zdCBW
ZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpdGVtcykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAg
Zm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgUE9EQ2hlY2tl
ciBwb2RDaGVja2VyOworICAgICAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlw
ZT4oaXRlbS51bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBwb2RDaGVja2Vy
LmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPihpdGVtLnVubmFt
ZWRUeXBlKS5lbGVtZW50VHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXM8
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCkpOworICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5VHlwZT4oaXRlbS51bm5hbWVk
VHlwZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRW
aXNpdChkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4oaXRlbS51bm5hbWVkVHlwZSkudHlwZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChwb2RDaGVja2VyLmVycm9yKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICgh
Y2hlY2tQT0REYXRhKGlucHV0SXRlbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGlmICghY2hlY2tQT0REYXRhKG91dHB1dEl0ZW1zKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgZW51bSBjbGFz
cyBDaGVja0tpbmQgeworICAgICAgICAgICAgSW5kZXgsCisgICAgICAgICAgICBEb3QKKyAgICAg
ICAgfTsKKworICAgICAgICBhdXRvIGNoZWNrR2V0dGVyID0gWyZdKENoZWNrS2luZCBraW5kKSAt
PiBib29sIHsKKyAgICAgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5k
ID09IENoZWNrS2luZDo6SW5kZXggPyAyIDogMTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRl
ZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2Rl
ID0gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkudW5pZnlOb2RlKCk7
CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlw
ZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBh
dXRvIGNoZWNrU2V0dGVyID0gWyZdKENoZWNrS2luZCBraW5kKSAtPiBib29sIHsKKyAgICAgICAg
ICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6SW5k
ZXggPyAzIDogMjsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVy
cygpLnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byYgZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSA9IGZ1
bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLnVuaWZ5Tm9kZSgpOworICAg
ICAgICAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0QXJndW1lbnRVbmlmeU5vZGUp
KSB7CisgICAgICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVu
bmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAo
aXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVu
Y3Rpb25EZWZpbml0aW9uLnR5cGUoKSwgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVsw
XS50eXBlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1
dG8mIHZhbHVlVHlwZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbbnVtRXhwZWN0
ZWRQYXJhbWV0ZXJzIC0gMV0udHlwZSgpOworICAgICAgICAgICAgYXV0byBnZXR0ZXJOYW1lID0g
ZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5zdWJzdHJpbmcoMCwgZnVuY3Rpb25EZWZpbml0aW9u
Lm5hbWUoKS5sZW5ndGgoKSAtIDEpOworICAgICAgICAgICAgYXV0byogZ2V0dGVyRnVuY3MgPSBt
X3Byb2dyYW0ubmFtZUNvbnRleHQoKS5nZXRGdW5jdGlvbnMoZ2V0dGVyTmFtZSk7CisgICAgICAg
ICAgICBpZiAoIWdldHRlckZ1bmNzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIFZlY3RvcjxSZXNvbHZpbmdUeXBlPiBhcmd1bWVudFR5cGVzOworICAgICAgICAg
ICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFyZ3VtZW50
VHlwZVJlZmVyZW5jZXM7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUV4
cGVjdGVkUGFyYW1ldGVycyAtIDE7ICsraSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVz
LmFwcGVuZChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKS5jbG9uZSgp
KTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgYXJndW1lbnRUeXBlIDogYXJndW1lbnRUeXBlcykK
KyAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLmFwcGVuZChhcmd1bWVudFR5
cGUpOworICAgICAgICAgICAgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5h
bWVkVHlwZT4+IGNhc3RSZXR1cm5UeXBlID0gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgYXV0
byogb3ZlcmxvYWQgPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoKmdldHRlckZ1bmNzLCBh
cmd1bWVudFR5cGVSZWZlcmVuY2VzLCBjYXN0UmV0dXJuVHlwZSk7CisgICAgICAgICAgICBpZiAo
IW92ZXJsb2FkKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1
dG8mIHJlc3VsdFR5cGUgPSBvdmVybG9hZC0+dHlwZSgpOworICAgICAgICAgICAgaWYgKCFtYXRj
aGVzKHJlc3VsdFR5cGUsIHZhbHVlVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBj
aGVja0FuZGVyID0gWyZdKENoZWNrS2luZCBraW5kKSAtPiBib29sIHsKKyAgICAgICAgICAgIHNp
emVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6SW5kZXggPyAy
IDogMTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNp
emUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGZ1
bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7CisgICAgICAgICAgICAgICAgaWYg
KCFpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2Fz
dDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgICAgIGlmICghaXM8
QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
YXV0byYgdW5pZnlOb2RlID0gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBl
KCkudW5pZnlOb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlVubmFtZWRUeXBl
Pih1bmlmeU5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1
bmlmeU5vZGUpOworICAgICAgICAgICAgICAgIGlmICghaXM8QVNUOjpQb2ludGVyVHlwZT4odW5u
YW1lZFR5cGUpICYmICFpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAgIGlm
ICghZnVuY3Rpb25EZWZpbml0aW9uLmlzT3BlcmF0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmlzQ2FzdCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09
ICJvcGVyYXRvcisrIgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9
PSAib3BlcmF0b3ItLSIpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBd
LnR5cGUoKSwgZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yKyIKKyAgICAgICAgICAg
IHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLSIpIHsKKyAgICAgICAg
ICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSAxCisgICAg
ICAgICAgICAgICAgJiYgZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0g
MikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3IqIgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3IvIgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3IlIgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3ImIgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3J8IgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3JeIgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3I8PCIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0g
Im9wcmVhdG9yPj4iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFt
ZXRlcnMoKS5zaXplKCkgIT0gMikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZp
bml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3J+IikgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9u
RGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IDEpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iCisgICAgICAgICAg
ICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcjwiCisgICAgICAgICAg
ICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcjw9IgorICAgICAgICAg
ICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I+IgorICAgICAgICAg
ICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I+PSIpIHsKKyAgICAg
ICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSAyKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghbWF0Y2hlcyhm
dW5jdGlvbkRlZmluaXRpb24udHlwZSgpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9y
W10iKSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrR2V0dGVyKENoZWNrS2luZDo6SW5kZXgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVy
YXRvcltdPSIpIHsKKyAgICAgICAgICAgIGlmICghY2hlY2tTZXR0ZXIoQ2hlY2tLaW5kOjpJbmRl
eCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0g
Im9wZXJhdG9yJltdIikgeworICAgICAgICAgICAgaWYgKCFjaGVja0FuZGVyKENoZWNrS2luZDo6
SW5kZXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgp
LnN0YXJ0c1dpdGgoIm9wZXJhdG9yLiIpKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZp
bml0aW9uLm5hbWUoKS5lbmRzV2l0aCgiPSIpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVj
a1NldHRlcihDaGVja0tpbmQ6OkRvdCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFjaGVja0dldHRl
cihDaGVja0tpbmQ6OkRvdCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLnN0YXJ0c1dpdGgoIm9wZXJhdG9yJi4iKSkg
eworICAgICAgICAgICAgaWYgKCFjaGVja0FuZGVyKENoZWNrS2luZDo6RG90KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CisgICAgICAg
ICAgICBpZiAoIWNoZWNrU2hhZGVyVHlwZShmdW5jdGlvbkRlZmluaXRpb24pKSB7CisgICAgICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNzKGZ1bmN0aW9uRGVmaW5pdGlvbikp
IHsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWNoZWNrT3BlcmF0b3JPdmVy
bG9hZChmdW5jdGlvbkRlZmluaXRpb24pKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkp
OworCisgICAgICAgIGF1dG8mIGJhc2VUeXBlID0gZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUo
KS51bmlmeU5vZGUoKTsKKworICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VU
eXBlKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBhdXRvJiB1bm5hbWVkQmFzZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1l
ZFR5cGU+KGJhc2VUeXBlKTsKKyAgICAgICAgaWYgKCFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVu
bmFtZWRCYXNlKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlQmFzZSA9IGRvd25jYXN0
PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZEJhc2UpOworICAgICAgICBBU1NFUlQodHlwZVJl
ZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBpZiAoIWlzPEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpKSB7Cisg
ICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpOworICAg
ICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc0ludCgpKSB7CisgICAgICAgICAgICBz
ZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0
byBlbnVtZXJhdGlvbk1lbWJlcnMgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24uZW51bWVyYXRpb25N
ZW1iZXJzKCk7CisKKyAgICAgICAgZm9yIChhdXRvJiBtZW1iZXIgOiBlbnVtZXJhdGlvbk1lbWJl
cnMpIHsKKyAgICAgICAgICAgIGlmICghbWVtYmVyLmdldCgpLnZhbHVlKCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGJvb2wgc3VjY2VzczsKKyAgICAgICAgICAg
IG1lbWJlci5nZXQoKS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShhdXRvJiB2
YWx1ZSkgeworICAgICAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZ2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAg
ICAgICAgICAgc3VjY2VzcyA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1
bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKCp1bm5hbWVkVHlwZSwgZW51bWVyYXRpb25E
ZWZpbml0aW9uKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oUmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UmIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KGVudW1lcmF0aW9uRGVm
aW5pdGlvbiwgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UucmVzb2x2YWJsZVR5cGUoKSkpOworICAg
ICAgICAgICAgICAgIH0pLCBpdGVyYXRvci0+dmFsdWUpOworICAgICAgICAgICAgfSkpOworICAg
ICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpbnQ2NF90IG5leHRWYWx1ZSA9IDA7CisgICAgICAgIGZvciAoYXV0byYgbWVtYmVyIDogZW51
bWVyYXRpb25NZW1iZXJzKSB7CisgICAgICAgICAgICBpZiAobWVtYmVyLmdldCgpLnZhbHVlKCkp
IHsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAgICAgICAgICAgIG1lbWJl
ci5nZXQoKS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJM
aXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGlu
dGVnZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCk7CisgICAgICAgICAgICAgICAgfSwg
WyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkg
eworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFs
dWVGb3JTZWxlY3RlZFR5cGUoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExp
dGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpC
b29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICBuZXh0VmFs
dWUgPSBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc3VjY2Vzc29yKCkodmFsdWUpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtZW1iZXIuZ2V0KCkuc2V0VmFsdWUoQVNUOjpD
b25zdGFudEV4cHJlc3Npb24oQVNUOjpJbnRlZ2VyTGl0ZXJhbChMZXhlcjo6VG9rZW4obWVtYmVy
LmdldCgpLm9yaWdpbigpKSwgbmV4dFZhbHVlKSkpOworICAgICAgICAgICAgICAgIG5leHRWYWx1
ZSA9IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zdWNjZXNzb3IoKShuZXh0VmFsdWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnVt
ZXJhdGlvbk1lbWJlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8mIG1lbWJlciA9
IGVudW1lcmF0aW9uTWVtYmVyc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVChtZW1iZXIu
dmFsdWUoKSk7CisgICAgICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAgICAgICAgbWVtYmVy
LnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwm
IGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJh
bC52YWx1ZSgpOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gdW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6Rmxv
YXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJh
bCYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
JikgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
fSkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgZW51bWVyYXRpb25N
ZW1iZXJzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgYXV0byYgb3RoZXJNZW1iZXIg
PSBlbnVtZXJhdGlvbk1lbWJlcnNbal0uZ2V0KCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG90
aGVyTWVtYmVyLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGJvb2wgZmFpbCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIG90aGVyTWVtYmVyLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZhaWwgPSB2YWx1ZSA9PSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAg
ICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50
ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgZmFpbCA9IHZhbHVlID09IHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpG
bG9hdExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0o
QVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZmFpbCkgeworICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBmb3VuZFplcm8gPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRv
JiBtZW1iZXIgOiBlbnVtZXJhdGlvbk1lbWJlcnMpIHsKKyAgICAgICAgICAgIEFTU0VSVChtZW1i
ZXIuZ2V0KCkudmFsdWUoKSk7CisgICAgICAgICAgICBtZW1iZXIuZ2V0KCkudmFsdWUoKS0+dmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVy
YWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50ZWdlckxpdGVyYWwudmFsdWUoKSA9PSAwKQor
ICAgICAgICAgICAgICAgICAgICBmb3VuZFplcm8gPSB0cnVlOworICAgICAgICAgICAgfSwgWyZd
KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgewor
ICAgICAgICAgICAgICAgIGlmICh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCkgPT0gMCkK
KyAgICAgICAgICAgICAgICAgICAgZm91bmRaZXJvID0gdHJ1ZTsKKyAgICAgICAgICAgIH0sIFsm
XShBU1Q6OkZsb2F0TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9v
bGVhbkxpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIH0pKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWZvdW5kWmVybykgeworICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBl
KCkpOworCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlUmVmZXJlbmNlKTsKKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNs
YXJhdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJp
YWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9u
LmluaXRpYWxpemVyKCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGxoc1R5cGUgPSB2YXJpYWJsZURl
Y2xhcmF0aW9uLnR5cGUoKTsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFi
bGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3Ig
PSBtX3R5cGVNYXAuZmluZCh2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpOworICAg
ICAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgICAg
ICBhdXRvJiByaHMgPSBpdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICBhdXRvIHN1Y2Nlc3Mg
PSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVu
bmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVy
biBtYXRjaGVzKGxoc1R5cGUsICp1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICB9LCBbJl0oUmVm
PFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENv
bW1pdChsaHNUeXBlLCByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSkp
OworICAgICAgICAgICAgfSksIHJocyk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAg
ICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBc3NpZ25t
ZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsKKyAg
ICAgICAgYXV0byBsZWZ0SXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmYXNzaWdubWVudEV4cHJl
c3Npb24ubGVmdCgpKTsKKyAgICAgICAgQVNTRVJUKGxlZnRJdGVyYXRvciAhPSBtX3R5cGVNYXAu
ZW5kKCkpOworICAgICAgICBhdXRvJiBsaHNUeXBlID0gbGVmdEl0ZXJhdG9yLT52YWx1ZTsKKyAg
ICAgICAgLy8gRklYTUU6IEhvdyB0byBkbyBsdmFsdWUgYW5kIGFkZHJlc3Mgc3BhY2UgYW5hbHlz
aXM/CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdo
dCgpKTsKKyAgICAgICAgYXV0byByaWdodEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmFzc2ln
bm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworICAgICAgICBBU1NFUlQocmlnaHRJdGVyYXRvciAh
PSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiByaHNUeXBlID0gcmlnaHRJdGVyYXRv
ci0+dmFsdWU7CisgICAgICAgIGF1dG8gcmVzdWx0VHlwZSA9IFdURjo6dmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiBsZWZ0KSAtPiBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1l
ZFR5cGU+JiByaWdodCkgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAg
ICAgICAgICAgICAgICBpZiAobWF0Y2hlcygqbGVmdCwgKnJpZ2h0KSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGxlZnQtPmNsb25lKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmln
aHQpIC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KCpsZWZ0LCByaWdodC0+cmVzb2x2YWJsZVR5cGUoKSk7
CisgICAgICAgICAgICB9KSwgcmhzVHlwZSk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlw
ZT4geworICAgICAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiByaWdodCkgLT4gc3RkOjp1bmlxdWVf
cHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRD
b21taXQoKnJpZ2h0LCBsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAgICAgIH0sIFsm
XShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdodCkgLT4gc3RkOjp1bmlxdWVfcHRy
PEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21t
aXQobGVmdC0+cmVzb2x2YWJsZVR5cGUoKSwgcmlnaHQtPnJlc29sdmFibGVUeXBlKCkpOworICAg
ICAgICAgICAgfSksIHJoc1R5cGUpOworICAgICAgICB9KSwgbGhzVHlwZSk7CisgICAgICAgIGlm
ICghcmVzdWx0VHlwZSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQo
JmFzc2lnbm1lbnRFeHByZXNzaW9uLCBXVEZNb3ZlKHJlc3VsdFR5cGUpKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBsVmFs
dWVJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxW
YWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUKGxWYWx1ZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQo
KSk7CisgICAgICAgIGF1dG8mIGxoc1R5cGUgPSBsVmFsdWVJdGVyYXRvci0+dmFsdWU7CisgICAg
ICAgIC8vIEZJWE1FOiBIb3cgdG8gZG8gbHZhbHVlIGFuZCBhZGRyZXNzIHNwYWNlIGFuYWx5c2lz
PworICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggdGhlIFJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ncyBBbm9ueW1vdXNWYXJpYWJsZXMuCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lv
bigpKTsKKyAgICAgICAgYXV0byBuZXdWYWx1ZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJnJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHByZXNzaW9uKCkpOworICAgICAgICBB
U1NFUlQobmV3VmFsdWVJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRv
JiBuZXdWYWx1ZVR5cGUgPSBuZXdWYWx1ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byBz
dWNjZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1l
ZFR5cGU+JiByaWdodCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMo
KmxlZnQsICpyaWdodCk7CisgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlPiYgcmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxib29sPihtYXRjaEFuZENvbW1pdCgqbGVmdCwgcmlnaHQtPnJlc29sdmFibGVUeXBlKCkp
KTsKKyAgICAgICAgICAgIH0pLCBuZXdWYWx1ZVR5cGUpOworICAgICAgICB9LCBbJl0oUmVmPFJl
c29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGVmdCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpV
bm5hbWVkVHlwZT4mIHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoKnJpZ2h0LCBsZWZ0LT5yZXNvbHZhYmxlVHlw
ZSgpKSk7CisgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYg
cmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29s
PihtYXRjaEFuZENvbW1pdChsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpLCByaWdodC0+cmVzb2x2YWJs
ZVR5cGUoKSkpOworICAgICAgICAgICAgfSksIG5ld1ZhbHVlVHlwZSk7CisgICAgICAgIH0pLCBs
aHNUeXBlKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzZXRFcnJvcigp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnJlc3VsdEV4cHJlc3Npb24oKSk7CisgICAg
ICAgIGF1dG8gcmVzdWx0SXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmcmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbi5yZXN1bHRFeHByZXNzaW9uKCkpOworICAgICAgICBBU1NFUlQocmVzdWx0SXRl
cmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgcmVzdWx0VHlwZSA9IHJl
c3VsdEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHJlc3VsdCkgeworICAgICAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRS
ZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mIHJlc3VsdCkgeworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQg
PSBtX3R5cGVNYXAuYWRkKCZyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLCByZXN1bHQuY29weVJl
ZigpKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNO
ZXdFbnRyeSk7CisgICAgICAgIH0pLCByZXN1bHRUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pIG92
ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLnBvaW50ZXIoKSk7CisgICAgICAgIGF1dG8gcG9pbnRlckl0ZXJhdG9yID0gbV90eXBl
TWFwLmZpbmQoJmRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkpOworICAgICAgICBBU1NF
UlQocG9pbnRlckl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIHR5
cGUgPSBwb2ludGVySXRlcmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvKiBwb2ludGVyVHlwZSA9
IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5h
bWVkVHlwZT4mIHR5cGUpIC0+IEFTVDo6UG9pbnRlclR5cGUqIHsKKyAgICAgICAgICAgIGF1dG8m
IHVuaWZ5Tm9kZSA9IHR5cGUtPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgaWYgKCFpczxBU1Q6
OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRU
eXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICByZXR1cm4gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICAg
ICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdHlwZSkgLT4gQVNUOjpQb2lu
dGVyVHlwZSogeworICAgICAgICAgICAgYXV0byogcmVzb2x2ZWRUeXBlID0gdHlwZS0+cmVzb2x2
YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgICAgIGlmICghcmVzb2x2ZWRUeXBl
KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgYXV0byYgdW5p
ZnlOb2RlID0gcmVzb2x2ZWRUeXBlLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGlmICghaXM8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5h
bWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgIGlmICghaXM8QVNUOjpQb2ludGVyVHlw
ZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAgICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSk7Cisg
ICAgICAgIH0pLCB0eXBlKTsKKyAgICAgICAgaWYgKCFwb2ludGVyVHlwZSkgeworICAgICAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAv
LyBGSVhNRTogSG93IHRvIGRvIGx2YWx1ZSBhbmQgYWRkcmVzcyBzcGFjZSBhbmFseXNpcz8KKyAg
ICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZkZXJlZmVyZW5jZUV4cHJlc3Np
b24sIHBvaW50ZXJUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1
bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxW
YWx1ZSgpKTsKKyAgICAgICAgYXV0byBsVmFsdWVJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZt
YWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgICAgICBBU1NFUlQobFZhbHVlSXRl
cmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgZWxlbWVudFR5cGUgPSBs
VmFsdWVJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1dG8qIGxWYWx1ZVR5cGUgPSBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoW10oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CisgICAgICAgICAgICByZXR1cm4gdHlwZS5n
ZXQoKTsKKyAgICAgICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdHlwZSkg
LT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICAgICAgcmV0dXJuIHR5cGUtPnJlc29sdmFi
bGVUeXBlKCkucmVzb2x2ZWRUeXBlKCk7CisgICAgICAgIH0pLCBlbGVtZW50VHlwZSk7CisgICAg
ICAgIC8vIEZJWE1FOiBIb3cgdG8gZG8gbHZhbHVlIGFuZCBhZGRyZXNzIHNwYWNlIGFuYWx5c2lz
PworICAgICAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2Ug
PSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJm1ha2VQb2ludGVyRXhwcmVzc2lvbiwgc3RkOjpt
YWtlX3VuaXF1ZTxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4obWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgYWRkcmVzc1NwYWNlLCBsVmFsdWVUeXBlLT5jbG9uZSgpKSk7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24m
IG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7
CisgICAgICAgIGF1dG8gbFZhbHVlSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmbWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgICAgIEFTU0VSVChsVmFsdWVJdGVy
YXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBlbGVtZW50VHlwZSA9IGxW
YWx1ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byogdW5uYW1lZFR5cGUgPSBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoW10oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CisgICAgICAgICAgICByZXR1cm4gdHlwZS5n
ZXQoKTsKKyAgICAgICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdHlwZSkg
LT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICAgICAgcmV0dXJuIHR5cGUtPnJlc29sdmFi
bGVUeXBlKCkucmVzb2x2ZWRUeXBlKCk7CisgICAgICAgIH0pLCBlbGVtZW50VHlwZSk7CisgICAg
ICAgIGlmICghdW5uYW1lZFR5cGUpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gdW5uYW1l
ZFR5cGUtPnVuaWZ5Tm9kZSgpOworICAgICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5p
ZnlOb2RlKSkgeworICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6
OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRl
clR5cGU+KHVubmFtZWRUeXBlKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHBvaW50ZXJUeXBl
ID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBCZWNvbWUgYSBDb252ZXJ0UG9pbnRlclRvQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uCisgICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZt
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5v
cmlnaW4oKSksIHBvaW50ZXJUeXBlLmFkZHJlc3NTcGFjZSgpLCBwb2ludGVyVHlwZS5lbGVtZW50
VHlwZSgpLmNsb25lKCkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3Vs
dCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IEhvdyB0byBkbyBsdmFsdWUgYW5kIGFk
ZHJlc3Mgc3BhY2UgYW5hbHlzaXM/CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+
KHVubmFtZWRUeXBlKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25j
YXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEhvdyB0byBkbyBsdmFsdWUgYW5kIGFkZHJlc3Mgc3BhY2UgYW5hbHlzaXM/CisgICAgICAg
ICAgICAgICAgQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlID0g
QVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmljZTsKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogU2F2ZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgorICAgICAgICAgICAgICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbiwgc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRv
a2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCBhZGRyZXNzU3BhY2Us
IGFycmF5VHlwZS50eXBlKCkuY2xvbmUoKSkpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEhvdyB0
byBkbyBsdmFsdWUgYW5kIGFkZHJlc3Mgc3BhY2UgYW5hbHlzaXM/CisgICAgICAgIEFTVDo6UmVm
ZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlw
ZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBl
TWFwLmFkZCgmbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgc3RkOjptYWtlX3VuaXF1ZTxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24ub3JpZ2luKCkpLCBhZGRyZXNzU3BhY2UsIHVubmFtZWRUeXBlLT5jbG9uZSgpKSk7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtZQorICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBtZQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJs
ZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBB
U1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CisgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV90eXBlTWFwLmFkZCgmdmFyaWFibGVSZWZlcmVuY2UsIHZhcmlhYmxlUmVmZXJlbmNl
LnZhcmlhYmxlKCktPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRS
ZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFT
VDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NF
UlQocmV0dXJuU3RhdGVtZW50LmZ1bmN0aW9uKCkpOworICAgICAgICBpZiAocmV0dXJuU3RhdGVt
ZW50LnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcmV0dXJuU3Rh
dGVtZW50LnZhbHVlKCkpOworICAgICAgICAgICAgYXV0byB2YWx1ZUl0ZXJhdG9yID0gbV90eXBl
TWFwLmZpbmQocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOworICAgICAgICAgICAgQVNTRVJUKHZh
bHVlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgICAgIGF1dG8mIHJlc3Vs
dFR5cGUgPSB2YWx1ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9
IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5u
YW1lZFR5cGU+JiByZXN1bHRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWF0Y2hlcyhyZXR1cm5TdGF0ZW1lbnQuZnVuY3Rpb24oKS0+dHlwZSgpLCAqcmVzdWx0VHlwZSk7
CisgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzdWx0
VHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+
KG1hdGNoQW5kQ29tbWl0KHJldHVyblN0YXRlbWVudC5mdW5jdGlvbigpLT50eXBlKCksIHJlc3Vs
dFR5cGUtPnJlc29sdmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgIH0pLCByZXN1bHRUeXBlKTsK
KyAgICAgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtYXRjaGVzKHJl
dHVyblN0YXRlbWVudC5mdW5jdGlvbigpLT50eXBlKCksIG1faW50cmluc2ljcy52b2lkVHlwZSgp
KSkKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OlBvaW50ZXJUeXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZvbGxvd2luZyBwb2lu
dGVyIHR5cGVzIGNhbiBjYXVzZSBpbmZpbml0ZSBsb29wcyBiZWNhdXNlIG9mIGRhdGEgc3RydWN0
dXJlcworICAgICAgICAvLyBsaWtlIGxpbmtlZCBsaXN0cy4KKyAgICAgICAgLy8gRklYTUU6IE1h
a2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBlbXB0eQorICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
Ly8gRm9sbG93aW5nIGFycmF5IHJlZmVyZW5jZSB0eXBlcyBjYW4gY2F1c2UgaW5maW5pdGUgbG9v
cHMgYmVjYXVzZSBvZiBkYXRhCisgICAgICAgIC8vIHN0cnVjdHVyZXMgbGlrZSBsaW5rZWQgbGlz
dHMuCisgICAgICAgIC8vIEZJWE1FOiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUg
ZW1wdHkKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVn
ZXJMaXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byByZWYgPSBhZG9wdFJlZigq
bmV3IFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKGludGVnZXJMaXRlcmFsLnR5cGUoKSkpOworICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmludGVnZXJMaXRlcmFsLCBXVEZN
b3ZlKHJlZikpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0Lmlz
TmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJM
aXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
YXV0byByZWYgPSBhZG9wdFJlZigqbmV3IFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKHVuc2lnbmVk
SW50ZWdlckxpdGVyYWwudHlwZSgpKSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBl
TWFwLmFkZCgmdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCwgV1RGTW92ZShyZWYpKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBhdXRvIHJlZiA9IGFkb3B0UmVmKCpuZXcgUmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2UoZmxvYXRMaXRlcmFsLnR5cGUoKSkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fdHlwZU1hcC5hZGQoJmZsb2F0TGl0ZXJhbCwgV1RGTW92ZShyZWYpKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRlcmFsKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgYXV0byByZWYgPSBhZG9wdFJlZigqbmV3IFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlKG51bGxMaXRlcmFsLnR5cGUoKSkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlw
ZU1hcC5hZGQoJm51bGxMaXRlcmFsLCBXVEZNb3ZlKHJlZikpOworICAgICAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmJvb2xlYW5MaXRlcmFs
LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGJvb2xlYW5MaXRlcmFsLm9y
aWdpbigpKSwgbV9pbnRyaW5zaWNzLmJvb2xUeXBlKCkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNF
RChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVm
ZXJlbmNlLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgYXV0byYgZW51bWVyYXRp
b25EZWZpbml0aW9uID0gKmNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
dHlwZU1hcC5hZGQoJmNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0
aW9uKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdF
bnRyeSk7CisgICAgfQorCisgICAgYm9vbCBpc0Jvb2xUeXBlKFJlc29sdmluZ1R5cGUmIHJlc29s
dmluZ1R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IGJvb2wg
eworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoKmxlZnQsIG1faW50cmluc2ljcy5ib29sVHlw
ZSgpKTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxlZnQp
IC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5k
Q29tbWl0KG1faW50cmluc2ljcy5ib29sVHlwZSgpLCBsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpKSk7
CisgICAgICAgIH0pLCByZXNvbHZpbmdUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFT
VDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9w
ZXJhbmQoKSk7CisgICAgICAgIGF1dG8gb3BlcmFuZEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQo
JmxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQoKSk7CisgICAgICAgIEFTU0VSVChvcGVyYW5k
SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgb3BlcmFuZFR5cGUg
PSBvcGVyYW5kSXRlcmF0b3ItPnZhbHVlOworICAgICAgICBpZiAoIWlzQm9vbFR5cGUob3BlcmFu
ZFR5cGUpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmbG9naWNh
bE5vdEV4cHJlc3Npb24sIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obG9n
aWNhbE5vdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpOwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYgbG9naWNhbEV4
cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9n
aWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICAgICAgYXV0byBsZWZ0SXRlcmF0b3IgPSBtX3R5
cGVNYXAuZmluZCgmbG9naWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICAgICAgQVNTRVJUKGxl
ZnRJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBsZWZ0VHlwZSA9
IGxlZnRJdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2lj
YWxFeHByZXNzaW9uLnJpZ2h0KCkpOworICAgICAgICBhdXRvIHJpZ2h0SXRlcmF0b3IgPSBtX3R5
cGVNYXAuZmluZCgmbG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIEFTU0VSVChy
aWdodEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIHJpZ2h0VHlw
ZSA9IHJpZ2h0SXRlcmF0b3ItPnZhbHVlOworCisgICAgICAgIGlmICghaXNCb29sVHlwZShsZWZ0
VHlwZSkgfHwgIWlzQm9vbFR5cGUocmlnaHRUeXBlKSkgeworICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdHlwZU1hcC5hZGQoJmxvZ2ljYWxFeHByZXNzaW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKGxvZ2ljYWxFeHByZXNzaW9uLm9yaWdpbigpKSwgbV9pbnRyaW5z
aWNzLmJvb2xUeXBlKCkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1l
bnQmIGlmU3RhdGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAgICAgICBhdXRvIGNvbmRpdGlvbmFs
SXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7Cisg
ICAgICAgIEFTU0VSVChjb25kaXRpb25hbEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7Cisg
ICAgICAgIGF1dG8mIGNvbmRpdGlvbmFsVHlwZSA9IGNvbmRpdGlvbmFsSXRlcmF0b3ItPnZhbHVl
OworICAgICAgICBpZiAoIWlzQm9vbFR5cGUoY29uZGl0aW9uYWxUeXBlKSkgeworICAgICAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKKyAgICAgICAgaWYgKGlmU3Rh
dGVtZW50LmVsc2VCb2R5KCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmlmU3Rh
dGVtZW50LmVsc2VCb2R5KCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxv
b3AmIHdoaWxlTG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCh3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgICAgIGF1dG8gY29uZGl0aW9uYWxJdGVy
YXRvciA9IG1fdHlwZU1hcC5maW5kKCZ3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgICAg
IEFTU0VSVChjb25kaXRpb25hbEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAg
IGF1dG8mIGNvbmRpdGlvbmFsVHlwZSA9IGNvbmRpdGlvbmFsSXRlcmF0b3ItPnZhbHVlOworICAg
ICAgICBpZiAoIWlzQm9vbFR5cGUoY29uZGl0aW9uYWxUeXBlKSkgeworICAgICAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChB
U1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5ib2R5KCkpOworICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgICAgIGF1dG8gY29uZGl0
aW9uYWxJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZkb1doaWxlTG9vcC5jb25kaXRpb25hbCgp
KTsKKyAgICAgICAgQVNTRVJUKGNvbmRpdGlvbmFsSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgp
KTsKKyAgICAgICAgYXV0byYgY29uZGl0aW9uYWxUeXBlID0gY29uZGl0aW9uYWxJdGVyYXRvci0+
dmFsdWU7CisgICAgICAgIGlmICghaXNCb29sVHlwZShjb25kaXRpb25hbFR5cGUpKSB7CisgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApIG92ZXJyaWRlCisgICAg
eworICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7Cisg
ICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQpOworICAgICAgICB9LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4mIGV4
cHJlc3Npb24pIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZXhwcmVzc2lvbik7
CisgICAgICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkpOworICAgICAgICBpZiAoZm9y
TG9vcC5jb25kaXRpb24oKSkgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmb3JM
b29wLmNvbmRpdGlvbigpKTsKKyAgICAgICAgICAgIGF1dG8gY29uZGl0aW9uSXRlcmF0b3IgPSBt
X3R5cGVNYXAuZmluZChmb3JMb29wLmNvbmRpdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VSVChj
b25kaXRpb25JdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICAgICAgYXV0byYg
Y29uZGl0aW9uVHlwZSA9IGNvbmRpdGlvbkl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgIGlm
ICghaXNCb29sVHlwZShjb25kaXRpb25UeXBlKSkgeworICAgICAgICAgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGlmIChmb3JMb29wLmluY3JlbWVudCgpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGZvckxvb3AuYm9keSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoU3Rh
dGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkpOworICAgICAgICBhdXRvIHZhbHVl
SXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkpOworICAg
ICAgICBBU1NFUlQodmFsdWVJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBh
dXRvJiB2YWx1ZVR5cGUgPSB2YWx1ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byB2YWx1
ZVVuaWZ5Tm9kZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVf
cHRyPEFTVDo6VW5uYW1lZFR5cGU+JiBsZWZ0KSAtPiBBU1Q6OlR5cGUqIHsKKyAgICAgICAgICAg
IHJldHVybiAmbGVmdC0+dW5pZnlOb2RlKCk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBBU1Q6OlR5cGUqIHsKKyAgICAgICAgICAgIGlmICgh
bGVmdC0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKSkgeworICAgICAgICAgICAgICAg
IGlmICghc3RhdGljX2Nhc3Q8Ym9vbD4oY29tbWl0KGxlZnQtPnJlc29sdmFibGVUeXBlKCkpKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gJmxlZnQtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCktPnVu
aWZ5Tm9kZSgpOworICAgICAgICB9KSwgdmFsdWVUeXBlKTsKKyAgICAgICAgaWYgKCFpczxBU1Q6
Ok5hbWVkVHlwZT4oKnZhbHVlVW5pZnlOb2RlKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvJiB2YWx1ZU5hbWVk
VW5pZnlOb2RlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KCp2YWx1ZVVuaWZ5Tm9kZSk7Cisg
ICAgICAgIGlmICghKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPih2YWx1ZU5hbWVkVW5p
ZnlOb2RlKSAmJiBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4odmFsdWVOYW1l
ZFVuaWZ5Tm9kZSkuaXNJbnQoKSkKKyAgICAgICAgICAgICYmICFpczxBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbj4odmFsdWVOYW1lZFVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBib29sIGhhc0Rl
ZmF1bHQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNoU3Rh
dGVtZW50LnN3aXRjaENhc2VzKCkpIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChz
d2l0Y2hDYXNlLmJsb2NrKCkpOworICAgICAgICAgICAgaWYgKCFzd2l0Y2hDYXNlLnZhbHVlKCkp
IHsKKyAgICAgICAgICAgICAgICBoYXNEZWZhdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2wgc3VjY2VzczsKKyAgICAg
ICAgICAgIHN3aXRjaENhc2UudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNU
OjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBzdWNj
ZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpVbm5hbWVkVHlwZT4mIHZhbHVlVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdCgqdmFsdWVUeXBlLCBpbnRl
Z2VyTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHZhbHVlVHlwZS0+cmVz
b2x2YWJsZVR5cGUoKSwgaW50ZWdlckxpdGVyYWwudHlwZSgpKSk7CisgICAgICAgICAgICAgICAg
fSksIHZhbHVlVHlwZSk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJM
aXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgc3VjY2Vz
cyA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6
VW5uYW1lZFR5cGU+JiB2YWx1ZVR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoKnZhbHVlVHlwZSwgdW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oUmVmPFJl
c29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHZhbHVlVHlw
ZS0+cmVzb2x2YWJsZVR5cGUoKSwgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC50eXBlKCkpKTsKKyAg
ICAgICAgICAgICAgICB9KSwgdmFsdWVUeXBlKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZs
b2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFdU
Rjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1l
ZFR5cGU+JiB2YWx1ZVR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoKnZhbHVlVHlwZSwgZmxvYXRMaXRlcmFs
LnR5cGUoKSkpOworICAgICAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2U+JiB2YWx1ZVR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQodmFsdWVUeXBlLT5yZXNvbHZhYmxlVHlw
ZSgpLCBmbG9hdExpdGVyYWwudHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfSksIHZhbHVlVHlw
ZSk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIHsK
KyAgICAgICAgICAgICAgICBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHZhbHVlVHlwZSkgLT4gYm9vbCB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENv
bW1pdCgqdmFsdWVUeXBlLCBudWxsTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9
LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29t
bWl0KHZhbHVlVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSwgbnVsbExpdGVyYWwudHlwZSgpKSk7Cisg
ICAgICAgICAgICAgICAgfSksIHZhbHVlVHlwZSk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpC
b29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gV1RGOjp2aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHZh
bHVlVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKCp2
YWx1ZVR5cGUsIG1faW50cmluc2ljcy5ib29sVHlwZSgpKTsKKyAgICAgICAgICAgICAgICB9LCBb
Jl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0
KG1faW50cmluc2ljcy5ib29sVHlwZSgpLCB2YWx1ZVR5cGUtPnJlc29sdmFibGVUeXBlKCkpKTsK
KyAgICAgICAgICAgICAgICB9KSwgdmFsdWVUeXBlKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6
OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4
cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkgeworICAgICAgICAgICAgICAgIEFT
U0VSVChjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJh
dGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFdURjo6dmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiB2
YWx1ZVR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygq
dmFsdWVUeXBlLCAqY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Uu
ZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAgICAgICAgICAgICAgIH0sIFsmXShSZWY8UmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2U+JiB2YWx1ZVR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoKmNvbnN0YW50
RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmVudW1lcmF0aW9uRGVmaW5pdGlv
bigpLCB2YWx1ZVR5cGUtPnJlc29sdmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9KSwg
dmFsdWVUeXBlKTsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIGlmICghc3VjY2Vzcykg
eworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKS5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgYXV0byYgZmlyc3RDYXNlID0gc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKClbaV07Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBzd2l0Y2hTdGF0ZW1lbnQuc3dp
dGNoQ2FzZXMoKS5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGF1dG8mIHNlY29uZENh
c2UgPSBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKVtqXTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Ym9vbD4oZmlyc3RDYXNlLnZhbHVlKCkp
ICE9IHN0YXRpY19jYXN0PGJvb2w+KHNlY29uZENhc2UudmFsdWUoKSkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxib29s
PihmaXJzdENhc2UudmFsdWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgZmlyc3RDYXNl
LnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwm
IGZpcnN0SW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kQ2FzZS52
YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBz
ZWNvbmRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9
IGZpcnN0SW50ZWdlckxpdGVyYWwudmFsdWUoKSAhPSBzZWNvbmRJbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsJiBzZWNvbmRVbnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdWNjZXNzID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oZmlyc3RJbnRlZ2VyTGl0ZXJhbC52
YWx1ZSgpKSAhPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihzZWNvbmRVbnNpZ25lZEludGVnZXJMaXRl
cmFsLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVy
YWwmKSB7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgewor
ICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAg
ICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25N
ZW1iZXJSZWZlcmVuY2UmKSB7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAg
ICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiBmaXJzdFVuc2lnbmVkSW50
ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kQ2FzZS52YWx1ZSgpLT52
aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBzZWNvbmRJbnRl
Z2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHN0YXRpY19j
YXN0PGludDY0X3Q+KGZpcnN0VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKSAhPSBzdGF0
aWNfY2FzdDxpbnQ2NF90PihzZWNvbmRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgc2Vjb25kVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9
IGZpcnN0VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpICE9IHNlY29uZFVuc2lnbmVkSW50
ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Rmxv
YXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJh
bCYpIHsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7
CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1l
cmF0aW9uTWVtYmVyUmVmZXJlbmNlJikgeworICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAg
ICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAg
IH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6
OkJvb2xlYW5MaXRlcmFsJikgeworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBmaXJzdENvbnN0YW50RXhwcmVz
c2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSB7CisgICAgICAgICAgICAgICAgICAgIHNl
Y29uZENhc2UudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2Vy
TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRl
cmFsJikgeworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsK
KyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAg
ICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9u
TWVtYmVyUmVmZXJlbmNlJiBzZWNvbmRDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZpcnN0Q29u
c3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1i
ZXIoKSAhPSBzZWNvbmRDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5j
ZS5lbnVtZXJhdGlvbk1lbWJlcigpOworICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAg
ICAgICAgICAgfSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFo
YXNEZWZhdWx0KSB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24+KHZhbHVlTmFtZWRVbmlmeU5vZGUpKSB7CisgICAgICAgICAgICAgICAgSGFzaFNldDxpbnQ2
NF90PiB2YWx1ZXM7CisgICAgICAgICAgICAgICAgYm9vbCB6ZXJvVmFsdWVFeGlzdHM7CisgICAg
ICAgICAgICAgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRj
aENhc2VzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoQ2FzZS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZUZvclNlbGVjdGVkVHlwZSgpOwor
ICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1
bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9
IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWVGb3JTZWxlY3RlZFR5cGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsm
XShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRl
cmFsJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0
aW9uTWVtYmVyUmVmZXJlbmNlJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHplcm9WYWx1ZUV4aXN0cyA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlcy5hZGQodmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
b29sIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgICAgIGRvd25jYXN0PEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uPih2YWx1ZU5hbWVkVW5pZnlOb2RlKS5pdGVyYXRlQWxsVmFsdWVzKFsm
XShpbnQ2NF90IHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1
ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF6ZXJvVmFsdWVFeGlzdHMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcy5jb250YWlucyh2
YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAo
IXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPih2
YWx1ZU5hbWVkVW5pZnlOb2RlKSk7CisgICAgICAgICAgICAgICAgSGFzaFNldDxBU1Q6OkVudW1l
cmF0aW9uTWVtYmVyKj4gdmFsdWVzOworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgc3dpdGNo
Q2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaENhc2UudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJ
bnRlZ2VyTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJM
aXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
ICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpC
b29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjb25z
dGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbk1lbWJl
cigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hZGQoY29uc3RhbnRFeHByZXNz
aW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Zm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uPih2YWx1ZU5hbWVkVW5pZnlOb2RlKS5lbnVtZXJhdGlvbk1lbWJlcnMoKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcy5jb250YWlucygmZW51bWVyYXRpb25NZW1i
ZXIuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB2
aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGNvbW1hRXhwcmVzc2lvbi5saXN0KCkuc2l6ZSgpID4gMCk7Cisg
ICAgICAgIFZpc2l0b3I6OnZpc2l0KGNvbW1hRXhwcmVzc2lvbik7CisgICAgICAgIGF1dG8gbGFz
dEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoY29tbWFFeHByZXNzaW9uLmxpc3QoKS5sYXN0KCku
Z2V0KCkpOworICAgICAgICBBU1NFUlQobGFzdEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7
CisgICAgICAgIGF1dG8mIGxhc3RUeXBlID0gbGFzdEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAg
V1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5h
bWVkVHlwZT4mIGxhc3RUeXBlKSB7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlw
ZU1hcC5hZGQoJmNvbW1hRXhwcmVzc2lvbiwgbGFzdFR5cGUtPmNsb25lKCkpOworICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAg
ICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxhc3RUeXBlKSB7CisgICAg
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmNvbW1hRXhwcmVzc2lvbiwg
bGFzdFR5cGUuY29weVJlZigpKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIH0pLCBsYXN0VHlwZSk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lv
bikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhw
cmVzc2lvbi5wcmVkaWNhdGUoKSk7CisgICAgICAgIGF1dG8gcHJlZGljYXRlSXRlcmF0b3IgPSBt
X3R5cGVNYXAuZmluZCgmdGVybmFyeUV4cHJlc3Npb24ucHJlZGljYXRlKCkpOworICAgICAgICBB
U1NFUlQocHJlZGljYXRlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0
byYgcHJlZGljYXRlVHlwZSA9IHByZWRpY2F0ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYg
KCFpc0Jvb2xUeXBlKHByZWRpY2F0ZVR5cGUpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KHRlcm5hcnlFeHByZXNzaW9uLmJvZHlFeHByZXNzaW9uKCkpOworICAgICAgICBhdXRvIGJv
ZHlJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZ0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVz
c2lvbigpKTsKKyAgICAgICAgQVNTRVJUKGJvZHlJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkp
OworICAgICAgICBhdXRvJiBib2R5VHlwZSA9IGJvZHlJdGVyYXRvci0+dmFsdWU7CisKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkp
OworICAgICAgICBhdXRvIGVsc2VJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZ0ZXJuYXJ5RXhw
cmVzc2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKKyAgICAgICAgQVNTRVJUKGVsc2VJdGVyYXRvciAh
PSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBlbHNlVHlwZSA9IGVsc2VJdGVyYXRv
ci0+dmFsdWU7CisKKyAgICAgICAgYXV0byByZXN1bHRUeXBlID0gV1RGOjp2aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIGJvZHlUeXBl
KSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICAgICAgcmV0
dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6
VW5uYW1lZFR5cGU+JiBlbHNlVHlwZSkgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5
cGU+IHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcygqYm9keVR5cGUsICplbHNlVHlwZSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBib2R5VHlwZS0+Y2xvbmUoKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2U+JiBlbHNlVHlwZSkgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1l
ZFR5cGU+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQoKmJvZHlUeXBl
LCBlbHNlVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAgICAgICB9KSwgZWxzZVR5cGUp
OworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgYm9keVR5cGUp
IC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpV
bm5hbWVkVHlwZT4mIGVsc2VUeXBlKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlw
ZT4geworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdCgqZWxzZVR5cGUsIGJv
ZHlUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JiBlbHNlVHlwZSkgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5u
YW1lZFR5cGU+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQoYm9keVR5
cGUtPnJlc29sdmFibGVUeXBlKCksIGVsc2VUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAg
ICAgICAgIH0pLCBlbHNlVHlwZSk7CisgICAgICAgIH0pLCBib2R5VHlwZSk7CisgICAgICAgIGlm
ICghcmVzdWx0VHlwZSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQo
JnRlcm5hcnlFeHByZXNzaW9uLCBXVEZNb3ZlKHJlc3VsdFR5cGUpKTsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3Vt
ZW50cygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCphcmd1bWVudCk7CisgICAg
ICAgIGlmIChjYWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpKQorICAgICAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGNhbGxFeHByZXNzaW9uLmNhc3RSZXR1cm5UeXBlKCktPmdldCgpKTsK
KyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHR5
cGVzOworICAgICAgICB0eXBlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNhbGxFeHByZXNzaW9u
LmFyZ3VtZW50cygpLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYXJndW1lbnQgOiBjYWxs
RXhwcmVzc2lvbi5hcmd1bWVudHMoKSkgeworICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1f
dHlwZU1hcC5maW5kKGFyZ3VtZW50LmdldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpdGVyYXRv
ciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICAgICAgdHlwZXMudW5jaGVja2VkQXBwZW5k
KGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoY2FsbEV4cHJl
c3Npb24uaGFzT3ZlcmxvYWRzKCkpOworICAgICAgICBhdXRvKiBmdW5jdGlvbiA9IHJlc29sdmVG
dW5jdGlvbk92ZXJsb2FkSW1wbCgqY2FsbEV4cHJlc3Npb24ub3ZlcmxvYWRzKCksIHR5cGVzLCBj
YWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgaWYgKCFmdW5jdGlvbikg
eworICAgICAgICAgICAgaWYgKGF1dG8gbmV3RnVuY3Rpb24gPSByZXNvbHZlQnlJbnN0YW50aWF0
aW9uKGNhbGxFeHByZXNzaW9uLCB0eXBlcywgbV9pbnRyaW5zaWNzKSkgeworICAgICAgICAgICAg
ICAgIG1fcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmV3RnVuY3Rpb24pKTsKKyAgICAgICAgICAg
ICAgICBmdW5jdGlvbiA9IG1fcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpLmxh
c3QoKS5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZnVu
Y3Rpb24pIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLT5wYXJh
bWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5
cGU+JikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29s
PihtYXRjaEFuZENvbW1pdChmdW5jdGlvbi0+cGFyYW1ldGVycygpW2ldLnR5cGUoKSwgcmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgIH0pLCB0
eXBlc1tpXS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCpmdW5jdGlv
bik7CisKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZjYWxsRXhwcmVz
c2lvbiwgZnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChh
ZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKK3ByaXZhdGU6CisKKyAg
ICAvKmNsYXNzIFJlc29sdmluZ1R5cGVIYXNoVHJhaXRzIDogcHVibGljIFNpbXBsZUNsYXNzSGFz
aFRyYWl0czxSZXNvbHZpbmdUeXBlPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRp
YyBSZXNvbHZpbmdUeXBlJiBlbXB0eVZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVz
b2x2aW5nVHlwZT4gZW1wdHlWYWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVZhbHVlLmdl
dCgpOworICAgICAgICB9CisKKyAgICAgICAgdHlwZWRlZiBSZXNvbHZpbmdUeXBlJiBQZWVrVHlw
ZTsKKyAgICAgICAgc3RhdGljIFBlZWtUeXBlIHBlZWsoUmVzb2x2aW5nVHlwZSYgdmFsdWUpIHsg
cmV0dXJuIHZhbHVlOyB9CisgICAgICAgIHR5cGVkZWYgUmVzb2x2aW5nVHlwZSYmIFRha2VUeXBl
OworICAgICAgICBzdGF0aWMgVGFrZVR5cGUgdGFrZShSZXNvbHZpbmdUeXBlJiYgdmFsdWUpIHsg
cmV0dXJuIFdURk1vdmUodmFsdWUpOyB9CisgICAgfTsqLworCisgICAgSGFzaE1hcDxBU1Q6OkV4
cHJlc3Npb24qLCBSZXNvbHZpbmdUeXBlIC8qLCBXVEY6OlB0ckhhc2g8QVNUOjpFeHByZXNzaW9u
Kj4sIFdURjo6SGFzaFRyYWl0czxBU1Q6OkV4cHJlc3Npb24qPiwgUmVzb2x2aW5nVHlwZUhhc2hU
cmFpdHMqLz4gbV90eXBlTWFwOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3ZlcnRleEVudHJ5UG9p
bnRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50RW50cnlQb2ludHM7CisgICAgSGFz
aFNldDxTdHJpbmc+IG1fY29tcHV0ZUVudHJ5UG9pbnRzOworICAgIGNvbnN0IEludHJpbnNpY3Mm
IG1faW50cmluc2ljczsKKyAgICBQcm9ncmFtJiBtX3Byb2dyYW07Cit9OworCitib29sIGNoZWNr
KFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgQ2hlY2tlciBjaGVja2VyKHByb2dyYW0uaW50cmlu
c2ljcygpLCBwcm9ncmFtKTsKKyAgICBjaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFt
KTsKKyAgICByZXR1cm4gIWNoZWNrZXIuZXJyb3IoKTsKK30KKworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVj
a2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWQyNjhkNzM0MWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TENoZWNrZXIuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
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
SExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK2Jvb2wgY2hlY2soUHJvZ3JhbSYpOworCit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhiNWI0YjNmNTVlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRy
eVBvaW50SXRlbXMuY3BwCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJM
RShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEdhdGhlckVu
dHJ5UG9pbnRJdGVtcy5oIgorCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1
ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEdhdGhlcmVyIDogcHVi
bGljIFZpc2l0b3IgeworcHVibGljOgorICAgIEdhdGhlcmVyKGNvbnN0IEludHJpbnNpY3MmIGlu
dHJpbnNpY3MsIEFTVDo6U2VtYW50aWMqIHNlbWFudGljID0gbnVsbHB0cikKKyAgICAgICAgOiBt
X2ludHJpbnNpY3MoaW50cmluc2ljcykKKyAgICAgICAgLCBtX2N1cnJlbnRTZW1hbnRpYyhzZW1h
bnRpYykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+R2F0aGVyZXIoKSA9IGRlZmF1bHQ7
CisKKyAgICB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIG1fY3VycmVudFNlbWFudGljID0g
bnVsbHB0cjsKKyAgICB9CisKKyAgICBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiYgdGFrZUVudHJ5
UG9pbnRJdGVtcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX2VudHJ5UG9pbnRJ
dGVtcyk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlv
biYpCisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1f
ZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShtX3R5cGVSZWZlcmVuY2VzLmxh
c3QoKS5nZXQoKSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobWF0Y2hl
cyhuYXRpdmVUeXBlRGVjbGFyYXRpb24sIG1faW50cmluc2ljcy52b2lkVHlwZSgpKSkgeworICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShtX3R5cGVSZWZl
cmVuY2VzLmxhc3QoKS5nZXQoKSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24p
CisgICAgeworICAgICAgICBpZiAobV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVs
ZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkp
CisgICAgICAgICAgICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSAmKnN0cnVjdHVyZUVsZW1lbnQu
c2VtYW50aWMoKTsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVFbGVt
ZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5p
dGlvbiYgdHlwZURlZmluaXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQodHlwZURlZmluaXRp
b24udHlwZSgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlRGVmaW5pdGlvbi50
eXBlKCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBl
UmVmZXJlbmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRU
eXBlKCkpOworICAgICAgICBtX3R5cGVSZWZlcmVuY2VzLmFwcGVuZCh0eXBlUmVmZXJlbmNlKTsK
KyAgICAgICAgYXV0byBkZXB0aCA9IG1fdHlwZVJlZmVyZW5jZXMuc2l6ZSgpOworICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKGRlcHRoLCBtX3R5cGVSZWZlcmVuY2VzLnNpemUoKSA9PSBkZXB0aCk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkK
KyAgICB7CisgICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRy
eVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKHBvaW50ZXJUeXBlLCAqbV9jdXJyZW50
U2VtYW50aWMpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpCisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNl
bWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRl
bShhcnJheVJlZmVyZW5jZVR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkKKyAgICB7CisgICAgICAgIGlm
ICghbV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5k
KEVudHJ5UG9pbnRJdGVtKGFycmF5VHlwZSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFy
YXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoIW1fY3VycmVudFNlbWFudGljKTsKKyAgICAg
ICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKKyAgICAgICAgICAgIG1fY3Vy
cmVudFNlbWFudGljID0gJip2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCk7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIGNvbnN0IEludHJpbnNpY3MmIG1faW50cmluc2ljczsKKyAgICBBU1Q6
OlNlbWFudGljKiBtX2N1cnJlbnRTZW1hbnRpYyB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlR5cGVSZWZlcmVuY2U+PiBtX3R5cGVSZWZlcmVuY2Vz
OworICAgIFZlY3RvcjxFbnRyeVBvaW50SXRlbT4gbV9lbnRyeVBvaW50SXRlbXM7Cit9OworCitP
cHRpb25hbDxFbnRyeVBvaW50SXRlbXM+IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhjb25zdCBJbnRy
aW5zaWNzJiBpbnRyaW5zaWNzLCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZp
bml0aW9uKQoreworICAgIEFTU0VSVChmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUo
KSk7CisgICAgR2F0aGVyZXIgaW5wdXRHYXRoZXJlcihpbnRyaW5zaWNzKTsKKyAgICBmb3IgKGF1
dG8mIHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkpIHsKKyAgICAg
ICAgaW5wdXRHYXRoZXJlci5yZXNldCgpOworICAgICAgICBpbnB1dEdhdGhlcmVyLmNoZWNrRXJy
b3JBbmRWaXNpdChwYXJhbWV0ZXIpOworICAgICAgICBpZiAoaW5wdXRHYXRoZXJlci5lcnJvcigp
KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisgICAgR2F0aGVyZXIg
b3V0cHV0R2F0aGVyZXIoaW50cmluc2ljcywgZnVuY3Rpb25EZWZpbml0aW9uLnNlbWFudGljKCkg
PyAmKmZ1bmN0aW9uRGVmaW5pdGlvbi5zZW1hbnRpYygpIDogbnVsbHB0cik7CisgICAgb3V0cHV0
R2F0aGVyZXIuY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOwor
ICAgIGlmIChvdXRwdXRHYXRoZXJlci5lcnJvcigpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgcmV0dXJuIHt7IGlucHV0R2F0aGVyZXIudGFrZUVudHJ5UG9pbnRJdGVtcygp
LCBvdXRwdXRHYXRoZXJlci50YWtlRW50cnlQb2ludEl0ZW1zKCkgfX07Cit9CisKK30KKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFBhcmFtZXRlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpyZW5h
bWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQYXJh
bWV0ZXIuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaAppbmRleCA5MjU4NmY4NjkxZi4uZTFlYjgyOTIxYTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFBhcmFtZXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKQEAgLTI3LDEzICsyNyw5IEBACiAKICNpZiBFTkFC
TEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNMUXVh
bGlmaWVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMVHlw
ZS5oIgotI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsMzYgKzM3LDMwIEBAIG5hbWVzcGFjZSBX
SExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBQYXJhbWV0ZXIgOiBwdWJsaWMgVmFs
dWUgewotcHVibGljOgotICAgIFBhcmFtZXRlcihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFF1YWxp
ZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5cGUsIE9w
dGlvbmFsPFN0cmluZz4mJiBuYW1lLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFudGlj
KQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX3F1YWxp
ZmllcnMoV1RGTW92ZShxdWFsaWZpZXJzKSkKLSAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBl
KSkKLSAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBtX3NlbWFudGlj
KFdURk1vdmUoc2VtYW50aWMpKQotICAgIHsKLSAgICB9CitjbGFzcyBGdW5jdGlvbkRlZmluaXRp
b247CiAKLSAgICB2aXJ0dWFsIH5QYXJhbWV0ZXIoKSA9IGRlZmF1bHQ7Cit9CiAKLSAgICBQYXJh
bWV0ZXIoY29uc3QgUGFyYW1ldGVyJikgPSBkZWxldGU7Ci0gICAgUGFyYW1ldGVyKFBhcmFtZXRl
ciYmKSA9IGRlZmF1bHQ7CitjbGFzcyBJbnRyaW5zaWNzOworY2xhc3MgVW5uYW1lZFR5cGU7CiAK
LSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQotICAgIE9wdGlvbmFsPEFTVDo6
U2VtYW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KK3N0cnVjdCBFbnRy
eVBvaW50SXRlbSB7CisgICAgRW50cnlQb2ludEl0ZW0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1l
ZFR5cGUsIEFTVDo6U2VtYW50aWMmIHNlbWFudGljKQorICAgICAgICA6IHVubmFtZWRUeXBlKHVu
bmFtZWRUeXBlKQorICAgICAgICAsIHNlbWFudGljKHNlbWFudGljKQorICAgIHsKKyAgICB9CiAK
LXByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFF1YWxpZmllcnMgbV9x
dWFsaWZpZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKLSAgICBP
cHRpb25hbDxTdHJpbmc+IG1fbmFtZTsKLSAgICBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiBtX3Nl
bWFudGljOworICAgIEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlOworICAgIEFTVDo6U2Vt
YW50aWMmIHNlbWFudGljOwogfTsKIAotdHlwZWRlZiBWZWN0b3I8UGFyYW1ldGVyPiBQYXJhbWV0
ZXJzOworc3RydWN0IEVudHJ5UG9pbnRJdGVtcyB7CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVt
PiBpbnB1dHM7CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBvdXRwdXRzOworfTsKIAotfQor
T3B0aW9uYWw8RW50cnlQb2ludEl0ZW1zPiBnYXRoZXJFbnRyeVBvaW50SXRlbXMoY29uc3QgSW50
cmluc2ljcyYsIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CiAKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ2ZTI2MzIwMTRhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJ
bmZlclR5cGVzLmNwcApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVz
LmgiCisKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNv
bHZhYmxlVHlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7
CisKK3N0YXRpYyBib29sIG1hdGNoZXMoY29uc3QgQVNUOjpUeXBlJiB1bmlmeVRoaXMsIGNvbnN0
IEFTVDo6VHlwZSYgdW5pZnlPdGhlcikKK3sKKyAgICBpZiAoJnVuaWZ5VGhpcyA9PSAmdW5pZnlP
dGhlcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+
KHVuaWZ5VGhpcykgJiYgaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5T3RoZXIpKSB7CisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgICAgICBhdXRvJiBuYW1lZFRoaXMgPSBkb3duY2FzdDxBU1Q6Ok5h
bWVkVHlwZT4odW5pZnlUaGlzKTsKKyAgICAgICAgYXV0byYgbmFtZWRPdGhlciA9IGRvd25jYXN0
PEFTVDo6TmFtZWRUeXBlPih1bmlmeU90aGVyKTsKKyAgICAgICAgQVNTRVJUKCFpczxBU1Q6OlR5
cGVEZWZpbml0aW9uPihuYW1lZFRoaXMpICYmICFpczxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1l
ZE90aGVyKSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAo
aXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlUaGlzKSAmJiBpczxBU1Q6OlVubmFtZWRUeXBlPih1
bmlmeU90aGVyKSkgeworICAgICAgICBhdXRvJiB1bm5hbWVkVGhpcyA9IGRvd25jYXN0PEFTVDo6
VW5uYW1lZFR5cGU+KHVuaWZ5VGhpcyk7CisgICAgICAgIGF1dG8mIHVubmFtZWRPdGhlciA9IGRv
d25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5T3RoZXIpOworICAgICAgICBBU1NFUlQoIWlz
PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFRoaXMpICYmICFpczxBU1Q6OlR5cGVSZWZlcmVu
Y2U+KHVubmFtZWRPdGhlcikpOworICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5u
YW1lZFRoaXMpICYmIGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRPdGhlcikpIHsKKyAgICAg
ICAgICAgIGF1dG8mIHBvaW50ZXJUaGlzID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5u
YW1lZFRoaXMpOworICAgICAgICAgICAgYXV0byYgcG9pbnRlck90aGVyID0gZG93bmNhc3Q8QVNU
OjpQb2ludGVyVHlwZT4odW5uYW1lZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChwb2ludGVyVGhp
cy5hZGRyZXNzU3BhY2UoKSAhPSBwb2ludGVyT3RoZXIuYWRkcmVzc1NwYWNlKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMocG9pbnRl
clRoaXMuZWxlbWVudFR5cGUoKSwgcG9pbnRlck90aGVyLmVsZW1lbnRUeXBlKCkpOworICAgICAg
ICB9CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFRoaXMp
ICYmIGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkT3RoZXIpKXsKKyAgICAgICAg
ICAgIGF1dG8mIGFycmF5UmVmZXJlbmNlVGhpcyA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZU90
aGVyID0gZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhlcik7Cisg
ICAgICAgICAgICBpZiAoYXJyYXlSZWZlcmVuY2VUaGlzLmFkZHJlc3NTcGFjZSgpICE9IGFycmF5
UmVmZXJlbmNlT3RoZXIuYWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlSZWZlcmVuY2VUaGlzLmVsZW1l
bnRUeXBlKCksIGFycmF5UmVmZXJlbmNlT3RoZXIuZWxlbWVudFR5cGUoKSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpB
cnJheVR5cGU+KHVubmFtZWRPdGhlcikpIHsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5VGhpcyA9
IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRv
JiBhcnJheU90aGVyID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRPdGhlcik7Cisg
ICAgICAgICAgICBpZiAoYXJyYXlUaGlzLm51bUVsZW1lbnRzKCkgIT0gYXJyYXlPdGhlci5udW1F
bGVtZW50cygpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiBtYXRjaGVzKGFycmF5VGhpcy50eXBlKCksIGFycmF5T3RoZXIudHlwZSgpKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25z
dCBBU1Q6OlVubmFtZWRUeXBlJiBvdGhlcikKK3sKKyAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVk
VHlwZS51bmlmeU5vZGUoKSwgb3RoZXIudW5pZnlOb2RlKCkpOworfQorCitib29sIG1hdGNoZXMo
Y29uc3QgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSwgY29uc3QgQVNUOjpOYW1lZFR5cGUmIG90
aGVyKQoreworICAgIHJldHVybiBtYXRjaGVzKG5hbWVkVHlwZS51bmlmeU5vZGUoKSwgb3RoZXIu
dW5pZnlOb2RlKCkpOworfQorCitib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYg
dW5uYW1lZFR5cGUsIGNvbnN0IEFTVDo6TmFtZWRUeXBlJiBvdGhlcikKK3sKKyAgICByZXR1cm4g
bWF0Y2hlcyh1bm5hbWVkVHlwZS51bmlmeU5vZGUoKSwgb3RoZXIudW5pZnlOb2RlKCkpOworfQor
CitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0
KEFTVDo6VHlwZSYgdW5pZnlOb2RlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlw
ZSkKK3sKKyAgICBpZiAoIXJlc29sdmFibGVUeXBlLmNhblJlc29sdmUodW5pZnlOb2RlKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5
cGU+IHJlc3VsdDsKKyAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAg
ICAgICAgYXV0byYgbmFtZWRVbmlmeU5vZGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5p
ZnlOb2RlKTsKKyAgICAgICAgcmVzdWx0ID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVy
OjpUb2tlbihuYW1lZFVuaWZ5Tm9kZS5vcmlnaW4oKSksIG5hbWVkVW5pZnlOb2RlKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgcmVzdWx0ID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlO
b2RlKS5jbG9uZSgpOworICAgIEFTU0VSVCghcmVzb2x2YWJsZVR5cGUucmVzb2x2ZWRUeXBlKCkp
OworICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUocmVzdWx0LT5jbG9uZSgpKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hB
bmRDb21taXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIEFTVDo6UmVzb2x2YWJsZVR5
cGUmIHJlc29sdmFibGVUeXBlKQoreworICAgIHJldHVybiBtYXRjaEFuZENvbW1pdCh1bm5hbWVk
VHlwZS51bmlmeU5vZGUoKSwgcmVzb2x2YWJsZVR5cGUpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlw
ZSwgQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCit7CisgICAgcmV0dXJuIG1h
dGNoQW5kQ29tbWl0KG5hbWVkVHlwZS51bmlmeU5vZGUoKSwgcmVzb2x2YWJsZVR5cGUpOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpS
ZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUxLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNv
bHZhYmxlVHlwZTIpCit7CisgICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZTEucmVzb2x2ZWRUeXBl
KCkpOworICAgIEFTU0VSVCghcmVzb2x2YWJsZVR5cGUyLnJlc29sdmVkVHlwZSgpKTsKKyAgICBp
ZiAoaXM8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpICYmIGlzPEFTVDo6
RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKSkgeworICAgICAgICByZXNvbHZhYmxl
VHlwZTEucmVzb2x2ZShkb3duY2FzdDxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVU
eXBlMSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXNvbHZhYmxlVHlwZTIu
cmVzb2x2ZShkb3duY2FzdDxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMiku
cHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpG
bG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgp
OworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVU
eXBlMSkgJiYgaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikpIHsK
KyAgICAgICAgcmVzb2x2YWJsZVR5cGUxLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0
ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAg
ICAgICByZXNvbHZhYmxlVHlwZTIucmVzb2x2ZShkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFs
VHlwZT4ocmVzb2x2YWJsZVR5cGUyKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAg
IHJldHVybiBkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUx
KS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpVbnNpZ25l
ZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKSkgeworICAgICAgICByZXNvbHZh
YmxlVHlwZTEucmVzb2x2ZShkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBl
PihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmVz
b2x2YWJsZVR5cGUyLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZT4ocmVzb2x2YWJsZVR5cGUyKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAg
IHJldHVybiBkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZh
YmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgIH0KKyAgICBpZiAoaXM8QVNU
OjpOdWxsTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpOdWxsTGl0ZXJh
bFR5cGU+KHJlc29sdmFibGVUeXBlMikpIHsKKyAgICAgICAgLy8gRklYTUU6IFRyeWluZyB0byBt
YXRjaCBudWxscHRyIGFuZCBudWxscHRyIGZhaWxzLgorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVu
bmFtZWRUeXBlPiBjb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCit7
CisgICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgaWYgKGlz
PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7CisgICAgICAgIHJlc29s
dmFibGVUeXBlLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZh
YmxlVHlwZSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4gZG93bmNh
c3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkucHJlZmVycmVkVHlwZSgp
LmNsb25lKCk7CisgICAgfQorICAgIGlmIChpczxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVz
b2x2YWJsZVR5cGUpKSB7CisgICAgICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUoZG93bmNhc3Q8
QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKS5wcmVmZXJyZWRUeXBlKCku
Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlw
ZT4ocmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgIH0KKyAgICBp
ZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7
CisgICAgICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgp
KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGU+KHJlc29sdmFibGVUeXBlKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsKKyAgICB9CisgICAg
aWYgKGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFRyeWluZyB0byBtYXRjaCBudWxscHRyIGFuZCBudWxscHRyIGZhaWxzLgorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jv
b2wgaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMoQVNUOjpOYW1lZFR5cGUmIHBvc3NpYmxlVHlw
ZSwgQVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKQoreworICAgIGlmIChpczxBU1Q6
OlR5cGVEZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpCisgICAgICAgIHx8IGlzPEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbj4ocG9zc2libGVUeXBlKQorICAgICAgICB8fCBpczxBU1Q6OkVudW1lcmF0
aW9uRGVmaW5pdGlvbj4ocG9zc2libGVUeXBlKSkgeworICAgICAgICByZXR1cm4gdHlwZUFyZ3Vt
ZW50cy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgQVNTRVJUKGlzPEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uPihwb3NzaWJsZVR5cGUpKTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRp
b24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocG9zc2libGVUeXBlKTsK
KyAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgIT0g
dHlwZUFyZ3VtZW50cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgQVNUOjpDb25zdGFudEV4cHJlc3Npb24qIHR5cGVBcmd1bWVu
dEV4cHJlc3Npb24gPSBudWxscHRyOworICAgICAgICBBU1Q6OlR5cGVSZWZlcmVuY2UqIHR5cGVB
cmd1bWVudFR5cGVSZWZlcmVuY2UgPSBudWxscHRyOworICAgICAgICBBU1Q6OkNvbnN0YW50RXhw
cmVzc2lvbiogbmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVzc2lvbiA9IG51bGxwdHI7CisgICAgICAg
IEFTVDo6VHlwZVJlZmVyZW5jZSogbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSA9IG51
bGxwdHI7CisKKyAgICAgICAgYXV0byBhc3NpZ24gPSBbJl0oQVNUOjpUeXBlQXJndW1lbnQmIHR5
cGVBcmd1bWVudCwgQVNUOjpDb25zdGFudEV4cHJlc3Npb24qJiBleHByZXNzaW9uLCBBU1Q6OlR5
cGVSZWZlcmVuY2UqJiB0eXBlUmVmZXJlbmNlKSB7CisgICAgICAgICAgICBXVEY6OnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJl
c3Npb24pIHsKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gJmNvbnN0YW50RXhwcmVzc2lv
bjsKKyAgICAgICAgICAgIH0sIFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVmZXJlbmNl
PiYgdGhlVHlwZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgICAgIHR5cGVSZWZlcmVuY2UgPSB0
aGVUeXBlUmVmZXJlbmNlLmdldCgpOworICAgICAgICAgICAgfSksIHR5cGVBcmd1bWVudCk7Cisg
ICAgICAgIH07CisKKyAgICAgICAgYXNzaWduKHR5cGVBcmd1bWVudHNbaV0sIHR5cGVBcmd1bWVu
dEV4cHJlc3Npb24sIHR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpOworICAgICAgICBhc3NpZ24o
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVtpXSwgbmF0aXZlVHlwZUFyZ3Vt
ZW50RXhwcmVzc2lvbiwgbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSk7CisKKyAgICAg
ICAgaWYgKHR5cGVBcmd1bWVudEV4cHJlc3Npb24gJiYgbmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVz
c2lvbikgeworICAgICAgICAgICAgaWYgKCF0eXBlQXJndW1lbnRFeHByZXNzaW9uLT5tYXRjaGVz
KCpuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSAmJiBu
YXRpdmVUeXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlKSB7CisgICAgICAgICAgICBpZiAoIW1hdGNo
ZXMoKnR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UsICpuYXRpdmVUeXBlQXJndW1lbnRUeXBlUmVm
ZXJlbmNlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBpbmZlclR5cGVzRm9yQ2FsbChBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rpb24sIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgT3B0aW9uYWw8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+JiBjYXN0UmV0dXJuVHlwZSkKK3sKKyAg
ICBpZiAocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IGFyZ3VtZW50VHlw
ZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgeworICAgICAg
ICBhdXRvIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAg
ICAgICAgcmV0dXJuIG1hdGNoZXMocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlw
ZSgpLCAqdW5uYW1lZFR5cGUpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAgICAgICAgICAg
cmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29s
dmUocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpKTsKKyAgICAgICAgfSks
IGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChjYXN0UmV0dXJuVHlwZSAmJiAhbWF0
Y2hlcyhjYXN0UmV0dXJuVHlwZS0+Z2V0KCksIHBvc3NpYmxlRnVuY3Rpb24udHlwZSgpKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit9CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEluZmVyVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
SW5mZXJUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42M2Iw
NjEwYzNlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMSW5mZXJUeXBlcy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFJlc29s
dmluZ1R5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgPG1l
bW9yeT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1l
c3BhY2UgQVNUIHsKKworY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNzIE5hbWVkVHlw
ZTsKK2NsYXNzIFJlc29sdmFibGVUeXBlOworY2xhc3MgVW5uYW1lZFR5cGU7CisKK30KKworYm9v
bCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBBU1Q6OlVubmFtZWRUeXBl
Jik7Citib29sIG1hdGNoZXMoY29uc3QgQVNUOjpOYW1lZFR5cGUmLCBjb25zdCBBU1Q6Ok5hbWVk
VHlwZSYpOworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBBU1Q6
Ok5hbWVkVHlwZSYpOworLy8gRklYTUU6IElzIGFueW9uZSBhY3R1YWxseSB1c2luZyB0aGUgcmV0
dXJuIHR5cGUgaGVyZT8KK3N0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFu
ZENvbW1pdChBU1Q6OlVubmFtZWRUeXBlJiwgQVNUOjpSZXNvbHZhYmxlVHlwZSYpOworc3RkOjp1
bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6TmFtZWRUeXBl
JiwgQVNUOjpSZXNvbHZhYmxlVHlwZSYpOworc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5
cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmLCBBU1Q6OlJlc29sdmFibGVU
eXBlJik7CitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gY29tbWl0KEFTVDo6UmVz
b2x2YWJsZVR5cGUmKTsKK2Jvb2wgaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMoQVNUOjpOYW1l
ZFR5cGUmIHBvc3NpYmxlVHlwZSwgQVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKTsK
K2Jvb2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBwb3NzaWJs
ZUZ1bmN0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4m
IGFyZ3VtZW50VHlwZXMsIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1l
ZFR5cGU+PiYgY2FzdFJldHVyblR5cGUpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2Y0ZmJjM2E3NDMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEludHJpbnNpY3MuY3BwCkBAIC0wLDAgKzEsNDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJM
RShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNp
Y3MuaCIKKworI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNp
bmNsdWRlIDxhbGdvcml0aG0+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdI
TFNMIHsKKworSW50cmluc2ljczo6SW50cmluc2ljcygpCisgICAgOiBtX3RleHR1cmVUeXBlTmFt
ZXMgeyBTdHJpbmcoIlRleHR1cmUxRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAor
ICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUxRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJUZXh0dXJlMURBcnJheSIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUxREFycmF5
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRl
eHR1cmUyRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3Ry
aW5nKCJSV1RleHR1cmUyRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAg
ICAgICAgU3RyaW5nKCJUZXh0dXJlMkRBcnJheSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLAorICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUyREFycmF5IiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUzRCIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUz
RCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJU
ZXh0dXJlQ3ViZSIsICBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSB9CisgICAgLCBtX3Rl
eHR1cmVJbm5lclR5cGVOYW1lcyB7IFN0cmluZygidWNoYXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygidXNob3J0IiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoInVpbnQiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiY2hhciIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJzaG9ydCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJpbnQiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiaGFsZiIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJmbG9hdCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0KKyAgICAsIG1fZGVwdGhUZXh0dXJlSW5uZXJU
eXBlcyB7IFN0cmluZygiaGFsZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAg
ICAgICAgICAgU3RyaW5nKCJmbG9hdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0K
K3sKKyAgICBBU1NFUlQobV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKSA9PSAxMSk7IC8vIGZ1bGxU
ZXh0dXJlcyBoYXJkY29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorICAgIEFTU0VSVCht
X3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCkgPT0gOCk7IC8vIGZ1bGxUZXh0dXJlcyBoYXJk
Y29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorICAgIEFTU0VSVChtX2RlcHRoVGV4dHVy
ZUlubmVyVHlwZXMuc2l6ZSgpID09IDIpOyAvLyB0ZXh0dXJlRGVwdGgyRCAmIGZyaWVuZHMgaGFy
ZGNvZGVzIHRoZSBsZW5ndGggb2YgdGhpcyBhcnJheS4KK30KKwordm9pZCBJbnRyaW5zaWNzOjph
ZGQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJikKK3sKKyAgICAvLyBGSVhNRTogUG9w
dWxhdGUgdGhpcy4KK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRQcmltaXRpdmUoQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgIT0gMCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0g
InZvaWQiKQorICAgICAgICBtX3ZvaWRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAg
ICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJib29sIikKKyAgICAg
ICAgbV9ib29sVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0
aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidWNoYXIiKSB7CisgICAgICAgIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24u
c2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJl
c2VudEludGVnZXIoW10oaW50IHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4ID49IDAgJiYgeCA8
PSAweEZGOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENh
blJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4KSB7CisgICAgICAgICAgICBy
ZXR1cm4geCA8PSAweEZGOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8dWludDhfdD4oeCkpID09IHg7CisgICAg
ICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0U3VjY2Vzc29yKFtdKGlu
dDY0X3QgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oeCArIDEpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9u
LnNldEZvcm1hdFZhbHVlRnJvbUludGVnZXIoW10oaW50IHgpIC0+IGludDY0X3QgeworICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAg
ICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdl
cihbXSh1bnNpZ25lZCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1aW50OF90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRJdGVyYXRlQWxsVmFsdWVzKFtdKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2
NF90KT4mIGNhbGxiYWNrKSB7CisgICAgICAgICAgICBmb3IgKGludDY0X3QgaSA9IDA7IGkgPCAw
eDEwMDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGkpKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1f
dWNoYXJUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVzaG9ydCIpIHsKKyAgICAgICAgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnNldElzSW50KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXRJc051bWJlcigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVz
ZW50SW50ZWdlcihbXShpbnQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPj0gMCAmJiB4IDw9
IDB4RkZGRjsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRD
YW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAgICAgICAgICAg
cmV0dXJuIHggPD0gMHhGRkZGOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHgpKSA9PSB4Owor
ICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldFN1Y2Nlc3Nvcihb
XShpbnQ2NF90IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVpbnQxNl90Pih4ICsgMSk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFy
YXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tSW50ZWdlcihbXShpbnQgeCkgLT4gaW50NjRfdCB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHgpOworICAgICAgICB9KTsK
KyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbVVuc2lnbmVk
SW50ZWdlcihbXSh1bnNpZ25lZCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1aW50MTZfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0SXRlcmF0ZUFsbFZhbHVlcyhbXShjb25zdCBzdGQ6OmZ1bmN0aW9uPGJv
b2woaW50NjRfdCk+JiBjYWxsYmFjaykgeworICAgICAgICAgICAgZm9yIChpbnQ2NF90IGkgPSAw
OyBpIDwgMHgxMDAwMDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGkpKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg
ICAgICAgIG1fdXNob3J0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNl
IGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1aW50IikgeworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRD
YW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA+PSAw
OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJl
c2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCkgeworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVw
cmVzZW50RmxvYXQoW10oZmxvYXQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGZsb2F0PihzdGF0aWNfY2FzdDx1aW50MzJfdD4oeCkpID09IHg7CisgICAgICAgIH0pOworICAg
ICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0U3VjY2Vzc29yKFtdKGludDY0X3QgeCkgLT4g
aW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHggKyAx
KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRW
YWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1aW50MzJfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVU
eXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2ln
bmVkIHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQz
Ml90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJ
dGVyYXRlQWxsVmFsdWVzKFtdKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2NF90KT4mIGNh
bGxiYWNrKSB7CisgICAgICAgICAgICBmb3IgKGludDY0X3QgaSA9IDA7IGkgPCAweDEwMDAwMDAw
MDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGkpKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1fdWlu
dFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIH0gZWxzZSBpZiAobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiY2hhciIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldElzSW50KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051
bWJlcigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNTaWduZWQoKTsKKyAg
ICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50
IHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4ID49IC0xMjggJiYgeCA8PSAxMjc7CisgICAgICAg
IH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWdu
ZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4IDw9IDEyNzsK
KyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNl
bnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHN0YXRpY19jYXN0PGludDhfdD4oeCkpID09IHg7CisgICAgICAgIH0pOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0U3VjY2Vzc29yKFtdKGludDY0X3QgeCkgLT4gaW50NjRf
dCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50OF90Pih4ICsgMSk7CisgICAg
ICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9t
SW50ZWdlcihbXShpbnQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50OF90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgLT4g
aW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50OF90Pih4KTsKKyAg
ICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJdGVyYXRlQWxsVmFs
dWVzKFtdKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2NF90KT4mIGNhbGxiYWNrKSB7Cisg
ICAgICAgICAgICBmb3IgKGludDY0X3QgaSA9IC0xMjg7IGkgPCAxMjg7ICsraSkgeworICAgICAg
ICAgICAgICAgIGlmIChjYWxsYmFjayhpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBtX2NoYXJUeXBlID0gJm5hdGl2ZVR5
cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gInNob3J0IikgeworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQo
KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAg
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc1NpZ25lZCgpOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQgeCkgeworICAgICAgICAg
ICAgcmV0dXJuIHggPj0gLTMyNzY4ICYmIHggPD0gMzI3Njc7CisgICAgICAgIH0pOworICAgICAg
ICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtd
KHVuc2lnbmVkIHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4IDw9IDMyNzY3OworICAgICAgICB9
KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtd
KGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGlj
X2Nhc3Q8aW50MTZfdD4oeCkpID09IHg7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0U3VjY2Vzc29yKFtdKGludDY0X3QgeCkgLT4gaW50NjRfdCB7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MTZfdD4oeCArIDEpOworICAgICAgICB9KTsK
KyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbUludGVnZXIo
W10oaW50IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dDE2X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNl
dEZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4KSAtPiBpbnQ2NF90
IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQxNl90Pih4KTsKKyAgICAgICAg
fSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJdGVyYXRlQWxsVmFsdWVzKFtd
KGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2NF90KT4mIGNhbGxiYWNrKSB7CisgICAgICAg
ICAgICBmb3IgKGludDY0X3QgaSA9IC0zMjc2ODsgaSA8IDMyNzY4OyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoY2FsbGJhY2soaSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgbV9zaG9ydFR5cGUgPSAmbmF0aXZlVHlw
ZURlY2xhcmF0aW9uOworICAgIH0gZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUo
KSA9PSAiaW50IikgeworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsK
KyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc1NpZ25lZCgpOworICAgICAgICBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNl
dENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4KSB7CisgICAgICAgICAg
ICByZXR1cm4geCA8PSAyMTQ3NDgzNjQ3OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4oeCkpID09
IHg7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0U3VjY2Vz
c29yKFtdKGludDY0X3QgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oeCArIDEpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbUludGVnZXIoW10oaW50IHgpIC0+IGludDY0X3Qg
eworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHgpOworICAgICAgICB9
KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbVVuc2ln
bmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQzMl90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5zZXRJdGVyYXRlQWxsVmFsdWVzKFtdKGNvbnN0IHN0ZDo6ZnVuY3Rpb248
Ym9vbChpbnQ2NF90KT4mIGNhbGxiYWNrKSB7CisgICAgICAgICAgICBmb3IgKGludDY0X3QgaSA9
IC0yMTQ3NDgzNjQ3OyBpIDwgMjE0NzQ4MzY0ODsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGNhbGxiYWNrKGkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSk7CisgICAgICAgIG1faW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247
CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJoYWxmIikg
eworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAg
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzRmxvYXRpbmcoKTsKKyAgICAgICAgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50KSB7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRDYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0KSB7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG1faGFsZlR5cGUgPSAmbmF0aXZlVHlwZURlY2xh
cmF0aW9uOworICAgIH0gZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
ZmxvYXQiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOwor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNGbG9hdGluZygpOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQpIHsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbV9mbG9hdFR5cGUgPSAmbmF0aXZl
VHlwZURlY2xhcmF0aW9uOworICAgIH0KKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRp
b24ubmFtZSgpID09ICJhdG9taWNfaW50IikKKyAgICAgICAgbV9hdG9taWNJbnRUeXBlID0gJm5h
dGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24u
bmFtZSgpID09ICJhdG9taWNfdWludCIpCisgICAgICAgIG1fYXRvbWljVWludFR5cGUgPSAmbmF0
aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5u
YW1lKCkgPT0gInNhbXBsZXIiKQorICAgICAgICBtX3NhbXBsZXJUeXBlID0gJm5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbjsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6OmFkZFZlY3RvcihBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpICE9ICJ2ZWN0b3IiKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5z
aXplKCkgPT0gMik7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJn
dW1lbnRzKClbMF0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNv
bnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsx
XSkpOworICAgIGF1dG8mIGlubmVyVHlwZVBvaW50ZXIgPSBXVEY6OmdldDxzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVu
dHMoKVswXSk7CisgICAgYXV0byYgbGVuZ3RoRXhwcmVzc2lvbiA9IFdURjo6Z2V0PEFTVDo6Q29u
c3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFd
KTsKKyAgICBBU1NFUlQoaW5uZXJUeXBlUG9pbnRlcik7CisgICAgYXV0byYgaW5uZXJUeXBlID0g
KmlubmVyVHlwZVBvaW50ZXI7CisgICAgQVNTRVJUKGlubmVyVHlwZS50eXBlQXJndW1lbnRzKCku
c2l6ZSgpID09IDApOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiogYXJyYXk7Cisg
ICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImJvb2wiKQorICAgICAgICBhcnJheSA9IG1fdmVj
dG9yQm9vbDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJ1Y2hhciIpCisgICAg
ICAgIGFycmF5ID0gbV92ZWN0b3JVY2hhcjsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgp
ID09ICJ1c2hvcnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yVXNob3J0OworICAgIGVsc2Ug
aWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gInVpbnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9y
VWludDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJjaGFyIikKKyAgICAgICAg
YXJyYXkgPSBtX3ZlY3RvckNoYXI7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAi
c2hvcnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yU2hvcnQ7CisgICAgZWxzZSBpZiAoaW5u
ZXJUeXBlLm5hbWUoKSA9PSAiaW50IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvckludDsKKyAg
ICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJoYWxmIikKKyAgICAgICAgYXJyYXkgPSBt
X3ZlY3RvckhhbGY7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiZmxvYXQiKQor
ICAgICAgICBhcnJheSA9IG1fdmVjdG9yRmxvYXQ7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICBpbnQgbGVuZ3RoID0gbGVuZ3RoRXhwcmVzc2lvbi5pbnRlZ2Vy
TGl0ZXJhbCgpLnZhbHVlKCk7CisgICAgQVNTRVJUKGxlbmd0aCA+PSAyICYmIGxlbmd0aCA8PSA0
KTsKKyAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNWZWN0b3IoKTsKKyAgICBhcnJheVts
ZW5ndGggLSAyXSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgSW50cmluc2ljczo6YWRkTWF0cml4KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
JiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5uYW1lKCkgIT0gIm1hdHJpeCIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VS
VChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAzKTsKKyAg
ICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBl
UmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOwor
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgQVNTRVJU
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMl0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGVQ
b2ludGVyID0gV1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgIGF1dG8mIHJvd0V4
cHJlc3Npb24gPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSk7CisgICAgYXV0byYgY29sdW1uRXhwcmVzc2lv
biA9IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRp
b24udHlwZUFyZ3VtZW50cygpWzJdKTsKKyAgICBBU1NFUlQoaW5uZXJUeXBlUG9pbnRlcik7Cisg
ICAgYXV0byYgaW5uZXJUeXBlID0gKmlubmVyVHlwZVBvaW50ZXI7CisgICAgQVNTRVJUKGlubmVy
VHlwZS50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDApOworICAgIEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uKiAoKmFycmF5KVszXTsKKyAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiaGFs
ZiIpCisgICAgICAgIGFycmF5ID0gbV9tYXRyaXhIYWxmOworICAgIGlmIChpbm5lclR5cGUubmFt
ZSgpID09ICJmbG9hdCIpCisgICAgICAgIGFycmF5ID0gbV9tYXRyaXhGbG9hdDsKKyAgICBpbnQg
cm93ID0gcm93RXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgpLnZhbHVlKCk7CisgICAgQVNTRVJU
KHJvdyA+PSAyICYmIHJvdyA8PSA0KTsKKyAgICBpbnQgY29sdW1uID0gY29sdW1uRXhwcmVzc2lv
bi5pbnRlZ2VyTGl0ZXJhbCgpLnZhbHVlKCk7CisgICAgQVNTRVJUKGNvbHVtbiA+PSAyICYmIGNv
bHVtbiA8PSA0KTsKKyAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNNYXRyaXgoKTsKKyAg
ICBhcnJheVtyb3cgLSAyXVtjb2x1bW4gLSAyXSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50cmluc2ljczo6YWRkRnVsbFRleHR1cmUoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgQVNUOjpUeXBl
UmVmZXJlbmNlJiBpbm5lclR5cGUpCit7CisgICAgdW5zaWduZWQgdGV4dHVyZVR5cGVJbmRleCA9
IG1fdGV4dHVyZVR5cGVOYW1lcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fdGV4dHVyZVR5cGVOYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLm5hbWUoKSA9PSBtX3RleHR1cmVUeXBlTmFtZXNbaV0pCisgICAgICAgICAg
ICB0ZXh0dXJlVHlwZUluZGV4ID0gaTsKKyAgICB9CisgICAgaWYgKHRleHR1cmVUeXBlSW5kZXgg
PT0gbV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgdW5zaWduZWQgaW5uZXJUeXBlSW5kZXggPSBtX3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXpl
KCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
aW5uZXJUeXBlLm5hbWUoKS5zdGFydHNXaXRoKG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzW2ldKSkg
eworICAgICAgICAgICAgdGV4dHVyZVR5cGVJbmRleCA9IGk7CisgICAgICAgICAgICBpZiAoaW5u
ZXJUeXBlLm5hbWUoKSA9PSBtX3RleHR1cmVJbm5lclR5cGVOYW1lc1tpXSkKKyAgICAgICAgICAg
ICAgICB2ZWN0b3JMZW5ndGggPSAxOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKGlubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgPT0gbV90ZXh0dXJlSW5uZXJUeXBl
TmFtZXNbaV0ubGVuZ3RoKCkgKyAxKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5uZXJUeXBl
Lm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0gPT0gJzInCisgICAgICAgICAg
ICAgICAgICAgIHx8IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAt
IDFdID09ICczJworICAgICAgICAgICAgICAgICAgICB8fCBpbm5lclR5cGUubmFtZSgpW2lubmVy
VHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSA9PSAnNCcpOworICAgICAgICAgICAgICAgIHZlY3Rv
ckxlbmd0aCA9IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAtIDFd
IC0gJzAnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChpbm5l
clR5cGVJbmRleCAhPSBtX3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCkpOworICAgIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc1RleHR1cmUoKTsKKyAgICBtX2Z1bGxUZXh0dXJlc1t0ZXh0
dXJlVHlwZUluZGV4XVtpbm5lclR5cGVJbmRleF1bdmVjdG9yTGVuZ3RoIC0gMV0gPSAmbmF0aXZl
VHlwZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6
OmFkZERlcHRoVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2UmIGlubmVyVHlwZSkKK3sKKyAgICBBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbioqIHRleHR1cmU7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5uYW1lKCkgPT0gIlRleHR1cmVEZXB0aDJEIikKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4
dHVyZURlcHRoMkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiUldUZXh0dXJlRGVwdGgyRCIpCisgICAgICAgIHRleHR1cmUgPSBtX3J3VGV4dHVyZURlcHRo
MkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVy
ZURlcHRoMkRBcnJheSIpCisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVEZXB0aDJEQXJyYXk7
CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJl
RGVwdGgyREFycmF5IikKKyAgICAgICAgdGV4dHVyZSA9IG1fcndUZXh0dXJlRGVwdGgyREFycmF5
OworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVE
ZXB0aEN1YmUiKQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlRGVwdGhDdWJlOworICAgIGVs
c2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgdW5zaWduZWQgaW5uZXJUeXBl
SW5kZXggPSBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzW2ld
KQorICAgICAgICAgICAgaW5uZXJUeXBlSW5kZXggPSBpOworICAgIH0KKyAgICBBU1NFUlQoaW5u
ZXJUeXBlSW5kZXggIT0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKSk7CisgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldElzVGV4dHVyZSgpOworICAgIHRleHR1cmVbaW5uZXJUeXBl
SW5kZXhdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dm9pZCBJbnRyaW5zaWNzOjphZGRUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBu
YXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDEpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBl
RGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlUG9p
bnRlciA9IFdURjo6Z2V0PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBBU1NFUlQoaW5uZXJU
eXBlUG9pbnRlcik7CisgICAgYXV0byYgaW5uZXJUeXBlID0gKmlubmVyVHlwZVBvaW50ZXI7Cisg
ICAgQVNTRVJUKGlubmVyVHlwZS50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDApOworICAgIGlm
IChhZGRGdWxsVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlubmVyVHlwZSkpIHsKKyAg
ICAgICAgbV90ZXh0dXJlU2V0LmFkZCgmbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoYWRkRGVwdGhUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiwgaW5uZXJUeXBlKSkKKyAgICAgICAgbV90ZXh0dXJlU2V0LmFkZCgmbmF0aXZlVHlwZURl
Y2xhcmF0aW9uKTsKK30KKwordm9pZCBJbnRyaW5zaWNzOjphZGQoQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoYWRkUHJpbWl0aXZl
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoYWRkVmVj
dG9yKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoYWRk
TWF0cml4KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBhZGRU
ZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmlu
c2ljcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5z
aWNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMxYTk4YWIzZGI3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xJbnRyaW5zaWNzLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5o
IgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK2NsYXNzIEludHJpbnNpY3MgeworcHVibGljOgorICAgIEludHJpbnNpY3Mo
KTsKKworICAgIHZvaWQgYWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAg
IHZvaWQgYWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisKKyAgICBBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiYgdm9pZFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fdm9pZFR5cGUpOworICAgICAgICByZXR1cm4gKm1fdm9pZFR5cGU7CisgICAgfQorCisgICAg
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIGJvb2xUeXBlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2Jvb2xUeXBlKTsKKyAgICAgICAgcmV0dXJuICptX2Jvb2xUeXBlOworICAg
IH0KKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBpbnRUeXBlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX2ludFR5cGUpOworICAgICAgICByZXR1cm4gKm1faW50VHlw
ZTsKKyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgdWludFR5cGUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdWludFR5cGUpOworICAgICAgICByZXR1cm4g
Km1fdWludFR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIHNh
bXBsZXJUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3NhbXBsZXJUeXBlKTsK
KyAgICAgICAgcmV0dXJuICptX3NhbXBsZXJUeXBlOworICAgIH0KKworICAgIEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uJiBmbG9hdFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KG1fZmxvYXRUeXBlKTsKKyAgICAgICAgcmV0dXJuICptX2Zsb2F0VHlwZTsKKyAgICB9CisKKyAg
ICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgZmxvYXQzVHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQobV92ZWN0b3JGbG9hdFsxXSk7CisgICAgICAgIHJldHVybiAqbV92ZWN0
b3JGbG9hdFsxXTsKKyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgZmxv
YXQ0VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV92ZWN0b3JGbG9hdFsyXSk7
CisgICAgICAgIHJldHVybiAqbV92ZWN0b3JGbG9hdFsyXTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgYm9vbCBhZGRQcmltaXRpdmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBi
b29sIGFkZFZlY3RvcihBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRk
TWF0cml4KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGRGdWxsVGV4
dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYsIEFTVDo6VHlwZVJlZmVyZW5jZSYpOwor
ICAgIGJvb2wgYWRkRGVwdGhUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiwgQVNU
OjpUeXBlUmVmZXJlbmNlJik7CisgICAgdm9pZCBhZGRUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uJik7CisKKyAgICBIYXNoU2V0PGNvbnN0IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uKj4gbV90ZXh0dXJlU2V0OworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1f
dm9pZFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fYm9vbFR5cGU7Cisg
ICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdWNoYXJUeXBlOworICAgIEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uKiBtX3VzaG9ydFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24qIG1fdWludFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1f
Y2hhclR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fc2hvcnRUeXBlOwor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2ludFR5cGU7CisgICAgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24qIG1faGFsZlR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24qIG1fZmxvYXRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2F0
b21pY0ludFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fYXRvbWljVWlu
dFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fc2FtcGxlclR5cGU7CisK
KyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JCb29sWzNdOworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvclVjaGFyWzNdOworICAgIEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvclVzaG9ydFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JVaW50WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiBtX3ZlY3RvckNoYXJbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24q
IG1fdmVjdG9yU2hvcnRbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVj
dG9ySW50WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckhhbGZb
M107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yRmxvYXRbM107CisK
KyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9tYXRyaXhIYWxmWzNdWzNdOworICAg
IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX21hdHJpeEZsb2F0WzNdWzNdOworCisgICAg
VmVjdG9yPFN0cmluZz4gbV90ZXh0dXJlVHlwZU5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+IG1f
dGV4dHVyZUlubmVyVHlwZU5hbWVzOworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24q
IG1fZnVsbFRleHR1cmVzWzExXVs4XVs0XTsKKworICAgIFZlY3RvcjxTdHJpbmc+IG1fZGVwdGhU
ZXh0dXJlSW5uZXJUeXBlczsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV90ZXh0
dXJlRGVwdGgyRFsyXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9yd1RleHR1
cmVEZXB0aDJEWzJdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3RleHR1cmVE
ZXB0aDJEQXJyYXlbMl07CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fcndUZXh0
dXJlRGVwdGgyREFycmF5WzJdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3Rl
eHR1cmVEZXB0aEN1YmVbMl07Cit9OworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCmluZGV4IDNiMTkz
NGU5MzE2Li5lOWFlYWU3YjU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKQEAgLTIzLDggKzIzLDYgQEAKICAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jcHJhZ21hIG9uY2UKLQogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGU4NmJiOTgwNGEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVD
b250ZXh0LmNwcApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5o
IgorCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJX
SExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBl
RGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK05hbWVDb250ZXh0OjpO
YW1lQ29udGV4dChOYW1lQ29udGV4dCogcGFyZW50KQorICAgIDogbV9wYXJlbnQocGFyZW50KQor
eworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURl
ZmluaXRpb24pCit7CisgICAgaWYgKGV4aXN0cyh0eXBlRGVmaW5pdGlvbi5uYW1lKCkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZCh0eXBlRGVm
aW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRU
eXBlPiwgMT4oKSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHR5cGVEZWZpbml0aW9u
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoZXhpc3Rz
KHN0cnVjdHVyZURlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQoc3RydWN0dXJlRGVmaW5pdGlvbi5uYW1lKCksIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAg
aWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpFbnVtZXJhdGlvbkRlZmlu
aXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoZXhpc3RzKGVudW1lcmF0
aW9uRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byBy
ZXN1bHQgPSBtX3R5cGVzLmFkZChlbnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgIGlmICgh
cmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlLmFwcGVuZChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24m
IGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAobV90eXBlcy5maW5kKGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkpICE9IG1fdHlwZXMuZW5kKCkKKyAgICAgICAgfHwgbV92YXJpYWJsZXMu
ZmluZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV9mdW5jdGlvbnMuYWRkKGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWUuYXBwZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG1fdHlwZXMuZmluZChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQorICAgICAgICB8fCBtX3Zh
cmlhYmxlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3Zhcmlh
Ymxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV9m
dW5jdGlvbnMuYWRkKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG1f
ZnVuY3Rpb25zLmZpbmQobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV9mdW5jdGlv
bnMuZW5kKCkKKyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRp
b24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUo
KSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsK
KyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChuYXRpdmVUeXBlRGVjbGFyYXRpb24p
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQoreworICAgIGlmIChleGlzdHMo
dmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
YXV0byByZXN1bHQgPSBtX3ZhcmlhYmxlcy5hZGQoU3RyaW5nKHZhcmlhYmxlRGVjbGFyYXRpb24u
bmFtZSgpKSwgJnZhcmlhYmxlRGVjbGFyYXRpb24pOworICAgIHJldHVybiByZXN1bHQuaXNOZXdF
bnRyeTsKK30KKworVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+
LCAxPiogTmFtZUNvbnRleHQ6OmdldFR5cGVzKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBh
dXRvIGl0ZXJhdG9yID0gbV90eXBlcy5maW5kKG5hbWUpOworICAgIGlmIChpdGVyYXRvciA9PSBt
X3R5cGVzLmVuZCgpKSB7CisgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVy
biBtX3BhcmVudC0+Z2V0VHlwZXMobmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKyAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKK30KKworVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4qIE5hbWVDb250ZXh0Ojpn
ZXRGdW5jdGlvbnMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBt
X2Z1bmN0aW9ucy5maW5kKG5hbWUpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2Z1bmN0aW9ucy5l
bmQoKSkgeworICAgICAgICBpZiAobV9wYXJlbnQpCisgICAgICAgICAgICByZXR1cm4gbV9wYXJl
bnQtPmdldEZ1bmN0aW9ucyhuYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
ICAgIHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOworfQorCitBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24qIE5hbWVDb250ZXh0OjpnZXRWYXJpYWJsZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
YXV0byBpdGVyYXRvciA9IG1fdmFyaWFibGVzLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9y
ID09IG1fdmFyaWFibGVzLmVuZCgpKSB7CisgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAg
ICAgIHJldHVybiBtX3BhcmVudC0+Z2V0VmFyaWFibGUobmFtZSk7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKyAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOworfQorCitib29sIE5h
bWVDb250ZXh0OjpleGlzdHMoU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBtX3R5cGVzLmZp
bmQobmFtZSkgIT0gbV90eXBlcy5lbmQoKQorICAgICAgICB8fCBtX2Z1bmN0aW9ucy5maW5kKG5h
bWUpICE9IG1fZnVuY3Rpb25zLmVuZCgpCisgICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmFt
ZSkgIT0gbV92YXJpYWJsZXMuZW5kKCk7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDNkZjgwMDE0YWUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TE5hbWVDb250ZXh0LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdI
TFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIE5hbWVkVHlwZTsKK2NsYXNzIEZ1bmN0
aW9uRGVjbGFyYXRpb247CitjbGFzcyBUeXBlRGVmaW5pdGlvbjsKK2NsYXNzIFN0cnVjdHVyZURl
ZmluaXRpb247CitjbGFzcyBFbnVtZXJhdGlvbkRlZmluaXRpb247CitjbGFzcyBGdW5jdGlvbkRl
ZmluaXRpb247CitjbGFzcyBOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3MgTmF0aXZl
VHlwZURlY2xhcmF0aW9uOworY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbjsKKworfQorCitjbGFz
cyBOYW1lQ29udGV4dCB7CitwdWJsaWM6CisgICAgTmFtZUNvbnRleHQoTmFtZUNvbnRleHQqIHBh
cmVudCA9IG51bGxwdHIpOworCisgICAgYm9vbCBhZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYpOwor
ICAgIGJvb2wgYWRkKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRkKEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
KTsKKyAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wg
YWRkKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpOworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiogZ2V0VHlwZXMoY29uc3QgU3RyaW5nJik7
CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uPiwgMT4qIGdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmKTsKKyAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24qIGdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgorICAg
IGJvb2wgZXhpc3RzKFN0cmluZyYpOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4+IG1fdHlwZXM7CisgICAgSGFz
aE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbj4sIDE+PiBtX2Z1bmN0aW9uczsKKyAgICBIYXNoTWFwPFN0cmluZywgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uKj4gbV92YXJpYWJsZXM7CisgICAgTmFtZUNvbnRleHQqIG1fcGFy
ZW50OworfTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCmluZGV4IDc4MGQ1
YzU0MjVhLi5mYmY1MDU4NTQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcApAQCAtMjgsMTkgKzI4LDI1
MCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgi
CiAKLSNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKKyNpbmNsdWRl
ICJXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVu
Y2UuaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldI
TFNMSWZTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgorI2luY2x1ZGUg
IldITFNMRG9XaGlsZUxvb3AuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNpbmNsdWRl
ICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVm
ZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXR1cm4uaCIKKyNpbmNsdWRlICJXSExTTFByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgor
I2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xD
YWxsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKLWNsYXNzIE5hbWVSZXNvbHZlciA6IHB1
YmxpYyBWaXNpdG9yIHsKLSAgICB+TmFtZVJlc29sdmVyKCkgPSBkZWZhdWx0OwotfTsKK05hbWVS
ZXNvbHZlcjo6TmFtZVJlc29sdmVyKE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKKyAgICA6IG1f
bmFtZUNvbnRleHQobmFtZUNvbnRleHQpCit7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNp
dChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCit7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHR5cGVSZWZlcmVuY2UpOworICAgIGlmICh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlw
ZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBjYW5kaWRhdGVzID0gbV9uYW1lQ29u
dGV4dC5nZXRUeXBlcyh0eXBlUmVmZXJlbmNlLm5hbWUoKSk7CisgICAgaWYgKGNhbmRpZGF0ZXMg
PT0gbnVsbHB0cikgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKCpjYW5kaWRh
dGVzLCB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkpCisgICAgICAgIHR5cGVSZWZlcmVu
Y2Uuc2V0UmVzb2x2ZWRUeXBlKCpyZXN1bHQpOworICAgIGVsc2UgeworICAgICAgICBzZXRFcnJv
cigpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlz
aXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBO
YW1lQ29udGV4dCBuZXdOYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29s
dmVyIG5ld05hbWVSZXNvbHZlcihuZXdOYW1lQ29udGV4dCk7CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgIGZvciAoYXV0byYgcGFyYW1ldGVy
IDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkgeworICAgICAgICBuZXdOYW1lUmVz
b2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHBhcmFtZXRlcik7CisgICAgICAgIGF1dG8gc3VjY2Vz
cyA9IG5ld05hbWVDb250ZXh0LmFkZChwYXJhbWV0ZXIpOworICAgICAgICBpZiAoIXN1Y2Nlc3Mp
IHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlv
bkRlZmluaXRpb24uYmxvY2soKSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6
OkJsb2NrJiBibG9jaykKK3sKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29u
dGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQo
YmxvY2spOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYg
aWZTdGF0ZW1lbnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmNvbmRp
dGlvbmFsKCkpOworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsK
KyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRl
bWVudC5ib2R5KCkpOworICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgpKSB7CisgICAgICAg
IE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICAgICAgTmFtZVJl
c29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVtZW50LmVsc2VC
b2R5KCkpOworICAgIH0KK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6V2hpbGVM
b29wJiB3aGlsZUxvb3ApCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25k
aXRpb25hbCgpKTsKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7
CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQod2hpbGVM
b29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvV2hpbGVM
b29wJiB3aGlsZUxvb3ApCit7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNv
bnRleHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0
KHdoaWxlTG9vcC5ib2R5KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29u
ZGl0aW9uYWwoKSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZvckxvb3Am
IGZvckxvb3ApCit7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQp
OworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KGZvckxv
b3ApOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQoreworICAgIG1fbmFtZUNvbnRleHQuYWRkKHZhcmlh
YmxlRGVjbGFyYXRpb24pOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0
aW9uKTsKK30KIAotdm9pZCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mKQordm9pZCBOYW1l
UmVzb2x2ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNl
KQogeworICAgIGlmICh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoYXV0byogdmFyaWFibGUgPSBtX25hbWVDb250ZXh0LmdldFZhcmlhYmxl
KHZhcmlhYmxlUmVmZXJlbmNlLm5hbWUoKSkpCisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLnNl
dFZhcmlhYmxlKCp2YXJpYWJsZSk7CisgICAgZWxzZSB7CisgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6
OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQoreworICAgIEFTU0VSVChtX2N1cnJlbnRGdW5jdGlv
bik7CisgICAgcmV0dXJuU3RhdGVtZW50LnNldEZ1bmN0aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmV0dXJuU3RhdGVtZW50KTsKK30KIAordm9pZCBOYW1l
UmVzb2x2ZXI6OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24pCit7CisgICAgaWYgKGF1dG8qIGdldEZ1bmN0aW9ucyA9IG1fbmFtZUNv
bnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5nZXRGdW5jdGlvbk5h
bWUoKSkpCisgICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZUdldE92
ZXJsb2FkcygqZ2V0RnVuY3Rpb25zKTsKKyAgICBpZiAoYXV0byogc2V0RnVuY3Rpb25zID0gbV9u
YW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldEZ1bmN0
aW9uTmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldFBvc3NpYmxl
U2V0T3ZlcmxvYWRzKCpzZXRGdW5jdGlvbnMpOworICAgIGlmIChhdXRvKiBhbmRGdW5jdGlvbnMg
PSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5k
RnVuY3Rpb25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9z
c2libGVBbmRPdmVybG9hZHMoKmFuZEZ1bmN0aW9ucyk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNp
dChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCit7CisgICAgaWYgKGlzPEFTVDo6
VmFyaWFibGVSZWZlcmVuY2U+KGRvdEV4cHJlc3Npb24uYmFzZSgpKSkgeworICAgICAgICBpZiAo
YXV0byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhkb3duY2FzdDxB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNzaW9uLmJhc2UoKSkubmFtZSgpKSkgewor
ICAgICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uVHlwZXMtPnNpemUoKSA9PSAxKTsKKyAgICAg
ICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBlID0gKCplbnVtZXJhdGlvblR5cGVzKVswXTsKKyAg
ICAgICAgICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSkpIHsKKyAg
ICAgICAgICAgICAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZp
bml0aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHR5cGUpOworICAg
ICAgICAgICAgICAgIGlmIChhdXRvKiBtZW1iZXIgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24ubWVt
YmVyQnlOYW1lKGRvdEV4cHJlc3Npb24uZmllbGROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSA8
PSBzaXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJl
IGFibGUgdG8gYmVjb21lIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbHMgd2l0aG91dCB1cGRhdGlu
ZyBiYWNrcmVmZXJlbmNlcyIpOworICAgICAgICAgICAgICAgICAgICBMZXhlcjo6VG9rZW4gb3Jp
Z2luID0gZG90RXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFBlcmhhcHMgZG8gdGhpcyB3aXRoIHZhcmlhbnRzIG9yIGEgUmV3cml0ZXIgaW5zdGVhZC4K
KyAgICAgICAgICAgICAgICAgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOworICAg
ICAgICAgICAgICAgICAgICBuZXcgKCZkb3RFeHByZXNzaW9uKSBBU1Q6OkVudW1lcmF0aW9uTWVt
YmVyTGl0ZXJhbChXVEZNb3ZlKG9yaWdpbiksICptZW1iZXIpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChkb3RFeHByZXNzaW9uKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6
Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQoreworICAgIGlmICghY2FsbEV4cHJlc3Np
b24uaGFzT3ZlcmxvYWRzKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFt
ZUNvbnRleHQuZ2V0RnVuY3Rpb25zKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpCisgICAgICAgICAg
ICBjYWxsRXhwcmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgaWYgKGF1dG8qIHR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhj
YWxsRXhwcmVzc2lvbi5uYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVzLT5zaXpl
KCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9u
YW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRXhw
cmVzc2lvbi5zZXRDYXN0RGF0YSgoKnR5cGVzKVswXS5nZXQoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBjYWxsRXhwcmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgaWYgKCFjYWxsRXhwcmVzc2lvbi5oYXNPdmVybG9hZHMoKSkgeworICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChjYWxsRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChB
U1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkKK3sKKyAgICBpZiAoYXV0byBl
bnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhjb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5sZWZ0KCkpKSB7CisgICAgICAgIEFTU0VSVChl
bnVtZXJhdGlvblR5cGVzLT5zaXplKCkgPT0gMSk7CisgICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0
eXBlID0gKCplbnVtZXJhdGlvblR5cGVzKVswXTsKKyAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uPih0eXBlKSkgeworICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRl
ZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRp
b25EZWZpbml0aW9uPih0eXBlKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBtZW1iZXIgPSBlbnVt
ZXJhdGlvbkRlZmluaXRpb24ubWVtYmVyQnlOYW1lKGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0
aW9uTWVtYmVyUmVmZXJlbmNlLnJpZ2h0KCkpKSB7CisgICAgICAgICAgICAgICAgY29uc3RhbnRF
eHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Uuc2V0RW51bWVyYXRpb25NZW1iZXIo
ZW51bWVyYXRpb25EZWZpbml0aW9uLCAqbWVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc2V0RXJyb3IoKTsK
K30KKworLy8gRklYTUU6IE1ha2Ugc3VyZSBhbGwgdGhlIG5hbWVzIGhhdmUgYmVlbiByZXNvbHZl
ZC4KKworYm9vbCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNv
bHZlciYgbmFtZVJlc29sdmVyKQoreworICAgIGZvciAoYXV0byYgdHlwZURlZmluaXRpb24gOiBw
cm9ncmFtLnR5cGVEZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vy
cm9yQW5kVmlzaXQoKnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5l
cnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8m
IHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpIHsK
KyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCgqc3RydWN0dXJlRGVmaW5p
dGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24g
OiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2
ZXIuY2hlY2tFcnJvckFuZFZpc2l0KCplbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICBp
ZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIGZvciAoYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVU
eXBlRGVjbGFyYXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRW
aXNpdCgqbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5l
cnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtLCBO
YW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVm
aW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVS
ZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKGZ1bmN0aW9uRGVmaW5pdGlvbi5n
ZXQoKSk7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoKmZ1bmN0aW9u
RGVmaW5pdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5j
dGlvbkRlZmluaXRpb24obnVsbHB0cik7CisgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKSB7CisgICAg
ICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24pOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIu
aAppbmRleCA0N2Q0ZDZhNTc5My4uMTVhZmRlM2QwM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaApAQCAtMjcs
MTMgKzI3LDQ5IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xQcm9n
cmFtLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorI2luY2x1ZGUgIldITFNMVmlz
aXRvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKLXZv
aWQgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtKTsKK2NsYXNzIFByb2dyYW07
CisKK2NsYXNzIE5hbWVSZXNvbHZlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBO
YW1lUmVzb2x2ZXIoTmFtZUNvbnRleHQmKTsKKworICAgIHZpcnR1YWwgfk5hbWVSZXNvbHZlcigp
ID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1
bmN0aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldEN1cnJlbnRGdW5jdGlv
bkRlZmluaXRpb24oQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIGZ1bmN0aW9uRGVmaW5pdGlvbikK
KyAgICB7CisgICAgICAgIG1fY3VycmVudEZ1bmN0aW9uID0gZnVuY3Rpb25EZWZpbml0aW9uOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYpIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpX
aGlsZUxvb3AmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmKSBv
dmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2
aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6OlJldHVybiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lv
biYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSYpIG92ZXJyaWRlOworCisgICAgTmFtZUNvbnRleHQgbV9uYW1lQ29udGV4
dDsKKyAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9jdXJyZW50RnVuY3Rpb24geyBudWxs
cHRyIH07Cit9OworCitib29sIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYsIE5hbWVSZXNv
bHZlciYpOworYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiwgTmFtZVJlc29s
dmVyJik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQYXJzZXIuY3BwCmluZGV4IGJjNmU3M2U2YTFmLi5hN2RiNWU1MzQ3ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNw
cApAQCAtMzgsNyArMzgsOCBAQCBQYXJzZXI6OlBhcnNlcigpCiB7CiB9CiAKLWF1dG8gUGFyc2Vy
OjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2Rl
KSAtPiBPcHRpb25hbDxFcnJvcj4KKy8vIEZJWE1FOiBSZXR1cm4gYSBiZXR0ZXIgZXJyb3IgY29k
ZSBmcm9tIHRoaXMsIGFuZCByZXBvcnQgaXQgdG8gSmF2YVNjcmlwdC4KK2F1dG8gUGFyc2VyOjpw
YXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkg
LT4gT3B0aW9uYWw8RXJyb3I+CiB7CiAgICAgbV9sZXhlciA9IExleGVyKHN0cmluZ1ZpZXcpOwog
ICAgIG1fbW9kZSA9IG1vZGU7CkBAIC01NCw3ICs1NSwxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2Uo
UHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0
aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVEZWZpbml0aW9uKCk7CiAgICAg
ICAgICAgICB9KTsKICAgICAgICAgICAgIGlmICh0eXBlRGVmaW5pdGlvbikgewotICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqdHlwZURlZmluaXRpb24pKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVmaW5p
dGlvbikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAg
ICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgdHlwZURlZmluaXRpb24tPm5hbWUo
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTY0LDcgKzY5LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQ
cm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRp
b25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RydWN0dXJlRGVmaW5pdGlvbigpOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlRGVmaW5pdGlvbikgewot
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqc3RydWN0dXJlRGVmaW5pdGlv
bikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1v
dmUoKnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3Mp
IHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIHN0
cnVjdHVyZURlZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc0LDcgKzgzLDEx
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5n
VmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
RW51bWVyYXRpb25EZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlm
IChlbnVtZXJhdGlvbkRlZmluaXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8g
c3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikp
OworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBX
VEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgZW51bWVyYXRpb25EZWZpbml0aW9uLT5uYW1l
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC04NSw3ICs5OCwxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2Uo
UHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0
aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlvbkRlZmluaXRpb24p
KTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3Zl
KCpmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsK
KyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIGZ1bmN0
aW9uRGVmaW5pdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVycm9yID0gZnVuY3Rpb25E
ZWZpbml0aW9uLmVycm9yKCk7CkBAIC05Niw3ICsxMTMsMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNl
KFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9w
dGlvbmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBzdWNjZXNzID0g
cHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAg
ICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dB
bHdheXMoIk5hbWUgRXJyb3IhICVzIiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi0+bmFtZSgp
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMTA2LDcgKzEyNywxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2Uo
UHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0
aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlvbigp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9u
KSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBlRGVj
bGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVu
ZChXVEZNb3ZlKCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9y
ISAlcyIsIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
NDU0LDE2ICs0NzksNTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlh
dGVkKCkgLT4gRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGUKICAgICAgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodFNxdWFyZUJyYWNrZXQuZXJyb3IoKSk7CiAgICAg
ICAgIHJldHVybiB7eyAqdG9rZW4sIFdURjo6bnVsbG9wdCwgKm51bUVsZW1lbnRzIH19OwogICAg
IH0KLSAgICBhdXRvIGFkZHJlc3NTcGFjZSA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6
VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46
OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOwotICAgIGlm
ICghYWRkcmVzc1NwYWNlKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYWRkcmVz
c1NwYWNlLmVycm9yKCkpOwotICAgIHJldHVybiB7eyAqdG9rZW4sIHsgKmFkZHJlc3NTcGFjZSB9
LCBXVEY6Om51bGxvcHQgfX07CisgICAgYXV0byBhZGRyZXNzU3BhY2VUb2tlbiA9IGNvbnN1bWVU
eXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6
RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5
cGU6OlRocmVhZH0pOworICAgIGlmICghYWRkcmVzc1NwYWNlVG9rZW4pCisgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VUb2tlbi5lcnJvcigpKTsKKyAgICBBU1Q6
OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7CisgICAgc3dpdGNoIChh
ZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpD
b25zdGFudDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRy
ZXNzU3BhY2U6OkNvbnN0YW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tl
bjo6VHlwZTo6RGV2aWNlOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5
cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVy
OjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6
UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZDoKKyAgICAgICAgYWRkcmVzc1Nw
YWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJpbmcoIlNvbWV0aGluZyByZWFs
bHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKTsKKyAgICB9
CisgICAgcmV0dXJuIHt7ICp0b2tlbiwgeyBhZGRyZXNzU3BhY2UgfSwgV1RGOjpudWxsb3B0IH19
OwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiB7Ci0gICAgYXV0byBhZGRyZXNzU3Bh
Y2UgPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0YW50LCBMZXhlcjo6
VG9rZW46OlR5cGU6OkRldmljZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cCwgTGV4
ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWR9KTsKLSAgICBpZiAoIWFkZHJlc3NTcGFjZSkKLSAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZS5lcnJvcigpKTsKK2F1dG8g
UGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiB7CisgICAgYXV0byBhZGRyZXNzU3BhY2VUb2tl
biA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpU
b2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhl
cjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOworICAgIGlmICghYWRkcmVzc1NwYWNlVG9rZW4pCisg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VUb2tlbi5lcnJvcigp
KTsKKyAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7Cisg
ICAgc3dpdGNoIChhZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpDb25zdGFudDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVu
Y2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworICAgICAgICBicmVhazsKKyAgICBjYXNl
IExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6
OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIGFkZHJlc3NT
cGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZDoKKyAgICAg
ICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVh
ZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJpbmcoIlNv
bWV0aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCkpKTsKKyAgICB9CiAgICAgYXV0byBuYW1lID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpU
eXBlOjpJZGVudGlmaWVyKTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihuYW1lLmVycm9yKCkpOwpAQCAtNDcxLDEyICs1MzIsMTIgQEAgYXV0byBQYXJz
ZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlR5cGU+LCBFcnIKICAgICBpZiAoIXR5cGVBcmd1bWVudHMpCiAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPih0eXBlQXJndW1lbnRzLmVycm9yKCkpOwogCi0gICAgYXV0byBjb25z
dHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhBYmJy
ZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBl
PiYmIHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiB7CisgICAgYXV0byBj
b25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhB
YmJyZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpV
bm5hbWVkVHlwZT4mJiBwcmV2aW91cykgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5
cGU+IHsKICAgICAgICAgc3dpdGNoICh0eXBlU3VmZml4QWJicmV2aWF0ZWQudG9rZW4udHlwZSkg
ewogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3RhcjoKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBl
U3VmZml4QWJicmV2aWF0ZWQudG9rZW4pLCBhZGRyZXNzU3BhY2UtPnN0cmluZ1ZpZXcudG9TdHJp
bmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRl
ZC50b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNl
IExleGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2Vu
KHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZS0+c3RyaW5nVmlldy50
b1N0cmluZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZm
aXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwog
ICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6CiAgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRv
a2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAqdHlw
ZVN1ZmZpeEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQ4
OCw3ICs1NDksNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycgogICAgIGF1dG8gZmlyc3RUeXBl
U3VmZml4QWJicmV2aWF0ZWQgPSBwYXJzZVR5cGVTdWZmaXhBYmJyZXZpYXRlZCgpOwogICAgIGlm
ICghZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZC5lcnJvcigpKTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZVJl
ZmVyZW5jZT4oTGV4ZXI6OlRva2VuKCphZGRyZXNzU3BhY2UpLCBuYW1lLT5zdHJpbmdWaWV3LnRv
U3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpVbm5hbWVkVHlwZT4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlR5cGVSZWZl
cmVuY2U+KFdURk1vdmUoKmFkZHJlc3NTcGFjZVRva2VuKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0
cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CiAgICAgcmVzdWx0ID0gY29uc3RydWN0
VHlwZUZyb21TdWZmaXhBYmJyZXZpYXRlZCgqZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQsIFdU
Rk1vdmUocmVzdWx0KSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byB0eXBlU3Vm
Zml4QWJicmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxUeXBlU3VmZml4QWJi
cmV2aWF0ZWQsIEVycm9yPj4oWyZdKCkgewpAQCAtNTAzLDcgKzU2NCw3IEBAIGF1dG8gUGFyc2Vy
OjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpUeXBlPiwgRXJyCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQYXJz
ZXI6OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlR5cGU+LCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlTm9uQWRkcmVzc1NwYWNl
VHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJy
b3I+IHsKICAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKICAgICBpZiAoIW9yaWdpbikKICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKQEAgLTUxNCwxMiAr
NTc1LDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwKICAgICBpZiAoIXR5cGVBcmd1bWVudHMp
CiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlQXJndW1lbnRzLmVycm9yKCkp
OwogCi0gICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5vbkFiYnJldmlhdGVkID0gWyZd
KGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVk
LCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpUeXBlPiB7CisgICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5vbkFiYnJl
dmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeE5v
bkFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91
cykgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgc3dpdGNo
ICh0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4udHlwZSkgewogICAgICAgICBjYXNlIExl
eGVyOjpUb2tlbjo6VHlwZTo6U3RhcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0
ZWQudG9rZW4pLCB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNlLT5zdHJpbmdW
aWV3LnRvU3RyaW5nKCksIFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4
Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NT
cGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlw
ZTo6U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJy
ZXZpYXRlZC50b2tlbiksIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2UtPnN0
cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tl
bih0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlh
dGVkLmFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExleGVy
OjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6CiAgICAgICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25B
YmJyZXZpYXRlZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeE5vbkFiYnJl
dmlhdGVkLm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTUyOCw3ICs1ODksNyBA
QCBhdXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RkOjp1
bmlxdWVfcHRyPEFTVDo6VHlwZT4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlR5cGVS
ZWZlcmVuY2U+KFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwg
V1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFt
ZWRUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZVJlZmVyZW5jZT4oV1RG
TW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBl
QXJndW1lbnRzKSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byB0eXBlU3VmZml4
Tm9uQWJicmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxUeXBlU3VmZml4Tm9u
QWJicmV2aWF0ZWQsIEVycm9yPj4oWyZdKCkgewogICAgICAgICAgICAgcmV0dXJuIHBhcnNlVHlw
ZVN1ZmZpeE5vbkFiYnJldmlhdGVkKCk7CkBAIC01NDIsMTQgKzYwMywxNCBAQCBhdXRvIFBhcnNl
cjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6VHlwZT4sCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQYXJz
ZXI6OnBhcnNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBF
cnJvcj4gewotICAgIGF1dG8gdHlwZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKK2F1dG8gUGFyc2VyOjpwYXJz
ZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVy
cm9yPiB7CisgICAgYXV0byB0eXBlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKICAgICAgICAgcmV0
dXJuIHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOwogICAgIH0pOwogICAgIGlmICh0eXBlKQogICAg
ICAgICByZXR1cm4gdHlwZTsKIAotICAgIHR5cGUgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+PihbJl0oKSB7CisgICAgdHlwZSA9
IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRU
eXBlPiwgRXJyb3I+PihbJl0oKSB7CiAgICAgICAgIHJldHVybiBwYXJzZU5vbkFkZHJlc3NTcGFj
ZVR5cGUoKTsKICAgICB9KTsKICAgICBpZiAodHlwZSkKQEAgLTg0Nyw3ICs5MDgsNyBAQCBhdXRv
IFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVu
dW1lcmF0aW9uRGVmaW5pdGlvbgogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpU
eXBlPiB0eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB0eXBlOwog
ICAgIGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29sb24pKSB7CiAgICAgICAgIGF1
dG8gcGFyc2VkVHlwZSA9IHBhcnNlVHlwZSgpOwogICAgICAgICBpZiAoIXBhcnNlZFR5cGUpCkBA
IC04NjMsMjEgKzkyNCwyNSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRp
b24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbgogICAgIGlmICghZmly
c3RFbnVtZXJhdGlvbk1lbWJlcikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZp
cnN0RW51bWVyYXRpb25NZW1iZXIuZXJyb3IoKSk7CiAKLSAgICBBU1Q6OkVudW1lcmF0aW9uTWVt
YmVycyBtZW1iZXJzOwotICAgIG1lbWJlcnMuYXBwZW5kKFdURk1vdmUoKmZpcnN0RW51bWVyYXRp
b25NZW1iZXIpKTsKKyAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiByZXN1bHQoV1RGTW92
ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHR5cGUpKTsK
KyAgICBhdXRvIHN1Y2Nlc3MgPSByZXN1bHQuYWRkKFdURk1vdmUoKmZpcnN0RW51bWVyYXRpb25N
ZW1iZXIpKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWlsKFN0cmluZygi
Q2Fubm90IGFkZCBlbnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkg
ewogICAgICAgICBhdXRvIG1lbWJlciA9IHBhcnNlRW51bWVyYXRpb25NZW1iZXIoKTsKICAgICAg
ICAgaWYgKCFtZW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obWVt
YmVyLmVycm9yKCkpOwotICAgICAgICBtZW1iZXJzLmFwcGVuZChXVEZNb3ZlKCptZW1iZXIpKTsK
KyAgICAgICAgc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgqbWVtYmVyKSk7CisgICAgICAg
IGlmICghc3VjY2VzcykKKyAgICAgICAgICAgIHJldHVybiBmYWlsKFN0cmluZygiQ2Fubm90IGFk
ZCBlbnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAg
ICAgfQogCiAgICAgYXV0byByaWdodEN1cmx5QnJhY2tldCA9IGNvbnN1bWVUeXBlKExleGVyOjpU
b2tlbjo6VHlwZTo6UmlnaHRDdXJseUJyYWNrZXQpOwogICAgIGlmICghcmlnaHRDdXJseUJyYWNr
ZXQpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodEN1cmx5QnJhY2tldC5l
cnJvcigpKTsKIAotICAgIHJldHVybiBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbihXVEZNb3Zl
KCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUodHlwZSksIFdU
Rk1vdmUobWVtYmVycykpOworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKIGF1dG8g
UGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uTWVtYmVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpFbnVtZXJh
dGlvbk1lbWJlciwgRXJyb3I+IHsKQEAgLTk4MSw3ICsxMDQ2LDcgQEAgYXV0byBQYXJzZXI6OnBh
cnNlQXR0cmlidXRlQmxvY2soKSAtPiBFeHBlY3RlZDxBU1Q6OkF0dHJpYnV0ZUJsb2NrLCBFcnJv
cj4gewogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJz
ZVBhcmFtZXRlcigpIC0+IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4geworYXV0byBQ
YXJzZXI6OnBhcnNlUGFyYW1ldGVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uLCBFcnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygpOwogICAgIGlmICghb3JpZ2lu
KQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwpAQCAt
OTkyLDcgKzEwNTcsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3Rl
ZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHsKICAgICBpZiAoIXR5cGUpCiAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOwogCi0gICAgT3B0aW9uYWw8U3RyaW5n
PiBuYW1lOworICAgIFN0cmluZyBuYW1lOwogICAgIGlmIChhdXRvIHRva2VuID0gdHJ5VHlwZShM
ZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIpKQogICAgICAgICBuYW1lID0gdG9rZW4tPnN0
cmluZ1ZpZXcudG9TdHJpbmcoKTsKIApAQCAtMTAwMCwxOCArMTA2NSwxOCBAQCBhdXRvIFBhcnNl
cjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHsK
ICAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAgICAgaWYgKCFz
ZW1hbnRpYykKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5l
cnJvcigpKTsKLSAgICAgICAgcmV0dXJuIEFTVDo6UGFyYW1ldGVyKFdURk1vdmUoKm9yaWdpbiks
IFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZN
b3ZlKCpzZW1hbnRpYykpOworICAgICAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBX
VEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIG51bGxwdHIpOwogICAgIH0KIAotICAg
IHJldHVybiBBU1Q6OlBhcmFtZXRlcihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmll
cnMpLCBXVEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShuYW1lKSwgV1RGOjpudWxsb3B0KTsKKyAgICBy
ZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUo
cXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEY6Om51bGxvcHQs
IG51bGxwdHIpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXJzKCkgLT4gRXhwZWN0
ZWQ8QVNUOjpQYXJhbWV0ZXJzLCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVy
cygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMsIEVycm9yPiB7CiAgICAg
YXV0byBsZWZ0UGFyZW50aGVzaXMgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6Okxl
ZnRQYXJlbnRoZXNpcyk7CiAgICAgaWYgKCFsZWZ0UGFyZW50aGVzaXMpCiAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihsZWZ0UGFyZW50aGVzaXMuZXJyb3IoKSk7CiAKLSAgICBBU1Q6
OlBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBh
cmFtZXRlcnM7CiAgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodFBhcmVu
dGhlc2lzKSkKICAgICAgICAgcmV0dXJuIFdURk1vdmUocGFyYW1ldGVycyk7CiAKQEAgLTEwOTUs
MTQgKzExNjAsMTYgQEAgYXV0byBQYXJzZXI6OnBhcnNlRW50cnlQb2ludEZ1bmN0aW9uRGVjbGFy
YXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGEKICAgICBpZiAoIXBhcmFtZXRl
cnMpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihwYXJhbWV0ZXJzLmVycm9yKCkp
OwogCisgICAgYm9vbCBpc09wZXJhdG9yID0gZmFsc2U7CisKICAgICBpZiAodHJ5VHlwZShMZXhl
cjo6VG9rZW46OlR5cGU6OkNvbG9uKSkgewogICAgICAgICBhdXRvIHNlbWFudGljID0gcGFyc2VT
ZW1hbnRpYygpOwogICAgICAgICBpZiAoIXNlbWFudGljKQogICAgICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KHNlbWFudGljLmVycm9yKCkpOwotICAgICAgICByZXR1cm4gQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoYXR0cmlidXRlQmxv
Y2spLCBlbnRyeVBvaW50VHlwZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9T
dHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSk7CisgICAg
ICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgV1RG
TW92ZShhdHRyaWJ1dGVCbG9jayksIGVudHJ5UG9pbnRUeXBlLCBXVEZNb3ZlKCp0eXBlKSwgbmFt
ZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgq
c2VtYW50aWMpLCBpc09wZXJhdG9yKTsKICAgICB9CiAKLSAgICByZXR1cm4gQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoYXR0cmlidXRlQmxvY2spLCBl
bnRyeVBvaW50VHlwZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmco
KSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCk7CisgICAgcmV0dXJuIEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKGF0dHJpYnV0ZUJs
b2NrKSwgZW50cnlQb2ludFR5cGUsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRv
U3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3Ip
OwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+
IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHsKQEAgLTExMTcsNiAr
MTE4NCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0aW9uKCkg
LT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0CiAgICAgYXV0byBuYW1lID0gY29uc3Vt
ZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyLCBMZXhlcjo6VG9rZW46OlR5
cGU6Ok9wZXJhdG9yTmFtZSB9KTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOworICAgIGF1dG8gaXNPcGVyYXRvciA9IG5hbWUt
PnR5cGUgPT0gTGV4ZXI6OlRva2VuOjpUeXBlOjpPcGVyYXRvck5hbWU7CiAKICAgICBhdXRvIHBh
cmFtZXRlcnMgPSBwYXJzZVBhcmFtZXRlcnMoKTsKICAgICBpZiAoIXBhcmFtZXRlcnMpCkBAIC0x
MTI2LDEwICsxMTk0LDEwIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xh
cmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0CiAgICAgICAgIGF1dG8g
c2VtYW50aWMgPSBwYXJzZVNlbWFudGljKCk7CiAgICAgICAgIGlmICghc2VtYW50aWMpCiAgICAg
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oc2VtYW50aWMuZXJyb3IoKSk7Ci0gICAg
ICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9
LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5n
KCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYykpOworICAgICAgICBy
ZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RG
OjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBX
VEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBpc09wZXJhdG9yKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdp
biksIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50
b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0KTsKKyAgICByZXR1
cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpu
dWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZN
b3ZlKCpwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKTsKIH0KIAogYXV0byBQ
YXJzZXI6OnBhcnNlT3BlcmF0b3JGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4gewpAQCAtMTE0NSwxNCArMTIxMywxNiBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VPcGVyYXRvckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3Rl
ZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYQogICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHBhcmFtZXRlcnMuZXJyb3IoKSk7CiAKKyAgICBib29sIGlz
T3BlcmF0b3IgPSB0cnVlOworCiAgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpD
b2xvbikpIHsKICAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAg
ICAgaWYgKCFzZW1hbnRpYykKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihz
ZW1hbnRpYy5lcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIFN0
cmluZygiT3BlcmF0b3IgQ2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZN
b3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsKKyAgICAgICAgcmV0dXJuIEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9w
dCwgV1RGTW92ZSgqdHlwZSksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMp
LCBpc09wZXJhdG9yKTsKICAgICB9CiAKLSAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwg
U3RyaW5nKCJPcGVyYXRvciBDYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdU
Rk1vdmUoKnBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQpOworICAgIHJldHVybiBBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1v
dmUoKnR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcik7
CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3Rl
ZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiB7CkBAIC0xMjAwLDcgKzEyNzAsNyBA
QCBhdXRvIFBhcnNlcjo6cGFyc2VOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0
ZWQ8QVNUOjpOYXRpdmVGdW5jdGlvbkRlYwogICAgIGlmICghc2VtaWNvbG9uKQogICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oc2VtaWNvbG9uLmVycm9yKCkpOwogCi0gICAgcmV0dXJu
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihmdW5jdGlvbkRlY2xhcmF0aW9uLT50YWtl
T3JpZ2luKCksIGZ1bmN0aW9uRGVjbGFyYXRpb24tPnRha2VBdHRyaWJ1dGVCbG9jaygpLCBmdW5j
dGlvbkRlY2xhcmF0aW9uLT50YWtlRW50cnlQb2ludFR5cGUoKSwgZnVuY3Rpb25EZWNsYXJhdGlv
bi0+dGFrZVR5cGUoKSwgZnVuY3Rpb25EZWNsYXJhdGlvbi0+dGFrZU5hbWUoKSwgZnVuY3Rpb25E
ZWNsYXJhdGlvbi0+dGFrZVBhcmFtZXRlcnMoKSwgZnVuY3Rpb25EZWNsYXJhdGlvbi0+dGFrZVNl
bWFudGljKCksIHJlc3RyaWN0ZWQpOworICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oV1RGTW92ZSgqZnVuY3Rpb25EZWNsYXJhdGlvbiksIHJlc3RyaWN0ZWQpOwogfQog
CiBhdXRvIFBhcnNlcjo6cGFyc2VCbG9jaygpIC0+IEV4cGVjdGVkPEFTVDo6QmxvY2ssIEVycm9y
PiB7CkBAIC0xMjYxLDcgKzEzMzEsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlSWZTdGF0ZW1lbnQo
KSAtPiBFeHBlY3RlZDxBU1Q6OklmU3RhdGVtZW50LCBFcnJvcj4gewogICAgICAgICBlbHNlQm9k
eSA9IFdURk1vdmUoKnBhcnNlZEVsc2VCb2R5KTsKICAgICB9CiAKLSAgICByZXR1cm4gQVNUOjpJ
ZlN0YXRlbWVudChXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKCpjb25kaXRpb25hbCksIFdURk1v
dmUoKmJvZHkpLCBXVEZNb3ZlKGVsc2VCb2R5KSk7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OkV4cHJlc3Npb24+PiBjYXN0QXJndW1lbnRzOworICAgIGNhc3RBcmd1bWVudHMuYXBw
ZW5kKFdURk1vdmUoKmNvbmRpdGlvbmFsKSk7CisgICAgYXV0byBib29sQ2FzdCA9IHN0ZDo6bWFr
ZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpvcmlnaW4pLCBTdHJp
bmcoImJvb2wiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYXN0QXJn
dW1lbnRzKSk7CisgICAgcmV0dXJuIEFTVDo6SWZTdGF0ZW1lbnQoV1RGTW92ZSgqb3JpZ2luKSwg
V1RGTW92ZShib29sQ2FzdCksIFdURk1vdmUoKmJvZHkpLCBXVEZNb3ZlKGVsc2VCb2R5KSk7CiB9
CiAKIGF1dG8gUGFyc2VyOjpwYXJzZVN3aXRjaFN0YXRlbWVudCgpIC0+IEV4cGVjdGVkPEFTVDo6
U3dpdGNoU3RhdGVtZW50LCBFcnJvcj4gewpAQCAtMTQ0Myw3ICsxNTE2LDcgQEAgYXV0byBQYXJz
ZXI6OnBhcnNlRG9XaGlsZUxvb3AoKSAtPiBFeHBlY3RlZDxBU1Q6OkRvV2hpbGVMb29wLCBFcnJv
cj4gewogICAgIHJldHVybiBBU1Q6OkRvV2hpbGVMb29wKFdURk1vdmUoKm9yaWdpbiksIFdURk1v
dmUoKmJvZHkpLCBXVEZNb3ZlKCpjb25kaXRpb25hbCkpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFy
c2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSkg
LT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4geworYXV0byBQYXJz
ZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVk
VHlwZT4mJiB0eXBlKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9y
PiB7CiAgICAgYXV0byBvcmlnaW4gPSBwZWVrKCk7CiAgICAgaWYgKCFvcmlnaW4pCiAgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CkBAIC0xNDg4LDcgKzE1
NjEsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpIC0+IEV4cGVj
dGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdAogICAgIGlmICghdHlwZSkKICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7CiAKLSAgICBhdXRvIGZpcnN0
VmFyaWFibGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpUeXBlPigoKnR5cGUpLT5jbG9uZSgpKSk7CisgICAgYXV0byBmaXJzdFZhcmlh
YmxlRGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKCp0eXBlKS0+Y2xvbmUo
KSk7CiAgICAgaWYgKCFmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAKQEAg
LTE0OTYsNyArMTU2OSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25z
KCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0CiAgICAgcmVzdWx0LmFw
cGVuZChXVEZNb3ZlKCpmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pKTsKIAogICAgIHdoaWxlICh0
cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29tbWEpKSB7Ci0gICAgICAgIGF1dG8gdmFyaWFi
bGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPigoKnR5cGUpLT5jbG9uZSgpKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNs
YXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKICAg
ICAgICAgaWYgKCF2YXJpYWJsZURlY2xhcmF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KHZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoV1RGTW92ZSgqdmFyaWFibGVEZWNsYXJhdGlvbikpOwpAQCAtMTk1OSw4ICsyMDMy
LDEwIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVRlcm5hcnlDb25kaXRpb25hbCgpIC0+IEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3NpCiAgICAgaWYgKCFlbHNlRXhwcmVzc2lvbikK
ICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGVsc2VFeHByZXNzaW9uLmVycm9yKCkp
OwogCi0gICAgLy8gRklYTUU6IENhc3QgdGhlIHByZWRpY2F0ZSB0byBhIGJvb2wuCi0gICAgcmV0
dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNU
OjpUZXJuYXJ5RXhwcmVzc2lvbj4oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZSgqcHJlZGljYXRl
KSwgV1RGTW92ZSgqYm9keUV4cHJlc3Npb24pLCBXVEZNb3ZlKCplbHNlRXhwcmVzc2lvbikpKTsK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4+IGNhc3RBcmd1bWVu
dHM7CisgICAgY2FzdEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSgqcHJlZGljYXRlKSk7CisgICAg
YXV0byBib29sQ2FzdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4
ZXI6OlRva2VuKCpvcmlnaW4pLCBTdHJpbmcoImJvb2wiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSwgV1RGTW92ZShjYXN0QXJndW1lbnRzKSk7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OkV4cHJlc3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUZXJuYXJ5RXhwcmVz
c2lvbj4oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShib29sQ2FzdCksIFdURk1vdmUoKmJvZHlF
eHByZXNzaW9uKSwgV1RGTW92ZSgqZWxzZUV4cHJlc3Npb24pKSk7CiB9CiAKIGF1dG8gUGFyc2Vy
OjpwYXJzZUFzc2lnbm1lbnQoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHBy
ZXNzaW9uPiwgRXJyb3I+IHsKQEAgLTIxNzgsNyArMjI1Myw2IEBAIGF1dG8gUGFyc2VyOjpwYXJz
ZVBvc3NpYmxlUmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbigpIC0+IEV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0CiAgICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3Vz
KSk7CiAgICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpuZXh0KSk7CiAg
ICAgICAgICAgICBwcmV2aW91cyA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lv
bj4oTGV4ZXI6OlRva2VuKCpyZWxhdGlvbmFsQmluYXJ5T3BlcmF0aW9uKSwgU3RyaW5nKCJvcGVy
YXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3Vt
ZW50cykpOwotICAgICAgICAgICAgLy8gRklYTUU6IENhc3QgdGhlIGFyZ3VtZW50IHRvIGEgYm9v
bAogICAgICAgICAgICAgcHJldmlvdXMgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6TG9naWNhbE5v
dEV4cHJlc3Npb24+KFdURk1vdmUoKnJlbGF0aW9uYWxCaW5hcnlPcGVyYXRpb24pLCBXVEZNb3Zl
KHByZXZpb3VzKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjM2NCw4ICsy
NDM4LDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlUHJlZml4KCkgLT4gRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4sCiAgICAgICAgICAgICBjYWxsQXJndW1l
bnRzLmFwcGVuZChXVEZNb3ZlKCpuZXh0KSk7CiAgICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNz
aW9uPihMZXhlcjo6VG9rZW4oKnByZWZpeCksIFN0cmluZygib3BlcmF0b3J+IiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpKTsKICAgICAgICAg
fQotICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6RXhjbGFtYXRpb25Qb2ludDoKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1h
a2VfdW5pcXVlPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4
KSwgV1RGTW92ZSgqbmV4dCkpKTsKKyAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkV4
Y2xhbWF0aW9uUG9pbnQ6IHsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpFeHByZXNzaW9uPj4gY2FzdEFyZ3VtZW50czsKKyAgICAgICAgICAgIGNhc3RBcmd1bWVudHMu
YXBwZW5kKFdURk1vdmUoKm5leHQpKTsKKyAgICAgICAgICAgIGF1dG8gYm9vbENhc3QgPSBzdGQ6
Om1ha2VfdW5pcXVlPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwg
U3RyaW5nKCJib29sIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2Fz
dEFyZ3VtZW50cykpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4
cHJlc3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oTGV4
ZXI6OlRva2VuKCpwcmVmaXgpLCBXVEZNb3ZlKGJvb2xDYXN0KSkpOworICAgICAgICB9CiAgICAg
ICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpBbmQ6CiAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok1ha2VQ
b2ludGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpwcmVmaXgpLCBXVEZNb3ZlKCpuZXh0KSkp
OwogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6QXQ6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAppbmRleCBkYTNlMDZiMDFl
NC4uODAxMzkxNDk4MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQYXJzZXIuaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQ
VSkKIAotI2luY2x1ZGUgIldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2lu
Y2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xBcnJheVR5
cGUuaCIKICNpbmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCkBAIC02OCw3ICs2
Nyw2IEBACiAjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCiAjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJh
bC5oIgogI2luY2x1ZGUgIldITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5j
bHVkZSAiV0hMU0xQYXJhbWV0ZXIuaCIKICNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCiAj
aW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24uaCIKQEAgLTE1NCwxMyArMTUyLDEzIEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8
VHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBFcnJvcj4gcGFyc2VUeXBlU3VmZml4QWJicmV2aWF0ZWQo
KTsKICAgICBzdHJ1Y3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkIHsKICAgICAgICAgTGV4ZXI6
OlRva2VuIHRva2VuOwotICAgICAgICBPcHRpb25hbDxMZXhlcjo6VG9rZW4+IGFkZHJlc3NTcGFj
ZTsKKyAgICAgICAgT3B0aW9uYWw8QVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U+IGFk
ZHJlc3NTcGFjZTsKICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG51bUVsZW1lbnRzOwogICAg
IH07CiAgICAgRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBFcnJvcj4gcGFyc2VU
eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQoKTsKLSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPiwgRXJyb3I+IHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOwotICAgIEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4gcGFyc2VOb25BZGRyZXNzU3BhY2VU
eXBlKCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiBw
YXJzZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlw
ZT4sIEVycm9yPiBwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZU5vbkFkZHJlc3NTcGFjZVR5
cGUoKTsKKyAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVy
cm9yPiBwYXJzZVR5cGUoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlR5cGVEZWZpbml0aW9uLCBFcnJv
cj4gcGFyc2VUeXBlRGVmaW5pdGlvbigpOwogICAgIEV4cGVjdGVkPEFTVDo6QnVpbHRJblNlbWFu
dGljLCBFcnJvcj4gcGFyc2VCdWlsdEluU2VtYW50aWMoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlJl
c291cmNlU2VtYW50aWMsIEVycm9yPiBwYXJzZVJlc291cmNlU2VtYW50aWMoKTsKQEAgLTE3NSw4
ICsxNzMsOCBAQCBwcml2YXRlOgogICAgIEV4cGVjdGVkPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uLCBFcnJvcj4gcGFyc2VOYXRpdmVUeXBlRGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxB
U1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSwgRXJyb3I+IHBhcnNlTnVtVGhyZWFkc0Z1
bmN0aW9uQXR0cmlidXRlKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpBdHRyaWJ1dGVCbG9jaywgRXJy
b3I+IHBhcnNlQXR0cmlidXRlQmxvY2soKTsKLSAgICBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwg
RXJyb3I+IHBhcnNlUGFyYW1ldGVyKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXJzLCBF
cnJvcj4gcGFyc2VQYXJhbWV0ZXJzKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uLCBFcnJvcj4gcGFyc2VQYXJhbWV0ZXIoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zLCBFcnJvcj4gcGFyc2VQYXJhbWV0ZXJzKCk7CiAgICAgRXhwZWN0ZWQ8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VFbnRyeVBvaW50RnVuY3Rpb25E
ZWNsYXJhdGlvbigpOwogICAgIEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJy
b3I+IHBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXJh
dGlvbigpOwpAQCAtMTkyLDcgKzE5MCw3IEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNUOjpG
b3JMb29wLCBFcnJvcj4gcGFyc2VGb3JMb29wKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpXaGlsZUxv
b3AsIEVycm9yPiBwYXJzZVdoaWxlTG9vcCgpOwogICAgIEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxv
b3AsIEVycm9yPiBwYXJzZURvV2hpbGVMb29wKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+JiYpOworICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biwgRXJyb3I+IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpV
bm5hbWVkVHlwZT4mJik7CiAgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0
YXRlbWVudCwgRXJyb3I+IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKTsKICAgICBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcj4gcGFyc2VTdGF0ZW1lbnQo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQcmVwYXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UHJlcGFyZS5jcHAKaW5kZXggMGViNjRkZWNkNGQuLjQ2MGU5NDZmZGRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAg
LTI4LDEwICsyOCwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldITFNMUHJl
cGFyZS5oIgogCisjaW5jbHVkZSAiV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgorI2lu
Y2x1ZGUgIldITFNMQ2hlY2tlci5oIgogI2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCiAj
aW5jbHVkZSAiV0hMU0xQYXJzZXIuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNs
dWRlICJXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGFuZGFy
ZExpYnJhcnkuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3Ro
LmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgiCisjaW5jbHVkZSAi
V0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJXSExTTFN5
bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC01MCw4ICs1NywyMyBAQCBPcHRpb25hbDxQcmVwYXJhdGlvblJlc3VsdD4gcHJlcGFyZShTdHJp
bmdWaWV3IHNvdXJjZSkKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICByZXNvbHZlTmFtZXNJblR5cGVzKHByb2dyYW0pOworICAgIE5hbWVSZXNv
bHZlciBuYW1lUmVzb2x2ZXIocHJvZ3JhbS5uYW1lQ29udGV4dCgpKTsKKyAgICBpZiAoIXJlc29s
dmVOYW1lc0luVHlwZXMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICBpZiAoIWNoZWNrUmVjdXJzaXZlVHlwZXMocHJvZ3JhbSkpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29y
cyhwcm9ncmFtKTsKKyAgICBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMocHJvZ3JhbSk7
CisgICAgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgocHJvZ3JhbSk7CisgICAgc3ludGhl
c2l6ZUNvbnN0cnVjdG9ycyhwcm9ncmFtKTsKKyAgICBpZiAoIWNoZWNrRHVwbGljYXRlRnVuY3Rp
b25zKHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghcmVz
b2x2ZU5hbWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKwogCisgICAgaWYgKGNoZWNrKHByb2dyYW0pKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHJldHVybiBQcmVwYXJhdGlvblJlc3VsdCgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBy
b2dyYW0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3Jh
bS5oCmluZGV4IDU2MzBmZTY5ZWU0Li42MGVlNDc5MDE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKQEAgLTI5LDYgKzI5LDgg
QEAKIAogI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCiAjaW5jbHVkZSAi
V0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIK
KyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24u
aCIKICNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKQEAgLTQ0LDQ1ICs0Niw2
NCBAQCBwdWJsaWM6CiAgICAgUHJvZ3JhbSgpID0gZGVmYXVsdDsKICAgICBQcm9ncmFtKFByb2dy
YW0mJikgPSBkZWZhdWx0OwogCi0gICAgdm9pZCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5pdGlvbiYm
IHR5cGVEZWZpbml0aW9uKQorICAgIGJvb2wgYXBwZW5kKEFTVDo6VHlwZURlZmluaXRpb24mJiB0
eXBlRGVmaW5pdGlvbikKICAgICB7Ci0gICAgICAgIG1fdHlwZURlZmluaXRpb25zLmFwcGVuZChX
VEZNb3ZlKHR5cGVEZWZpbml0aW9uKSk7CisgICAgICAgIG1fdHlwZURlZmluaXRpb25zLmFwcGVu
ZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZURlZmluaXRpb24+KFdURk1vdmUodHlwZURlZmlu
aXRpb24pKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV90eXBlRGVmaW5p
dGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpTdHJ1Y3R1cmVEZWZp
bml0aW9uJiYgc3RydWN0dXJlRGVmaW5pdGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbiYmIHN0cnVjdHVyZURlZmluaXRpb24pCiAgICAgewotICAgICAgICBt
X3N0cnVjdHVyZURlZmluaXRpb25zLmFwcGVuZChXVEZNb3ZlKHN0cnVjdHVyZURlZmluaXRpb24p
KTsKKyAgICAgICAgbV9zdHJ1Y3R1cmVEZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1
ZTxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KFdURk1vdmUoc3RydWN0dXJlRGVmaW5pdGlvbikp
KTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX3N0cnVjdHVyZURlZmluaXRp
b25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uJiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNUOjpF
bnVtZXJhdGlvbkRlZmluaXRpb24mJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCiAgICAgewotICAg
ICAgICBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoZW51bWVyYXRpb25E
ZWZpbml0aW9uKSk7CisgICAgICAgIG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5hcHBlbmQoc3Rk
OjptYWtlX3VuaXF1ZTxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShlbnVtZXJh
dGlvbkRlZmluaXRpb24pKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9l
bnVtZXJhdGlvbkRlZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uJiYgZnVuY3Rpb25EZWZpbml0aW9uKQorCisgICAgYm9vbCBh
cHBlbmQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mJiBmdW5jdGlvbkRlZmluaXRpb24pCiAgICAg
ewotICAgICAgICBtX2Z1bmN0aW9uRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoZnVuY3Rpb25E
ZWZpbml0aW9uKSk7CisgICAgICAgIG1fZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBlbmQoc3RkOjpt
YWtlX3VuaXF1ZTxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShmdW5jdGlvbkRlZmlu
aXRpb24pKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9mdW5jdGlvbkRl
ZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiYmIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCisKKyAgICBib29s
IGFwcGVuZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mJiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKQogICAgIHsKLSAgICAgICAgbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5h
cHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgIG1fbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uPihXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24p
KSk7CisgICAgICAgIG1faW50cmluc2ljcy5hZGQoKm1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bnMubGFzdCgpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX25hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uJiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQorCisgICAgYm9v
bCBhcHBlbmQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBlRGVjbGFyYXRp
b24pCiAgICAgewotICAgICAgICBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1v
dmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKSk7CisgICAgICAgIG1fbmF0aXZlVHlwZURlY2xhcmF0
aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4o
V1RGTW92ZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pKSk7CisgICAgICAgIG1faW50cmluc2ljcy5h
ZGQoKm1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5sYXN0KCkpOworICAgICAgICByZXR1cm4gbV9u
YW1lQ29udGV4dC5hZGQoKm1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5sYXN0KCkpOwogICAgIH0K
IAotICAgIFZlY3RvcjxBU1Q6OlR5cGVEZWZpbml0aW9uPiYgdHlwZURlZmluaXRpb25zKCkgeyBy
ZXR1cm4gbV90eXBlRGVmaW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpTdHJ1Y3R1cmVEZWZp
bml0aW9uPiYgc3RydWN0dXJlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3N0cnVjdHVyZURlZmlu
aXRpb25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPiYgZW51bWVy
YXRpb25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uczsgfQot
ICAgIFZlY3RvcjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMo
KSB7IHJldHVybiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uPiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7IHJl
dHVybiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uPiYgbmF0aXZlVHlwZURlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1f
bmF0aXZlVHlwZURlY2xhcmF0aW9uczsgfQorICAgIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCgp
IHsgcmV0dXJuIG1fbmFtZUNvbnRleHQ7IH0KKyAgICBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKCkg
eyByZXR1cm4gbV9pbnRyaW5zaWNzOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlR5cGVEZWZpbml0aW9uPj4mIHR5cGVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fdHlwZURlZmlu
aXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24+PiYgc3RydWN0dXJlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3N0cnVjdHVyZURlZmlu
aXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbj4+JiBlbnVtZXJhdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlv
bkRlZmluaXRpb25zOyB9CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbj4+JiBmdW5jdGlvbkRlZmluaXRpb25zKCkgY29uc3QgeyByZXR1cm4g
bV9mdW5jdGlvbkRlZmluaXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbj4+JiBmdW5jdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9m
dW5jdGlvbkRlZmluaXRpb25zOyB9CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bnMoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOyB9CisgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiYg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX25hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbj4+JiBuYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVU
eXBlRGVjbGFyYXRpb25zOyB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPEFTVDo6VHlwZURlZmlu
aXRpb24+IG1fdHlwZURlZmluaXRpb25zOwotICAgIFZlY3RvcjxBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24+IG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6RW51bWVyYXRp
b25EZWZpbml0aW9uPiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uPiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
czsKLSAgICBWZWN0b3I8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+IG1fbmF0aXZlVHlwZURl
Y2xhcmF0aW9uczsKKyAgICBOYW1lQ29udGV4dCBtX25hbWVDb250ZXh0OworICAgIEludHJpbnNp
Y3MgbV9pbnRyaW5zaWNzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlRGVm
aW5pdGlvbj4+IG1fdHlwZURlZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPj4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsKKyAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPj4gbV9lbnVt
ZXJhdGlvbkRlZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpGdW5j
dGlvbkRlZmluaXRpb24+PiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiBtX25hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24+PiBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnM7CiB9OwogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2
ZVR5cGVDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5kNmIxYjRhOTgzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCkBAIC0w
LDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCisKKyNp
bmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFJlY3Vyc2l2ZVR5
cGVDaGVja2VyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIH5SZWN1cnNpdmVUeXBl
Q2hlY2tlcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlv
biYgdHlwZURlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdHlwZXMuYWRkKCZ0eXBlRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChhZGRSZXN1bHQu
aXNOZXdFbnRyeSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlRGVmaW5pdGlv
bik7CisKKyAgICAgICAgYXV0byBzdWNjZXNzID0gbV90eXBlcy5yZW1vdmUoJnR5cGVEZWZpbml0
aW9uKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5p
dGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlcy5h
ZGQoJnN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50
cnkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7
CisKKyAgICAgICAgYXV0byBzdWNjZXNzID0gbV90eXBlcy5yZW1vdmUoJnN0cnVjdHVyZURlZmlu
aXRpb24pOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVzLmFkZCgmdHlwZVJl
ZmVyZW5jZSk7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkp
CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZUFyZ3VtZW50KTsKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKworICAg
ICAgICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmdHlwZVJlZmVyZW5jZSk7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgfQorCisgICAgdm9pZCB2
aXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgSGFzaFNldDxBU1Q6OlR5cGUqPiBtX3R5cGVzOworfTsKKworYm9vbCBjaGVja1Jl
Y3Vyc2l2ZVR5cGVzKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgUmVjdXJzaXZlVHlwZUNoZWNr
ZXIgcmVjdXJzaXZlVHlwZUNoZWNrZXI7CisgICAgcmVjdXJzaXZlVHlwZUNoZWNrZXIuY2hlY2tF
cnJvckFuZFZpc2l0KHByb2dyYW0pOworICAgIHJldHVybiByZWN1cnNpdmVUeXBlQ2hlY2tlci5l
cnJvcigpOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2Vy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlhM2ExOWRjZTIwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCitib29sIGNoZWNrUmVj
dXJzaXZlVHlwZXMoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZElt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZl
T3ZlcmxvYWRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
MjM1Mjg0NWVjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCkBAIC0wLDAgKzEsMTEyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCIKKworI2luY2x1ZGUgIldITFNM
SW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCitzdGF0aWMgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBjYW5kaWRhdGUsIGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcykKK3sKKyAgICB1bnNp
Z25lZCBjb252ZXJzaW9uQ29zdCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYW5k
aWRhdGUucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnZlcnNpb25Db3N0
ICs9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6
VW5uYW1lZFR5cGU+JikgLT4gdW5zaWduZWQgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZSkgLT4gdW5zaWduZWQgeworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBl
UmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNvbnZlcnNpb25Db3N0KGNhbmRpZGF0ZS5wYXJh
bWV0ZXJzKClbaV0udHlwZSgpKTsKKyAgICAgICAgfSksIGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkp
OworICAgIH0KKyAgICAvLyBUaGUgcmV0dXJuIHR5cGUgY2FuIG5ldmVyIGJlIGEgbGl0ZXJhbCB0
eXBlLCBzbyBpdHMgY29udmVyc2lvbiBjb3N0IGlzIGFsd2F5cyAwLgorICAgIHJldHVybiBjb252
ZXJzaW9uQ29zdDsKK30KKworQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rp
b25PdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIE9wdGlvbmFsPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiYgY2FzdFJldHVyblR5cGUpCit7Cisg
ICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
PiwgMT4gY2FuZGlkYXRlczsKKyAgICBmb3IgKGF1dG8mIHBvc3NpYmxlRnVuY3Rpb24gOiBwb3Nz
aWJsZUZ1bmN0aW9ucykgeworICAgICAgICBpZiAocG9zc2libGVGdW5jdGlvbi5nZXQoKS5lbnRy
eVBvaW50VHlwZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpbmZlclR5
cGVzRm9yQ2FsbChwb3NzaWJsZUZ1bmN0aW9uLmdldCgpLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0
dXJuVHlwZSkpCisgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChwb3NzaWJsZUZ1bmN0aW9u
LmdldCgpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtaW5pbXVtQ29udmVyc2lvbkNvc3QgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgZm9yIChhdXRvJiBjYW5k
aWRhdGUgOiBjYW5kaWRhdGVzKQorICAgICAgICBtaW5pbXVtQ29udmVyc2lvbkNvc3QgPSBzdGQ6
Om1pbihtaW5pbXVtQ29udmVyc2lvbkNvc3QsIGNvbnZlcnNpb25Db3N0KGNhbmRpZGF0ZS5nZXQo
KSwgYXJndW1lbnRUeXBlcykpOworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbWluaW11bUNvc3RDYW5kaWRhdGVzOworICAg
IGZvciAoYXV0byYgY2FuZGlkYXRlIDogY2FuZGlkYXRlcykgeworICAgICAgICBpZiAoY29udmVy
c2lvbkNvc3QoY2FuZGlkYXRlLmdldCgpLCBhcmd1bWVudFR5cGVzKSA9PSBtaW5pbXVtQ29udmVy
c2lvbkNvc3QpCisgICAgICAgICAgICBtaW5pbXVtQ29zdENhbmRpZGF0ZXMuYXBwZW5kKGNhbmRp
ZGF0ZSk7CisgICAgfQorCisgICAgYm9vbCByZXN0cmljdGVkQ2FuZGlkYXRlRXhpc3RzID0gZmFs
c2U7CisgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBtaW5pbXVtQ29zdENhbmRpZGF0ZXMpIHsK
KyAgICAgICAgaWYgKGlzPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkp
ICYmIGRvd25jYXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpLnJl
c3RyaWN0ZWQoKSkgeworICAgICAgICAgICAgcmVzdHJpY3RlZENhbmRpZGF0ZUV4aXN0cyA9IHRy
dWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNhbmRpZGF0
ZXMuY2xlYXIoKTsKKyAgICBpZiAocmVzdHJpY3RlZENhbmRpZGF0ZUV4aXN0cykgeworICAgICAg
ICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IG1pbmltdW1Db3N0Q2FuZGlkYXRlcykgeworICAgICAg
ICAgICAgaWYgKGlzPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpICYm
IGRvd25jYXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpLnJlc3Ry
aWN0ZWQoKSkKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChjYW5kaWRhdGUuZ2V0
KCkpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGNhbmRpZGF0ZXMgPSBtaW5pbXVt
Q29zdENhbmRpZGF0ZXM7CisKKyAgICBpZiAoY2FuZGlkYXRlcy5zaXplKCkgPT0gMSkKKyAgICAg
ICAgcmV0dXJuICZjYW5kaWRhdGVzWzBdLmdldCgpOworICAgIHJldHVybiBudWxscHRyOworfQor
CitBU1Q6Ok5hbWVkVHlwZSogcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiYgcG9zc2libGVUeXBlcywgQVNUOjpU
eXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKQoreworICAgIEFTVDo6TmFtZWRUeXBlKiByZXN1
bHQgPSBudWxscHRyOworICAgIGZvciAoYXV0byYgcG9zc2libGVUeXBlIDogcG9zc2libGVUeXBl
cykgeworICAgICAgICBpZiAoaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMocG9zc2libGVUeXBl
LCB0eXBlQXJndW1lbnRzKSkgeworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZzdGF0aWNfY2FzdDxB
U1Q6Ok5hbWVkVHlwZSY+KHBvc3NpYmxlVHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURl
Y2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJl
c29sdmVPdmVybG9hZEltcGwuaApzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJs
ZURlY2xhcmF0aW9uLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCmluZGV4IGVmNjFlZDEyNjE5Li5hYzc5MDNi
YWZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCkBAIC0yNyw4
ICsyNywxMCBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFZhbHVlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZpbmdUeXBl
LmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFs
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0z
NiwyNiArMzgsMTQgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNs
YXNzIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24gOiBwdWJsaWMgVmFsdWUgewotcHVibGlj
OgotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2lu
KQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB+QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbigpID0gZGVmYXVsdDsKLQot
ICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oY29uc3QgQW5vbnltb3VzVmFyaWFibGVE
ZWNsYXJhdGlvbiYpID0gZGVsZXRlOwotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24o
QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7Ci0KLSAgICBMZXhlcjo6
VG9rZW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KLQotcHJpdmF0ZToKLSAg
ICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci19OworY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbjsK
K2NsYXNzIE5hbWVkVHlwZTsKIAogfQogCitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29s
dmVGdW5jdGlvbk92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgT3B0aW9u
YWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+JiBjYXN0UmV0dXJuVHlw
ZSk7CitBU1Q6Ok5hbWVkVHlwZSogcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiYsIEFTVDo6VHlwZUFyZ3VtZW50
cyYpOworCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmI3OWQyYjJhNTFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKQEAgLTAsMCArMSw2
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
I2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBSZXNv
bHZhYmxlVHlwZTsKK2NsYXNzIFVubmFtZWRUeXBlOworCit9CisKK2NsYXNzIFJlc29sdmFibGVU
eXBlUmVmZXJlbmNlIDogcHVibGljIFJlZkNvdW50ZWQ8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+
IHsKK3B1YmxpYzoKKyAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShBU1Q6OlJlc29sdmFibGVU
eXBlJiByZXNvbHZhYmxlVHlwZSkKKyAgICAgICAgOiBtX3Jlc29sdmFibGVUeXBlKCZyZXNvbHZh
YmxlVHlwZSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UoY29u
c3QgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UmKSA9IGRlbGV0ZTsKKyAgICBSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZShSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYmKSA9IGRlbGV0ZTsKKworICAgIEFT
VDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKCkgeyByZXR1cm4gKm1fcmVzb2x2YWJs
ZVR5cGU7IH0KKworcHJpdmF0ZToKKyAgICBBU1Q6OlJlc29sdmFibGVUeXBlKiBtX3Jlc29sdmFi
bGVUeXBlOworfTsKKwordXNpbmcgUmVzb2x2aW5nVHlwZSA9IFZhcmlhbnQ8c3RkOjp1bmlxdWVf
cHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+PjsKKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9y
TGVuZ3RoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODY5Y2Uy
NTQxNmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcApAQCAtMCwwICsxLDc2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgRmluZEFycmF5
VHlwZXMgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgfkZpbmRBcnJheVR5cGVzKCkg
PSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgbV9hcnJheVR5cGVzLmFwcGVuZChhcnJheVR5cGUpOwor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlUeXBlKTsKKyAgICB9CisKKyAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkFycmF5VHlwZT4+JiYgdGFrZUFycmF5VHlw
ZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9hcnJheVR5cGVzKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpBcnJh
eVR5cGU+PiBtX2FycmF5VHlwZXM7Cit9OworCit2b2lkIHN5bnRoZXNpemVBcnJheU9wZXJhdG9y
TGVuZ3RoKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgRmluZEFycmF5VHlwZXMgZmluZEFycmF5
VHlwZXM7CisgICAgZmluZEFycmF5VHlwZXMuY2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0pOwor
ICAgIGF1dG8gYXJyYXlUeXBlcyA9IGZpbmRBcnJheVR5cGVzLnRha2VBcnJheVR5cGVzKCk7CisK
KyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFs
c2U7CisKKyAgICBmb3IgKGF1dG8mIGFycmF5VHlwZSA6IGFycmF5VHlwZXMpIHsKKyAgICAgICAg
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2Vu
KGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBhcnJheVR5cGUu
Z2V0KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgcGFyYW1ldGVy
cy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwg
QVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgcHJvZ3JhbS5pbnRy
aW5zaWNzKCkudWludFR5cGUoKSksIFN0cmluZygib3BlcmF0b3IubGVuZ3RoIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwg
aXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1v
dmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgIH0KK30KKworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lOWE5YTExNGYyNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhlc2l6
ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNDIyMWZhMDIyZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3Bw
CkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBG
aW5kQWxsVHlwZXMgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgfkZpbmRBbGxUeXBl
cygpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRl
clR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQocG9p
bnRlclR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQocG9pbnRlclR5cGUpOworICAg
IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJl
bmNlVHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChh
cnJheVJlZmVyZW5jZVR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlSZWZl
cmVuY2VUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJh
eVR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQoYXJy
YXlUeXBlKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFycmF5VHlwZSk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25E
ZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9uYW1lZFR5cGVzLmFwcGVuZChl
bnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZW51bWVy
YXRpb25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJl
RGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IG1fbmFtZWRUeXBlcy5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pIG92
ZXJyaWRlCisgICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChuYXRpdmVUeXBlRGVjbGFyYXRp
b24pOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5u
YW1lZFR5cGU+PiYmIHRha2VVbm5hbWVkVHlwZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdU
Rk1vdmUobV91bm5hbWVkVHlwZXMpOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4mJiB0YWtlTmFtZWRUeXBlcygpCisgICAgeworICAg
ICAgICByZXR1cm4gV1RGTW92ZShtX25hbWVkVHlwZXMpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4gbV91bm5h
bWVkVHlwZXM7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5
cGU+PiBtX25hbWVkVHlwZXM7Cit9OworCit2b2lkIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJv
Z3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBGaW5kQWxsVHlwZXMgZmluZEFsbFR5cGVzOworICAgIGZp
bmRBbGxUeXBlcy5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAgYXV0byBtX3VubmFt
ZWRUeXBlcyA9IGZpbmRBbGxUeXBlcy50YWtlVW5uYW1lZFR5cGVzKCk7CisgICAgYXV0byBtX25h
bWVkVHlwZXMgPSBmaW5kQWxsVHlwZXMudGFrZU5hbWVkVHlwZXMoKTsKKworICAgIGJvb2wgaXNP
cGVyYXRvciA9IHRydWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKworICAgIGZv
ciAoYXV0byYgdW5uYW1lZFR5cGUgOiBtX3VubmFtZWRUeXBlcykgeworICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1l
ZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgdW5uYW1lZFR5cGUuZ2V0
KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgcGFyYW1ldGVycy5h
cHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmli
dXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJp
bmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsK
KyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShjb3B5Q29uc3RydWN0b3IpKTsKKworICAg
ICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVmYXVsdENvbnN0cnVjdG9yKEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3Jp
Z2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUu
Z2V0KCkuY2xvbmUoKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMoKSwgV1RGOjpudWxsb3B0LCBp
c09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92
ZShkZWZhdWx0Q29uc3RydWN0b3IpKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIG5hbWVkVHlw
ZSA6IG1fbmFtZWRUeXBlcykgeworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFy
aWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4o
bmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgU3RyaW5nKCksIFdU
Rjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMg
cGFyYW1ldGVyczsKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURl
Y2xhcmF0aW9uKSk7CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5
Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5
cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwg
QVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3Jp
Z2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0
LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RG
TW92ZShjb3B5Q29uc3RydWN0b3IpKTsKKworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24gZGVmYXVsdENvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhl
cjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygp
LCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFt
ZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgU3RyaW5nKCJvcGVyYXRv
ciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnMoKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAg
ICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShkZWZhdWx0Q29uc3RydWN0b3IpKTsKKyAgICB9
Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgwMDIwZGQ3YzcwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplQ29uc3RydWN0b3JzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCit2b2lkIHN5bnRoZXNpemVD
b25zdHJ1Y3RvcnMoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJh
dGlvbkZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBiYTkwNTYyYmRhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRp
b25GdW5jdGlvbnMuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxF
KFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6
ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmgiCisKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNp
bmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCit2b2lkIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQ
cm9ncmFtJiBwcm9ncmFtKQoreworICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CisgICAgYm9v
bCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCks
IFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjIoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgKmVudW1l
cmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMSkpOworICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMikp
OworICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6
Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRp
b25EZWZpbml0aW9uLT5vcmlnaW4oKSksIHByb2dyYW0uaW50cmluc2ljcygpLmJvb2xUeXBlKCkp
LCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RG
TW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVk
KTsKKyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0
aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigp
KSwgKmVudW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxw
dHIpOworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOwor
ICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9u
KSk7CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgU3RyaW5n
KCJvcGVyYXRvci52YWx1ZSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOwor
ICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKSk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25E
ZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCAq
ZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7
CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAg
ICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsK
KyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpu
dWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoIm9w
ZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJh
bWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAg
ICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikp
OworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRpb25EZWZpbml0aW9u
LT50eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAg
ICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAg
ICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25E
ZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0
LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5p
dGlvbi0+b3JpZ2luKCkpLCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCJvcGVyYXRv
ciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVy
cyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAg
ICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25G
dW5jdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmFjMTA3ODcyZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlv
bnMuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7
CisKK2NsYXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25z
KFByb2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3Jz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmZlODEzZGIzODE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcApA
QCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3Nv
cnMuaCIKKworI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFBy
b2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExT
TFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCit2b2lkIHN5bnRo
ZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBib29sIGlz
T3BlcmF0b3IgPSB0cnVlOworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisgICAgZm9y
IChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9u
cygpKSB7CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6IHN0cnVjdHVyZURl
ZmluaXRpb24tPnN0cnVjdHVyZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAorICAgICAgICAgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihz
dHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJl
ZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksICpz
dHJ1Y3R1cmVEZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7Cisg
ICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlv
bikpOworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9r
ZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RG
OjpudWxsb3B0LCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBTdHJpbmc6OmZvcm1h
dCgib3BlcmF0b3IuJXMiLCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwg
V1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmlj
dGVkKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9yLmZpZWxkPQorICAgICAgICAgICAgICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9r
ZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5
cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkp
LCAqc3RydWN0dXJlRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIp
OworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xh
cmF0aW9uMihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RG
OjpudWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RG
TW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMSkpOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjIpKTsKKyAgICAgICAgICAgICAgICBB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3Jp
Z2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgKnN0
cnVjdHVyZURlZmluaXRpb24pLCBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3IuJXM9Iiwgc3RydWN0
dXJlRWxlbWVudC5uYW1lKCkudXRmOCgpLmRhdGEoKSksIFdURk1vdmUocGFyYW1ldGVycyksIFdU
Rjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAgICAgICAg
cHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCisg
ICAgICAgICAgICBhdXRvIGNyZWF0ZUFuZGVyID0gWyZdKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRk
cmVzc1NwYWNlIGFkZHJlc3NTcGFjZSkgLT4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
IHsKKyAgICAgICAgICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8
QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkp
LCBhZGRyZXNzU3BhY2UsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3Ry
dWN0dXJlRWxlbWVudC5vcmlnaW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CisgICAgICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwg
V1RGTW92ZShhcmd1bWVudFR5cGUpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsK
KyAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Cisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0
aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byByZXR1cm5UeXBlID0gc3RkOjptYWtlX3VuaXF1
ZTxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4o
KSksIGFkZHJlc3NTcGFjZSwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSk7CisgICAg
ICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1
cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQs
IFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvciYuJXMiLCBzdHJ1
Y3R1cmVFbGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwg
V1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIH07CisgICAg
ICAgICAgICBwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFk
ZHJlc3NTcGFjZTo6Q29uc3RhbnQpKTsKKyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0
ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2UpKTsKKyAgICAg
ICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRk
cmVzc1NwYWNlOjpUaHJlYWRncm91cCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3Jl
YXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZCkpOworICAg
ICAgICB9CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nl
c3NvcnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi40ZTliOWZmNzBjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xh
c3MgUHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0m
KTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjdmNDM5MTM2YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcApAQCAtMCwwICsxLDEwMzEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgi
CisjaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFy
cmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKKyNpbmNs
dWRlICJXSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIldITFNMQmFzZVNl
bWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xCbG9jay5oIgorI2luY2x1ZGUgIldITFNMQm9vbGVh
bkxpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEJyZWFrLmgiCisjaW5jbHVkZSAiV0hMU0xCdWls
dEluU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xDb21tYUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVz
c2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTENvbnRpbnVlLmgiCisjaW5jbHVkZSAiV0hM
U0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgi
CisjaW5jbHVkZSAiV0hMU0xEb3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFZmZlY3Rm
dWxFeHByZXNzaW9uU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmlu
aXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyLmgiCisjaW5jbHVkZSAi
V0hMU0xFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGYWxsdGhyb3VnaC5oIgorI2luY2x1
ZGUgIldITFNMRmxvYXRMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCisjaW5j
bHVkZSAiV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25E
ZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xJZlN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMSW5kZXhFeHByZXNzaW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMTG9n
aWNhbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5oIgorI2luY2x1ZGUgIldITFNMTm9kZS5oIgorI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwu
aCIKKyNpbmNsdWRlICJXSExTTE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgorI2luY2x1
ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgiCisjaW5jbHVkZSAiV0hMU0xS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBl
LmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xS
ZXR1cm4uaCIKKyNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xTcGVj
aWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFN0YWdlSW5PdXRT
ZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xT
dHJ1Y3R1cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hDYXNlLmgiCisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hTdGF0
ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFRlcm5hcnlFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xUcmFwLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBl
QXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJMaXRl
cmFsLmgiCisjaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVE
ZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hM
U0xXaGlsZUxvb3AuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wg
eworCit2b2lkIFZpc2l0b3I6OnZpc2l0KFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgLy8gVGhl
c2UgdmlzaXRpbmcgZnVuY3Rpb25zIG1pZ2h0IGFkZCBuZXcgZ2xvYmFsIHN0YXRlbWVudHMsIHNv
IGRvbid0IHVzZSBmb3JlYWNoIHN5bnRheC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBy
b2dyYW0udHlwZURlZmluaXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKVtpXSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkuc2l6ZSgpOyArK2kpCisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygp
W2ldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2dyYW0uZW51bWVyYXRpb25EZWZp
bml0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnByb2dy
YW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpW2ldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoKnByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpW2ldKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpwcm9ncmFtLm5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKClbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCgqcHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25zKClbaV0p
OworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBl
KQoreworICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1l
ZFR5cGUpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkVHlwZSkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1
bm5hbWVkVHlwZSkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNT
RVJUKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgfQor
fQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpCit7Cisg
ICAgaWYgKGlzPEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZFR5cGUpKTsK
KyAgICBlbHNlIGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24+KG5hbWVkVHlwZSkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uPihuYW1lZFR5cGUpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNU
OjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAgIGVsc2UgeworICAgICAg
ICBBU1NFUlQoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24+KG5hbWVkVHlwZSkpOworICAgIH0KK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlR5
cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAodHlwZURlZmluaXRpb24u
dHlwZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnR5cGVEZWZpbml0aW9uLnR5cGUo
KSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBz
dHJ1Y3R1cmVEZWZpbml0aW9uKQoreworICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6
IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHN0cnVjdHVyZUVsZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCit7Cisg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAg
IGZvciAoYXV0byYgZW51bWVyYXRpb25NZW1iZXIgOiBlbnVtZXJhdGlvbkRlZmluaXRpb24uZW51
bWVyYXRpb25NZW1iZXJzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlbnVtZXJhdGlv
bk1lbWJlcik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGlj
X2Nhc3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4oZnVuY3Rpb25EZWZpbml0aW9uKSk7Cisg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKK30KKwor
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19j
YXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24p
KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYg
bmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDog
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KHR5cGVBcmd1bWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpU
eXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQoreworICAgIGZvciAoYXV0byYgdHlwZUFyZ3Vt
ZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh0eXBlQXJndW1lbnQpOworICAgIGlmICh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlw
ZSgpICYmIGlzPEFTVDo6VHlwZURlZmluaXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlw
ZSgpKSkgeworICAgICAgICBhdXRvJiB0eXBlRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6VHlw
ZURlZmluaXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgaWYg
KHR5cGVEZWZpbml0aW9uLnR5cGUoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgq
dHlwZURlZmluaXRpb24udHlwZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpQb2ludGVyVHlwZSYgcG9pbnRlclR5cGUpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHN0YXRpY19jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZSY+KHBvaW50ZXJUeXBlKSk7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNl
VHlwZSkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVu
Y2VUeXBlJj4oYXJyYXlSZWZlcmVuY2VUeXBlKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJy
YXlUeXBlLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1cmVF
bGVtZW50JiBzdHJ1Y3R1cmVFbGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1
Y3R1cmVFbGVtZW50LnR5cGUoKSk7CisgICAgaWYgKHN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMo
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGlj
KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVu
dW1lcmF0aW9uTWVtYmVyKQoreworICAgIGlmIChlbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpOwor
fQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rp
b25EZWNsYXJhdGlvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWNsYXJh
dGlvbi5hdHRyaWJ1dGVCbG9jaygpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25E
ZWNsYXJhdGlvbi50eXBlKCkpOworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25E
ZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChwYXJh
bWV0ZXIpOworICAgIGlmIChmdW5jdGlvbkRlY2xhcmF0aW9uLnNlbWFudGljKCkpCisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCgqZnVuY3Rpb25EZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsKK30K
Kwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlR5cGVBcmd1bWVudCYgdHlwZUFyZ3VtZW50KQor
eworICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25zdGFudEV4cHJl
c3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
Y29uc3RhbnRFeHByZXNzaW9uKTsKKyAgICB9LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlw
ZVJlZmVyZW5jZT4mIHR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KCp0eXBlUmVmZXJlbmNlKTsKKyAgICB9KSwgdHlwZUFyZ3VtZW50KTsKK30KKwordm9pZCBWaXNp
dG9yOjp2aXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmIHJlZmVyZW5jZVR5cGUpCit7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHJlZmVyZW5jZVR5cGUuZWxlbWVudFR5cGUoKSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMpCit7CisgICAgV1RGOjp2aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYgYnVpbHRJblNlbWFu
dGljKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChidWlsdEluU2VtYW50aWMpOworICAg
IH0sIFsmXShBU1Q6OlJlc291cmNlU2VtYW50aWMmIHJlc291cmNlU2VtYW50aWMpIHsKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlc291cmNlU2VtYW50aWMpOworICAgIH0sIFsmXShBU1Q6
OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYgc3BlY2lhbGl6YXRpb25Db25zdGFudFNl
bWFudGljKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzcGVjaWFsaXphdGlvbkNvbnN0
YW50U2VtYW50aWMpOworICAgIH0sIFsmXShBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYgc3RhZ2VJ
bk91dFNlbWFudGljKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGFnZUluT3V0U2Vt
YW50aWMpOworICAgIH0pLCBzZW1hbnRpYyk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikKK3sKKyAgICBjb25zdGFu
dEV4cHJlc3Npb24udmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJh
bCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGludGVnZXJM
aXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25l
ZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh1bnNpZ25lZElu
dGVnZXJMaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJh
bCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZmxvYXRMaXRlcmFsKTsKKyAgICB9LCBb
Jl0oQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KG51bGxMaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9v
bGVhbkxpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGJvb2xlYW5MaXRlcmFs
KTsKKyAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJl
ZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpIHsK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9u
TWVtYmVyUmVmZXJlbmNlKTsKKyAgICB9KSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRlQmxvY2spCit7CisgICAgZm9yIChhdXRvJiBmdW5j
dGlvbkF0dHJpYnV0ZSA6IGF0dHJpYnV0ZUJsb2NrKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoZnVuY3Rpb25BdHRyaWJ1dGUpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QnVp
bHRJblNlbWFudGljJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlc291cmNl
U2VtYW50aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3BlY2lhbGl6YXRp
b25Db25zdGFudFNlbWFudGljJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN0
YWdlSW5PdXRTZW1hbnRpYyYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpJbnRl
Z2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlu
dGVnZXJMaXRlcmFsLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpVbnNp
Z25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKQoreworICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnR5cGUoKSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkKK3sKKyAgICBj
aGVja0Vycm9yQW5kVmlzaXQoZmxvYXRMaXRlcmFsLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpCit7CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KG51bGxMaXRlcmFsLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpCb29sZWFuTGl0ZXJhbCYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpJ
bnRlZ2VyTGl0ZXJhbFR5cGUmIGludGVnZXJMaXRlcmFsVHlwZSkKK3sKKyAgICBpZiAoaW50ZWdl
ckxpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
KmludGVnZXJMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGludGVnZXJMaXRlcmFsVHlwZS5wcmVmZXJyZWRUeXBlKCkpOworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmIHVuc2lnbmVkSW50ZWdl
ckxpdGVyYWxUeXBlKQoreworICAgIGlmICh1bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5yZXNv
bHZlZFR5cGUoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp1bnNpZ25lZEludGVnZXJM
aXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpGbG9hdExpdGVyYWxUeXBlJiBmbG9hdExpdGVyYWxUeXBlKQoreworICAg
IGlmIChmbG9hdExpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKmZsb2F0TGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChmbG9hdExpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbFR5cGUmIG51bGxMaXRlcmFsVHlwZSkKK3sK
KyAgICBpZiAobnVsbExpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoKm51bGxMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJl
ZmVyZW5jZSYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkF0dHJp
YnV0ZSYgZnVuY3Rpb25BdHRyaWJ1dGUpCit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYgbnVtVGhyZWFkc0Z1bmN0
aW9uQXR0cmlidXRlKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChudW1UaHJlYWRzRnVu
Y3Rpb25BdHRyaWJ1dGUpOworICAgIH0pLCBmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmKQoreworfQor
Cit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQoreworICAgIGZvciAoYXV0
byYgc3RhdGVtZW50IDogYmxvY2suc3RhdGVtZW50cygpKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoKnN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdGF0ZW1l
bnQmIHN0YXRlbWVudCkKK3sKKyAgICBpZiAoaXM8QVNUOjpCbG9jaz4oc3RhdGVtZW50KSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QmxvY2s+KHN0YXRlbWVudCkp
OworICAgIGVsc2UgaWYgKGlzPEFTVDo6QnJlYWs+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkJyZWFrPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNl
IGlmIChpczxBU1Q6OkNvbnRpbnVlPihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAo
aXM8QVNUOjpEb1doaWxlTG9vcD4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRvd25jYXN0PEFTVDo6RG9XaGlsZUxvb3A+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYg
KGlzPEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudD4oc3RhdGVtZW50KSkKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0
YXRlbWVudD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpGYWxsdGhyb3VnaD4o
c3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RmFs
bHRocm91Z2g+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6Rm9yTG9vcD4oc3Rh
dGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Rm9yTG9v
cD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpJZlN0YXRlbWVudD4oc3RhdGVt
ZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6SWZTdGF0ZW1l
bnQ+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6UmV0dXJuPihzdGF0ZW1lbnQp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpSZXR1cm4+KHN0YXRl
bWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6U3dpdGNoQ2FzZT4oc3RhdGVtZW50KSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6U3dpdGNoQ2FzZT4oc3RhdGVt
ZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVudCkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlN3aXRjaFN0YXRlbWVu
dD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpUcmFwPihzdGF0ZW1lbnQpKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpUcmFwPihzdGF0ZW1lbnQp
KTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Pihz
dGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSB7CisgICAg
ICAgIEFTU0VSVChpczxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7CisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7CisgICAg
fQorfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QnJlYWsmKQoreworfQorCit2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6Q29udGludWUmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChkb1doaWxlTG9vcC5ib2R5KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9v
cC5jb25kaXRpb25hbCgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkV4cHJlc3Np
b24mIGV4cHJlc3Npb24pCit7CisgICAgaWYgKGlzPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+
KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpB
c3NpZ25tZW50RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6
Qm9vbGVhbkxpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZG93bmNhc3Q8QVNUOjpCb29sZWFuTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYg
KGlzPEFTVDo6Q2FsbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpDYWxsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAg
IGVsc2UgaWYgKGlzPEFTVDo6Q29tbWFFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Q29tbWFFeHByZXNzaW9uPihleHByZXNz
aW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJl
c3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpEZXJlZmVy
ZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkZsb2F0
TGl0ZXJhbD4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2Fz
dDxBU1Q6OkZsb2F0TGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6
SW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZG93bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYg
KGlzPEFTVDo6TG9naWNhbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
OworICAgIGVsc2UgaWYgKGlzPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24p
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsTm90RXhw
cmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChkb3duY2FzdDxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24p
KTsKKyAgICBlbHNlIGlmIChpczxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oZXhwcmVzc2lv
bikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6Ok1ha2VQb2ludGVy
RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TnVsbExpdGVy
YWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNU
OjpOdWxsTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RG90RXhw
cmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2Fz
dDxBU1Q6OkRvdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6
OkluZGV4RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChkb3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2Ug
aWYgKGlzPEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlRlcm5hcnlFeHByZXNz
aW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFT
VDo6VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6
OlVuc2lnbmVkSW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihleHByZXNzaW9u
KSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNl
PihleHByZXNzaW9uKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSk7CisgICAgfQorfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24m
Pihkb3RFeHByZXNzaW9uKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpJbmRleEV4
cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaW5k
ZXhFeHByZXNzaW9uLmluZGV4RXhwcmVzc2lvbigpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQo
c3RhdGljX2Nhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihpbmRleEV4cHJlc3Np
b24pKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbiYgZXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZXhwcmVzc2lvbi5i
YXNlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lv
blN0YXRlbWVudCYgZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkKK3sKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNz
aW9uKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKQorewor
fQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKK3sKKyAgICBX
VEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7CisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgfSwgWyZd
KHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCgqZXhwcmVzc2lvbik7CisgICAgfSksIGZvckxvb3AuaW5pdGlh
bGl6YXRpb24oKSk7CisgICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkpCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7CisgICAgaWYgKGZvckxvb3AuaW5j
cmVtZW50KCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQo
KSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuYm9keSgpKTsKK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKK3sKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CisgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VC
b2R5KCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHko
KSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVu
dCkKK3sKKyAgICBpZiAocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqcmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOworfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBpZiAoc3dpdGNoQ2Fz
ZS52YWx1ZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnN3aXRjaENhc2UudmFsdWUo
KSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkK
K3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkpOworICAg
IGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZSk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpUcmFwJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dCkKK3sKKyAgICBmb3IgKGF1dG8mIHZhcmlhYmxlRGVjbGFyYXRpb24gOiB2YXJpYWJsZURlY2xh
cmF0aW9uc1N0YXRlbWVudC52YXJpYWJsZURlY2xhcmF0aW9ucygpKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQo
d2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxv
b3AuYm9keSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZh
cmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5z
ZW1hbnRpYygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRp
b24uc2VtYW50aWMoKSk7CisgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIo
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRp
YWxpemVyKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJl
c3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChh
c3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3Np
Z25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKK3sKKyAgICBmb3IgKGF1dG8mIGFyZ3Vt
ZW50IDogY2FsbEV4cHJlc3Npb24uYXJndW1lbnRzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdCgqYXJndW1lbnQpOworICAgIGlmIChjYWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoY2FsbEV4cHJlc3Npb24uY2FzdFJldHVyblR5
cGUoKS0+Z2V0KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6Q29tbWFFeHByZXNz
aW9uJiBjb21tYUV4cHJlc3Npb24pCit7CisgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogY29t
bWFFeHByZXNzaW9uLmxpc3QoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpleHByZXNz
aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lv
biYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkZXJl
ZmVyZW5jZUV4cHJlc3Npb24ucG9pbnRlcigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICBjaGVja0Vycm9yQW5k
VmlzaXQobG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCit7Cisg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQoKSk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
JiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKK30KKwordm9pZCBWaXNp
dG9yOjp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNz
aW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZh
bHVlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5k
VmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFsdWUoKSk7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWUoKSk7Cisg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVF
eHByZXNzaW9uKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLnJlc3VsdEV4cHJlc3Npb24oKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpUZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24uYm9keUV4cHJlc3Npb24oKSk7CisgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkpOworfQorCit2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKQoreworfQorCit2b2lk
IFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIGlm
ICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQocHJvZ3JhbSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQoreworICAg
IGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodW5uYW1lZFR5cGUpOworfQorCit2b2lkIFZp
c2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKQorewor
ICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobmFtZWRUeXBlKTsKK30KKwordm9pZCBW
aXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmlu
aXRpb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh0eXBlRGVmaW5pdGlv
bik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RydWN0dXJl
RGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisg
ICAgICAgIHZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25E
ZWZpbml0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZW51bWVyYXRp
b25EZWZpbml0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYg
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAg
IHZpc2l0KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobmF0aXZlVHlw
ZURlY2xhcmF0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAg
ICAgICAgdmlzaXQodHlwZVJlZmVyZW5jZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKQoreworICAgIGlmICghZXJy
b3IoKSkKKyAgICAgICAgdmlzaXQocG9pbnRlclR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VU
eXBlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYXJyYXlSZWZlcmVuY2VU
eXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBcnJheVR5
cGUmIGFycmF5VHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGFycmF5
VHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RydWN0
dXJlRWxlbWVudCYgc3RydWN0dXJlRWxlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KHN0cnVjdHVyZUVsZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGVudW1lcmF0aW9uTWVtYmVyKTsKK30K
Kwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAg
dmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBlQXJndW1lbnQpCit7CisgICAgaWYgKCFl
cnJvcigpKQorICAgICAgICB2aXNpdCh0eXBlQXJndW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6
OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmIHJlZmVyZW5jZVR5cGUpCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChyZWZlcmVuY2VUeXBlKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMp
Cit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzZW1hbnRpYyk7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBj
b25zdGFudEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChj
b25zdGFudEV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OkF0dHJpYnV0ZUJsb2NrJiBhdHRyaWJ1dGVCbG9jaykKK3sKKyAgICBpZiAoIWVycm9y
KCkpCisgICAgICAgIHZpc2l0KGF0dHJpYnV0ZUJsb2NrKTsKK30KKwordm9pZCBWaXNpdG9yOjpj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCdWlsdEluU2VtYW50aWMmIGJ1aWx0SW5TZW1hbnRpYykK
K3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGJ1aWx0SW5TZW1hbnRpYyk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRp
YyYgcmVzb3VyY2VTZW1hbnRpYykKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0
KHJlc291cmNlU2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYgc3BlY2lhbGl6YXRpb25Db25z
dGFudFNlbWFudGljKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoc3BlY2lh
bGl6YXRpb25Db25zdGFudFNlbWFudGljKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmIHN0YWdlSW5PdXRTZW1hbnRpYykKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHN0YWdlSW5PdXRTZW1hbnRpYyk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwm
IGludGVnZXJMaXRlcmFsKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoaW50
ZWdlckxpdGVyYWwpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpCit7CisgICAg
aWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsKTsKK30K
Kwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZs
b2F0TGl0ZXJhbCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZsb2F0TGl0
ZXJhbCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TnVsbExp
dGVyYWwmIG51bGxMaXRlcmFsKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQo
bnVsbExpdGVyYWwpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OkJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisg
ICAgICAgIHZpc2l0KGJvb2xlYW5MaXRlcmFsKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGUmIGludGVnZXJMaXRlcmFsVHlwZSkK
K3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGludGVnZXJMaXRlcmFsVHlwZSk7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGUmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKQoreworICAgIGlmICgh
ZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUpOworfQor
Cit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZsb2F0TGl0ZXJhbFR5cGUm
IGZsb2F0TGl0ZXJhbFR5cGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChm
bG9hdExpdGVyYWxUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpOdWxsTGl0ZXJhbFR5cGUmIG51bGxMaXRlcmFsVHlwZSkKK3sKKyAgICBpZiAoIWVycm9y
KCkpCisgICAgICAgIHZpc2l0KG51bGxMaXRlcmFsVHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJiBmdW5jdGlvbkF0dHJpYnV0ZSkKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZ1bmN0aW9uQXR0cmlidXRlKTsKK30K
Kwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rp
b25BdHRyaWJ1dGUmIG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkKK3sKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHZpc2l0KG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQorewor
ICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYmxvY2spOworfQorCit2b2lkIFZpc2l0
b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KQoreworICAg
IGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoc3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNp
dG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCcmVhayYgYnJlYWtTdGF0ZW1lbnQpCit7Cisg
ICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChicmVha1N0YXRlbWVudCk7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29udGludWUmIGNvbnRpbnVlU3Rh
dGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY29udGludWVTdGF0
ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkRvV2hp
bGVMb29wJiBkb1doaWxlTG9vcCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0
KGRvV2hpbGVMb29wKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAg
dmlzaXQoZXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkp
CisgICAgICAgIHZpc2l0KGRvdEV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKQorewor
ICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoaW5kZXhFeHByZXNzaW9uKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisg
ICAgICAgIHZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYg
ZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0
b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZhbGx0aHJvdWdoJiBmYWxsdGhyb3VnaFN0YXRl
bWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZhbGx0aHJvdWdoU3Rh
dGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGb3JM
b29wJiBmb3JMb29wKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZm9yTG9v
cCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SWZTdGF0ZW1l
bnQmIGlmU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoaWZT
dGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJl
dHVybiYgcmV0dXJuU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQocmV0dXJuU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAg
ICAgICAgdmlzaXQoc3dpdGNoQ2FzZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdChzd2l0Y2hTdGF0ZW1lbnQpOworfQorCit2b2lkIFZp
c2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlRyYXAmIHRyYXApCit7CisgICAgaWYgKCFl
cnJvcigpKQorICAgICAgICB2aXNpdCh0cmFwKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNp
dCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCit7CisgICAgaWYgKCFl
cnJvcigpKQorICAgICAgICB2aXNpdCh3aGlsZUxvb3ApOworfQorCit2b2lkIFZpc2l0b3I6OmNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFy
YXRpb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh2YXJpYWJsZURlY2xh
cmF0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJv
cigpKQorICAgICAgICB2aXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNz
aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY2FsbEV4cHJlc3Npb24p
OworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbW1hRXhwcmVz
c2lvbiYgY29tbWFFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQoY29tbWFFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbik7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TG9naWNhbEV4cHJl
c3Npb24mIGxvZ2ljYWxFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAg
dmlzaXQobG9naWNhbEV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lvbikK
K3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9u
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpNYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAg
IGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
bik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TWFrZVBvaW50
ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0
b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2
aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVj
a0Vycm9yQW5kVmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24p
Cit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbik7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFyaWFibGVSZWZl
cmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAg
dmlzaXQodmFyaWFibGVSZWZlcmVuY2UpOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCmluZGV4
IDUxNjg1NmU0MWQwLi44NWU3OGZmNTk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKQEAgLTI3LDU0MyArMjcsMjM0IEBACiAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCi0jaW5jbHVk
ZSAiV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xB
cnJheVJlZmVyZW5jZVR5cGUuaCIKLSNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgotI2luY2x1
ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTEJhc2VGdW5j
dGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgiCi0jaW5jbHVk
ZSAiV0hMU0xCbG9jay5oIgotI2luY2x1ZGUgIldITFNMQm9vbGVhbkxpdGVyYWwuaCIKLSNpbmNs
dWRlICJXSExTTEJyZWFrLmgiCi0jaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKLSNp
bmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xDb21tYUV4cHJl
c3Npb24uaCIKLSNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUg
IldITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuaCIKLSNp
bmNsdWRlICJXSExTTENvbnRpbnVlLmgiCi0jaW5jbHVkZSAiV0hMU0xEZXJlZmVyZW5jZUV4cHJl
c3Npb24uaCIKLSNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCi0jaW5jbHVkZSAiV0hMU0xE
b3RFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVt
ZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKLSNpbmNsdWRl
ICJXSExTTEVudW1lcmF0aW9uTWVtYmVyLmgiCi0jaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgi
Ci0jaW5jbHVkZSAiV0hMU0xGYWxsdGhyb3VnaC5oIgotI2luY2x1ZGUgIldITFNMRmxvYXRMaXRl
cmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlv
bkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgotI2lu
Y2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xJZlN0YXRl
bWVudC5oIgotI2luY2x1ZGUgIldITFNMSW5kZXhFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hM
U0xJbnRlZ2VyTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMTG9naWNhbEV4cHJlc3Npb24uaCIK
LSNpbmNsdWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xN
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRl
ckV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24u
aCIKLSNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldI
TFNMTm9kZS5oIgotI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExT
TE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMUGFyYW1ldGVy
LmgiCi0jaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgotI2luY2x1ZGUgIldITFNMUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKLSNpbmNs
dWRlICJXSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTFJl
ZmVyZW5jZVR5cGUuaCIKLSNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKLSNpbmNs
dWRlICJXSExTTFJldHVybi5oIgogI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKLSNpbmNsdWRl
ICJXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNM
U3RhZ2VJbk91dFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKLSNpbmNs
dWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKLSNpbmNsdWRlICJXSExTTFN0cnVjdHVy
ZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFN3aXRjaENhc2UuaCIKLSNpbmNsdWRlICJXSExT
TFN3aXRjaFN0YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIK
LSNpbmNsdWRlICJXSExTTFRyYXAuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKICNpbmNsdWRl
ICJXSExTTFR5cGVBcmd1bWVudC5oIgotI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIK
LSNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJXSExTTFVuc2lnbmVk
SW50ZWdlckxpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTFZhbHVlLmgiCi0jaW5jbHVkZSAiV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKLSNp
bmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgotCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFt
ZXNwYWNlIFdITFNMIHsKIAotY2xhc3MgVmlzaXRvciB7Ci0gICAgflZpc2l0b3IoKSA9IGRlZmF1
bHQ7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKLSAgICB7Ci0g
ICAgICAgIGZvciAoYXV0byYgdHlwZURlZmluaXRpb24gOiBwcm9ncmFtLnR5cGVEZWZpbml0aW9u
cygpKQotICAgICAgICAgICAgdmlzaXQodHlwZURlZmluaXRpb24pOwotICAgICAgICBmb3IgKGF1
dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkp
Ci0gICAgICAgICAgICB2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKLSAgICAgICAgZm9yIChh
dXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlv
bnMoKSkKLSAgICAgICAgICAgIHZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7Ci0gICAgICAg
IGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRp
b25zKCkpCi0gICAgICAgICAgICB2aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOwotICAgICAgICBm
b3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKTsKLSAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9n
cmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbik7Ci0gICAgfQotCi0gICAgdm9pZCB2aXNpdFR5cGUoQVNUOjpUeXBlJiB0
eXBlKQotICAgIHsKLSAgICAgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odHlwZSkpCi0g
ICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpKTsKLSAg
ICAgICAgZWxzZSBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odHlwZSkpCi0gICAgICAgICAgICB2
aXNpdChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih0eXBlKSk7Ci0gICAgICAgIGVsc2UgaWYg
KGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih0eXBlKSkKLSAgICAgICAgICAgIHZpc2l0KGRv
d25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih0eXBlKSk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlUeXBlPih0eXBlKSk7Ci0gICAgICAgICAg
ICB2aXNpdChkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odHlwZSkpOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZp
bml0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHR5cGVEZWZpbml0aW9uLnR5cGUoKSk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlv
biYgc3RydWN0dXJlRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgc3RydWN0
dXJlRWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkKLSAg
ICAgICAgICAgIHZpc2l0KHN0cnVjdHVyZUVsZW1lbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0
aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBl
KCkpOwotICAgICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25E
ZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpKQotICAgICAgICAgICAgdmlzaXQoZW51bWVy
YXRpb25NZW1iZXIpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQo
c3RhdGljX2Nhc3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4oZnVuY3Rpb25EZWZpbml0aW9u
KSk7Ci0gICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQoc3RhdGljX2Nh
c3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiB0
eXBlQXJndW1lbnQgOiBuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpKQotICAg
ICAgICAgICAgdmlzaXQodHlwZUFyZ3VtZW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQotICAgIHsKLSAgICAgICAg
Zm9yIChhdXRvJiB0eXBlQXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkK
LSAgICAgICAgICAgIHZpc2l0KHR5cGVBcmd1bWVudCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKQotICAgIHsKLSAgICAgICAg
dmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlJj4ocG9pbnRlclR5cGUpKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFy
cmF5UmVmZXJlbmNlVHlwZSkKLSAgICB7Ci0gICAgICAgIHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6
UmVmZXJlbmNlVHlwZSY+KGFycmF5UmVmZXJlbmNlVHlwZSkpOwotICAgIH0KLQotICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQotICAgIHsKLSAgICAgICAg
dmlzaXRUeXBlKGFycmF5VHlwZS50eXBlKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpCi0gICAgewotICAg
ICAgICB2aXNpdFR5cGUoc3RydWN0dXJlRWxlbWVudC50eXBlKCkpOwotICAgICAgICBpZiAoc3Ry
dWN0dXJlRWxlbWVudC5zZW1hbnRpYygpKQotICAgICAgICAgICAgdmlzaXQoKnN0cnVjdHVyZUVs
ZW1lbnQuc2VtYW50aWMoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQotICAgIHsKLSAgICAgICAgaWYg
KGVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpCi0gICAgICAgICAgICB2aXNpdCgqZW51bWVyYXRp
b25NZW1iZXIudmFsdWUoKSk7Ci0gICAgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pCi0gICAgewotICAg
ICAgICB2aXNpdChmdW5jdGlvbkRlY2xhcmF0aW9uLmF0dHJpYnV0ZUJsb2NrKCkpOwotICAgICAg
ICB2aXNpdFR5cGUoZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBmb3IgKGF1
dG8mIHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpKQotICAgICAg
ICAgICAgdmlzaXQocGFyYW1ldGVyKTsKLSAgICAgICAgaWYgKGZ1bmN0aW9uRGVjbGFyYXRpb24u
c2VtYW50aWMoKSkKLSAgICAgICAgICAgIHZpc2l0KCpmdW5jdGlvbkRlY2xhcmF0aW9uLnNlbWFu
dGljKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlR5cGVBcmd1bWVu
dCYgdHlwZUFyZ3VtZW50KQotICAgIHsKLSAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKSB7Ci0g
ICAgICAgICAgICB2aXNpdChjb25zdGFudEV4cHJlc3Npb24pOwotICAgICAgICB9LCBbJl0oc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4mIHR5cGVSZWZlcmVuY2UpIHsKLSAgICAg
ICAgICAgIHZpc2l0KCp0eXBlUmVmZXJlbmNlKTsKLSAgICAgICAgfSksIHR5cGVBcmd1bWVudCk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYgcmVm
ZXJlbmNlVHlwZSkKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShyZWZlcmVuY2VUeXBlLmVsZW1l
bnRUeXBlKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlNlbWFudGlj
JiBzZW1hbnRpYykKLSAgICB7Ci0gICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oQVNUOjpCdWlsdEluU2VtYW50aWMmIGJ1aWx0SW5TZW1hbnRpYykgewotICAgICAgICAgICAg
dmlzaXQoYnVpbHRJblNlbWFudGljKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6UmVzb3VyY2VTZW1h
bnRpYyYgcmVzb3VyY2VTZW1hbnRpYykgewotICAgICAgICAgICAgdmlzaXQocmVzb3VyY2VTZW1h
bnRpYyk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRp
YyYgc3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljKSB7Ci0gICAgICAgICAgICB2aXNpdChz
cGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMpOwotICAgICAgICB9LCBbJl0oQVNUOjpTdGFn
ZUluT3V0U2VtYW50aWMmIHN0YWdlSW5PdXRTZW1hbnRpYykgewotICAgICAgICAgICAgdmlzaXQo
c3RhZ2VJbk91dFNlbWFudGljKTsKLSAgICAgICAgfSksIHNlbWFudGljKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhw
cmVzc2lvbikKLSAgICB7Ci0gICAgICAgIGNvbnN0YW50RXhwcmVzc2lvbi52aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgewotICAg
ICAgICAgICAgdmlzaXQoaW50ZWdlckxpdGVyYWwpOwotICAgICAgICB9LCBbJl0oQVNUOjpVbnNp
Z25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7Ci0gICAgICAgICAg
ICB2aXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6Rmxv
YXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KGZsb2F0TGl0ZXJh
bCk7Ci0gICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgewotICAg
ICAgICAgICAgdmlzaXQobnVsbExpdGVyYWwpOwotICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFu
TGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KGJvb2xlYW5MaXRl
cmFsKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25N
ZW1iZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlKSB7Ci0gICAgICAgICAgICB2aXNpdChjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSk7Ci0gICAgICAgIH0pKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRlQmxvY2spCi0gICAgewotICAgICAg
ICBmb3IgKGF1dG8mIGZ1bmN0aW9uQXR0cmlidXRlIDogYXR0cmlidXRlQmxvY2spCi0gICAgICAg
ICAgICB2aXNpdChmdW5jdGlvbkF0dHJpYnV0ZSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6UGFyYW1ldGVyJiBwYXJhbWV0ZXIpCi0gICAgewotICAgICAgICB2aXNpdFR5
cGUocGFyYW1ldGVyLnR5cGUoKSk7Ci0gICAgICAgIGlmIChwYXJhbWV0ZXIuc2VtYW50aWMoKSkK
LSAgICAgICAgICAgIHZpc2l0KCpwYXJhbWV0ZXIuc2VtYW50aWMoKSk7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QnVpbHRJblNlbWFudGljJikKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYpCi0gICAgewot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3Rh
bnRTZW1hbnRpYyYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlN0YWdlSW5PdXRTZW1hbnRpYyYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpCi0gICAgewotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJikKLSAgICB7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmKQotICAgIHsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJiBmdW5jdGlvbkF0dHJpYnV0ZSkKLSAg
ICB7Ci0gICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpOdW1UaHJl
YWRzRnVuY3Rpb25BdHRyaWJ1dGUmIG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkgewotICAg
ICAgICAgICAgdmlzaXQobnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKTsKLSAgICAgICAgfSks
IGZ1bmN0aW9uQXR0cmlidXRlKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYgYmxvY2spCi0gICAgewotICAgICAgICBmb3IgKGF1
dG8mIHN0YXRlbWVudCA6IGJsb2NrLnN0YXRlbWVudHMoKSkKLSAgICAgICAgICAgIHZpc2l0KCpz
dGF0ZW1lbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0YXRlbWVu
dCYgc3RhdGVtZW50KQotICAgIHsKLSAgICAgICAgaWYgKGlzPEFTVDo6QmxvY2s+KHN0YXRlbWVu
dCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkJsb2NrPihzdGF0ZW1lbnQpKTsK
LSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpCcmVhaz4oc3RhdGVtZW50KSkKLSAgICAgICAgICAg
IHZpc2l0KGRvd25jYXN0PEFTVDo6QnJlYWs+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlm
IChpczxBU1Q6OkNvbnRpbnVlPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNh
c3Q8QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6
RG9XaGlsZUxvb3A+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6
OkRvV2hpbGVMb29wPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpFZmZl
Y3RmdWxFeHByZXNzaW9uU3RhdGVtZW50PihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQo
ZG93bmNhc3Q8QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsK
LSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpGYWxsdGhyb3VnaD4oc3RhdGVtZW50KSkKLSAgICAg
ICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVudCkpOwotICAg
ICAgICBlbHNlIGlmIChpczxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2
aXNpdChkb3duY2FzdDxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlm
IChpczxBU1Q6OklmU3RhdGVtZW50PihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93
bmNhc3Q8QVNUOjpJZlN0YXRlbWVudD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlz
PEFTVDo6UmV0dXJuPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNU
OjpSZXR1cm4+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlN3aXRjaENh
c2U+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlN3aXRjaENh
c2U+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlN3aXRjaFN0YXRlbWVu
dD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6U3dpdGNoU3Rh
dGVtZW50PihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpUcmFwPihzdGF0
ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpUcmFwPihzdGF0ZW1lbnQp
KTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIEFTU0VSVChpczxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7Ci0gICAgICAgICAg
ICB2aXNpdChkb3duY2FzdDxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCcmVhayYpCi0gICAgewotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbnRpbnVlJikKLSAgICB7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29w
KQotICAgIHsKLSAgICAgICAgdmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKLSAgICAgICAgdmlz
aXQoZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIGlmIChp
czxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZp
c2l0KGRvd25jYXN0PEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAg
ICAgICAgZWxzZSBpZiAoaXM8QVNUOjpCb29sZWFuTGl0ZXJhbD4oZXhwcmVzc2lvbikpCi0gICAg
ICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkJvb2xlYW5MaXRlcmFsPihleHByZXNzaW9uKSk7
Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6Q2FsbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQot
ICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpDYWxsRXhwcmVzc2lvbj4oZXhwcmVzc2lv
bikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkNvbW1hRXhwcmVzc2lvbj4oZXhwcmVzc2lv
bikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkNvbW1hRXhwcmVzc2lvbj4oZXhw
cmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkRlcmVmZXJl
bmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkZs
b2F0TGl0ZXJhbD4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6
OkZsb2F0TGl0ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6Oklu
dGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFT
VDo6SW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNU
OjpMb2dpY2FsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3du
Y2FzdDxBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAg
ICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
OwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+
KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpNYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFT
VDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0
KGRvd25jYXN0PEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAg
ICAgIGVsc2UgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKQotICAgICAgICAg
ICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpOdWxsTGl0ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAg
ICBlbHNlIGlmIChpczxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
Ci0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNU
OjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzPEFTVDo6VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAg
dmlzaXQoZG93bmNhc3Q8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAg
ICAgICBlbHNlIGlmIChpczxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24p
KQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
PihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGlzPEFT
VDo6VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgICAgIHZpc2l0KGRv
d25jYXN0PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25T
dGF0ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpCi0gICAgewotICAgICAgICB2
aXNpdChlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmVmZmVjdGZ1bEV4cHJlc3Npb24oKSk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKQotICAg
IHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29w
KQotICAgIHsKLSAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dCkgewotICAgICAgICAgICAgdmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpOwot
ICAgICAgICB9LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Np
b24pIHsKLSAgICAgICAgICAgIHZpc2l0KCpleHByZXNzaW9uKTsKLSAgICAgICAgfSksIGZvckxv
b3AuaW5pdGlhbGl6YXRpb24oKSk7Ci0gICAgICAgIGlmIChmb3JMb29wLmNvbmRpdGlvbigpKQot
ICAgICAgICAgICAgdmlzaXQoKmZvckxvb3AuY29uZGl0aW9uKCkpOwotICAgICAgICBpZiAoZm9y
TG9vcC5pbmNyZW1lbnQoKSkKLSAgICAgICAgICAgIHZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgp
KTsKLSAgICAgICAgdmlzaXQoZm9yTG9vcC5ib2R5KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKLSAgICB7Ci0gICAgICAg
IHZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOwotICAgICAgICB2aXNpdChpZlN0YXRl
bWVudC5ib2R5KCkpOwotICAgICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkKLSAgICAg
ICAgICAgIHZpc2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKLSAgICB7Ci0gICAg
ICAgIGlmIChyZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSkKLSAgICAgICAgICAgIHZpc2l0KCpyZXR1
cm5TdGF0ZW1lbnQudmFsdWUoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKLSAgICB7Ci0gICAgICAgIGlmIChzd2l0Y2hDYXNl
LnZhbHVlKCkpCi0gICAgICAgICAgICB2aXNpdCgqc3dpdGNoQ2FzZS52YWx1ZSgpKTsKLSAgICAg
ICAgdmlzaXQoc3dpdGNoQ2FzZS5ibG9jaygpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkKLSAgICB7Ci0gICAg
ICAgIHZpc2l0KHN3aXRjaFN0YXRlbWVudC52YWx1ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBz
d2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpCi0gICAgICAgICAgICB2
aXNpdChzd2l0Y2hDYXNlKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpU
cmFwJikKLSAgICB7Ci0gICAgfQorY2xhc3MgUHJvZ3JhbTsKKworbmFtZXNwYWNlIEFTVCB7CisK
K2NsYXNzIFR5cGVEZWZpbml0aW9uOworY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlvbjsKK2NsYXNz
IEVudW1lcmF0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIEZ1bmN0aW9uRGVmaW5pdGlvbjsKK2NsYXNz
IE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBOYXRpdmVUeXBlRGVjbGFyYXRpb247
CitjbGFzcyBUeXBlUmVmZXJlbmNlOworY2xhc3MgUG9pbnRlclR5cGU7CitjbGFzcyBBcnJheVJl
ZmVyZW5jZVR5cGU7CitjbGFzcyBBcnJheVR5cGU7CitjbGFzcyBTdHJ1Y3R1cmVFbGVtZW50Owor
Y2xhc3MgRW51bWVyYXRpb25NZW1iZXI7CitjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xh
c3MgUmVmZXJlbmNlVHlwZTsKK2NsYXNzIENvbnN0YW50RXhwcmVzc2lvbjsKK2NsYXNzIEJ1aWx0
SW5TZW1hbnRpYzsKK2NsYXNzIFJlc291cmNlU2VtYW50aWM7CitjbGFzcyBTcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWM7CitjbGFzcyBTdGFnZUluT3V0U2VtYW50aWM7CitjbGFzcyBJbnRl
Z2VyTGl0ZXJhbDsKK2NsYXNzIFVuc2lnbmVkSW50ZWdlckxpdGVyYWw7CitjbGFzcyBGbG9hdExp
dGVyYWw7CitjbGFzcyBOdWxsTGl0ZXJhbDsKK2NsYXNzIEJvb2xlYW5MaXRlcmFsOworY2xhc3Mg
Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2U7CitjbGFzcyBOdW1U
aHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGU7CitjbGFzcyBCbG9jazsKK2NsYXNzIFN0YXRlbWVudDsK
K2NsYXNzIEJyZWFrOworY2xhc3MgQ29udGludWU7CitjbGFzcyBEb1doaWxlTG9vcDsKK2NsYXNz
IEV4cHJlc3Npb247CitjbGFzcyBEb3RFeHByZXNzaW9uOworY2xhc3MgSW5kZXhFeHByZXNzaW9u
OworY2xhc3MgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uOworY2xhc3MgRWZmZWN0ZnVsRXhwcmVz
c2lvblN0YXRlbWVudDsKK2NsYXNzIEZhbGx0aHJvdWdoOworY2xhc3MgRm9yTG9vcDsKK2NsYXNz
IElmU3RhdGVtZW50OworY2xhc3MgUmV0dXJuOworY2xhc3MgU3dpdGNoQ2FzZTsKK2NsYXNzIFN3
aXRjaFN0YXRlbWVudDsKK2NsYXNzIFRyYXA7CitjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uc1N0
YXRlbWVudDsKK2NsYXNzIFdoaWxlTG9vcDsKK2NsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb247Citj
bGFzcyBBc3NpZ25tZW50RXhwcmVzc2lvbjsKK2NsYXNzIENhbGxFeHByZXNzaW9uOworY2xhc3Mg
Q29tbWFFeHByZXNzaW9uOworY2xhc3MgRGVyZWZlcmVuY2VFeHByZXNzaW9uOworY2xhc3MgTG9n
aWNhbEV4cHJlc3Npb247CitjbGFzcyBMb2dpY2FsTm90RXhwcmVzc2lvbjsKK2NsYXNzIE1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb247CitjbGFzcyBNYWtlUG9pbnRlckV4cHJlc3Npb247Citj
bGFzcyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uOworY2xhc3MgVGVybmFyeUV4cHJlc3Npb247
CitjbGFzcyBWYXJpYWJsZVJlZmVyZW5jZTsKK2NsYXNzIFVubmFtZWRUeXBlOworY2xhc3MgTmFt
ZWRUeXBlOwogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQotICAgIHsKLSAgICAg
ICAgZm9yIChhdXRvJiB2YXJpYWJsZURlY2xhcmF0aW9uIDogdmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQudmFyaWFibGVEZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KHZhcmlh
YmxlRGVjbGFyYXRpb24pOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Oldo
aWxlTG9vcCYgd2hpbGVMb29wKQotICAgIHsKLSAgICAgICAgdmlzaXQod2hpbGVMb29wLmNvbmRp
dGlvbmFsKCkpOwotICAgICAgICB2aXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURl
Y2xhcmF0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24u
dHlwZSgpKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKLSAg
ICAgICAgICAgIHZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpOwotICAgICAg
ICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKQotICAgICAgICAgICAgdmlz
aXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSk7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHBy
ZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgp
KTsKLSAgICAgICAgdmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNz
aW9uKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9u
LmFyZ3VtZW50cygpKQotICAgICAgICAgICAgdmlzaXQoKmFyZ3VtZW50KTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lv
bikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGNvbW1hRXhwcmVzc2lv
bi5saXN0KCkpCi0gICAgICAgICAgICB2aXNpdCgqZXhwcmVzc2lvbik7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5j
ZUV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChkZXJlZmVyZW5jZUV4cHJlc3Npb24u
cG9pbnRlcigpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2Fs
RXhwcmVzc2lvbiYgbG9naWNhbEV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChsb2dp
Y2FsRXhwcmVzc2lvbi5sZWZ0KCkpOwotICAgICAgICB2aXNpdChsb2dpY2FsRXhwcmVzc2lvbi5y
aWdodCgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsTm90
RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChs
b2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChtYWtlQXJyYXlSZWZlcmVuY2VF
eHByZXNzaW9uLmxWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKLSAgICB7Ci0g
ICAgICAgIHZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24uYmFzZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQot
ICAgIHsKLSAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSk7
Ci0gICAgICAgIHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFsdWUoKSk7Ci0g
ICAgICAgIHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWUoKSk7Ci0gICAg
ICAgIHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHByZXNzaW9uKCkp
OwotICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnJlc3VsdEV4cHJlc3Np
b24oKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VGVybmFyeUV4cHJl
c3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQodGVybmFyeUV4
cHJlc3Npb24ucHJlZGljYXRlKCkpOwotICAgICAgICB2aXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5i
b2R5RXhwcmVzc2lvbigpKTsKLSAgICAgICAgdmlzaXQodGVybmFyeUV4cHJlc3Npb24uZWxzZUV4
cHJlc3Npb24oKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2UmKQotICAgIHsKLSAgICB9Cit9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJikKLSAgICB7Ci0gICAgfQorY2xhc3Mg
VmlzaXRvciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+VmlzaXRvcigpID0gZGVmYXVsdDsKKwor
ICAgIC8vIEZJWE1FOiBBZGQgYSB3YXkgdG8gdmlzaXQgYSBjb25zdCBQcm9ncmFtCisKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoUHJvZ3JhbSYpOworICAgIHZvaWQgdmlzaXQoQVNUOjpVbm5hbWVk
VHlwZSYgdW5uYW1lZFR5cGUpOworICAgIHZvaWQgdmlzaXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVk
VHlwZSk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQ
b2ludGVyVHlwZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYpOworICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpUeXBlQXJndW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZWZlcmVuY2VU
eXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U2VtYW50aWMmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OkJ1aWx0SW5TZW1hbnRpYyYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlc291
cmNlU2VtYW50aWMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdGFnZUlu
T3V0U2VtYW50aWMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJh
bCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OkJvb2xlYW5MaXRlcmFsJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6SW50
ZWdlckxpdGVyYWxUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbFR5cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGbG9hdExp
dGVyYWxUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TnVsbExpdGVyYWxUeXBl
Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5j
dGlvbkF0dHJpYnV0ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bVRocmVhZHNG
dW5jdGlvbkF0dHJpYnV0ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6QnJlYWsmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb250
aW51ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJik7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJ
bmRleEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxF
eHByZXNzaW9uU3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RmFsbHRo
cm91Z2gmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpSZXR1cm4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hDYXNl
Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50Jik7CisgICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6V2hpbGVMb29wJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRF
eHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlJik7CisKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChQ
cm9ncmFtJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYg
dW5uYW1lZFR5cGUpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TmFtZWRUeXBl
JiBuYW1lZFR5cGUpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VHlwZURlZmlu
aXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RnVuY3Rpb25EZWZp
bml0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5cGVS
ZWZlcmVuY2UmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlBvaW50ZXJUeXBl
Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUm
KTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkFycmF5VHlwZSYpOworICAgIHZv
aWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RydWN0dXJlRWxlbWVudCYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXImKTsKKyAgICB2b2lkIGNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICB2b2lkIGNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5cGVBcmd1bWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6U2VtYW50aWMmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNv
bnN0YW50RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXR0
cmlidXRlQmxvY2smKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJ1aWx0SW5T
ZW1hbnRpYyYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmVzb3VyY2VTZW1h
bnRpYyYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3BlY2lhbGl6YXRpb25D
b25zdGFudFNlbWFudGljJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTdGFn
ZUluT3V0U2VtYW50aWMmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkludGVn
ZXJMaXRlcmFsJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGbG9hdExp
dGVyYWwmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok51bGxMaXRlcmFsJik7
CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYpOworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlJik7CisgICAg
dm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYp
OworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsVHlwZSYpOwor
ICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TnVsbExpdGVyYWxUeXBlJik7CisgICAg
dm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RnVu
Y3Rpb25BdHRyaWJ1dGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok51bVRo
cmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6QmxvY2smKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0YXRlbWVudCYp
OworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QnJlYWsmKTsKKyAgICB2b2lkIGNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbnRpbnVlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpEb1doaWxlTG9vcCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RG90RXhw
cmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SW5kZXhFeHByZXNz
aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkVmZmVjdGZ1bEV4
cHJlc3Npb25TdGF0ZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZh
bGx0aHJvdWdoJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGb3JMb29wJik7
CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpJZlN0YXRlbWVudCYpOworICAgIHZv
aWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmV0dXJuJik7CisgICAgdm9pZCBjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpTd2l0Y2hDYXNlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpTd2l0Y2hTdGF0ZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OlRyYXAmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zU3RhdGVtZW50Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpXaGls
ZUxvb3AmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkFzc2lnbm1lbnRFeHBy
ZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lv
biYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJik7
CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24m
KTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJik7
CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYp
OworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TWFrZVBvaW50ZXJF
eHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUZXJu
YXJ5RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFyaWFi
bGVSZWZlcmVuY2UmKTsKKworICAgIHZvaWQgc2V0RXJyb3IoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFtX2Vycm9yKTsKKyAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgfQorCisgICAgYm9v
bCBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0KKworcHJpdmF0ZToKKyAgICBib29s
IG1fZXJyb3IgeyBmYWxzZSB9OyAvLyBGSVhNRTogTWlncmF0ZSB0aGlzIHRvIGJlIHNvbWUgc29y
dCBvZiBkZXNjcmlwdGl2ZSBzdHJpbmcuCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNjMGUz
NjQ3MDU0Li5kNDBjMzRmMDRkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTMwNiw4ICszMDYsMzIgQEAg
TW9kdWxlcy93ZWJncHUvRE9NV2luZG93V2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xMZXhlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xJbnRyaW5zaWNzLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNw
cAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TE5hbWVDb250ZXh0LmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBl
Q2hlY2tlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5j
dGlvbnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVB
Y2Nlc3NvcnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJh
dGlvbkZ1bmN0aW9ucy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFy
cmF5T3BlcmF0b3JMZW5ndGguY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVDb25zdHJ1Y3RvcnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3Bw
CiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCitNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuY3BwCitNb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcAorTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNwcAorTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcAorTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZVJlZmVyZW5jZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVz
b2x2ZU92ZXJsb2FkSW1wbC5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50
cnlQb2ludEl0ZW1zLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxp
dGVyYWwuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJM
aXRlcmFsLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV2Vi
R1BVQWRhcHRlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cExheW91dC5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAwN2MxNmVmMTc3NS4uNGYwNTZiYjFhMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0MDMsOSArNjQwMywyMCBAQAog
CQkxQzI0RUVBNzFDNzJBN0I0MDA4MEY4RkMgLyogSlNGb250RmFjZVNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0ZvbnRGYWNlU2V0Lmg7IHBhdGggPSBEZXJpdmVkU291
cmNlcy9XZWJDb3JlL0pTRm9udEZhY2VTZXQuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RT
X0RJUjsgfTsKIAkJMUMyNjQ5NzkwRDdFMjQ4QTAwQkQxMEYyIC8qIERvY3VtZW50TG9hZGVyTWFj
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TG9hZGVy
TWFjLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMzMjQ5MTAxQzZENkEzQjAw
N0VEQjMyIC8qIEZvbnRWYXJpYW50QnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGb250VmFyaWFudEJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzMzMjc2QzIxQ0VEQTQyMDAwREM5RjIgLyogV0hMU0xFbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NkUyMUNFRkY3NDAwMERD
OUYyIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJl
c29sdmVPdmVybG9hZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3
NkYyMUNGMDEzMTAwMERDOUYyIC8qIFdITFNMSW5mZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTEluZmVyVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzEy
MUNGMEJFMTAwMERDOUYyIC8qIFdITFNMTmFtZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
TmFtZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzcyMjFDRjBE
MkUwMDBEQzlGMiAvKiBXSExTTFVubmFtZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVW5u
YW1lZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzQyMUQ1QTcw
NjAwMERDOUYyIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkxQzMzMjc3NTIxRDVCMEY4MDAwREM5RjIgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc2MjFENUMwN0UwMDBEQzlGMiAvKiBXSExT
TFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTeW50
aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDMzMyNzc3MjFENUNBODMwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1
bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0
aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3ODIxRDVDRUQ0MDAw
REM5RjIgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDMzk2OUNGMUI3NDIxMUUwMDJCQ0ZBNyAvKiBGb250Q2FjaGVDb3Jl
VGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FjaGVD
b3JlVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjYyNjBFMUM2RTdD
QTYwMEFCNTI3QyAvKiBGb250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGb250RmFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjYy
NjBGMUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBGb250RmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzdD
QzIxRDIxQ0RFMTk4MDBDMUZBMkMgLyogV0hMU0xOYW1lQ29udGV4dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTE5hbWVDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFC
OTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNv
bnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCOTU4
MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02NDE1LDYgKzY0MjYsMTggQEAKIAkJMUNBRjM0N0UwQTZDNDA1MjAwQUJFMDZFIC8q
IFdlYlNjcmlwdE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJT
Y3JpcHRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBRjM0N0YwQTZD
NDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdC5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUNBRjM0ODAwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFBy
aXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIyQzIxREQ5NkVG
MDA2RTg0NkEgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQ0I2OUIyRDIxREQ5NkVGMDA2RTg0NkEgLyogV0hMU0xHYXRoZXJFbnRyeVBv
aW50SXRlbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCMzIyMURFRDQwQjAwNkU4NDZBIC8q
IFdITFNMUmVzb2x2YWJsZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZXNvbHZhYmxlVHlw
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIzNDIxREVENjNBMDA2RTg0
NkEgLyogV0hMU0xGbG9hdExpdGVyYWxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRmxvYXRM
aXRlcmFsVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIzNTIxREVE
NjQ5MDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUNCNjlCMzYyMURFRDY1NzAwNkU4NDZBIC8qIFdITFNMTnVsbExpdGVyYWxUeXBlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMTnVsbExpdGVyYWxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTFDQjY5QjM3MjFERUQ2NkIwMDZFODQ2QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCMzgyMURGMDNFMTAwNkU4
NDZBIC8qIFdITFNMRmxvYXRMaXRlcmFsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExT
TEZsb2F0TGl0ZXJhbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2
OUIzOTIxREYwM0YzMDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQ0I2OUIzQTIxREYwNDAzMDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0
ZXJhbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIzQjIxREYwNDFFMDA2RTg0NkEg
LyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUNCNjlCM0UyMUUwMzVGMzAwNkU4NDZBIC8qIFdITFNMUmVzb2x2aW5nVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlc29sdmluZ1R5cGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUNCNkI0RjgyMTdCODM5MzAwOTNCOUNEIC8qIFRleHREZWNvcmF0aW9u
VGhpY2tuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQjZCNEZCMjE3QjgzOTQwMDkzQjlDRCAvKiBU
ZXh0VW5kZXJsaW5lT2Zmc2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRVbmRlcmxpbmVPZmZzZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNDREY1QkIxOTkwMzMyNDAwQkNFQkFE
IC8qIFNWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMzIxNCw5ICsxMzIzNywxOSBAQAogCQlDMTFBOUVDRDIxNDAzQTVDMDBD
RkIyMEEgLyogU3dpdGNoaW5nR1BVQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN3aXRjaGluZ0dQ
VUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMTFBOUVEMjIxNDA1NzhC
MDBDRkIyMEEgLyogU3dpdGNoaW5nR1BVQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN3
aXRjaGluZ0dQVUNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMxRTFE
MjM1MjAzREYxNTQwMDU4NDY2NSAvKiBTY3JlZW5Qcm9wZXJ0aWVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNjcmVlblByb3BlcnRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwMTMz
NDQyMURBQzA5NTAwQjYwQzI3IC8qIFdITFNMSW50cmluc2ljcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTEludHJpbnNpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwMTMzNDYy
MURBRUU2RTAwQjYwQzI3IC8qIFdITFNMSW50cmluc2ljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXSExTTEludHJpbnNpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjAx
MzM0NzIxREI0MzYzMDBCNjBDMjcgLyogV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDMjAxNUMwOTFCRTZGRTJDMDA4MjIzODkgLyogRm9udFZhcmlhbnRC
dWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRWYXJpYW50QnVpbGRlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMjBGNEY2NDIxREZCRTVDMDA3MEM0NUEgLyogV0hMU0xUeXBl
UmVmZXJlbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVHlwZVJlZmVyZW5jZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMEY0RjY2MjFERkYyMzYwMDcwQzQ1QSAv
KiBXSExTTEludGVnZXJMaXRlcmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW50ZWdl
ckxpdGVyYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjBGNEY2NzIxREZG
M0E3MDA3MEM0NUEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyMTBFOTExMjFCNEJEMTAwMEI3RjgzRCAvKiBXSExTTExleGVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTGV4ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMjEwRTkxMjIxQjRCRDEwMDBCN0Y4M0QgLyogV0hMU0xMZXhlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXSExTTExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MTM4QTEzMjFEREVDRDMwMEY1MTZCQSAvKiBXSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyMTM4QTE1MjFEREVDRTkwMEY1MTZCQSAvKiBXSExTTFJlc291cmNlU2Vt
YW50aWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzhBMTYyMURERUNGQjAwRjUxNkJBIC8q
IFdITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzhBMTcyMURERUQwRDAwRjUxNkJBIC8qIFdITFNMU3RhZ2VJ
bk91dFNlbWFudGljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU3RhZ2VJbk91dFNlbWFu
dGljLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY2RjMyMUNEODlBRDAw
MjI3OTc5IC8qIFdITFNMVHJhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFRyYXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY2RjQyMUNEODlCMzAwMjI3OTc5IC8qIFdITFNM
RnVuY3Rpb25EZWZpbml0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRnVuY3Rpb25EZWZpbml0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNkY1MjFDRDg5QjUwMDIy
Nzk3OSAvKiBXSExTTENvbnRpbnVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ29udGludWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjQ1LDcgKzEzMjc4LDYgQEAKIAkJQzIx
QkY3MEMyMUNEODlDQzAwMjI3OTc5IC8qIFdITFNMRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3
MEQyMUNEODlDRDAwMjI3OTc5IC8qIFdITFNMUmVmZXJlbmNlVHlwZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTFJlZmVyZW5jZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIx
QkY3MEUyMUNEODlDRTAwMjI3OTc5IC8qIFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUMyMUJGNzBGMjFDRDg5Q0YwMDIyNzk3OSAvKiBXSExTTEFub255bW91c1Zhcmlh
YmxlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURl
Y2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzEwMjFDRDg5
RDAwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyMUJGNzExMjFDRDg5RDEwMDIyNzk3OSAvKiBXSExTTFR5cGVBcmd1bWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTFR5cGVBcmd1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDMjFCRjcxMjIxQ0Q4OUQxMDAyMjc5NzkgLyogV0hMU0xTdGF0ZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xTdGF0ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEz
MjUzLDcgKzEzMjg1LDYgQEAKIAkJQzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFy
aWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFCRjcxNTIxQ0Q4OUQ0MDAyMjc5NzkgLyogV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyMUJGNzE2MjFDRDg5RDUwMDIyNzk3OSAvKiBXSExTTENhbGxFeHBy
ZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ2FsbEV4cHJlc3Npb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzIxQkY3MTcyMUNEODlENjAwMjI3OTc5IC8qIFdITFNMUGFy
YW1ldGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUGFyYW1ldGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyMUJGNzE4MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTERvdEV4cHJl
c3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xEb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzE5MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTFN3aXRj
aENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyMUJGNzFBMjFDRDg5RDgwMDIyNzk3OSAvKiBXSExTTEJyZWFrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdITFNMQnJlYWsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTEzMjk5LDE1ICsxMzMzMCwyNyBAQAogCQlDMjgwODMzRDFDNkRDMjJDMDAxNDUxQjYgLyog
SlNGb250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU0Zv
bnRGYWNlLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZS5jcHA7
IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUMyODA4MzNFMUM2REMyMkMw
MDE0NTFCNiAvKiBKU0ZvbnRGYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEpTRm9udEZhY2UuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZS5o
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlDMjgwQjNGRDFFRjQ2MDg5
MDBEMzUxMzUgLyogRm9udEZhbWlseVNwZWNpZmljYXRpb25OdWxsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyODZFRDlFMjFEQjVBQkEwMDcxM0M0MCAv
KiBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xS
ZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4
OEM3MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MjkyMUM4
Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExT
TFByZXBhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyQTIxQzhD
QTUwMDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUHJlcGFy
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjg4QzcyQjIxQzhDQ0MyMDAyREY1
Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1l
UmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyQzIxQzhD
Q0MyMDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xO
YW1lUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MkQyMUM5
OTFEQTAwMkRGNUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdITFNMVHlwZUFyZ3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJB
QjBBRjQxRTZCM0M2QzAwMTM0OEM1IC8qIEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udFNlbGVjdGlvbkFsZ29yaXRobS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQUIwQUY1MUU2QjNDNkMwMDEzNDhD
NSAvKiBGb250U2VsZWN0aW9uQWxnb3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzJBQjBCMDMxRTZERTkyQzAwMTM0OEM1IC8qIEZvbnRTZWxlY3Rpb25WYWx1ZUlubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udFNlbGVjdGlvblZhbHVlSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3MDIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xD
aGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMQ2hlY2tlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTcxMjFEQjRCNDgwMDRCRTI2RSAvKiBXSExTTENo
ZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyQjU1MTczMjFEQjRCQkQwMDRCRTI2RSAvKiBXSExTTE5hbWVSZXNvbHZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTE5hbWVSZXNvbHZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc0MjFEQjUxMEYwMDRCRTI2RSAvKiBXSExTTE5h
bWVDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTmFtZUNvbnRleHQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3NTIxREI1MjY2MDA0QkUyNkUgLyog
V0hMU0xJbmZlclR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW5mZXJUeXBlcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc2MjFEQjUzOTQwMDRCRTI2
RSAvKiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMkI1NTE3NzIxREI1NDBGMDA0QkUyNkUgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzgyMURCNTU3NTAwNEJFMjZF
IC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMkI1NTE3OTIxREI1NThGMDA0QkUyNkUgLyogV0hMU0xTeW50aGVz
aXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50
aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMkI1NTE3QTIxREI1NTlFMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVy
YXRvckxlbmd0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVBcnJheU9w
ZXJhdG9yTGVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxN0Iy
MURCNTVBRjAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3QzIxREI1N0VEMDA0QkUyNkUgLyogV0hMU0xWaXNp
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVmlzaXRvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyQzJDRjU1MUVGMzc2MUEwMDQyODFBOCAvKiBGb250RmFtaWx5
U3BlY2lmaWNhdGlvbk51bGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9u
dEZhbWlseVNwZWNpZmljYXRpb25OdWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyRTM4RUZCMUU4Mzk2RkQwMENBM0FERiAvKiBDU1NGb250U3R5bGVWYWx1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250U3R5bGVWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRTM4RUZDMUU4Mzk2RkQwMENBM0FERiAvKiBD
U1NGb250U3R5bGVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NG
b250U3R5bGVWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzMzIsMTEg
KzI1Mzc1LDM3IEBACiAJCQkJQzIxQkY3MzcyMUNEOEEwMjAwMjI3OTc5IC8qIFdITFNMUGFyc2Vy
LmNwcCAqLywKIAkJCQlDMjFCRjczODIxQ0Q4QTAzMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuaCAq
LywKIAkJCQlDMjFCRjczQTIxQ0Q4RDcwMDAyMjc5NzkgLyogV0hMU0xQcm9ncmFtLmggKi8sCi0g
CQkJCUMyODhDNzI3MjFDOEM2RUYwMDJERjVDQSAvKiBXSExTTFZpc2l0b3IuaCAqLywKLSAJCQkJ
QzI4OEM3MjkyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8sCi0gCQkJCUMy
ODhDNzJBMjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuaCAqLywKLSAJCQkJQzI4OEM3
MkIyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLywKLSAJCQkJQzI4
OEM3MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmggKi8sCisJCQkJQzI4
OEM3MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5oICovLAorCQkJCUMyQjU1MTdD
MjFEQjU3RUQwMDRCRTI2RSAvKiBXSExTTFZpc2l0b3IuY3BwICovLAorCQkJCUMyODhDNzI5MjFD
OENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuY3BwICovLAorCQkJCUMyODhDNzJBMjFDOENB
NTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuaCAqLywKKwkJCQlDMjg4QzcyQzIxQzhDQ0MyMDAy
REY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLywKKwkJCQlDMkI1NTE3MzIxREI0QkJEMDA0
QkUyNkUgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovLAorCQkJCTFDN0NDMjFEMjFDREUxOTgw
MEMxRkEyQyAvKiBXSExTTE5hbWVDb250ZXh0LmggKi8sCisJCQkJQzJCNTUxNzQyMURCNTEwRjAw
NEJFMjZFIC8qIFdITFNMTmFtZUNvbnRleHQuY3BwICovLAorCQkJCTFDMzMyNzZFMjFDRUZGNzQw
MDBEQzlGMiAvKiBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCAqLywKKwkJCQlDMjg2RUQ5RTIx
REI1QUJBMDA3MTNDNDAgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCAqLywKKwkJCQkx
QzMzMjc2RjIxQ0YwMTMxMDAwREM5RjIgLyogV0hMU0xJbmZlclR5cGVzLmggKi8sCisJCQkJQzJC
NTUxNzUyMURCNTI2NjAwNEJFMjZFIC8qIFdITFNMSW5mZXJUeXBlcy5jcHAgKi8sCisJCQkJMUMz
MzI3NzQyMUQ1QTcwNjAwMERDOUYyIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCAqLywK
KwkJCQlDMkI1NTE3NjIxREI1Mzk0MDA0QkUyNkUgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tl
ci5jcHAgKi8sCisJCQkJMUMzMzI3NzUyMUQ1QjBGODAwMERDOUYyIC8qIFdITFNMQ2hlY2tEdXBs
aWNhdGVGdW5jdGlvbnMuaCAqLywKKwkJCQlDMkI1NTE3NzIxREI1NDBGMDA0QkUyNkUgLyogV0hM
U0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJMUMzMzI3NzYyMUQ1QzA3RTAw
MERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICovLAorCQkJCUMy
QjU1MTc4MjFEQjU1NzUwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3Nv
cnMuY3BwICovLAorCQkJCTFDMzMyNzc3MjFENUNBODMwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNp
emVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oICovLAorCQkJCUMyQjU1MTc5MjFEQjU1OEYwMDRCRTI2
RSAvKiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJMUMz
MzI3NzgyMUQ1Q0VENDAwMERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5n
dGguaCAqLywKKwkJCQlDMkI1NTE3QTIxREI1NTlFMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXpl
QXJyYXlPcGVyYXRvckxlbmd0aC5jcHAgKi8sCisJCQkJQzIwMTMzNDcyMURCNDM2MzAwQjYwQzI3
IC8qIFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oICovLAorCQkJCUMyQjU1MTdCMjFEQjU1
QUYwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwICovLAorCQkJCUMy
MDEzMzQ0MjFEQUMwOTUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNpY3MuaCAqLywKKwkJCQlDMjAx
MzM0NjIxREFFRTZFMDBCNjBDMjcgLyogV0hMU0xJbnRyaW5zaWNzLmNwcCAqLywKKwkJCQlDMkI1
NTE3MDIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVja2VyLmNwcCAqLywKKwkJCQlDMkI1NTE3
MTIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVja2VyLmggKi8sCisJCQkJMUNCNjlCMkMyMURE
OTZFRjAwNkU4NDZBIC8qIFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcCAqLywKKwkJCQkx
Q0I2OUIyRDIxREQ5NkVGMDA2RTg0NkEgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCAq
LywKKwkJCQkxQ0I2OUIzRTIxRTAzNUYzMDA2RTg0NkEgLyogV0hMU0xSZXNvbHZpbmdUeXBlLmgg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IFdITFNMOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTI1MzQ0LDcgKzI1NDEzLDYgQEAKIAkJQzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5IC8qIEFT
VCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQzIxQkY3
MEYyMUNEODlDRjAwMjI3OTc5IC8qIFdITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5o
ICovLAogCQkJCUMyMUJGNzI1MjFDRDg5RTIwMDIyNzk3OSAvKiBXSExTTEFycmF5UmVmZXJlbmNl
VHlwZS5oICovLAogCQkJCUMyMUJGNzA5MjFDRDg5Q0EwMDIyNzk3OSAvKiBXSExTTEFycmF5VHlw
ZS5oICovLAogCQkJCUMyMUJGNzMwMjFDRDg5RUQwMDIyNzk3OSAvKiBXSExTTEFzc2lnbm1lbnRF
eHByZXNzaW9uLmggKi8sCkBAIC0yNTM4NCw3ICsyNTQ1Miw2IEBACiAJCQkJQzIxQkY3MjQyMUNE
ODlFMTAwMjI3OTc5IC8qIFdITFNMTm9kZS5oICovLAogCQkJCUMyMUJGNzA3MjFDRDg5QzgwMDIy
Nzk3OSAvKiBXSExTTE51bGxMaXRlcmFsLmggKi8sCiAJCQkJQzIxQkY3MjEyMUNEODlERTAwMjI3
OTc5IC8qIFdITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmggKi8sCi0JCQkJQzIxQkY3
MTcyMUNEODlENjAwMjI3OTc5IC8qIFdITFNMUGFyYW1ldGVyLmggKi8sCiAJCQkJQzIxQkY3MkYy
MUNEODlFQzAwMjI3OTc5IC8qIFdITFNMUG9pbnRlclR5cGUuaCAqLywKIAkJCQlDMjFCRjcyRTIx
Q0Q4OUVBMDAyMjc5NzkgLyogV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCAqLywKIAkJ
CQlDMjFCRjcwQjIxQ0Q4OUNDMDAyMjc5NzkgLyogV0hMU0xRdWFsaWZpZXIuaCAqLywKQEAgLTI1
NDEyLDcgKzI1NDc5LDI2IEBACiAJCQkJQzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNM
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLywKIAkJCQlDMjFCRjcxMzIxQ0Q4OUQy
MDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oICovLAogCQkJCUMyMUJGNzA0MjFD
RDg5QzYwMDIyNzk3OSAvKiBXSExTTFdoaWxlTG9vcC5oICovLAotIAkJCQlDMjg4QzcyRDIxQzk5
MURBMDAyREY1Q0EgLyogV0hMU0xUeXBlQXJndW1lbnQuY3BwICovLAorCQkJCUMyODhDNzJEMjFD
OTkxREEwMDJERjVDQSAvKiBXSExTTFR5cGVBcmd1bWVudC5jcHAgKi8sCisJCQkJMUMzMzI3NkMy
MUNFREE0MjAwMERDOUYyIC8qIFdITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmggKi8sCisJ
CQkJMUMzMzI3NzEyMUNGMEJFMTAwMERDOUYyIC8qIFdITFNMTmFtZWRUeXBlLmggKi8sCisJCQkJ
MUMzMzI3NzIyMUNGMEQyRTAwMERDOUYyIC8qIFdITFNMVW5uYW1lZFR5cGUuaCAqLywKKwkJCQlD
MjEzOEExMzIxRERFQ0QzMDBGNTE2QkEgLyogV0hMU0xCdWlsdEluU2VtYW50aWMuY3BwICovLAor
CQkJCUMyMTM4QTE1MjFEREVDRTkwMEY1MTZCQSAvKiBXSExTTFJlc291cmNlU2VtYW50aWMuY3Bw
ICovLAorCQkJCUMyMTM4QTE2MjFEREVDRkIwMEY1MTZCQSAvKiBXSExTTFNwZWNpYWxpemF0aW9u
Q29uc3RhbnRTZW1hbnRpYy5jcHAgKi8sCisJCQkJQzIxMzhBMTcyMURERUQwRDAwRjUxNkJBIC8q
IFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcCAqLywKKwkJCQkxQ0I2OUIzMjIxREVENDBCMDA2
RTg0NkEgLyogV0hMU0xSZXNvbHZhYmxlVHlwZS5oICovLAorCQkJCTFDQjY5QjM0MjFERUQ2M0Ew
MDZFODQ2QSAvKiBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCAqLywKKwkJCQkxQ0I2OUIzNTIxREVE
NjQ5MDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaCAqLywKKwkJCQkxQ0I2OUIz
NjIxREVENjU3MDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCAqLywKKwkJCQkxQ0I2
OUIzNzIxREVENjZCMDA2RTg0NkEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5o
ICovLAorCQkJCTFDQjY5QjM4MjFERjAzRTEwMDZFODQ2QSAvKiBXSExTTEZsb2F0TGl0ZXJhbFR5
cGUuY3BwICovLAorCQkJCTFDQjY5QjM5MjFERjAzRjMwMDZFODQ2QSAvKiBXSExTTEludGVnZXJM
aXRlcmFsVHlwZS5jcHAgKi8sCisJCQkJMUNCNjlCM0EyMURGMDQwMzAwNkU4NDZBIC8qIFdITFNM
TnVsbExpdGVyYWxUeXBlLmNwcCAqLywKKwkJCQkxQ0I2OUIzQjIxREYwNDFFMDA2RTg0NkEgLyog
V0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8sCisJCQkJQzIwRjRGNjQyMURG
QkU1QzAwNzBDNDVBIC8qIFdITFNMVHlwZVJlZmVyZW5jZS5jcHAgKi8sCisJCQkJQzIwRjRGNjYy
MURGRjIzNjAwNzBDNDVBIC8qIFdITFNMSW50ZWdlckxpdGVyYWwuY3BwICovLAorCQkJCUMyMEY0
RjY3MjFERkYzQTcwMDcwQzQ1QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwICov
LAogCQkJKTsKIAkJCXBhdGggPSBBU1Q7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358621</attachid>
            <date>2019-01-08 12:35:30 -0800</date>
            <delta_ts>2019-01-08 20:53:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>441572</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFycmF5UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXggMmQ1NjdmMDBlNzAuLmViMzkw
ZTQyZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaApAQCAtMzksOCArMzks
OCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlIDogcHVibGlj
IFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlwZShMZXhlcjo6
VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFR5
cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdp
biksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgQXJy
YXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNlIGFkZHJl
c3NTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAg
ICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDExICs0OSwxMSBAQCBwdWJs
aWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYpID0g
ZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikgPSBk
ZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBj
bG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Vu
aXF1ZTxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhh
ZGRyZXNzU3BhY2UoKSksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigp
KSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2
YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfVFlQRShBcnJheVJlZmVyZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBl
KCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShBcnJheVJlZmVy
ZW5jZVR5cGUsIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAppbmRleCA0MGI1ZjhkZjZmZS4uYzQxNzcwNWYzZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oCkBAIC0y
OCw3ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtMzgsMTAgKzM4LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVz
cGFjZSBBU1QgewogCi1jbGFzcyBBcnJheVR5cGUgOiBwdWJsaWMgVHlwZSB7CitjbGFzcyBBcnJh
eVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIEFycmF5VHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiYmIGVsZW1lbnRUeXBlLCB1
bnNpZ25lZCBudW1FbGVtZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgQXJyYXlUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFVu
bmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAg
OiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9lbGVtZW50VHlwZShX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKICAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRz
KQogICAgIHsKQEAgLTUyLDIwICs1MiwxOCBAQCBwdWJsaWM6CiAgICAgQXJyYXlUeXBlKGNvbnN0
IEFycmF5VHlwZSYpID0gZGVsZXRlOwogICAgIEFycmF5VHlwZShBcnJheVR5cGUmJikgPSBkZWZh
dWx0OwogCi0gICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251bUVs
ZW1lbnRzOyB9Ci0KLSAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9
CisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsg
fQorICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9udW1FbGVtZW50
czsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZT4oTGV4ZXI6
OlRva2VuKG1fb3JpZ2luKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7
CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZT4oTGV4ZXI6OlRva2Vu
KG9yaWdpbigpKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVtZW50cyk7CiAgICAg
fQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZT4gbV9lbGVtZW50VHlwZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5
cGU+IG1fZWxlbWVudFR5cGU7CiAgICAgdW5zaWduZWQgbV9udW1FbGVtZW50czsKIH07CiAKQEAg
LTc1LDYgKzczLDYgQEAgcHJpdmF0ZToKIAogfQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dI
TFNMX1RZUEUoQXJyYXlUeXBlLCBpc0FycmF5VHlwZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19XSExTTF9VTk5BTUVEX1RZUEUoQXJyYXlUeXBlLCBpc0FycmF5VHlwZSgpKQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEJhc2VTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQmFzZVNlbWFudGljLmgKaW5kZXggNjU3MzM3MmYxMzcuLmM2YTJkMzlhMGMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNl
U2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCYXNlU2VtYW50aWMuaApAQCAtMzQsOCArMzQsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBuYW1lc3BhY2UgV0hMU0wgewogCitjbGFzcyBJbnRyaW5zaWNzOworCiBuYW1lc3BhY2Ug
QVNUIHsKIAorY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworY2xhc3MgVW5uYW1lZFR5cGU7CisK
IGNsYXNzIEJhc2VTZW1hbnRpYyA6IHB1YmxpYyBOb2RlIHsKIHB1YmxpYzoKICAgICBCYXNlU2Vt
YW50aWMoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQpAQCAtNDgsNiArNTMsMTQgQEAgcHVibGljOgog
ICAgIEJhc2VTZW1hbnRpYyhjb25zdCBCYXNlU2VtYW50aWMmKSA9IGRlbGV0ZTsKICAgICBCYXNl
U2VtYW50aWMoQmFzZVNlbWFudGljJiYpID0gZGVmYXVsdDsKIAorICAgIHZpcnR1YWwgYm9vbCBp
c0FjY2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNz
JikgY29uc3QgPSAwOworCisgICAgZW51bSBjbGFzcyBTaGFkZXJJdGVtRGlyZWN0aW9uIHsKKyAg
ICAgICAgSW5wdXQsCisgICAgICAgIE91dHB1dAorICAgIH07CisgICAgdmlydHVhbCBib29sIGlz
QWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29u
c3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3QgPSAwOworCiBwcml2YXRlOgogICAgIExleGVy
OjpUb2tlbiBtX29yaWdpbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCb29sZWFuTGl0ZXJhbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaAppbmRleCAyMDBm
MzY0OTMyYi4uMTEwZDY1NWM0OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEJvb2xlYW5MaXRlcmFsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQm9vbGVhbkxpdGVyYWwuaApAQCAtNDYs
MTMgKzQ2LDIxIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkJvb2xlYW5MaXRlcmFsKCkgPSBk
ZWZhdWx0OwogCi0gICAgZXhwbGljaXQgQm9vbGVhbkxpdGVyYWwoY29uc3QgQm9vbGVhbkxpdGVy
YWwmKSA9IGRlZmF1bHQ7CisgICAgQm9vbGVhbkxpdGVyYWwoY29uc3QgQm9vbGVhbkxpdGVyYWwm
KSA9IGRlbGV0ZTsKICAgICBCb29sZWFuTGl0ZXJhbChCb29sZWFuTGl0ZXJhbCYmKSA9IGRlZmF1
bHQ7CiAKKyAgICBCb29sZWFuTGl0ZXJhbCYgb3BlcmF0b3I9KGNvbnN0IEJvb2xlYW5MaXRlcmFs
JikgPSBkZWxldGU7CisgICAgQm9vbGVhbkxpdGVyYWwmIG9wZXJhdG9yPShCb29sZWFuTGl0ZXJh
bCYmKSA9IGRlZmF1bHQ7CisKICAgICBib29sIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQogCiAgICAgYm9vbCBpc0Jvb2xlYW5MaXRlcmFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCisgICAgQm9vbGVhbkxpdGVyYWwgY2xvbmUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEJvb2xlYW5MaXRlcmFsKExleGVyOjpUb2tlbihvcmlnaW4oKSksIG1fdmFs
dWUpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBib29sIG1fdmFsdWU7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNl
bWFudGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEJ1aWx0SW5TZW1hbnRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjIxMjUzMjZmYjJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcApAQCAtMCwwICsxLDE0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKKworI2luY2x1ZGUgIldITFNM
RnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5j
bHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNl
IEFTVCB7CisKK2Jvb2wgQnVpbHRJblNlbWFudGljOjppc0FjY2VwdGFibGVUeXBlKGNvbnN0IEFT
VDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNz
KSBjb25zdAoreworICAgIHN3aXRjaCAobV92YXJpYWJsZSkgeworICAgIGNhc2UgVmFyaWFibGU6
OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJp
bnNpY3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZWZXJ0ZXhJRDoKKyAgICAg
ICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWludFR5cGUoKSk7Cisg
ICAgY2FzZSBWYXJpYWJsZTo6UFNpemU6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRU
eXBlLCBpbnRyaW5zaWNzLmZsb2F0VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVlBvc2l0
aW9uOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2ljcy5mbG9h
dDRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAgICAgIHJl
dHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOworICAgIGNh
c2UgVmFyaWFibGU6OlNWU2FtcGxlSW5kZXg6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFt
ZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWSW5u
ZXJDb3ZlcmFnZToKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNp
Y3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAgICAgIHJl
dHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0NFR5cGUoKSk7CisgICAg
Y2FzZSBWYXJpYWJsZTo6U1ZEZXB0aDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5
cGUsIGludHJpbnNpY3MuZmxvYXRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWQ292ZXJh
Z2U6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRU
eXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoKKyAgICAgICAg
cmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQzVHlwZSgpKTsKKyAg
ICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwSUQ6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFt
ZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZH
cm91cEluZGV4OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmluc2lj
cy51aW50VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwVGhyZWFkSUQ6CisgICAg
ICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7
CisgICAgfQorfQorCitib29sIEJ1aWx0SW5TZW1hbnRpYzo6aXNBY2NlcHRhYmxlRm9yU2hhZGVy
SXRlbURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIGNvbnN0Cit7CisgICAgc3dpdGNoICgq
ZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9u
RGVjbGFyYXRpb246OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgIHN3aXRjaCAoZGly
ZWN0aW9uKSB7CisgICAgICAgIGNhc2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6
OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWVmVydGV4SUQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgY2FzZSBTaGFk
ZXJJdGVtRGlyZWN0aW9uOjpPdXRwdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUp
IHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlBTaXplOgorICAgICAgICAgICAgY2FzZSBW
YXJpYWJsZTo6U1ZQb3NpdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50
VHlwZTo6RnJhZ21lbnQ6CisgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNh
c2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFy
aWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAg
ICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVlBvc2l0aW9uOgorICAgICAgICAgICAgY2FzZSBWYXJp
YWJsZTo6U1ZTYW1wbGVJbmRleDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSW5uZXJD
b3ZlcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICBjYXNlIFNoYWRlckl0ZW1EaXJlY3Rpb246Ok91dHB1dDoKKyAgICAgICAgICAgIHN3aXRjaCAo
bV92YXJpYWJsZSkgeworICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAg
ICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkRlcHRoOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZDb3ZlcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6
Q29tcHV0ZToKKyAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAgY2FzZSBTaGFk
ZXJJdGVtRGlyZWN0aW9uOjpJbnB1dDoKKyAgICAgICAgICAgIHN3aXRjaCAobV92YXJpYWJsZSkg
eworICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZEaXNwYXRjaFRocmVhZElEOgorICAgICAg
ICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cElEOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZHcm91cEluZGV4OgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cFRocmVh
ZElEOgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIGNh
c2UgU2hhZGVySXRlbURpcmVjdGlvbjo6T3V0cHV0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorfQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5T
ZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QnVpbHRJblNlbWFudGljLmgKaW5kZXggNzA0NmRmMzJjZmEuLjhlNzA0MzAwMTU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdElu
U2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCdWlsdEluU2VtYW50aWMuaApAQCAtNzAsNiArNzAsMTkgQEAgcHVibGljOgogCiAgICAg
VmFyaWFibGUgdmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlOyB9CiAKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQnVpbHRJblNlbWFudGljJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IG90aGVyLm1fdmFyaWFibGUgJiYgbV90YXJn
ZXRJbmRleCA9PSBvdGhlci5tX3RhcmdldEluZGV4OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBCdWlsdEluU2VtYW50aWMmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJvb2wgaXNBY2NlcHRhYmxl
VHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgSW50cmluc2ljcyYpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFk
ZXJJdGVtRGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSBjb25zdCBvdmVycmlk
ZTsKKwogcHJpdmF0ZToKICAgICBWYXJpYWJsZSBtX3ZhcmlhYmxlOwogICAgIE9wdGlvbmFsPHVu
c2lnbmVkPiBtX3RhcmdldEluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKaW5kZXggNjRh
ZjcxMzI5OWMuLmMxOGUxZWViYThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKQEAgLTI4
LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAi
V0hMU0xMZXhlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiw2ICszNyw4IEBAIG5h
bWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCitjbGFzcyBOYW1lZFR5cGU7CisK
IGNsYXNzIENhbGxFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgogICAg
IENhbGxFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4mJiBhcmd1bWVudHMpCkBAIC01NCw5ICs1
NywzNSBAQCBwdWJsaWM6CiAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
PiYgYXJndW1lbnRzKCkgeyByZXR1cm4gbV9hcmd1bWVudHM7IH0KIAorICAgIFN0cmluZyYgbmFt
ZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgdm9pZCBzZXRDYXN0RGF0YShBU1Q6Ok5hbWVk
VHlwZSYgbmFtZWRUeXBlKQorICAgIHsKKyAgICAgICAgbV9jYXN0UmV0dXJuVHlwZSA9IHsgbmFt
ZWRUeXBlIH07CisgICAgfQorCisgICAgYm9vbCBpc0Nhc3QoKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxib29sPihtX2Nhc3RSZXR1cm5UeXBlKTsgfQorICAgIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiYgY2FzdFJldHVyblR5cGUoKSB7IHJldHVybiBtX2Nh
c3RSZXR1cm5UeXBlOyB9CisgICAgYm9vbCBoYXNPdmVybG9hZHMoKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxib29sPihtX292ZXJsb2Fkcyk7IH0KKyAgICBPcHRpb25hbDxWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4+JiBvdmVybG9hZHMo
KSB7IHJldHVybiBtX292ZXJsb2FkczsgfQorICAgIHZvaWQgc2V0T3ZlcmxvYWRzKGNvbnN0IFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3Zl
cmxvYWRzKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KCFoYXNPdmVybG9hZHMoKSk7CisgICAgICAg
IG1fb3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAgIH0KKworICAgIHZvaWQgc2V0RnVuY3Rpb24o
RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNsYXJhdGlvbikKKyAgICB7CisgICAgICAg
IGFzc2VydCghbV9mdW5jdGlvbik7CisgICAgICAgIG1fZnVuY3Rpb24gPSAmZnVuY3Rpb25EZWNs
YXJhdGlvbjsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+PiBtX2FyZ3VtZW50czsKKyAgICBPcHRpb25h
bDxWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4+
IG1fb3ZlcmxvYWRzOworICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24qIG1fZnVuY3Rpb24geyBudWxs
cHRyIH07CisgICAgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlw
ZT4+IG1fY2FzdFJldHVyblR5cGUgeyBXVEY6Om51bGxvcHQgfTsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50
RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMQ29uc3RhbnRFeHByZXNzaW9uLmgKaW5kZXggYTM4YjBkNWIzYTEuLjcwY2ExMjhkNTVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xD
b25zdGFudEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaApAQCAtNzYsMTEgKzc2LDkyIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgQ29uc3RhbnRFeHByZXNzaW9uKGNvbnN0IENvbnN0
YW50RXhwcmVzc2lvbiYpID0gZGVsZXRlOworICAgIENvbnN0YW50RXhwcmVzc2lvbihDb25zdGFu
dEV4cHJlc3Npb24mJikgPSBkZWZhdWx0OworCisgICAgQ29uc3RhbnRFeHByZXNzaW9uJiBvcGVy
YXRvcj0oY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uJikgPSBkZWxldGU7CisgICAgQ29uc3RhbnRF
eHByZXNzaW9uJiBvcGVyYXRvcj0oQ29uc3RhbnRFeHByZXNzaW9uJiYpID0gZGVmYXVsdDsKKwor
ICAgIEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCgpCisgICAgeworICAgICAgICBBU1NF
UlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxJbnRlZ2VyTGl0ZXJhbD4obV92YXJpYW50KSk7Cisg
ICAgICAgIHJldHVybiBXVEY6OmdldDxJbnRlZ2VyTGl0ZXJhbD4obV92YXJpYW50KTsKKyAgICB9
CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHZpc2l0KFQmJiB0KQogICAgIHsKICAg
ICAgICAgV1RGOjp2aXNpdChXVEZNb3ZlKHQpLCBtX3ZhcmlhbnQpOwogICAgIH0KIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdmlzaXQoVCYmIHQpIGNvbnN0CisgICAgeworICAgICAg
ICBXVEY6OnZpc2l0KFdURk1vdmUodCksIG1fdmFyaWFudCk7CisgICAgfQorCisgICAgQ29uc3Rh
bnRFeHByZXNzaW9uIGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0
ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBpbnRlZ2Vy
TGl0ZXJhbC5jbG9uZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9uIHsKKyAg
ICAgICAgICAgIHJldHVybiB1bnNpZ25lZEludGVnZXJMaXRlcmFsLmNsb25lKCk7CisgICAgICAg
IH0sIFsmXShjb25zdCBGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHBy
ZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBmbG9hdExpdGVyYWwuY2xvbmUoKTsKKyAgICAg
ICAgfSwgWyZdKGNvbnN0IE51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHBy
ZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsTGl0ZXJhbC5jbG9uZSgpOworICAgICAg
ICB9LCBbJl0oY29uc3QgQm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSAtPiBDb25zdGFu
dEV4cHJlc3Npb24geworICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5MaXRlcmFsLmNsb25lKCk7
CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Up
IC0+IENvbnN0YW50RXhwcmVzc2lvbiB7CisgICAgICAgICAgICByZXR1cm4gY29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuY2xvbmUoKTsKKyAgICAgICAgfSksIG1f
dmFyaWFudCk7CisgICAgfQorCisgICAgYm9vbCBtYXRjaGVzKGNvbnN0IENvbnN0YW50RXhwcmVz
c2lvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBPcHRpb25hbDxib29sPiByZXN1bHQ7
CisgICAgICAgIGRvdWJsZSB2YWx1ZTsKKyAgICAgICAgdmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oY29uc3QgSW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICB2
YWx1ZSA9IGludGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0sIFsmXShjb25zdCBVbnNp
Z25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAg
ICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZd
KGNvbnN0IEZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAgICB2YWx1ZSA9
IGZsb2F0TGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgTnVsbExpdGVyYWwm
KSB7CisgICAgICAgICAgICByZXN1bHQgPSBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPE51bGxMaXRl
cmFsPihvdGhlci5tX3ZhcmlhbnQpOworICAgICAgICB9LCBbJl0oY29uc3QgQm9vbGVhbkxpdGVy
YWwmIGJvb2xlYW5MaXRlcmFsKSB7CisgICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5h
dGl2ZTxCb29sZWFuTGl0ZXJhbD4ob3RoZXIubV92YXJpYW50KSkgeworICAgICAgICAgICAgICAg
IGNvbnN0IGF1dG8mIG90aGVyQm9vbGVhbkxpdGVyYWwgPSBXVEY6OmdldDxCb29sZWFuTGl0ZXJh
bD4ob3RoZXIubV92YXJpYW50KTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBib29sZWFuTGl0
ZXJhbC52YWx1ZSgpID09IG90aGVyQm9vbGVhbkxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9LCBbJl0o
Y29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0
YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSB7CisgICAgICAgICAgICBp
ZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZT4ob3RoZXIubV92YXJpYW50KSkgeworICAgICAgICAgICAgICAgIGNvbnN0
IGF1dG8mIG90aGVyTWVtYmVyUmVmZXJlbmNlID0gV1RGOjpnZXQ8Q29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2U+KG90aGVyLm1fdmFyaWFudCk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UuZW51bWVyYXRpb25NZW1iZXIoKSA9PSBvdGhlck1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlv
bk1lbWJlcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0ID0g
ZmFsc2U7CisgICAgICAgIH0pKTsKKworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAg
cmV0dXJuICpyZXN1bHQ7CisKKyAgICAgICAgb3RoZXIudmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oY29uc3QgSW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICBy
ZXN1bHQgPSB2YWx1ZSA9PSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0o
Y29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgewor
ICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUgPT0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgRmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlID09IGZsb2F0TGl0ZXJhbC52YWx1ZSgpOworICAg
ICAgICB9LCBbJl0oY29uc3QgTnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICByZXN1bHQgPSBm
YWxzZTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEJvb2xlYW5MaXRlcmFsJikgeworICAgICAgICAg
ICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZh
bHNlOworICAgICAgICB9KSk7CisKKyAgICAgICAgQVNTRVJUKHJlc3VsdCk7CisgICAgICAgIHJl
dHVybiAqcmVzdWx0OworICAgIH0KKwogcHJpdmF0ZToKICAgICBWYXJpYW50PAogICAgICAgICBJ
bnRlZ2VyTGl0ZXJhbCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25z
dGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oCmluZGV4IDJjMjRhOThi
MmNhLi42YzUzYzE0N2Y1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oCkBAIC0zNiwx
MCArMzYsMTMgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNz
IENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlIDogcHVibGljIE5v
ZGUgeworY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uOworY2xhc3MgRW51bWVyYXRpb25NZW1i
ZXI7CisKK2NsYXNzIENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
IDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgogICAgIENvbnN0YW50RXhwcmVzc2lvbkVu
dW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYg
bGVmdCwgU3RyaW5nJiYgcmlnaHQpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4p
KQorICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fbGVm
dChXVEZNb3ZlKGxlZnQpKQogICAgICAgICAsIG1fcmlnaHQoV1RGTW92ZShyaWdodCkpCiAgICAg
ewpAQCAtNTAsMTAgKzUzLDUwIEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBDb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZShjb25zdCBDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpID0gZGVmYXVsdDsKICAgICBDb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZShDb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZSYmKSA9IGRlZmF1bHQ7CiAKKyAgICBDb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgb3BlcmF0b3I9KGNvbnN0IENvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikgPSBkZWxldGU7CisgICAgQ29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIG9wZXJhdG9yPShDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYmKSA9IGRlZmF1bHQ7CisKKyAg
ICBjb25zdCBTdHJpbmcmIGxlZnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnQ7IH0KKyAgICBjb25z
dCBTdHJpbmcmIHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodDsgfQorCisgICAgQ29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UgY2xvbmUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZShMZXhlcjo6VG9rZW4ob3JpZ2luKCkpLCBTdHJpbmcobV9sZWZ0KSwgU3Ry
aW5nKG1fcmlnaHQpKTsKKyAgICAgICAgcmVzdWx0Lm1fZW51bWVyYXRpb25NZW1iZXIgPSBtX2Vu
dW1lcmF0aW9uTWVtYmVyOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uKiBlbnVtZXJhdGlvbkRlZmluaXRpb24oKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uOworICAgIH0KKworICAgIEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uKiBlbnVtZXJhdGlvbkRlZmluaXRpb24oKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uOworICAgIH0KKwor
ICAgIEFTVDo6RW51bWVyYXRpb25NZW1iZXIqIGVudW1lcmF0aW9uTWVtYmVyKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIEFTVDo6RW51
bWVyYXRpb25NZW1iZXIqIGVudW1lcmF0aW9uTWVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2VudW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIHZvaWQgc2V0RW51bWVy
YXRpb25NZW1iZXIoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbiwgQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCisgICAgewor
ICAgICAgICBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbiA9ICZlbnVtZXJhdGlvbkRlZmluaXRpb247
CisgICAgICAgIG1fZW51bWVyYXRpb25NZW1iZXIgPSAmZW51bWVyYXRpb25NZW1iZXI7CisgICAg
fQorCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9s
ZWZ0OwogICAgIFN0cmluZyBtX3JpZ2h0OworICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
KiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbiB7IG51bGxwdHIgfTsKKyAgICBBU1Q6OkVudW1lcmF0
aW9uTWVtYmVyKiBtX2VudW1lcmF0aW9uTWVtYmVyIHsgbnVsbHB0ciB9OwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90
RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRG90RXhwcmVzc2lvbi5oCmluZGV4IGM0M2M2OWVlNTQxLi5lYmY3MjMyNmNkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG90RXhw
cmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTERvdEV4cHJlc3Npb24uaApAQCAtNDksNiArNDksMjUgQEAgcHVibGljOgogICAgIERvdEV4
cHJlc3Npb24oY29uc3QgRG90RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAgIERvdEV4cHJlc3Np
b24oRG90RXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzRG90RXhwcmVzc2lv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5j
dGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6
Zm9ybWF0KCJvcGVyYXRvci4lcyIsIG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0K
KworICAgIFN0cmluZyBzZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4lcz0iLCBtX2ZpZWxkTmFtZS51
dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgib3BlcmF0
b3ImLiVzIiwgbV9maWVsZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgU3RyaW5n
JiBmaWVsZE5hbWUoKSB7IHJldHVybiBtX2ZpZWxkTmFtZTsgfQorCiBwcml2YXRlOgogICAgIFN0
cmluZyBtX2ZpZWxkTmFtZTsKIH07CkBAIC01OSw0ICs3OCw2IEBAIHByaXZhdGU6CiAKIH0KIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9FWFBSRVNTSU9OKERvdEV4cHJlc3Npb24sIGlz
RG90RXhwcmVzc2lvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZp
bml0aW9uLmgKaW5kZXggNzk3MGI1OWU1NGEuLjI0YThkNTlkYjNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmlu
aXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaApAQCAtMjksOCArMjksMTEgQEAKIAogI2luY2x1ZGUg
IldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCi0jaW5j
bHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNsdWRl
ICJXSExTTFVubmFtZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwx
MyArNDIsMTEgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNz
IEVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHB1YmxpYyBOb2RlIHsKK2NsYXNzIEVudW1lcmF0aW9u
RGVmaW5pdGlvbiA6IHB1YmxpYyBOYW1lZFR5cGUgewogcHVibGljOgotICAgIEVudW1lcmF0aW9u
RGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5p
cXVlX3B0cjxUeXBlPiYmIHR5cGUsIEVudW1lcmF0aW9uTWVtYmVycyYmIG1lbWJlcnMpCi0gICAg
ICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShXVEZNb3Zl
KG5hbWUpKQorICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4s
IFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4mJiB0eXBlKQorICAg
ICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAg
ICwgbV90eXBlKFdURk1vdmUodHlwZSkpCi0gICAgICAgICwgbV9tZW1iZXJzKFdURk1vdmUobWVt
YmVycykpCiAgICAgewogICAgIH0KIApAQCAtNTQsMTQgKzU1LDM1IEBAIHB1YmxpYzoKICAgICBF
bnVtZXJhdGlvbkRlZmluaXRpb24oY29uc3QgRW51bWVyYXRpb25EZWZpbml0aW9uJikgPSBkZWxl
dGU7CiAgICAgRW51bWVyYXRpb25EZWZpbml0aW9uKEVudW1lcmF0aW9uRGVmaW5pdGlvbiYmKSA9
IGRlZmF1bHQ7CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQotICAgIEVu
dW1lcmF0aW9uTWVtYmVycyYgZW51bWVyYXRpb25NZW1iZXJzKCkgeyByZXR1cm4gbV9tZW1iZXJz
OyB9CisgICAgYm9vbCBpc0VudW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KKworICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlw
ZTsgfQorCisgICAgYm9vbCBhZGQoRW51bWVyYXRpb25NZW1iZXImJiBtZW1iZXIpCisgICAgewor
ICAgICAgICBhdXRvIHJlc3VsdCA9IG1fbWVtYmVycy5hZGQobWVtYmVyLm5hbWUoKSwgc3RkOjpt
YWtlX3VuaXF1ZTxFbnVtZXJhdGlvbk1lbWJlcj4oV1RGTW92ZShtZW1iZXIpKSk7CisgICAgICAg
IHJldHVybiAhcmVzdWx0LmlzTmV3RW50cnk7CisgICAgfQorCisgICAgRW51bWVyYXRpb25NZW1i
ZXIqIG1lbWJlckJ5TmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAgICAgICBhdXRv
IGl0ZXJhdG9yID0gbV9tZW1iZXJzLmZpbmQobmFtZSk7CisgICAgICAgIGlmIChpdGVyYXRvciA9
PSBtX21lbWJlcnMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIGl0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxFbnVtZXJhdGlvbk1lbWJlcj4+IGVudW1lcmF0aW9uTWVtYmVycygp
CisgICAgeworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxFbnVtZXJhdGlv
bk1lbWJlcj4+IHJlc3VsdDsKKyAgICAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9tZW1iZXJzKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgqcGFpci52YWx1ZSk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAg
ICBTdHJpbmcgbV9uYW1lOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBtX3R5cGU7Ci0gICAg
RW51bWVyYXRpb25NZW1iZXJzIG1fbWVtYmVyczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1l
ZFR5cGU+IG1fdHlwZTsKKyAgICBIYXNoTWFwPFN0cmluZywgc3RkOjp1bmlxdWVfcHRyPEVudW1l
cmF0aW9uTWVtYmVyPj4gbV9tZW1iZXJzOwogfTsKIAogfQpAQCAtNzAsNCArOTIsNiBAQCBwcml2
YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShFbnVt
ZXJhdGlvbkRlZmluaXRpb24sIGlzRW51bWVyYXRpb25EZWZpbml0aW9uKCkpCisKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RW51bWVyYXRpb25NZW1iZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKaW5kZXggOWQ5ZDg1NDg4M2UuLmRlZmYxNGI1
ODUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKQEAgLTU0LDE1ICs1NCwyMyBA
QCBwdWJsaWM6CiAgICAgRW51bWVyYXRpb25NZW1iZXIoY29uc3QgRW51bWVyYXRpb25NZW1iZXIm
KSA9IGRlbGV0ZTsKICAgICBFbnVtZXJhdGlvbk1lbWJlcihFbnVtZXJhdGlvbk1lbWJlciYmKSA9
IGRlZmF1bHQ7CiAKKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAg
ICAgT3B0aW9uYWw8Q29uc3RhbnRFeHByZXNzaW9uPiYgdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVl
OyB9CiAKKyAgICB2b2lkIHNldFZhbHVlKENvbnN0YW50RXhwcmVzc2lvbiYmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX3ZhbHVlKTsKKyAgICAgICAgbV92YWx1ZSA9IFdURk1vdmUo
dmFsdWUpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAg
ICAgU3RyaW5nIG1fbmFtZTsKICAgICBPcHRpb25hbDxDb25zdGFudEV4cHJlc3Npb24+IG1fdmFs
dWU7CiB9OwogCi10eXBlZGVmIFZlY3RvcjxFbnVtZXJhdGlvbk1lbWJlcj4gRW51bWVyYXRpb25N
ZW1iZXJzOwordXNpbmcgRW51bWVyYXRpb25NZW1iZXJzID0gVmVjdG9yPEVudW1lcmF0aW9uTWVt
YmVyPjsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNGJjMjBmZThlZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExT
TEVudW1lcmF0aW9uTWVtYmVyLmgiCisjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xMZXhlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBX
SExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CitwdWJsaWM6CisgICAgRW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgRW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0
aW9uTWVtYmVyKQorICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAg
ICAsIG1fZW51bWVyYXRpb25NZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgfkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCgpID0gZGVmYXVsdDsKKwor
ICAgIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChjb25zdCBFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwmKSA9IGRlbGV0ZTsKKyAgICBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoRW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNFbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBFbnVtZXJh
dGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIoKSB7IHJldHVybiBtX2VudW1lcmF0aW9uTWVt
YmVyOyB9CisKK3ByaXZhdGU6CisgICAgRW51bWVyYXRpb25NZW1iZXImIG1fZW51bWVyYXRpb25N
ZW1iZXI7Cit9OworCit9CisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNM
X0VYUFJFU1NJT04oRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLCBpc0VudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbCgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBlMzY4MzgzNjQ2ZC4u
ZmViNmNhNmIxZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKQEAgLTQ4LDE0ICs0OCwxOSBAQCBwdWJs
aWM6CiAgICAgZXhwbGljaXQgRXhwcmVzc2lvbihjb25zdCBFeHByZXNzaW9uJikgPSBkZWZhdWx0
OwogICAgIEV4cHJlc3Npb24oRXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBMZXhlcjo6
VG9rZW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBFeHByZXNzaW9u
JiBvcGVyYXRvcj0oY29uc3QgRXhwcmVzc2lvbiYpID0gZGVmYXVsdDsKKyAgICBFeHByZXNzaW9u
JiBvcGVyYXRvcj0oRXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CisKKyAgICBjb25zdCBMZXhlcjo6
VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNBc3NpZ25tZW50RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCBib29sIGlzQm9vbGVhbkxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc0NhbGxFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNDb21tYUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0RlcmVmZXJlbmNlRXhwcmVzc2lvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRG90RXhwcmVzc2lvbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRmxvYXRMaXRlcmFs
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmRleEV4cHJl
c3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ludGVn
ZXJMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNM
b2dpY2FsRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzTG9naWNhbE5vdEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAt
NjcsNiArNzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzVGVybmFyeUV4cHJlc3Np
b24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVk
SW50ZWdlckxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9v
bCBpc1ZhcmlhYmxlUmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogCiBwcml2YXRlOgogICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJh
bC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRM
aXRlcmFsLmgKaW5kZXggY2JmNTQ2OWRiZmEuLjI3ZDg4YmMwNTNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExp
dGVyYWwuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRl
ICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCIK
ICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDIx
ICs0MCwzNSBAQCBuYW1lc3BhY2UgQVNUIHsKIGNsYXNzIEZsb2F0TGl0ZXJhbCA6IHB1YmxpYyBF
eHByZXNzaW9uIHsKIHB1YmxpYzoKICAgICBGbG9hdExpdGVyYWwoTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBmbG9hdCB2YWx1ZSkKLSAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkK
KyAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQorICAgICAgICAsIG1f
dHlwZShXVEZNb3ZlKG9yaWdpbiksIHZhbHVlKQogICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAg
ICAgewogICAgIH0KIAogICAgIHZpcnR1YWwgfkZsb2F0TGl0ZXJhbCgpID0gZGVmYXVsdDsKIAot
ICAgIGV4cGxpY2l0IEZsb2F0TGl0ZXJhbChjb25zdCBGbG9hdExpdGVyYWwmKSA9IGRlZmF1bHQ7
CisgICAgRmxvYXRMaXRlcmFsKGNvbnN0IEZsb2F0TGl0ZXJhbCYpID0gZGVsZXRlOwogICAgIEZs
b2F0TGl0ZXJhbChGbG9hdExpdGVyYWwmJikgPSBkZWZhdWx0OwogCisgICAgRmxvYXRMaXRlcmFs
JiBvcGVyYXRvcj0oY29uc3QgRmxvYXRMaXRlcmFsJikgPSBkZWxldGU7CisgICAgRmxvYXRMaXRl
cmFsJiBvcGVyYXRvcj0oRmxvYXRMaXRlcmFsJiYpID0gZGVmYXVsdDsKKworICAgIEZsb2F0TGl0
ZXJhbFR5cGUmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KICAgICBmbG9hdCB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAogICAgIGJvb2wgaXNGbG9hdExpdGVyYWwoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBGbG9hdExpdGVyYWwgY2xvbmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgRmxvYXRMaXRlcmFsIHJlc3VsdChMZXhlcjo6VG9rZW4ob3Jp
Z2luKCkpLCBtX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5tX3R5cGUucmVzb2x2ZWRUeXBl
KCkpCisgICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVzdWx0Lm1fdHlwZS5yZXNv
bHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiBw
cml2YXRlOgorICAgIEZsb2F0TGl0ZXJhbFR5cGUgbV90eXBlOwogICAgIGZsb2F0IG1fdmFsdWU7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMzUxODM1Y2E4YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5
cGUuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsVHlwZS5o
IgorCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVm
ZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
bmFtZXNwYWNlIEFTVCB7CisKK0Zsb2F0TGl0ZXJhbFR5cGU6OkZsb2F0TGl0ZXJhbFR5cGUoTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBmbG9hdCB2YWx1ZSkKKyAgICA6IG1fdmFsdWUodmFsdWUpCisg
ICAgLCBtX3ByZWZlcnJlZFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihXVEZN
b3ZlKG9yaWdpbiksIFN0cmluZygiZmxvYXQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwgVHlwZUFyZ3VtZW50cygpKSkKK3sKK30KKworRmxvYXRMaXRlcmFsVHlwZTo6fkZsb2F0TGl0
ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgRmxvYXRMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2
ZShjb25zdCBUeXBlJiB0eXBlKSBjb25zdAoreworICAgIGlmICghaXM8TmFtZWRUeXBlPih0eXBl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0
PE5hbWVkVHlwZT4odHlwZSk7CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5h
bWVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24gPSBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7Cisg
ICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNGbG9hdGluZygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uY2FuUmVwcmVzZW50Rmxv
YXQoKShtX3ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOwor
fQorCit1bnNpZ25lZCBGbG9hdExpdGVyYWxUeXBlOjpjb252ZXJzaW9uQ29zdChjb25zdCBVbm5h
bWVkVHlwZSYgdW5uYW1lZFR5cGUpIGNvbnN0Cit7CisgICAgaWYgKG1hdGNoZXModW5uYW1lZFR5
cGUsICptX3ByZWZlcnJlZFR5cGUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsK
K30KKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNlMzJiZjU2MDVmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRmxvYXRMaXRlcmFsVHlwZS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFJlc29sdmFi
bGVUeXBlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNz
IFR5cGVSZWZlcmVuY2U7CisKK2NsYXNzIEZsb2F0TGl0ZXJhbFR5cGUgOiBwdWJsaWMgUmVzb2x2
YWJsZVR5cGUgeworcHVibGljOgorICAgIEZsb2F0TGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBmbG9hdCB2YWx1ZSk7CisKKyAgICB2aXJ0dWFsIH5GbG9hdExpdGVyYWxUeXBlKCk7
CisKKyAgICBGbG9hdExpdGVyYWxUeXBlKGNvbnN0IEZsb2F0TGl0ZXJhbFR5cGUmKSA9IGRlbGV0
ZTsKKyAgICBGbG9hdExpdGVyYWxUeXBlKEZsb2F0TGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0Owor
CisgICAgRmxvYXRMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KGNvbnN0IEZsb2F0TGl0ZXJhbFR5cGUm
KSA9IGRlbGV0ZTsKKyAgICBGbG9hdExpdGVyYWxUeXBlJiBvcGVyYXRvcj0oRmxvYXRMaXRlcmFs
VHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzRmxvYXRMaXRlcmFsVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFR5cGVSZWZlcmVuY2UmIHByZWZlcnJl
ZFR5cGUoKSB7IHJldHVybiAqbV9wcmVmZXJyZWRUeXBlOyB9CisKKyAgICBib29sIGNhblJlc29s
dmUoY29uc3QgVHlwZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHVuc2lnbmVkIGNvbnZlcnNpb25D
b3N0KGNvbnN0IFVubmFtZWRUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZmxvYXQgbV92YWx1ZTsKKyAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEg
Y2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCisgICAgLy8gQ29uc3RhbnRFeHByZXNzaW9uIC0+
IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2UgLT4gVHlwZUFyZ3VtZW50cyAtPiBDb25zdGFu
dEV4cHJlc3Npb24KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJy
ZWRUeXBlOworfTsKKworfQorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExT
TF9SRVNPTFZBQkxFX1RZUEUoRmxvYXRMaXRlcmFsVHlwZSwgaXNGbG9hdExpdGVyYWxUeXBlKCkp
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgKaW5kZXggY2JkNzJkNGE5
MGMuLjZhYjY1OGUwZjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgKQEAgLTM3
LDggKzM3LDggQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLXR5cGVk
ZWYgVmFyaWFudDxOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGU+IEZ1bmN0aW9uQXR0cmlidXRl
OwotdHlwZWRlZiBWZWN0b3I8RnVuY3Rpb25BdHRyaWJ1dGU+IEF0dHJpYnV0ZUJsb2NrOwordXNp
bmcgRnVuY3Rpb25BdHRyaWJ1dGUgPSBWYXJpYW50PE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0
ZT47Cit1c2luZyBBdHRyaWJ1dGVCbG9jayA9IFZlY3RvcjxGdW5jdGlvbkF0dHJpYnV0ZT47CiAK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCmluZGV4IDdhN2UwYTA2NTZj
Li42NzY0OGY0OTM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaApAQCAt
MzAsOSArMzAsOSBAQAogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCIKICNpbmNs
dWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCi0jaW5jbHVkZSAiV0hM
U0xQYXJhbWV0ZXIuaCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hM
U0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgorI2luY2x1ZGUgIldITFNM
VmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NiwxMCArNDYsMTEgQEAgcHVibGljOgogICAgIGVu
dW0gY2xhc3MgRW50cnlQb2ludFR5cGUgewogICAgICAgICBWZXJ0ZXgsCiAgICAgICAgIEZyYWdt
ZW50LAotICAgICAgICBDb21wdXRlCisgICAgICAgIENvbXB1dGUsCisgICAgICAgIC8vIEZJWE1F
OiBBZGQgYW4gZW50cnkgcG9pbnQgdHlwZSBmb3IgdGVzdGluZwogICAgIH07CiAKLSAgICBGdW5j
dGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQXR0cmlidXRlQmxvY2smJiBh
dHRyaWJ1dGVCbG9jaywgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IGVudHJ5UG9pbnRUeXBlLCBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIFBhcmFtZXRl
cnMmJiBwYXJhbWV0ZXJzLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFudGljKQorICAg
IEZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9j
ayYmIGF0dHJpYnV0ZUJsb2NrLCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5
cGUsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5h
bWUsIFZhcmlhYmxlRGVjbGFyYXRpb25zJiYgcGFyYW1ldGVycywgT3B0aW9uYWw8QVNUOjpTZW1h
bnRpYz4mJiBzZW1hbnRpYywgYm9vbCBpc09wZXJhdG9yKQogICAgICAgICA6IG1fb3JpZ2luKFdU
Rk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2F0dHJpYnV0ZUJsb2NrKFdURk1vdmUoYXR0cmli
dXRlQmxvY2spKQogICAgICAgICAsIG1fZW50cnlQb2ludFR5cGUoZW50cnlQb2ludFR5cGUpCkBA
IC01Nyw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkK
ICAgICAgICAgLCBtX3BhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzKSkKICAgICAgICAgLCBt
X3NlbWFudGljKFdURk1vdmUoc2VtYW50aWMpKQorICAgICAgICAsIG1faXNPcGVyYXRvcihXVEZN
b3ZlKGlzT3BlcmF0b3IpKQogICAgIHsKICAgICB9CiAKQEAgLTY1LDI3ICs2NywyOCBAQCBwdWJs
aWM6CiAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbihjb25zdCBGdW5jdGlvbkRlY2xhcmF0aW9uJikg
PSBkZWxldGU7CiAgICAgRnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uJiYp
ID0gZGVmYXVsdDsKIAorICAgIHZpcnR1YWwgYm9vbCBpc0Z1bmN0aW9uRGVmaW5pdGlvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICBBdHRyaWJ1dGVCbG9j
ayYgYXR0cmlidXRlQmxvY2soKSB7IHJldHVybiBtX2F0dHJpYnV0ZUJsb2NrOyB9Ci0gICAgQVNU
OjpUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQotICAgIFBhcmFtZXRlcnMmIHBhcmFt
ZXRlcnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBjb25zdCBPcHRpb25hbDxFbnRy
eVBvaW50VHlwZT4mIGVudHJ5UG9pbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9lbnRyeVBvaW50
VHlwZTsgfQorICAgIEFTVDo6VW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiAqbV90
eXBlOyB9CisgICAgY29uc3QgU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
CisgICAgYm9vbCBpc0Nhc3QoKSBjb25zdCB7IHJldHVybiBtX25hbWUgPT0gIm9wZXJhdG9yIGNh
c3QiOyB9CisgICAgY29uc3QgVmFyaWFibGVEZWNsYXJhdGlvbnMmIHBhcmFtZXRlcnMoKSBjb25z
dCB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyYgcGFy
YW1ldGVycygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyczsgfQogICAgIE9wdGlvbmFsPEFTVDo6U2Vt
YW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KLQotICAgIExleGVyOjpU
b2tlbiYmIHRha2VPcmlnaW4oKSB7IHJldHVybiBXVEZNb3ZlKG1fb3JpZ2luKTsgfQotICAgIEF0
dHJpYnV0ZUJsb2NrJiYgdGFrZUF0dHJpYnV0ZUJsb2NrKCkgeyByZXR1cm4gV1RGTW92ZShtX2F0
dHJpYnV0ZUJsb2NrKTsgfQotICAgIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiYmIHRha2VFbnRy
eVBvaW50VHlwZSgpIHsgcmV0dXJuIFdURk1vdmUobV9lbnRyeVBvaW50VHlwZSk7IH0KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHRha2VUeXBlKCkgeyByZXR1cm4gV1RGTW92ZSht
X3R5cGUpOyB9Ci0gICAgU3RyaW5nJiYgdGFrZU5hbWUoKSB7IHJldHVybiBXVEZNb3ZlKG1fbmFt
ZSk7IH0KLSAgICBQYXJhbWV0ZXJzJiYgdGFrZVBhcmFtZXRlcnMoKSB7IHJldHVybiBXVEZNb3Zl
KG1fcGFyYW1ldGVycyk7IH0KLSAgICBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHRha2VTZW1h
bnRpYygpIHsgcmV0dXJuIFdURk1vdmUobV9zZW1hbnRpYyk7IH0KKyAgICBib29sIGlzT3BlcmF0
b3IoKSBjb25zdCB7IHJldHVybiBtX2lzT3BlcmF0b3I7IH0KIAogcHJpdmF0ZToKICAgICBMZXhl
cjo6VG9rZW4gbV9vcmlnaW47CiAgICAgQXR0cmlidXRlQmxvY2sgbV9hdHRyaWJ1dGVCbG9jazsK
ICAgICBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gbV9lbnRyeVBvaW50VHlwZTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiBtX3R5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFt
ZWRUeXBlPiBtX3R5cGU7CiAgICAgU3RyaW5nIG1fbmFtZTsKLSAgICBQYXJhbWV0ZXJzIG1fcGFy
YW1ldGVyczsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9ucyBtX3BhcmFtZXRlcnM7CiAgICAgT3B0
aW9uYWw8QVNUOjpTZW1hbnRpYz4gbV9zZW1hbnRpYzsKKyAgICBib29sIG1faXNPcGVyYXRvcjsK
IH07CiAKIH0KQEAgLTk0LDQgKzk3LDkgQEAgcHJpdmF0ZToKIAogfQogCisjZGVmaW5lIFNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRlVOQ1RJT05fREVDTEFSQVRJT04oVG9WYWx1ZVR5cGVO
YW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNv
bnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHR5cGUpIHsgcmV0
dXJuIHR5cGUucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oCmluZGV4IGE0OTA3YjBkMjk4
Li5iNmI3YmEwNzdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgKQEAgLTUw
LDYgKzUwLDggQEAgcHVibGljOgogICAgIEZ1bmN0aW9uRGVmaW5pdGlvbihjb25zdCBGdW5jdGlv
bkRlZmluaXRpb24mKSA9IGRlbGV0ZTsKICAgICBGdW5jdGlvbkRlZmluaXRpb24oRnVuY3Rpb25E
ZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKIAorICAgIGJvb2wgaXNGdW5jdGlvbkRlZmluaXRpb24o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKICAgICBCbG9jayYgYmxvY2soKSB7
IHJldHVybiBtX2Jsb2NrOyB9CiAgICAgYm9vbCByZXN0cmljdGVkKCkgY29uc3QgeyByZXR1cm4g
bV9yZXN0cmljdGVkOyB9CiAKQEAgLTY0LDQgKzY2LDYgQEAgcHJpdmF0ZToKIAogfQogCitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OKEZ1bmN0aW9uRGVm
aW5pdGlvbiwgaXNGdW5jdGlvbkRlZmluaXRpb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Np
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4
RXhwcmVzc2lvbi5oCmluZGV4IDZiYjZhMGYwZGFiLi40M2U2MGExMDQ5OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNz
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
SW5kZXhFeHByZXNzaW9uLmgKQEAgLTQ5LDYgKzQ5LDI1IEBAIHB1YmxpYzoKICAgICBJbmRleEV4
cHJlc3Npb24oY29uc3QgSW5kZXhFeHByZXNzaW9uJikgPSBkZWxldGU7CiAgICAgSW5kZXhFeHBy
ZXNzaW9uKEluZGV4RXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzSW5kZXhF
eHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgU3RyaW5n
IGdldEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4g
U3RyaW5nKCJvcGVyYXRvcltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CisgICAg
fQorCisgICAgU3RyaW5nIHNldEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICByZXR1cm4gU3RyaW5nKCJvcGVyYXRvciZbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpOworICAgIH0KKworICAgIFN0cmluZyBhbmRGdW5jdGlvbk5hbWUoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZygib3BlcmF0b3JbXT0iLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICB9CisKKyAgICBFeHByZXNzaW9uJiBpbmRl
eEV4cHJlc3Npb24oKSB7IHJldHVybiAqbV9pbmRleDsgfQorCiBwcml2YXRlOgogICAgIHN0ZDo6
dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2luZGV4OwogfTsKQEAgLTU5LDQgKzc4LDYgQEAgcHJp
dmF0ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJT04oSW5k
ZXhFeHByZXNzaW9uLCBpc0luZGV4RXhwcmVzc2lvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRl
cmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTElu
dGVnZXJMaXRlcmFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
YjkxMWQzZjdmMmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAKQEAgLTAsMCArMSw1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oIgorCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVU
eXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsK
KworaW50NjRfdCBJbnRlZ2VyTGl0ZXJhbDo6dmFsdWVGb3JTZWxlY3RlZFR5cGUoKSBjb25zdAor
eworICAgIEFTU0VSVChtX3R5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8mIHR5cGVSZWZl
cmVuY2UgPSBkb3duY2FzdDxUeXBlUmVmZXJlbmNlPigqbV90eXBlLnJlc29sdmVkVHlwZSgpKTsK
KyAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byYgbmF0
aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgcmV0dXJuIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5mb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKCkobV92YWx1ZSk7Cit9CisKK30KKworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmgKaW5kZXggNjg1NGRkMjdmMGMuLmNi
MTJkNWQ3ZDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmgKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDIxICs0MCwzNyBAQCBuYW1lc3BhY2UgQVNU
IHsKIGNsYXNzIEludGVnZXJMaXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgog
ICAgIEludGVnZXJMaXRlcmFsKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgaW50IHZhbHVlKQotICAg
ICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICA6IEV4cHJlc3Npb24o
TGV4ZXI6OlRva2VuKG9yaWdpbikpCisgICAgICAgICwgbV90eXBlKFdURk1vdmUob3JpZ2luKSwg
dmFsdWUpCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+SW50ZWdlckxpdGVyYWwoKSA9IGRlZmF1bHQ7CiAKLSAgICBleHBsaWNpdCBJbnRlZ2Vy
TGl0ZXJhbChjb25zdCBJbnRlZ2VyTGl0ZXJhbCYpID0gZGVmYXVsdDsKKyAgICBJbnRlZ2VyTGl0
ZXJhbChjb25zdCBJbnRlZ2VyTGl0ZXJhbCYpID0gZGVsZXRlOwogICAgIEludGVnZXJMaXRlcmFs
KEludGVnZXJMaXRlcmFsJiYpID0gZGVmYXVsdDsKIAorICAgIEludGVnZXJMaXRlcmFsJiBvcGVy
YXRvcj0oY29uc3QgSW50ZWdlckxpdGVyYWwmKSA9IGRlbGV0ZTsKKyAgICBJbnRlZ2VyTGl0ZXJh
bCYgb3BlcmF0b3I9KEludGVnZXJMaXRlcmFsJiYpID0gZGVmYXVsdDsKKworICAgIEludGVnZXJM
aXRlcmFsVHlwZSYgdHlwZSgpIHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGludCB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAogICAgIGJvb2wgaXNJbnRlZ2VyTGl0ZXJhbCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAorICAgIEludGVnZXJMaXRlcmFsIGNsb25l
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEludGVnZXJMaXRlcmFsIHJlc3VsdChMZXhlcjo6VG9r
ZW4ob3JpZ2luKCkpLCBtX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5tX3R5cGUucmVzb2x2
ZWRUeXBlKCkpCisgICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVzdWx0Lm1fdHlw
ZS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgaW50NjRfdCB2YWx1ZUZvclNlbGVjdGVkVHlwZSgpIGNvbnN0OworCiBwcml2YXRl
OgorICAgIEludGVnZXJMaXRlcmFsVHlwZSBtX3R5cGU7CiAgICAgaW50IG1fdmFsdWU7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNWZjMjFhY2JkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5
cGUuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWxUeXBl
LmgiCisKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworSW50ZWdlckxpdGVy
YWxUeXBlOjpJbnRlZ2VyTGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBpbnQgdmFs
dWUpCisgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICwgbV9wcmVmZXJyZWRUeXBlKHN0ZDo6bWFr
ZV91bmlxdWU8VHlwZVJlZmVyZW5jZT4oV1RGTW92ZShvcmlnaW4pLCBTdHJpbmcoImludCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBUeXBlQXJndW1lbnRzKCkpKQoreworfQorCitJ
bnRlZ2VyTGl0ZXJhbFR5cGU6On5JbnRlZ2VyTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKK2Jv
b2wgSW50ZWdlckxpdGVyYWxUeXBlOjpjYW5SZXNvbHZlKGNvbnN0IFR5cGUmIHR5cGUpIGNvbnN0
Cit7CisgICAgaWYgKCFpczxOYW1lZFR5cGU+KHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgYXV0byYgbmFtZWRUeXBlID0gZG93bmNhc3Q8TmFtZWRUeXBlPih0eXBlKTsKKyAgICBp
ZiAoIWlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFuYXRpdmVU
eXBlRGVjbGFyYXRpb24uY2FuUmVwcmVzZW50SW50ZWdlcigpKG1fdmFsdWUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIEludGVnZXJMaXRl
cmFsVHlwZTo6Y29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSBj
b25zdAoreworICAgIGlmIChtYXRjaGVzKHVubmFtZWRUeXBlLCAqbV9wcmVmZXJyZWRUeXBlKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7Cit9CisKK30KKworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uNWYwMDIyYzZiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5
cGUuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBUeXBlUmVmZXJlbmNlOwor
CitjbGFzcyBJbnRlZ2VyTGl0ZXJhbFR5cGUgOiBwdWJsaWMgUmVzb2x2YWJsZVR5cGUgeworcHVi
bGljOgorICAgIEludGVnZXJMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIGludCB2
YWx1ZSk7CisKKyAgICB2aXJ0dWFsIH5JbnRlZ2VyTGl0ZXJhbFR5cGUoKTsKKworICAgIEludGVn
ZXJMaXRlcmFsVHlwZShjb25zdCBJbnRlZ2VyTGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBJ
bnRlZ2VyTGl0ZXJhbFR5cGUoSW50ZWdlckxpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKworICAg
IEludGVnZXJMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KGNvbnN0IEludGVnZXJMaXRlcmFsVHlwZSYp
ID0gZGVsZXRlOworICAgIEludGVnZXJMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KEludGVnZXJMaXRl
cmFsVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzSW50ZWdlckxpdGVyYWxUeXBlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgVHlwZVJlZmVyZW5jZSYgcHJl
ZmVycmVkVHlwZSgpIHsgcmV0dXJuICptX3ByZWZlcnJlZFR5cGU7IH0KKworICAgIGJvb2wgY2Fu
UmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdW5zaWduZWQgY29udmVy
c2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBpbnQgbV92YWx1ZTsKKyAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZl
IGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCisgICAgLy8gQ29uc3RhbnRFeHByZXNzaW9u
IC0+IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2UgLT4gVHlwZUFyZ3VtZW50cyAtPiBDb25z
dGFudEV4cHJlc3Npb24KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gbV9wcmVm
ZXJyZWRUeXBlOworfTsKKworfQorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
SExTTF9SRVNPTFZBQkxFX1RZUEUoSW50ZWdlckxpdGVyYWxUeXBlLCBpc0ludGVnZXJMaXRlcmFs
VHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjY3ZGIwMDAxNmEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmFtZWRUeXBlLmgKQEAgLTAsMCAr
MSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNpbmNs
dWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsK
KworY2xhc3MgTmFtZWRUeXBlIDogcHVibGljIFR5cGUgeworcHVibGljOgorICAgIE5hbWVkVHlw
ZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUpCisgICAgICAgIDogbV9vcmln
aW4oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5OYW1lZFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBO
YW1lZFR5cGUoY29uc3QgTmFtZWRUeXBlJikgPSBkZWxldGU7CisgICAgTmFtZWRUeXBlKE5hbWVk
VHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9u
YW1lOyB9CisKKyAgICBib29sIGlzTmFtZWRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1R5cGVEZWZpbml0aW9uKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTdHJ1Y3R1cmVEZWZpbml0aW9uKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGlvbkRlZmlu
aXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2
ZVR5cGVEZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFs
IGNvbnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CisgICAgdmly
dHVhbCBUeXBlJiB1bmlmeU5vZGUoKSB7IHJldHVybiAqdGhpczsgfQorCitwcml2YXRlOgorICAg
IExleGVyOjpUb2tlbiBtX29yaWdpbjsKKyAgICBTdHJpbmcgbV9uYW1lOworfTsKKworfQorCit9
CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUo
VG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVH
SU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6Ok5hbWVkVHlwZSYgdHlwZSkgeyBy
ZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZUEUoTmFtZWRUeXBlLCBpc05hbWVkVHlw
ZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24uaAppbmRleCAwMTBlNmViYTcwMC4uYTgxNGJlNjhlMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgKQEAgLTM3LDggKzM3LDggQEAgbmFtZXNwYWNl
IEFTVCB7CiAKIGNsYXNzIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwdWJsaWMgRnVuY3Rp
b25EZWNsYXJhdGlvbiB7CiBwdWJsaWM6Ci0gICAgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihM
ZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxvY2ssIE9w
dGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBvaW50VHlwZSwgc3RkOjp1bmlxdWVfcHRyPEFT
VDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBQYXJhbWV0ZXJzJiYgcGFyYW1ldGVycywg
T3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1hbnRpYywgYm9vbCByZXN0cmljdGVkKQotICAg
ICAgICA6IEZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKGF0dHJp
YnV0ZUJsb2NrKSwgV1RGTW92ZShlbnRyeVBvaW50VHlwZSksIFdURk1vdmUodHlwZSksIFdURk1v
dmUobmFtZSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURk1vdmUoc2VtYW50aWMpKQorICAgIE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiYmIGZ1bmN0aW9uRGVj
bGFyYXRpb24sIGJvb2wgcmVzdHJpY3RlZCkKKyAgICAgICAgOiBGdW5jdGlvbkRlY2xhcmF0aW9u
KFdURk1vdmUoZnVuY3Rpb25EZWNsYXJhdGlvbikpCiAgICAgICAgICwgbV9yZXN0cmljdGVkKHJl
c3RyaWN0ZWQpCiAgICAgewogICAgIH0KQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oY29uc3QgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYp
ID0gZGVsZXRlOwogICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzTmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIGJvb2wgcmVz
dHJpY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3RlZDsgfQogCiBwcml2YXRlOgpAQCAt
NjAsNCArNjIsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hM
U0xfRlVOQ1RJT05fREVDTEFSQVRJT04oTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgaXNOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVU
eXBlRGVjbGFyYXRpb24uaAppbmRleCAzMjBhYmMzYzQ3NS4uMmYyMDBjZTBmNjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaWYg
RU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExT
TFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlw
ZUFyZ3VtZW50LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM4LDEx
ICszOCwxMCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3Mg
TmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHVibGljIFR5cGUgeworY2xhc3MgTmF0aXZlVHlwZURl
Y2xhcmF0aW9uIDogcHVibGljIE5hbWVkVHlwZSB7CiBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgVHlwZUFyZ3Vt
ZW50cyYmIHR5cGVBcmd1bWVudHMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4p
KQotICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQorICAgICAgICA6IE5hbWVkVHlwZShX
VEZNb3ZlKG9yaWdpbiksIFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlQXJndW1lbnRz
KFdURk1vdmUodHlwZUFyZ3VtZW50cykpCiAgICAgewogICAgIH0KQEAgLTUyLDE4ICs1MSw1OSBA
QCBwdWJsaWM6CiAgICAgTmF0aXZlVHlwZURlY2xhcmF0aW9uKGNvbnN0IE5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5hdGl2ZVR5cGVEZWNsYXJhdGlvbihOYXRpdmVUeXBl
RGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OwogCisgICAgYm9vbCBpc05hdGl2ZVR5cGVEZWNsYXJh
dGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFN0cmluZyYgbmFtZSgpIHsg
cmV0dXJuIG1fbmFtZTsgfQogICAgIFR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMoKSB7IHJl
dHVybiBtX3R5cGVBcmd1bWVudHM7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9u
ZSgpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGJvb2wgaXNJbnQoKSBjb25zdCB7
IHJldHVybiBtX2lzSW50OyB9CisgICAgYm9vbCBpc051bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
aXNOdW1iZXI7IH0KKyAgICBib29sIGlzRmxvYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzRmxv
YXRpbmc7IH0KKyAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZlY3Rvcjsg
fQorICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiBtX2lzTWF0cml4OyB9CisgICAg
Ym9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2lzVGV4dHVyZTsgfQorICAgIGJvb2wg
aXNTaWduZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2lnbmVkOyB9CisgICAgY29uc3Qgc3RkOjpm
dW5jdGlvbjxib29sKGludCk+JiBjYW5SZXByZXNlbnRJbnRlZ2VyKCkgY29uc3QgeyByZXR1cm4g
bV9jYW5SZXByZXNlbnRJbnRlZ2VyOyB9CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKHVu
c2lnbmVkKT4mIGNhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyOyB9CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxi
b29sKGZsb2F0KT4mIGNhblJlcHJlc2VudEZsb2F0KCkgY29uc3QgeyByZXR1cm4gbV9jYW5SZXBy
ZXNlbnRGbG9hdDsgfQorICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248aW50NjRfdChpbnQ2NF90KT4m
IHN1Y2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yOyB9CisgICAgY29uc3Qgc3Rk
OjpmdW5jdGlvbjxpbnQ2NF90KGludCk+JiBmb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKCkgY29uc3Qg
eyByZXR1cm4gbV9mb3JtYXRWYWx1ZUZyb21JbnRlZ2VyOyB9CisgICAgY29uc3Qgc3RkOjpmdW5j
dGlvbjxpbnQ2NF90KHVuc2lnbmVkKT4mIGZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcigp
IGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyOyB9CisgICAg
dm9pZCBpdGVyYXRlQWxsVmFsdWVzKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2NF90KT4m
IGNhbGxiYWNrKSB7IG1faXRlcmF0ZUFsbFZhbHVlcyhjYWxsYmFjayk7IH0KKworICAgIHZvaWQg
c2V0SXNJbnQoKSB7IG1faXNJbnQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRJc051bWJlcigpIHsg
bV9pc051bWJlciA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzRmxvYXRpbmcoKSB7IG1faXNGbG9h
dGluZyA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzVmVjdG9yKCkgeyBtX2lzVmVjdG9yID0gdHJ1
ZTsgfQorICAgIHZvaWQgc2V0SXNNYXRyaXgoKSB7IG1faXNNYXRyaXggPSB0cnVlOyB9CisgICAg
dm9pZCBzZXRJc1RleHR1cmUoKSB7IG1faXNUZXh0dXJlID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0
SXNTaWduZWQoKSB7IG1faXNTaWduZWQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRDYW5SZXByZXNl
bnRJbnRlZ2VyKHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQpPiYmIGNhblJlcHJlc2VudCkgeyBtX2Nh
blJlcHJlc2VudEludGVnZXIgPSBXVEZNb3ZlKGNhblJlcHJlc2VudCk7IH0KKyAgICB2b2lkIHNl
dENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihzdGQ6OmZ1bmN0aW9uPGJvb2wodW5zaWduZWQp
PiYmIGNhblJlcHJlc2VudCkgeyBtX2NhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlciA9IFdURk1v
dmUoY2FuUmVwcmVzZW50KTsgfQorICAgIHZvaWQgc2V0Q2FuUmVwcmVzZW50RmxvYXQoc3RkOjpm
dW5jdGlvbjxib29sKGZsb2F0KT4mJiBjYW5SZXByZXNlbnQpIHsgbV9jYW5SZXByZXNlbnRGbG9h
dCA9IFdURk1vdmUoY2FuUmVwcmVzZW50KTsgfQorICAgIHZvaWQgc2V0U3VjY2Vzc29yKHN0ZDo6
ZnVuY3Rpb248aW50NjRfdChpbnQ2NF90KT4mJiBzdWNjZXNzb3IpIHsgbV9zdWNjZXNzb3IgPSBX
VEZNb3ZlKHN1Y2Nlc3Nvcik7IH0KKyAgICB2b2lkIHNldEZvcm1hdFZhbHVlRnJvbUludGVnZXIo
c3RkOjpmdW5jdGlvbjxpbnQ2NF90KGludCk+JiYgZm9ybWF0VmFsdWUpIHsgbV9mb3JtYXRWYWx1
ZUZyb21JbnRlZ2VyID0gV1RGTW92ZShmb3JtYXRWYWx1ZSk7IH0KKyAgICB2b2lkIHNldEZvcm1h
dFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcihzdGQ6OmZ1bmN0aW9uPGludDY0X3QodW5zaWduZWQp
PiYmIGZvcm1hdFZhbHVlKSB7IG1fZm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyID0gV1RG
TW92ZShmb3JtYXRWYWx1ZSk7IH0KKyAgICB2b2lkIHNldEl0ZXJhdGVBbGxWYWx1ZXMoc3RkOjpm
dW5jdGlvbjx2b2lkKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2NF90KT4mKT4mJiBpdGVy
YXRlQWxsVmFsdWVzKSB7IG1faXRlcmF0ZUFsbFZhbHVlcyA9IFdURk1vdmUoaXRlcmF0ZUFsbFZh
bHVlcyk7IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3Ry
aW5nIG1fbmFtZTsKICAgICBUeXBlQXJndW1lbnRzIG1fdHlwZUFyZ3VtZW50czsKKyAgICBzdGQ6
OmZ1bmN0aW9uPGJvb2woaW50KT4gbV9jYW5SZXByZXNlbnRJbnRlZ2VyOworICAgIHN0ZDo6ZnVu
Y3Rpb248Ym9vbCh1bnNpZ25lZCk+IG1fY2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyOworICAg
IHN0ZDo6ZnVuY3Rpb248Ym9vbChmbG9hdCk+IG1fY2FuUmVwcmVzZW50RmxvYXQ7CisgICAgc3Rk
OjpmdW5jdGlvbjxpbnQ2NF90KGludDY0X3QpPiBtX3N1Y2Nlc3NvcjsKKyAgICBzdGQ6OmZ1bmN0
aW9uPGludDY0X3QoaW50KT4gbV9mb3JtYXRWYWx1ZUZyb21JbnRlZ2VyOworICAgIHN0ZDo6ZnVu
Y3Rpb248aW50NjRfdCh1bnNpZ25lZCk+IG1fZm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2Vy
OworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woaW50NjRf
dCk+Jik+IG1faXRlcmF0ZUFsbFZhbHVlczsKKyAgICBib29sIG1faXNJbnQgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9pc051bWJlciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzRmxvYXRpbmcgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9pc1ZlY3RvciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzTWF0
cml4IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNUZXh0dXJlIHsgZmFsc2UgfTsKKyAgICBib29s
IG1faXNTaWduZWQgeyBmYWxzZSB9OwogfTsKIAogfQpAQCAtNzIsNCArMTEyLDYgQEAgcHJpdmF0
ZToKIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoTmF0aXZl
VHlwZURlY2xhcmF0aW9uLCBpc05hdGl2ZVR5cGVEZWNsYXJhdGlvbigpKQorCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5v
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5vZGUu
aAppbmRleCBmNmM0ZjAwNjBjMC4uYzhmZGMxMzg2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5vZGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOb2RlLmgKQEAgLTQyLDYgKzQyLDkg
QEAgcHVibGljOgogICAgIGV4cGxpY2l0IE5vZGUoY29uc3QgTm9kZSYpID0gZGVmYXVsdDsKICAg
ICBOb2RlKE5vZGUmJikgPSBkZWZhdWx0OwogCisgICAgTm9kZSYgb3BlcmF0b3I9KGNvbnN0IE5v
ZGUmKSA9IGRlZmF1bHQ7CisgICAgTm9kZSYgb3BlcmF0b3I9KE5vZGUmJikgPSBkZWZhdWx0Owor
CiBwcml2YXRlOgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgKaW5kZXggZWU2NDdjZjlkMzkuLjU0
YWY4YWZhOGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xOdWxsTGl0ZXJhbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2lu
Y2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNs
dWRlICJXSExTTE51bGxMaXRlcmFsVHlwZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQ1LDEyICs0NiwyNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5OdWxsTGl0ZXJhbCgpID0g
ZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0IE51bGxMaXRlcmFsKGNvbnN0IE51bGxMaXRlcmFsJikg
PSBkZWZhdWx0OworICAgIE51bGxMaXRlcmFsKGNvbnN0IE51bGxMaXRlcmFsJikgPSBkZWxldGU7
CiAgICAgTnVsbExpdGVyYWwoTnVsbExpdGVyYWwmJikgPSBkZWZhdWx0OwogCisgICAgTnVsbExp
dGVyYWwmIG9wZXJhdG9yPShjb25zdCBOdWxsTGl0ZXJhbCYpID0gZGVsZXRlOworICAgIE51bGxM
aXRlcmFsJiBvcGVyYXRvcj0oTnVsbExpdGVyYWwmJikgPSBkZWZhdWx0OworCisgICAgTnVsbExp
dGVyYWxUeXBlJiB0eXBlKCkgeyByZXR1cm4gbV90eXBlOyB9CisKICAgICBib29sIGlzTnVsbExp
dGVyYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBOdWxsTGl0ZXJh
bCBjbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIHJlc3VsdCA9IE51bGxMaXRlcmFs
KExleGVyOjpUb2tlbihvcmlnaW4oKSkpOworICAgICAgICBpZiAocmVzdWx0Lm1fdHlwZS5yZXNv
bHZlZFR5cGUoKSkKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUucmVzb2x2ZShyZXN1bHQubV90
eXBlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKIHByaXZhdGU6CisgICAgTnVsbExpdGVyYWxUeXBlIG1fdHlwZTsKIH07CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51
bGxMaXRlcmFsVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi42MWViZGMxYjQzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5jcHAKQEAgLTAs
MCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworYm9v
bCBOdWxsTGl0ZXJhbFR5cGU6OmNhblJlc29sdmUoY29uc3QgVHlwZSYgdHlwZSkgY29uc3QKK3sK
KyAgICBpZiAoIWlzPFVubmFtZWRUeXBlPih0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8VW5uYW1lZFR5cGU+KHR5cGUpOworICAg
IGlmICghaXM8UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIE51bGxMaXRlcmFsVHlwZTo6Y29u
dmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdAoreworICAgIHJldHVybiAwOwor
fQorCit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWxUeXBlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgzMTI1MTAxYzZmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TnVsbExpdGVyYWxUeXBlLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5
cGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1l
c3BhY2UgQVNUIHsKKworY2xhc3MgTnVsbExpdGVyYWxUeXBlIDogcHVibGljIFJlc29sdmFibGVU
eXBlIHsKK3B1YmxpYzoKKyAgICBOdWxsTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICB2
aXJ0dWFsIH5OdWxsTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBOdWxsTGl0ZXJhbFR5
cGUoY29uc3QgTnVsbExpdGVyYWxUeXBlJikgPSBkZWxldGU7CisgICAgTnVsbExpdGVyYWxUeXBl
KE51bGxMaXRlcmFsVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBOdWxsTGl0ZXJhbFR5cGUmIG9w
ZXJhdG9yPShjb25zdCBOdWxsTGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBOdWxsTGl0ZXJh
bFR5cGUmIG9wZXJhdG9yPShOdWxsTGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgYm9v
bCBpc051bGxMaXRlcmFsVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdW5z
aWduZWQgY29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKK307CisKK30KKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
V0hMU0xfUkVTT0xWQUJMRV9UWVBFKE51bGxMaXRlcmFsVHlwZSwgaXNOdWxsTGl0ZXJhbFR5cGUo
KSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAppbmRleCAxNTI5NDI2YTJlZC4uNjNjMjA5
M2M1MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFBvaW50ZXJUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaApAQCAtMzksOCArMzksOCBAQCBuYW1lc3BhY2Ug
QVNUIHsKIAogY2xhc3MgUG9pbnRlclR5cGUgOiBwdWJsaWMgUmVmZXJlbmNlVHlwZSB7CiBwdWJs
aWM6Ci0gICAgUG9pbnRlclR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBhZGRy
ZXNzU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBlbGVtZW50VHlwZSkKLSAgICAgICAgOiBS
ZWZlcmVuY2VUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShhZGRyZXNzU3BhY2UpLCBXVEZN
b3ZlKGVsZW1lbnRUeXBlKSkKKyAgICBQb2ludGVyVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4s
IEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4g
ZWxlbWVudFR5cGUpCisgICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdpbiksIGFk
ZHJlc3NTcGFjZSwgV1RGTW92ZShlbGVtZW50VHlwZSkpCiAgICAgewogICAgIH0KIApAQCAtNDks
MTEgKzQ5LDExIEBAIHB1YmxpYzoKICAgICBQb2ludGVyVHlwZShjb25zdCBQb2ludGVyVHlwZSYp
ID0gZGVsZXRlOwogICAgIFBvaW50ZXJUeXBlKFBvaW50ZXJUeXBlJiYpID0gZGVmYXVsdDsKIAot
ICAgIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgYm9vbCBpc1BvaW50ZXJUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKICAg
ICB7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBvaW50ZXJUeXBlPihMZXhlcjo6
VG9rZW4ob3JpZ2luKCkpLCBTdHJpbmcoYWRkcmVzc1NwYWNlKCkpLCBlbGVtZW50VHlwZSgpLmNs
b25lKCkpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQb2ludGVyVHlwZT4oTGV4
ZXI6OlRva2VuKG9yaWdpbigpKSwgYWRkcmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUo
KSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtNjUsNiArNjUsNiBAQCBwcml2YXRlOgogCiB9CiAK
LVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShQb2ludGVyVHlwZSwgaXNQb2ludGVy
VHlwZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoUG9pbnRl
clR5cGUsIGlzUG9pbnRlclR5cGUoKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbi5oCmluZGV4IGJhMzhhNWMwMWVhLi45NDcyN2I1ZTdlYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJv
cGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKQEAgLTUxLDEwICs1
MSwzNCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgdmlydHVhbCBTdHJpbmcgZ2V0
RnVuY3Rpb25OYW1lKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIHNldEZ1bmN0aW9u
TmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFN0cmluZyBhbmRGdW5jdGlvbk5hbWUoKSBj
b25zdCA9IDA7CisKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRl
Y2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlR2V0T3ZlcmxvYWRzKCkgeyByZXR1cm4gbV9wb3NzaWJs
ZUdldE92ZXJsb2FkczsgfQorICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0
aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVTZXRPdmVybG9hZHMoKSB7IHJldHVybiBtX3Bv
c3NpYmxlU2V0T3ZlcmxvYWRzOyB9CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBwb3NzaWJsZUFuZE92ZXJsb2FkcygpIHsgcmV0dXJu
IG1fcG9zc2libGVBbmRPdmVybG9hZHM7IH0KKworICAgIHZvaWQgc2V0UG9zc2libGVHZXRPdmVy
bG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJh
dGlvbj4sIDE+JiBvdmVybG9hZHMpCisgICAgeworICAgICAgICBtX3Bvc3NpYmxlR2V0T3Zlcmxv
YWRzID0gb3ZlcmxvYWRzOworICAgIH0KKyAgICB2b2lkIHNldFBvc3NpYmxlU2V0T3ZlcmxvYWRz
KGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+
LCAxPiYgb3ZlcmxvYWRzKQorICAgIHsKKyAgICAgICAgbV9wb3NzaWJsZVNldE92ZXJsb2FkcyA9
IG92ZXJsb2FkczsKKyAgICB9CisgICAgdm9pZCBzZXRQb3NzaWJsZUFuZE92ZXJsb2Fkcyhjb25z
dCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4m
IG92ZXJsb2FkcykKKyAgICB7CisgICAgICAgIG1fcG9zc2libGVBbmRPdmVybG9hZHMgPSBvdmVy
bG9hZHM7CisgICAgfQorCiAgICAgRXhwcmVzc2lvbiYgYmFzZSgpIHsgcmV0dXJuICptX2Jhc2U7
IH0KIAogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9iYXNlOwor
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
PiBtX3Bvc3NpYmxlR2V0T3ZlcmxvYWRzOworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzOworICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBt
X3Bvc3NpYmxlQW5kT3ZlcmxvYWRzOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUXVhbGlmaWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xRdWFsaWZpZXIuaAppbmRleCAzMzNm
MDUyMjQ0MS4uZjdjZDJmZGZmYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFF1YWxpZmllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFF1YWxpZmllci5oCkBAIC00Niw3ICs0Niw3IEBA
IGVudW0gY2xhc3MgUXVhbGlmaWVyIHsKICAgICBTYW1wbGUKIH07CiAKLXR5cGVkZWYgVmVjdG9y
PFF1YWxpZmllcj4gUXVhbGlmaWVyczsKK3VzaW5nIFF1YWxpZmllcnMgPSBWZWN0b3I8UXVhbGlm
aWVyPjsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LmgKaW5kZXggYTRjMTRjZTFjZjMuLmNkNTU2MzIwZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hM
U0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNM
VmFyaWFibGVSZWZlcmVuY2UuaCIKQEAgLTUyLDggKzUyLDggQEAgcHVibGljOgogICAgIFJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBzdGQ6OnVuaXF1ZV9w
dHI8RXhwcmVzc2lvbj4gbFZhbHVlKQogICAgICAgICA6IEV4cHJlc3Npb24oTGV4ZXI6OlRva2Vu
KG9yaWdpbikpCiAgICAgICAgICwgbV9sVmFsdWUoV1RGTW92ZShsVmFsdWUpKQotICAgICAgICAs
IG1fb2xkVmFsdWUoTGV4ZXI6OlRva2VuKG9yaWdpbikpCi0gICAgICAgICwgbV9uZXdWYWx1ZShX
VEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9vbGRWYWx1ZShMZXhlcjo6VG9rZW4ob3JpZ2lu
KSwgUXVhbGlmaWVycygpLCBudWxscHRyLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRy
KQorICAgICAgICAsIG1fbmV3VmFsdWUoV1RGTW92ZShvcmlnaW4pLCBRdWFsaWZpZXJzKCksIG51
bGxwdHIsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpCiAgICAgewogICAgIH0KIApA
QCAtODcsMTUgKzg3LDE1IEBAIHB1YmxpYzoKICAgICBib29sIGlzUmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIEV4cHJlc3Np
b24mIGxWYWx1ZSgpIHsgcmV0dXJuICptX2xWYWx1ZTsgfQotICAgIEFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQotICAgIEFub255
bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9uZXdWYWx1ZTsg
fQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1
ZTsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9uZXdW
YWx1ZTsgfQogICAgIEV4cHJlc3Npb24mIG5ld1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0dXJuICpt
X25ld1ZhbHVlRXhwcmVzc2lvbjsgfQogICAgIEV4cHJlc3Npb24mIHJlc3VsdEV4cHJlc3Npb24o
KSB7IHJldHVybiAqbV9yZXN1bHRFeHByZXNzaW9uOyB9CiAKIHByaXZhdGU6CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fbFZhbHVlOwotICAgIEFub255bW91c1ZhcmlhYmxlRGVj
bGFyYXRpb24gbV9vbGRWYWx1ZTsKLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uIG1f
bmV3VmFsdWU7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBtX29sZFZhbHVlOworICAgIFZhcmlh
YmxlRGVjbGFyYXRpb24gbV9uZXdWYWx1ZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lv
bj4gbV9uZXdWYWx1ZUV4cHJlc3Npb247CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
IG1fcmVzdWx0RXhwcmVzc2lvbjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgKaW5kZXggMjI1
N2Y5YmUyNDAuLjVkMjlmZmQ1YjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oCkBAIC0yOCw3
ICsyOCw3IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIK
LSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTM3LDExICszNywxOCBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAot
Y2xhc3MgUmVmZXJlbmNlVHlwZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFJlZmVyZW5jZVR5cGUg
OiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgotICAgIFJlZmVyZW5jZVR5cGUoTGV4ZXI6
OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBhZGRyZXNzU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxU
eXBlPiYmIGVsZW1lbnRUeXBlKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkK
LSAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShXVEZNb3ZlKGFkZHJlc3NTcGFjZSkpCisgICAgZW51
bSBjbGFzcyBBZGRyZXNzU3BhY2UgeworICAgICAgICBDb25zdGFudCwKKyAgICAgICAgRGV2aWNl
LAorICAgICAgICBUaHJlYWRncm91cCwKKyAgICAgICAgVGhyZWFkCisgICAgfTsKKworICAgIFJl
ZmVyZW5jZVR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBZGRyZXNzU3BhY2UgYWRkcmVzc1Nw
YWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+JiYgZWxlbWVudFR5cGUpCisgICAgICAg
IDogVW5uYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fYWRkcmVzc1NwYWNl
KGFkZHJlc3NTcGFjZSkKICAgICAgICAgLCBtX2VsZW1lbnRUeXBlKFdURk1vdmUoZWxlbWVudFR5
cGUpKQogICAgIHsKICAgICB9CkBAIC01MCwxOCArNTcsMTUgQEAgcHVibGljOgogCiAgICAgUmVm
ZXJlbmNlVHlwZShjb25zdCBSZWZlcmVuY2VUeXBlJikgPSBkZWxldGU7CiAgICAgUmVmZXJlbmNl
VHlwZShSZWZlcmVuY2VUeXBlJiYpID0gZGVmYXVsdDsKLSAgICAKLSAgICBUeXBlJiBlbGVtZW50
VHlwZSgpIHsgcmV0dXJuICptX2VsZW1lbnRUeXBlOyB9CiAKLXByb3RlY3RlZDoKLSAgICBjb25z
dCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9Ci0gICAg
Y29uc3QgU3RyaW5nJiBhZGRyZXNzU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2FkZHJlc3NTcGFj
ZTsgfQotICAgIGNvbnN0IFR5cGUmIGVsZW1lbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gKm1fZWxl
bWVudFR5cGU7IH0KKyAgICBib29sIGlzUmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CisKKyAgICBBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KKyAgICBVbm5hbWVkVHlwZSYgZWxlbWVudFR5cGUo
KSBjb25zdCB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQogCiBwcml2YXRlOgotICAgIExleGVy
OjpUb2tlbiBtX29yaWdpbjsKLSAgICBTdHJpbmcgbV9hZGRyZXNzU3BhY2U7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFR5cGU+IG1fZWxlbWVudFR5cGU7CisgICAgQWRkcmVzc1NwYWNlIG1fYWRkcmVz
c1NwYWNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4gbV9lbGVtZW50VHlwZTsK
IH07CiAKIH0KQEAgLTcwLDQgKzc0LDYgQEAgcHJpdmF0ZToKIAogfQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShSZWZlcmVuY2VUeXBlLCBpc1JlZmVyZW5jZVR5
cGUoKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xSZXNvbHZhYmxlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb2x2YWJsZVR5cGUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNThhNjhlYTNjOWEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvbHZhYmxlVHlw
ZS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVu
bmFtZWRUeXBlLmgiCisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBSZXNvbHZhYmxl
VHlwZSA6IHB1YmxpYyBUeXBlIHsKK3B1YmxpYzoKKyAgICBSZXNvbHZhYmxlVHlwZSgpID0gZGVm
YXVsdDsKKworICAgIHZpcnR1YWwgflJlc29sdmFibGVUeXBlKCkgPSBkZWZhdWx0OworCisgICAg
UmVzb2x2YWJsZVR5cGUoY29uc3QgUmVzb2x2YWJsZVR5cGUmKSA9IGRlbGV0ZTsKKyAgICBSZXNv
bHZhYmxlVHlwZShSZXNvbHZhYmxlVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBSZXNvbHZhYmxl
VHlwZSYgb3BlcmF0b3I9KGNvbnN0IFJlc29sdmFibGVUeXBlJikgPSBkZWxldGU7CisgICAgUmVz
b2x2YWJsZVR5cGUmIG9wZXJhdG9yPShSZXNvbHZhYmxlVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAg
ICBib29sIGlzUmVzb2x2YWJsZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBib29sIGlzRmxvYXRMaXRlcmFsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzSW50ZWdlckxpdGVyYWxUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNOdWxsTGl0ZXJhbFR5cGUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCBj
YW5SZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBj
b252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0ID0gMDsKKworICAgIFVubmFt
ZWRUeXBlKiByZXNvbHZlZFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkVHlwZS5nZXQo
KTsgfQorICAgIFVubmFtZWRUeXBlKiByZXNvbHZlZFR5cGUoKSB7IHJldHVybiBtX3Jlc29sdmVk
VHlwZS5nZXQoKTsgfQorCisgICAgdm9pZCByZXNvbHZlKHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVk
VHlwZT4mJiB0eXBlKQorICAgIHsKKyAgICAgICAgbV9yZXNvbHZlZFR5cGUgPSBXVEZNb3ZlKHR5
cGUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5uYW1lZFR5cGU+
IG1fcmVzb2x2ZWRUeXBlOworfTsKKworfQorCit9CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX1dITFNMX1JFU09MVkFCTEVfVFlQRShUb1ZhbHVlVHlwZU5hbWUsIHByZWRp
Y2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXSExTTDo6QVNU
OjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6V0hMU0w6OkFTVDo6UmVzb2x2YWJsZVR5cGUmIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGlj
YXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19XSExTTF9UWVBFKFJlc29sdmFibGVUeXBlLCBpc1Jlc29sdmFibGVUeXBlKCkpCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWE4ZThhMWRmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFu
dGljLmNwcApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUp
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMu
aCIKKworI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5
cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZl
cmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2Jv
b2wgUmVzb3VyY2VTZW1hbnRpYzo6aXNBY2NlcHRhYmxlVHlwZShjb25zdCBBU1Q6OlVubmFtZWRU
eXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgTW9kZTo6VW5vcmRlcmVkQWNjZXNzVmll
dzoKKyAgICAgICAgaWYgKGlzPFJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkgeworICAgICAg
ICAgICAgYXV0byYgcmVmZXJlbmNlVHlwZSA9IGRvd25jYXN0PFJlZmVyZW5jZVR5cGU+KHVubmFt
ZWRUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFjZSgp
ID09IFJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQgfHwgcmVmZXJlbmNlVHlw
ZS5hZGRyZXNzU3BhY2UoKSA9PSBSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmljZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGlzPFR5cGVSZWZlcmVuY2U+KHVubmFt
ZWRUeXBlKSkgeworICAgICAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PFR5
cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJl
bmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAgIGlmIChpczxOYXRpdmVUeXBlRGVjbGFy
YXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNv
bHZlZFR5cGUoKSkuaXNUZXh0dXJlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGNhc2UgTW9kZTo6VGV4dHVyZToKKyAgICAgICAgaWYgKGlzPFJlZmVyZW5jZVR5cGU+
KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZWZlcmVuY2VUeXBl
Pih1bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gUmVmZXJlbmNlVHlwZTo6QWRkcmVzc1Nw
YWNlOjpDb25zdGFudDsKKyAgICAgICAgaWYgKGlzPEFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChpczxUeXBlUmVmZXJlbmNlPih1
bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2Fz
dDxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICBBU1NFUlQodHlwZVJl
ZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8TmF0aXZlVHlwZURl
Y2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2Uu
cmVzb2x2ZWRUeXBlKCkpLmlzVGV4dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBjYXNlIE1vZGU6OkJ1ZmZlcjoKKyAgICAgICAgaWYgKGlzPFJlZmVyZW5jZVR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZWZlcmVuY2VU
eXBlPih1bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gUmVmZXJlbmNlVHlwZTo6QWRkcmVz
c1NwYWNlOjpDb25zdGFudDsKKyAgICAgICAgcmV0dXJuIGlzPEFycmF5VHlwZT4odW5uYW1lZFR5
cGUpOworICAgIGNhc2UgTW9kZTo6U2FtcGxlcjoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5u
YW1lZFR5cGUsIGludHJpbnNpY3Muc2FtcGxlclR5cGUoKSk7CisgICAgfQorfQorCitib29sIFJl
c291cmNlU2VtYW50aWM6OmlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVy
SXRlbURpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBTaGFkZXJJdGVtRGlyZWN0aW9uOjpJbnB1dDsK
K30KKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmgK
aW5kZXggYWIzYjQzMGY0NDIuLjZhZTMxN2EzNTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1h
bnRpYy5oCkBAIC02Miw2ICs2MiwxOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgdW5zaWduZWQgc3BhY2UoKSBjb25zdCB7IHJl
dHVybiBtX3NwYWNlOyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVzb3VyY2VTZW1h
bnRpYyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9tb2RlID09IG90aGVy
Lm1fbW9kZSAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXggJiYgbV9zcGFjZSA9PSBvdGhlci5t
X3NwYWNlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBSZXNvdXJjZVNlbWFu
dGljJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICB9CisKKyAgICBib29sIGlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVk
VHlwZSYsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQWNj
ZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29uc3Qg
RnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisKIHByaXZhdGU6CiAgICAgTW9k
ZSBtX21vZGU7CiAgICAgdW5zaWduZWQgbV9pbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJldHVybi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKaW5kZXggYzViZmM5ZTQy
ODYuLjVkMzE4Y2QyMzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaApAQCAtNTQsOCArNTQsMTIgQEAgcHVibGljOgog
CiAgICAgRXhwcmVzc2lvbiogdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CiAKKyAg
ICBGdW5jdGlvbkRlZmluaXRpb24qIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQor
ICAgIHZvaWQgc2V0RnVuY3Rpb24oRnVuY3Rpb25EZWZpbml0aW9uKiBmdW5jdGlvbkRlZmluaXRp
b24pIHsgbV9mdW5jdGlvbiA9IGZ1bmN0aW9uRGVmaW5pdGlvbjsgfQorCiBwcml2YXRlOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX3ZhbHVlOyAvLyBudWxsYWJsZQorICAgIEZ1
bmN0aW9uRGVmaW5pdGlvbiogbV9mdW5jdGlvbjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNlbWFudGljLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTZW1hbnRpYy5oCmluZGV4
IGIwNTJiOTJlYTI2Li5iMmMwOTBiZjFhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU2VtYW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTZW1hbnRpYy5oCkBAIC0zOSw3ICszOSw3
IEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi10eXBlZGVmIFZhcmlh
bnQ8QnVpbHRJblNlbWFudGljLCBSZXNvdXJjZVNlbWFudGljLCBTcGVjaWFsaXphdGlvbkNvbnN0
YW50U2VtYW50aWMsIFN0YWdlSW5PdXRTZW1hbnRpYz4gU2VtYW50aWM7Cit1c2luZyBTZW1hbnRp
YyA9IFZhcmlhbnQ8QnVpbHRJblNlbWFudGljLCBSZXNvdXJjZVNlbWFudGljLCBTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMsIFN0YWdlSW5PdXRTZW1hbnRpYz47CiAKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lh
bGl6YXRpb25Db25zdGFudFNlbWFudGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYyNGJhZWNjMDQwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNwcApAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oIgorCisjaW5jbHVkZSAi
V0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVk
ZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNw
YWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2Jvb2wgU3BlY2lhbGl6YXRpb25Db25z
dGFudFNlbWFudGljOjppc0FjY2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIHVu
bmFtZWRUeXBlLCBjb25zdCBJbnRyaW5zaWNzJikgY29uc3QKK3sKKyAgICBpZiAoIWlzPFR5cGVS
ZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8m
IHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7Cisg
ICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgIGlmICghaXM8TmF0
aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0
aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkuaXNOdW1iZXIoKTsKK30KKworYm9v
bCBTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWM6OmlzQWNjZXB0YWJsZUZvclNoYWRlckl0
ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9u
RGVmaW5pdGlvbiYpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBTaGFkZXJJdGVt
RGlyZWN0aW9uOjpJbnB1dDsKK30KKworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oCmluZGV4IDlhN2M1
M2ZkNGI2Li45YTg0YWI5Y2ZiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6
YXRpb25Db25zdGFudFNlbWFudGljLmgKQEAgLTQ4LDYgKzQ4LDE5IEBAIHB1YmxpYzoKICAgICBT
cGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMoY29uc3QgU3BlY2lhbGl6YXRpb25Db25zdGFu
dFNlbWFudGljJikgPSBkZWxldGU7CiAgICAgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGlj
KFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgaXNBY2NlcHRhYmxlVHlwZShj
b25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgSW50cmluc2ljcyYpIGNvbnN0IG92ZXJyaWRl
OworICAgIGJvb2wgaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFkZXJJdGVt
RGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSBjb25zdCBvdmVycmlkZTsKKwog
cHJpdmF0ZToKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMDNjNDYwODhmZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0
YWdlSW5PdXRTZW1hbnRpYy5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTdGFn
ZUluT3V0U2VtYW50aWMuaCIKKworI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVk
ZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9u
RGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgIldI
TFNMSW50cmluc2ljcy5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1Qgewor
Citib29sIFN0YWdlSW5PdXRTZW1hbnRpYzo6aXNBY2NlcHRhYmxlVHlwZShjb25zdCBBU1Q6OlVu
bmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgSW50cmluc2ljcyYpIGNvbnN0Cit7CisgICAg
aWYgKGlzPEFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAoIWlzPFR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxUeXBlUmVmZXJlbmNlPih1
bm5hbWVkVHlwZSk7CisgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwor
ICAgIGF1dG8mIHJlc29sdmVkVHlwZSA9ICp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpOwor
ICAgIGlmIChpczxFbnVtZXJhdGlvbkRlZmluaXRpb24+KHJlc29sdmVkVHlwZSkpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGlmICghaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihyZXNvbHZl
ZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xh
cmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5y
ZXNvbHZlZFR5cGUoKSk7CisgICAgcmV0dXJuIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc051bWJl
cigpCisgICAgICAgIHx8IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc1ZlY3RvcigpCisgICAgICAg
IHx8IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc01hdHJpeCgpOworfQorCitib29sIFN0YWdlSW5P
dXRTZW1hbnRpYzo6aXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFkZXJJdGVt
RGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRl
ZmluaXRpb24pIGNvbnN0Cit7CisgICAgc3dpdGNoICgqZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5
UG9pbnRUeXBlKCkpIHsKKyAgICBjYXNlIEZ1bmN0aW9uRGVjbGFyYXRpb246OkVudHJ5UG9pbnRU
eXBlOjpWZXJ0ZXg6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgRnVuY3Rpb25EZWNs
YXJhdGlvbjo6RW50cnlQb2ludFR5cGU6OkZyYWdtZW50OgorICAgICAgICByZXR1cm4gZGlyZWN0
aW9uID09IFNoYWRlckl0ZW1EaXJlY3Rpb246OklucHV0OworICAgIGNhc2UgRnVuY3Rpb25EZWNs
YXJhdGlvbjo6RW50cnlQb2ludFR5cGU6OkNvbXB1dGU6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0
U2VtYW50aWMuaAppbmRleCBhMzk5Mjc4MWUzYS4uMjk5YjkxYmQ5OTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1h
bnRpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFN0YWdlSW5PdXRTZW1hbnRpYy5oCkBAIC01MSw2ICs1MSwxOSBAQCBwdWJsaWM6CiAKICAgICB1
bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KIAorICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBTdGFnZUluT3V0U2VtYW50aWMmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICB9CisKKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgU3RhZ2VJbk91dFNlbWFudGljJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBib29sIGlz
QWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNvbnN0IEludHJpbnNpY3Mm
KSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJl
Y3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29uc3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29u
c3Qgb3ZlcnJpZGU7CisKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9pbmRleDsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0
YXRlbWVudC5oCmluZGV4IDQzNGQyMWEwNDMyLi5mZWRkMDY4ZjhiNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50
LmgKQEAgLTY3LDcgKzY3LDcgQEAgcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47
CiB9OwogCi10eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3RhdGVtZW50Pj4gU3RhdGVt
ZW50czsKK3VzaW5nIFN0YXRlbWVudHMgPSBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YXRlbWVu
dD4+OwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaAppbmRleCA4N2Nj
NjJmMjM1Ni4uYThjOThlOTliNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9u
LmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRl
ICJXSExTTFN0cnVjdHVyZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNs
dWRlICJXSExTTE5hbWVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtMzksMTEgKzM5LDEwIEBAIG5hbWVzcGFjZSBX
SExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBTdHJ1Y3R1cmVEZWZpbml0aW9uIDog
cHVibGljIFR5cGUgeworY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlvbiA6IHB1YmxpYyBOYW1lZFR5
cGUgewogcHVibGljOgogICAgIFN0cnVjdHVyZURlZmluaXRpb24oTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBTdHJpbmcmJiBuYW1lLCBTdHJ1Y3R1cmVFbGVtZW50cyYmIHN0cnVjdHVyZUVsZW1lbnRz
KQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX25hbWUo
V1RGTW92ZShuYW1lKSkKKyAgICAgICAgOiBOYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pLCBXVEZN
b3ZlKG5hbWUpKQogICAgICAgICAsIG1fc3RydWN0dXJlRWxlbWVudHMoV1RGTW92ZShzdHJ1Y3R1
cmVFbGVtZW50cykpCiAgICAgewogICAgIH0KQEAgLTUzLDE3ICs1MiwxMSBAQCBwdWJsaWM6CiAg
ICAgU3RydWN0dXJlRGVmaW5pdGlvbihjb25zdCBTdHJ1Y3R1cmVEZWZpbml0aW9uJikgPSBkZWxl
dGU7CiAgICAgU3RydWN0dXJlRGVmaW5pdGlvbihTdHJ1Y3R1cmVEZWZpbml0aW9uJiYpID0gZGVm
YXVsdDsKIAotICAgIFN0cnVjdHVyZUVsZW1lbnRzJiBzdHJ1Y3R1cmVFbGVtZW50cygpIHsgcmV0
dXJuIG1fc3RydWN0dXJlRWxlbWVudHM7IH0KKyAgICBib29sIGlzU3RydWN0dXJlRGVmaW5pdGlv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIFN0cnVjdHVy
ZUVsZW1lbnRzJiBzdHJ1Y3R1cmVFbGVtZW50cygpIHsgcmV0dXJuIG1fc3RydWN0dXJlRWxlbWVu
dHM7IH0KIAogcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgU3RyaW5n
IG1fbmFtZTsKICAgICBTdHJ1Y3R1cmVFbGVtZW50cyBtX3N0cnVjdHVyZUVsZW1lbnRzOwogfTsK
IApAQCAtNzMsNCArNjYsNiBAQCBwcml2YXRlOgogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfTkFNRURfVFlQRShTdHJ1Y3R1cmVEZWZpbml0aW9uLCBpc1N0cnVjdHVyZURlZmlu
aXRpb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgKaW5kZXggMTRi
ZTQxYzcyOTguLjZhNjRiMDljMDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oCkBA
IC00MSw3ICs0MSw3IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBTdHJ1Y3R1cmVFbGVtZW50
IDogcHVibGljIE5vZGUgewogcHVibGljOgotICAgIFN0cnVjdHVyZUVsZW1lbnQoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPFR5
cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgT3B0aW9uYWw8U2VtYW50aWM+IHNlbWFudGljKQor
ICAgIFN0cnVjdHVyZUVsZW1lbnQoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBRdWFsaWZpZXJzJiYg
cXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYm
IG5hbWUsIE9wdGlvbmFsPFNlbWFudGljPiBzZW1hbnRpYykKICAgICAgICAgOiBtX29yaWdpbihX
VEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9xdWFsaWZpZXJzKFdURk1vdmUocXVhbGlmaWVy
cykpCiAgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCkBAIC01NSwxOCArNTUsMjAgQEAg
cHVibGljOgogICAgIFN0cnVjdHVyZUVsZW1lbnQoY29uc3QgU3RydWN0dXJlRWxlbWVudCYpID0g
ZGVsZXRlOwogICAgIFN0cnVjdHVyZUVsZW1lbnQoU3RydWN0dXJlRWxlbWVudCYmKSA9IGRlZmF1
bHQ7CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIGNvbnN0IExl
eGVyOjpUb2tlbiYgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBVbm5h
bWVkVHlwZSYgdHlwZSgpIHsgcmV0dXJuICptX3R5cGU7IH0KKyAgICBjb25zdCBTdHJpbmcmIG5h
bWUoKSB7IHJldHVybiBtX25hbWU7IH0KICAgICBPcHRpb25hbDxTZW1hbnRpYz4mIHNlbWFudGlj
KCkgeyByZXR1cm4gbV9zZW1hbnRpYzsgfQogCiBwcml2YXRlOgogICAgIExleGVyOjpUb2tlbiBt
X29yaWdpbjsKICAgICBRdWFsaWZpZXJzIG1fcXVhbGlmaWVyczsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8VHlwZT4gbV90eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4gbV90eXBl
OwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgT3B0aW9uYWw8U2VtYW50aWM+IG1fc2VtYW50aWM7
CiB9OwogCi10eXBlZGVmIFZlY3RvcjxTdHJ1Y3R1cmVFbGVtZW50PiBTdHJ1Y3R1cmVFbGVtZW50
czsKK3VzaW5nIFN0cnVjdHVyZUVsZW1lbnRzID0gVmVjdG9yPFN0cnVjdHVyZUVsZW1lbnQ+Owog
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFR5cGUuaAppbmRleCBjZjRjYmM4ODc5MC4uMjg0MWQ5NTA4ZGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgKQEAgLTQy
LDE1ICs0MiwxNSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5UeXBlKCkgPSBkZWZhdWx0Owog
Ci0gICAgVHlwZShjb25zdCBUeXBlJikgPSBkZWxldGU7CisgICAgZXhwbGljaXQgVHlwZShjb25z
dCBUeXBlJikgPSBkZWxldGU7CiAgICAgVHlwZShUeXBlJiYpID0gZGVmYXVsdDsKIAotICAgIHZp
cnR1YWwgYm9vbCBpc1R5cGVSZWZlcmVuY2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAg
IHZpcnR1YWwgYm9vbCBpc1BvaW50ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5VHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgVHlwZSYgb3BlcmF0b3I9KGNvbnN0IFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBUeXBl
JiBvcGVyYXRvcj0oVHlwZSYmKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVl
X3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNOYW1lZFR5
cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1VubmFtZWRU
eXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNSZXNvbHZh
YmxlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKIHByaXZhdGU6CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFy
Z3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFR5cGVBcmd1bWVudC5jcHAKaW5kZXggN2U1ODAxZTNiNTYuLjk4MDg2NjRkMWQ0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJn
dW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFR5cGVBcmd1bWVudC5jcHAKQEAgLTIzLDE0ICsyMywxNCBAQAogICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNwcmFnbWEgb25jZQotCiAjaWYgRU5BQkxFKFdF
QkdQVSkKIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNp
bmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFR5
cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQ5LDcgKzQ5LDcgQEAgVHlwZUFyZ3VtZW50cyBjbG9uZShjb25zdCBUeXBl
QXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKQogVHlwZUFyZ3VtZW50IGNsb25lKGNvbnN0IFR5cGVB
cmd1bWVudCYgdHlwZUFyZ3VtZW50KQogewogICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFr
ZVZpc2l0b3IoW10oY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24p
IC0+IFR5cGVBcmd1bWVudCB7Ci0gICAgICAgIHJldHVybiBjb25zdGFudEV4cHJlc3Npb247Cisg
ICAgICAgIHJldHVybiBjb25zdGFudEV4cHJlc3Npb24uY2xvbmUoKTsKICAgICB9LCBbXShjb25z
dCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4mIHR5cGVSZWZlcmVuY2UpIC0+IFR5cGVB
cmd1bWVudCB7CiAgICAgICAgIHJldHVybiB0eXBlUmVmZXJlbmNlLT5jbG9uZVR5cGVSZWZlcmVu
Y2UoKTsKICAgICB9KSwgdHlwZUFyZ3VtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmgKaW5kZXgg
ZTM4NWQ1MGQ1ZWYuLjNiMDM3YmEzNTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaApAQCAtNDAs
OCArNDAsOCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgVHlwZVJlZmVyZW5jZTsKIAotdHlw
ZWRlZiBWYXJpYW50PENvbnN0YW50RXhwcmVzc2lvbiwgc3RkOjp1bmlxdWVfcHRyPFR5cGVSZWZl
cmVuY2U+PiBUeXBlQXJndW1lbnQ7Ci10eXBlZGVmIFZlY3RvcjxUeXBlQXJndW1lbnQ+IFR5cGVB
cmd1bWVudHM7Cit1c2luZyBUeXBlQXJndW1lbnQgPSBWYXJpYW50PENvbnN0YW50RXhwcmVzc2lv
biwgc3RkOjp1bmlxdWVfcHRyPFR5cGVSZWZlcmVuY2U+PjsKK3VzaW5nIFR5cGVBcmd1bWVudHMg
PSBWZWN0b3I8VHlwZUFyZ3VtZW50PjsKIAogVHlwZUFyZ3VtZW50IGNsb25lKGNvbnN0IFR5cGVB
cmd1bWVudCYpOwogVHlwZUFyZ3VtZW50cyBjbG9uZShjb25zdCBUeXBlQXJndW1lbnRzJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xU
eXBlRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMVHlwZURlZmluaXRpb24uaAppbmRleCBmNzM2MjllMjliMS4uZWQxYzQ3NWE4MjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5
cGVEZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZURlZmluaXRpb24uaApAQCAtMjksNyArMjksOCBAQAogCiAjaW5jbHVkZSAi
V0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMTm9kZS5oIgotI2luY2x1ZGUgIldITFNMVHlw
ZS5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVk
VHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0zOCwxMSArMzksMTAgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNl
IEFTVCB7CiAKLWNsYXNzIFR5cGVEZWZpbml0aW9uIDogcHVibGljIFR5cGUgeworY2xhc3MgVHlw
ZURlZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsKIHB1YmxpYzoKLSAgICBUeXBlRGVmaW5p
dGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlR5cGU+JiYgdHlwZSkKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
Ci0gICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgVHlwZURlZmluaXRpb24oTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpV
bm5hbWVkVHlwZT4mJiB0eXBlKQorICAgICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiks
IFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCiAgICAgewog
ICAgIH0KQEAgLTUyLDE4ICs1MiwyNCBAQCBwdWJsaWM6CiAgICAgVHlwZURlZmluaXRpb24oY29u
c3QgVHlwZURlZmluaXRpb24mKSA9IGRlbGV0ZTsKICAgICBUeXBlRGVmaW5pdGlvbihUeXBlRGVm
aW5pdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBBU1Q6OlR5cGUmIHR5cGUoKSB7IHJldHVybiAq
bV90eXBlOyB9CisgICAgYm9vbCBpc1R5cGVEZWZpbml0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IGNsb25lKCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICBBU1Q6OlVubmFtZWRUeXBlKiB0eXBlKCkgeyByZXR1cm4gbV90eXBlLmdl
dCgpOyB9CisKKyAgICBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCBvdmVycmlkZQogICAg
IHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICBBU1NFUlQobV90eXBlKTsKKyAgICAgICAgcmV0dXJuIG1fdHlwZS0+dW5pZnlO
b2RlKCk7CisgICAgfQorCisgICAgVHlwZSYgdW5pZnlOb2RlKCkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX3R5cGUpOworICAgICAgICByZXR1cm4gbV90eXBlLT51bmlmeU5vZGUo
KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFN0
cmluZyBtX25hbWU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4gbV90eXBlOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiBtX3R5cGU7CiB9OwogCiB9CkBAIC03
Miw0ICs3OCw2IEBAIHByaXZhdGU6CiAKIH0KIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExT
TF9OQU1FRF9UWVBFKFR5cGVEZWZpbml0aW9uLCBpc1R5cGVEZWZpbml0aW9uKCkpCisKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVHlwZVJlZmVyZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uZTY4OWI0YTc3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcApAQCAtMCww
ICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworI2luY2x1ZGUgIldI
TFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK3N0ZDo6dW5pcXVlX3B0cjxUeXBl
UmVmZXJlbmNlPiBUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgTmFt
ZWRUeXBlJiByZXNvbHZlZFR5cGUpCit7CisgICAgVHlwZUFyZ3VtZW50cyB0eXBlQXJndW1lbnRz
OworICAgIGlmIChpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHJlc29sdmVkVHlwZSkpCisgICAg
ICAgIHR5cGVBcmd1bWVudHMgPSBBU1Q6OmNsb25lKGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4ocmVzb2x2ZWRUeXBlKS50eXBlQXJndW1lbnRzKCkpOworICAgIGF1dG8gcmVzdWx0ID0g
c3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKG9yaWdpbiksIFN0cmluZyhy
ZXNvbHZlZFR5cGUubmFtZSgpKSwgV1RGTW92ZSh0eXBlQXJndW1lbnRzKSk7CisgICAgcmVzdWx0
LT5zZXRSZXNvbHZlZFR5cGUocmVzb2x2ZWRUeXBlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAppbmRleCA0OTQ0
MWQ4YjVjNy4uMDI4NDJmNmY5ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKQEAgLTI4LDgg
KzI4LDggQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgot
I2luY2x1ZGUgIldITFNMVHlwZS5oIgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisj
aW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMCArMzgsMTIgQEAgbmFtZXNwYWNl
IFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFR5cGVSZWZlcmVuY2UgOiBwdWJs
aWMgVHlwZSB7CitjbGFzcyBOYW1lZFR5cGU7CisKK2NsYXNzIFR5cGVSZWZlcmVuY2UgOiBwdWJs
aWMgVW5uYW1lZFR5cGUgewogcHVibGljOgogICAgIFR5cGVSZWZlcmVuY2UoTGV4ZXI6OlRva2Vu
JiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1lLCBUeXBlQXJndW1lbnRzJiYgdHlwZUFyZ3VtZW50cykK
LSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgIDogVW5uYW1lZFR5
cGUoV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQogICAg
ICAgICAsIG1fdHlwZUFyZ3VtZW50cyhXVEZNb3ZlKHR5cGVBcmd1bWVudHMpKQogICAgIHsKQEAg
LTUyLDI0ICs1NCw0NSBAQCBwdWJsaWM6CiAgICAgVHlwZVJlZmVyZW5jZShjb25zdCBUeXBlUmVm
ZXJlbmNlJikgPSBkZWxldGU7CiAgICAgVHlwZVJlZmVyZW5jZShUeXBlUmVmZXJlbmNlJiYpID0g
ZGVmYXVsdDsKIAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8VHlwZVJlZmVyZW5jZT4gd3Jh
cChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBlKTsKKwogICAg
IGJvb2wgaXNUeXBlUmVmZXJlbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQog
CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgVHlwZUFyZ3VtZW50
cyYgdHlwZUFyZ3VtZW50cygpIHsgcmV0dXJuIG1fdHlwZUFyZ3VtZW50czsgfQorICAgIE5hbWVk
VHlwZSogcmVzb2x2ZWRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZFR5cGU7IH0KKwor
ICAgIGNvbnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBBU1NFUlQobV9yZXNvbHZlZFR5cGUpOworICAgICAgICByZXR1cm4gbV9yZXNvbHZlZFR5cGUt
PnVuaWZ5Tm9kZSgpOworICAgIH0KKworICAgIFR5cGUmIHVuaWZ5Tm9kZSgpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBBU1NFUlQobV9yZXNvbHZlZFR5cGUpOworICAgICAgICByZXR1cm4gbV9y
ZXNvbHZlZFR5cGUtPnVuaWZ5Tm9kZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlc29s
dmVkVHlwZShOYW1lZFR5cGUmIHJlc29sdmVkVHlwZSkKKyAgICB7CisgICAgICAgIG1fcmVzb2x2
ZWRUeXBlID0gJnJlc29sdmVkVHlwZTsKKyAgICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZVJlZmVyZW5jZT4gY2xvbmVUeXBlUmVmZXJlbmNlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPFR5cGVSZWZlcmVuY2U+KExleGVyOjpUb2tlbihtX29yaWdp
biksIFN0cmluZyhtX25hbWUpLCBBU1Q6OmNsb25lKG1fdHlwZUFyZ3VtZW50cykpOworICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihMZXhlcjo6VG9rZW4ob3Jp
Z2luKCkpLCBTdHJpbmcobV9uYW1lKSwgQVNUOjpjbG9uZShtX3R5cGVBcmd1bWVudHMpKTsKICAg
ICB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGNsb25lVHlwZVJlZmVyZW5jZSgpOwogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3RyaW5nIG1fbmFtZTsKICAg
ICBUeXBlQXJndW1lbnRzIG1fdHlwZUFyZ3VtZW50czsKKyAgICBOYW1lZFR5cGUqIG1fcmVzb2x2
ZWRUeXBlIHsgbnVsbHB0ciB9OwogfTsKIAogfQpAQCAtNzgsNiArMTAxLDYgQEAgcHJpdmF0ZToK
IAogfQogCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZUEUoVHlwZVJlZmVyZW5jZSwg
aXNUeXBlUmVmZXJlbmNlKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURf
VFlQRShUeXBlUmVmZXJlbmNlLCBpc1R5cGVSZWZlcmVuY2UoKSkKIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVk
VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5u
YW1lZFR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTllMzI5
ZjEyMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTExl
eGVyLmgiCisjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIFVubmFtZWRUeXBl
IDogcHVibGljIFR5cGUgeworcHVibGljOgorICAgIFVubmFtZWRUeXBlKExleGVyOjpUb2tlbiYm
IG9yaWdpbikKKyAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgflVubmFtZWRUeXBlKCkgPSBkZWZhdWx0OworCisgICAgVW5uYW1l
ZFR5cGUoY29uc3QgVW5uYW1lZFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBVbm5hbWVkVHlwZShVbm5h
bWVkVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzVW5uYW1lZFR5cGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzVHlwZVJlZmVyZW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUG9pbnRlclR5
cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5UmVm
ZXJlbmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlz
QXJyYXlUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNS
ZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgY29u
c3QgVHlwZSYgdW5pZnlOb2RlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB2aXJ0dWFs
IFR5cGUmIHVuaWZ5Tm9kZSgpIHsgcmV0dXJuICp0aGlzOyB9CisKKyAgICB2aXJ0dWFsIHN0ZDo6
dW5pcXVlX3B0cjxVbm5hbWVkVHlwZT4gY2xvbmUoKSBjb25zdCA9IDA7CisKKyAgICBjb25zdCBM
ZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisKK3ByaXZh
dGU6CisgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOworfTsKKworfQorCit9CisKK30KKworI2Rl
ZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShUb1ZhbHVlVHlw
ZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3Jl
OjpXSExTTDo6QVNUOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUo
Y29uc3QgV2ViQ29yZTo6V0hMU0w6OkFTVDo6VW5uYW1lZFR5cGUmIHR5cGUpIHsgcmV0dXJuIHR5
cGUucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19XSExTTF9UWVBFKFVubmFtZWRUeXBlLCBpc1VubmFtZWRUeXBlKCkp
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjFjYTk2MmY3NzQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
SExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaCIKKworI2luY2x1ZGUgIldITFNMTmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisK
K2ludDY0X3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbDo6dmFsdWVGb3JTZWxlY3RlZFR5cGUoKSBj
b25zdAoreworICAgIEFTU0VSVChtX3R5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGF1dG8mIHR5
cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxUeXBlUmVmZXJlbmNlPigqbV90eXBlLnJlc29sdmVkVHlw
ZSgpKTsKKyAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0
byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9u
PigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgcmV0dXJuIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5mb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIoKShtX3ZhbHVlKTsKK30K
KworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJM
aXRlcmFsLmgKaW5kZXggNThkNmUyMzA3NWUuLjFhNmMxZTNlODgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJM
aXRlcmFsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRl
ICJXSExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAi
V0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTM5LDIxICs0MCwzNyBAQCBuYW1lc3BhY2UgQVNUIHsKIGNsYXNzIFVuc2lnbmVkSW50
ZWdlckxpdGVyYWwgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CiBwdWJsaWM6CiAgICAgVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIHVuc2lnbmVkIHZhbHVlKQotICAg
ICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICA6IEV4cHJlc3Npb24o
TGV4ZXI6OlRva2VuKG9yaWdpbikpCisgICAgICAgICwgbV90eXBlKFdURk1vdmUob3JpZ2luKSwg
dmFsdWUpCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQogCiAgICAgdmly
dHVhbCB+VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCgpID0gZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0
IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwoY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpID0g
ZGVmYXVsdDsKKyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsKGNvbnN0IFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwmKSA9IGRlbGV0ZTsKICAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsKFVuc2lnbmVk
SW50ZWdlckxpdGVyYWwmJikgPSBkZWZhdWx0OwogCisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCYgb3BlcmF0b3I9KGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKSA9IGRlbGV0ZTsKKyAg
ICBVbnNpZ25lZEludGVnZXJMaXRlcmFsJiBvcGVyYXRvcj0oVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCYmKSA9IGRlZmF1bHQ7CisKKyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYgdHlwZSgp
IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHVuc2lnbmVkIHZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZTsgfQogCiAgICAgYm9vbCBpc1Vuc2lnbmVkSW50ZWdlckxpdGVyYWwoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsIGNs
b25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwgcmVzdWx0
KExleGVyOjpUb2tlbihvcmlnaW4oKSksIG1fdmFsdWUpOworICAgICAgICBpZiAocmVzdWx0Lm1f
dHlwZS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUucmVzb2x2ZShy
ZXN1bHQubV90eXBlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlRm9yU2VsZWN0ZWRUeXBlKCkgY29uc3Q7
CisKIHByaXZhdGU6CisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUgbV90eXBlOwogICAg
IHVuc2lnbmVkIG1fdmFsdWU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjkzMzYzMjRlODZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCkBA
IC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUu
aCIKKworI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitVbnNpZ25lZEludGVn
ZXJMaXRlcmFsVHlwZTo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCB1bnNpZ25lZCB2YWx1ZSkKKyAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgLCBtX3By
ZWZlcnJlZFR5cGUoc3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKG9yaWdp
biksIFN0cmluZygidWludCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBUeXBlQXJn
dW1lbnRzKCkpKQoreworfQorCitVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZTo6flVuc2lnbmVk
SW50ZWdlckxpdGVyYWxUeXBlKCkgPSBkZWZhdWx0OworCitib29sIFVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlOjpjYW5SZXNvbHZlKGNvbnN0IFR5cGUmIHR5cGUpIGNvbnN0Cit7CisgICAgaWYg
KCFpczxOYW1lZFR5cGU+KHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYg
bmFtZWRUeXBlID0gZG93bmNhc3Q8TmFtZWRUeXBlPih0eXBlKTsKKyAgICBpZiAoIWlzPE5hdGl2
ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4obmFtZWRUeXBlKTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc0ludCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24u
aXNTaWduZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLmNhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcigpKG1fdmFsdWUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIFVuc2lnbmVk
SW50ZWdlckxpdGVyYWxUeXBlOjpjb252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYgdW5u
YW1lZFR5cGUpIGNvbnN0Cit7CisgICAgaWYgKG1hdGNoZXModW5uYW1lZFR5cGUsICptX3ByZWZl
cnJlZFR5cGUpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsKK30KKworfQorCit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bFR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDk1NTQ2Y2Fk
YTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oCkBAIC0wLDAgKzEsNzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJXSExTTFJlc29sdmFibGVUeXBlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNw
YWNlIEFTVCB7CisKK2NsYXNzIFR5cGVSZWZlcmVuY2U7CisKK2NsYXNzIFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWxUeXBlIDogcHVibGljIFJlc29sdmFibGVUeXBlIHsKK3B1YmxpYzoKKyAgICBVbnNp
Z25lZEludGVnZXJMaXRlcmFsVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIHVuc2lnbmVkIHZh
bHVlKTsKKworICAgIHZpcnR1YWwgflVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKCk7CisKKyAg
ICBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZShjb25zdCBVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZSYpID0gZGVsZXRlOworICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKFVuc2lnbmVk
SW50ZWdlckxpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIFVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlJiBvcGVyYXRvcj0oY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmKSA9
IGRlbGV0ZTsKKyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KFVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNVbnNpZ25l
ZEludGVnZXJMaXRlcmFsVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIFR5cGVSZWZlcmVuY2UmIHByZWZlcnJlZFR5cGUoKSB7IHJldHVybiAqbV9wcmVmZXJyZWRU
eXBlOyB9CisKKyAgICBib29sIGNhblJlc29sdmUoY29uc3QgVHlwZSYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0KGNvbnN0IFVubmFtZWRUeXBlJikgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV92YWx1ZTsKKyAgICAvLyBUaGlz
IGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVu
CisgICAgLy8gQ29uc3RhbnRFeHByZXNzaW9uIC0+IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVu
Y2UgLT4gVHlwZUFyZ3VtZW50cyAtPiBDb25zdGFudEV4cHJlc3Npb24KKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBlOworfTsKKworfQorCit9CisKK30K
KworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9SRVNPTFZBQkxFX1RZUEUoVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbFR5cGUsIGlzVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoKSkKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVmFsdWUuaAppbmRleCA2ZTBlYTkxZmMxZC4uYWYyOWM4MTE4ODcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhbHVlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFsdWUuaApAQCAt
NDYsNiArNDYsOSBAQCBwdWJsaWM6CiAgICAgZXhwbGljaXQgVmFsdWUoY29uc3QgVmFsdWUmKSA9
IGRlZmF1bHQ7CiAgICAgVmFsdWUoVmFsdWUmJikgPSBkZWZhdWx0OwogCisgICAgVmFsdWUmIG9w
ZXJhdG9yPShjb25zdCBWYWx1ZSYpID0gZGVmYXVsdDsKKyAgICBWYWx1ZSYgb3BlcmF0b3I9KFZh
bHVlJiYpID0gZGVmYXVsdDsKKwogcHJpdmF0ZToKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxl
RGVjbGFyYXRpb24uaAppbmRleCBmZjAzNjgxOTNiZC4uN2Y0YTM1YjYwYjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVj
bGFyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIEFT
VCB7CiAKIGNsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb24gOiBwdWJsaWMgVmFsdWUgewogcHVibGlj
OgotICAgIFZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBRdWFsaWZp
ZXJzJiYgcXVhbGlmaWVycywgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJp
bmcmJiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlxdWVfcHRy
PEV4cHJlc3Npb24+JiYgaW5pdGlhbGl6ZXIpCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbihMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpVbm5hbWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBPcHRpb25hbDxTZW1h
bnRpYz4mJiBzZW1hbnRpYywgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5pdGlhbGl6
ZXIpCiAgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fcXVh
bGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQogICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5
cGUpKQpAQCAtNTksMjEgKzU5LDI0IEBAIHB1YmxpYzoKICAgICBWYXJpYWJsZURlY2xhcmF0aW9u
KGNvbnN0IFZhcmlhYmxlRGVjbGFyYXRpb24mKSA9IGRlbGV0ZTsKICAgICBWYXJpYWJsZURlY2xh
cmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OwogCi0gICAgTGV4ZXI6OlRv
a2VuIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgY29uc3QgTGV4ZXI6
OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIFN0cmluZyYg
bmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQogCi0gICAgVHlwZSYgdHlwZSgpIHsgcmV0dXJuICpt
X3R5cGU7IH0KKyAgICBVbm5hbWVkVHlwZSYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX3R5cGU7
IH0KICAgICBPcHRpb25hbDxTZW1hbnRpYz4mIHNlbWFudGljKCkgeyByZXR1cm4gbV9zZW1hbnRp
YzsgfQogICAgIEV4cHJlc3Npb24qIGluaXRpYWxpemVyKCkgeyByZXR1cm4gbV9pbml0aWFsaXpl
ci5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKICAgICBR
dWFsaWZpZXJzIG1fcXVhbGlmaWVyczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiBt
X3R5cGU7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAg
ICBTdHJpbmcgbV9uYW1lOwogICAgIE9wdGlvbmFsPFNlbWFudGljPiBtX3NlbWFudGljOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2luaXRpYWxpemVyOwogfTsKIAordXNpbmcg
VmFyaWFibGVEZWNsYXJhdGlvbnMgPSBWZWN0b3I8VmFyaWFibGVEZWNsYXJhdGlvbj47CisKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMVmFyaWFibGVSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgKaW5kZXggMmFlODI4ZDUyOTUuLmUz
OWVjZjVjNTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgKQEAgLTI3LDcgKzI3
LDcgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTEFub255bW91c1Zh
cmlhYmxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24u
aCIKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgi
CiAjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCkBAIC01NSwxOSArNTUsMjEg
QEAgcHVibGljOgogICAgIHN0YXRpYyBWYXJpYWJsZVJlZmVyZW5jZSB3cmFwKFZhcmlhYmxlRGVj
bGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgewogICAgICAgICBWYXJpYWJsZVJl
ZmVyZW5jZSByZXN1bHQoTGV4ZXI6OlRva2VuKHZhcmlhYmxlRGVjbGFyYXRpb24ub3JpZ2luKCkp
KTsKLSAgICAgICAgcmVzdWx0Lm1fdmFyaWFibGUgPSB7ICZ2YXJpYWJsZURlY2xhcmF0aW9uIH07
CisgICAgICAgIHJlc3VsdC5tX3ZhcmlhYmxlID0gJnZhcmlhYmxlRGVjbGFyYXRpb247CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgc3RhdGljIFZhcmlhYmxlUmVmZXJlbmNl
IHdyYXAoQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYgYW5vbnltb3VzVmFyaWFibGVEZWNs
YXJhdGlvbikKKyAgICBib29sIGlzVmFyaWFibGVSZWZlcmVuY2UoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CisKKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0K
KworICAgIFZhcmlhYmxlRGVjbGFyYXRpb24qIHZhcmlhYmxlKCkgeyByZXR1cm4gbV92YXJpYWJs
ZTsgfQorCisgICAgdm9pZCBzZXRWYXJpYWJsZShWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJs
ZURlY2xhcmF0aW9uKQogICAgIHsKLSAgICAgICAgVmFyaWFibGVSZWZlcmVuY2UgcmVzdWx0KExl
eGVyOjpUb2tlbihhbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLm9yaWdpbigpKSk7Ci0gICAg
ICAgIHJlc3VsdC5tX3ZhcmlhYmxlID0geyAmYW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiB9
OwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBtX3ZhcmlhYmxlID0gJnZhcmlhYmxl
RGVjbGFyYXRpb247CiAgICAgfQogCi0gICAgYm9vbCBpc1ZhcmlhYmxlUmVmZXJlbmNlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCiBwcml2YXRlOgogICAgIFZhcmlhYmxlUmVm
ZXJlbmNlKExleGVyOjpUb2tlbiYmIG9yaWdpbikKICAgICAgICAgOiBFeHByZXNzaW9uKFdURk1v
dmUob3JpZ2luKSkKQEAgLTc1LDcgKzc3LDcgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBTdHJp
bmcgbV9uYW1lOwotICAgIE9wdGlvbmFsPFZhcmlhbnQ8VmFyaWFibGVEZWNsYXJhdGlvbiosIEFu
b255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24qPj4gbV92YXJpYWJsZTsKKyAgICBWYXJpYWJsZURl
Y2xhcmF0aW9uKiBtX3ZhcmlhYmxlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRl
RnVuY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmQ1
ZWYzNzU2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDEyMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgorCisjaW5jbHVkZSAi
V0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgor
I2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5j
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2Jvb2wg
Y2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+PiBm
dW5jdGlvbnM7CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1
bmN0aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgZnVuY3Rpb25zLmFwcGVuZCgqZnVuY3Rpb25E
ZWZpbml0aW9uKTsKKyAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBw
cm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCisgICAgICAgIGZ1bmN0aW9ucy5h
cHBlbmQoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworCisgICAgc3RkOjpzb3J0KGZ1bmN0
aW9ucy5iZWdpbigpLCBmdW5jdGlvbnMuZW5kKCksIFtdKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbiYgYSwgY29uc3QgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBiKSAtPiBib29sIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0ZDo6bWluKGEubmFtZSgpLmxlbmd0
aCgpLCBiLm5hbWUoKS5sZW5ndGgoKSk7ICsraSkgeworICAgICAgICAgICAgaWYgKGEubmFtZSgp
W2ldIDwgYi5uYW1lKClbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBpZiAoYS5uYW1lKClbaV0gPiBiLm5hbWUoKVtpXSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGEubmFtZSgpLmxlbmd0aCgpIDwg
Yi5uYW1lKCkubGVuZ3RoKCk7CisgICAgfSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
dW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBq
IDwgZnVuY3Rpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25zW2ld
LmdldCgpLm5hbWUoKSAhPSBmdW5jdGlvbnNbal0uZ2V0KCkubmFtZSgpKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbj4oZnVuY3Rpb25zW2ldLmdldCgpKSAmJiBpczxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24+KGZ1bmN0aW9uc1tqXS5nZXQoKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0g
ZnVuY3Rpb25zW2pdLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLmlzQ2FzdCgpKSB7
CisgICAgICAgICAgICAgICAgYm9vbCBzYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAo
IW1hdGNoZXMoZnVuY3Rpb25zW2ldLmdldCgpLnR5cGUoKSwgZnVuY3Rpb25zW2pdLmdldCgpLnR5
cGUoKSkpCisgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBmdW5j
dGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKTsgKytrKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVtr
XS50eXBlKCksIGZ1bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgpKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoc2Ft
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBib29sIHNhbWUgPSB0cnVlOworICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGsgPSAwOyBrIDwgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXpl
KCk7ICsraykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25zW2ld
LmdldCgpLnBhcmFtZXRlcnMoKVtrXS50eXBlKCksIGZ1bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0
ZXJzKClba10udHlwZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2FtZSA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNhbWUpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yJltd
IiAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCisgICAgICAg
ICAgICAmJiBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBh
cmFtZXRlcnMoKVswXS50eXBlKCkpKSB7CisgICAgICAgICAgICBhdXRvJiB0eXBlID0gZnVuY3Rp
b25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCk7CisgICAgICAgICAgICBpZiAoaXM8
QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiBy
ZXNvbHZlZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpLnJlc29sdmVk
VHlwZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbj4oKnJlc29sdmVkVHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8m
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uPigqcmVzb2x2ZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXRpdmVU
eXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1aW50IikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgp
Lm5hbWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIiAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1l
dGVycygpLnNpemUoKSA9PSAxCisgICAgICAgICAgICAmJiAoaXM8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKQorICAgICAg
ICAgICAgfHwgaXM8QVNUOjpBcnJheVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVsc2Ug
aWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iCisgICAgICAgICAg
ICAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCisgICAgICAg
ICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0
ZXJzKClbMF0udHlwZSgpKQorICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihm
dW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLnR5cGUoKSkKKyAgICAgICAgICAgICYm
IG1hdGNoZXMoZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCksIGZ1bmN0
aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hl
Y2tEdXBsaWNhdGVGdW5jdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uN2VjZWU3ODJjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25z
LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2Jvb2wgY2hlY2tEdXBsaWNhdGVGdW5jdGlv
bnMoY29uc3QgUHJvZ3JhbSYpOworCit9CisKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NDgxMjBjNWU3NQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5j
cHAKQEAgLTAsMCArMSwxNDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTENoZWNrZXIuaCIKKworI2luY2x1
ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUu
aCIKKyNpbmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xDYWxsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29tbWFFeHByZXNzaW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTERv
V2hpbGVMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xEb3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xGb3JMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCIK
KyNpbmNsdWRlICJXSExTTElmU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVz
LmgiCisjaW5jbHVkZSAiV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNM
TG9naWNhbE5vdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oIgor
I2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIK
KyNpbmNsdWRlICJXSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJX
SExTTFJlc29sdmFibGVUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBs
LmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZpbmdUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXR1
cm4uaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNM
VGVybmFyeUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRl
ICJXSExTTFdoaWxlTG9vcC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFBPRENoZWNrZXIgOiBwdWJsaWMgVmlz
aXRvciB7CitwdWJsaWM6CisgICAgUE9EQ2hlY2tlcigpID0gZGVmYXVsdDsKKworICAgIHZpcnR1
YWwgflBPRENoZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBWaXNpdG9yOjp2aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0
aW9uLmlzTnVtYmVyKCkKKyAgICAgICAgICAgICYmICFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNW
ZWN0b3IoKQorICAgICAgICAgICAgJiYgIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc01hdHJpeCgp
KQorICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pIG92ZXJy
aWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdCh0eXBlRGVmaW5pdGlvbik7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoYXJyYXlUeXBlKTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
Jikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgfQorCisgICAgdm9p
ZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCgqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAg
fQorfTsKKworc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4g
cmVzb2x2ZVdpdGhPcGVyYXRvckFuZGVySW5kZXhlcihBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxs
RXhwcmVzc2lvbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGZpcnN0QXJndW1lbnQsIGNvbnN0
IEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxz
ZTsKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGF1dG8gcmV0dXJuVHlwZSA9IHN0
ZDo6bWFrZV91bmlxdWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNz
aW9uLm9yaWdpbigpKSwgZmlyc3RBcmd1bWVudC5hZGRyZXNzU3BhY2UoKSwgZmlyc3RBcmd1bWVu
dC5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMg
cGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJz
KCksIGZpcnN0QXJndW1lbnQuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0
cikpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhl
cjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNU
OjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4o
KSksIGludHJpbnNpY3MudWludFR5cGUoKSksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxw
dHIpKTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBB
U1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwg
U3RyaW5nKCJvcGVyYXRvciZbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQp
OworfQorCitzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiBy
ZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNz
aW9uLCBBU1Q6OlVubmFtZWRUeXBlJiBmaXJzdEFyZ3VtZW50LCBjb25zdCBJbnRyaW5zaWNzJiBp
bnRyaW5zaWNzKQoreworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisgICAgYm9vbCBp
c09wZXJhdG9yID0gdHJ1ZTsKKyAgICBhdXRvIHJldHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVu
Y2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2lj
cy51aW50VHlwZSgpKTsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7
CisgICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpU
b2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBmaXJzdEFy
Z3VtZW50LmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpKTsKKyAgICBy
ZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0
ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVy
YXRvci5sZW5ndGgiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJh
bWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKK30KKwor
c3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZVdp
dGhSZWZlcmVuY2VDb21wYXJhdG9yKEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9u
LCBSZXNvbHZpbmdUeXBlJiBmaXJzdEFyZ3VtZW50LCBSZXNvbHZpbmdUeXBlJiBzZWNvbmRBcmd1
bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3sKKyAgICBib29sIGlzUmVzdHJp
Y3RlZCA9IGZhbHNlOworICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CisgICAgYXV0byByZXR1
cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihjYWxsRXhwcmVz
c2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MuYm9vbFR5cGUoKSk7CisgICAgYXV0byBhcmd1bWVu
dFR5cGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oc3RkOjp1bmlxdWVfcHRyPEFT
VDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5u
YW1lZFR5cGU+IHsKKyAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLT5jbG9uZSgpOworICAgIH0s
IFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JikgLT4gc3RkOjp1bmlxdWVfcHRyPEFT
VDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlz
aXRvcihbXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAt
PiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICAgICAgcmV0dXJu
IHVubmFtZWRUeXBlLT5jbG9uZSgpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlPiYpIC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAg
ICAgICAgICAvLyBXZSBlbmNvdW50ZXJlZCAibnVsbCA9PSBudWxsIi4KKyAgICAgICAgICAgIC8v
IFRoZSB0eXBlIGlzbid0IG9ic2VydmFibGUsIHNvIHdlIGNhbiBwaWNrIHdoYXRldmVyIHdlIHdh
bnQuCisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYmUgZ2VuZXJhbGl6
ZWQsIHVzaW5nIHRoZSAicHJlZmVycmVkIHR5cGUiIGluZnJhc3RydWN0dXJlIHVzZWQgYnkgZ2Vu
ZXJpYyBsaXRlcmFscworICAgICAgICAgICAgcmV0dXJuIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3Jh
cChMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLmludFR5
cGUoKSk7CisgICAgICAgIH0pLCBzZWNvbmRBcmd1bWVudCk7CisgICAgfSksIGZpcnN0QXJndW1l
bnQpOworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICBwYXJh
bWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGFyZ3VtZW50VHlwZS0+Y2xv
bmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cikpOworICAgIHBhcmFtZXRlcnMu
YXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgV1RGTW92ZShhcmd1bWVudFR5cGUpLCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKSk7CisgICAgcmV0dXJuIEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2Vu
KGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51
bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3I9PSIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQs
IGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworfQorCitzdGF0aWMgT3B0aW9uYWw8QVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiByZXNvbHZlQnlJbnN0YW50aWF0aW9uKEFTVDo6Q2Fs
bEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uLCBjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIHR5cGVzLCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5z
aWNzKQoreworICAgIGlmIChjYWxsRXhwcmVzc2lvbi5uYW1lKCkgPT0gIm9wZXJhdG9yJltdIiAm
JiB0eXBlcy5zaXplKCkgPT0gMikgeworICAgICAgICBhdXRvKiBmaXJzdEFyZ3VtZW50QXJyYXlS
ZWYgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oc3RkOjp1bmlxdWVfcHRyPEFTVDo6
VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUqIHsK
KyAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oKnVubmFtZWRUeXBl
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPigqdW5uYW1lZFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IH0sIFtdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBBU1Q6OkFycmF5UmVmZXJl
bmNlVHlwZSogeworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0pLCB0eXBl
c1swXS5nZXQoKSk7CisgICAgICAgIGJvb2wgc2Vjb25kQXJndW1lbnRJc1VpbnQgPSBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBl
PiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoKnVu
bmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAgICAgICB9LCBbJl0oUmVmPFJl
c29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wg
eworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxl
VHlwZSgpLmNhblJlc29sdmUoaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICAgICAgfSksIHR5
cGVzWzFdLmdldCgpKTsKKyAgICAgICAgaWYgKGZpcnN0QXJndW1lbnRBcnJheVJlZiAmJiBzZWNv
bmRBcmd1bWVudElzVWludCkKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZlV2l0aE9wZXJhdG9y
QW5kZXJJbmRleGVyKGNhbGxFeHByZXNzaW9uLCAqZmlyc3RBcmd1bWVudEFycmF5UmVmLCBpbnRy
aW5zaWNzKTsKKyAgICB9IGVsc2UgaWYgKGNhbGxFeHByZXNzaW9uLm5hbWUoKSA9PSAib3BlcmF0
b3IubGVuZ3RoIiAmJiB0eXBlcy5zaXplKCkgPT0gMSkgeworICAgICAgICBhdXRvKiBmaXJzdEFy
Z3VtZW50UmVmZXJlbmNlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5
cGUqIHsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oKnVubmFt
ZWRUeXBlKSB8fCBpczxBU1Q6OkFycmF5VHlwZT4oKnVubmFtZWRUeXBlKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdW5uYW1lZFR5cGUuZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYpIC0+IEFTVDo6
VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9KSwg
dHlwZXNbMF0uZ2V0KCkpOworICAgICAgICBpZiAoZmlyc3RBcmd1bWVudFJlZmVyZW5jZSkKKyAg
ICAgICAgICAgIHJldHVybiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKGNhbGxFeHByZXNzaW9u
LCAqZmlyc3RBcmd1bWVudFJlZmVyZW5jZSwgaW50cmluc2ljcyk7CisgICAgfSBlbHNlIGlmIChj
YWxsRXhwcmVzc2lvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iICYmIHR5cGVzLnNpemUoKSA9PSAy
KSB7CisgICAgICAgIGF1dG8gaXNBY2NlcHRhYmxlID0gW10oUmVzb2x2aW5nVHlwZSYgcmVzb2x2
aW5nVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFtdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5
cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBpczxBU1Q6OlJlZmVyZW5jZVR5
cGU+KCp1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICB9LCBbXShSZWY8UmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAgICAgICB9KSwgcmVzb2x2aW5nVHlwZSk7
CisgICAgICAgIH07CisgICAgICAgIGlmIChpc0FjY2VwdGFibGUodHlwZXNbMF0uZ2V0KCkpICYm
IGlzQWNjZXB0YWJsZSh0eXBlc1sxXS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gcmVzb2x2
ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKGNhbGxFeHByZXNzaW9uLCB0eXBlc1swXS5nZXQoKSwg
dHlwZXNbMV0uZ2V0KCksIGludHJpbnNpY3MpOworICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworfQorCitjbGFzcyBDaGVja2VyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAg
IENoZWNrZXIoY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcywgUHJvZ3JhbSYgcHJvZ3JhbSkK
KyAgICAgICAgOiBtX2ludHJpbnNpY3MoaW50cmluc2ljcykKKyAgICAgICAgLCBtX3Byb2dyYW0o
cHJvZ3JhbSkKKyAgICB7CisgICAgfQorCisgICAgfkNoZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAg
ICB2b2lkIHZpc2l0KFByb2dyYW0mIHByb2dyYW0pIG92ZXJyaWRlCisgICAgeworICAgICAgICBm
b3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkKKyAg
ICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdHlwZURlZmluaXRpb24pOworICAgICAgICBm
b3IgKGF1dG8mIHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRp
b25zKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnN0cnVjdHVyZURlZmluaXRp
b24pOworICAgICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0u
ZW51bWVyYXRpb25EZWZpbml0aW9ucygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KCplbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpKQorICAgICAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworCisgICAgICAg
IGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRp
b25zKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZ1bmN0aW9uRGVmaW5pdGlv
bik7CisgICAgICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dy
YW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIGJvb2wgY2hlY2tTaGFkZXJUeXBlKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBm
dW5jdGlvbkRlZmluaXRpb24pCisgICAgeworICAgICAgICBzd2l0Y2ggKCpmdW5jdGlvbkRlZmlu
aXRpb24uZW50cnlQb2ludFR5cGUoKSkgeworICAgICAgICBjYXNlIEFTVDo6RnVuY3Rpb25EZWZp
bml0aW9uOjpFbnRyeVBvaW50VHlwZTo6VmVydGV4OgorICAgICAgICAgICAgcmV0dXJuICFtX3Zl
cnRleEVudHJ5UG9pbnRzLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKS5pc05ld0VudHJ5
OworICAgICAgICBjYXNlIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uOjpFbnRyeVBvaW50VHlwZTo6
RnJhZ21lbnQ6CisgICAgICAgICAgICByZXR1cm4gIW1fZnJhZ21lbnRFbnRyeVBvaW50cy5hZGQo
ZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkuaXNOZXdFbnRyeTsKKyAgICAgICAgY2FzZSBBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbjo6RW50cnlQb2ludFR5cGU6OkNvbXB1dGU6CisgICAgICAgICAg
ICByZXR1cm4gIW1fY29tcHV0ZUVudHJ5UG9pbnRzLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFt
ZSgpKS5pc05ld0VudHJ5OworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBjaGVja1NlbWFu
dGljcyhBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQorICAgIHsK
KyAgICAgICAgYXV0byBlbnRyeVBvaW50SXRlbXMgPSBnYXRoZXJFbnRyeVBvaW50SXRlbXMobV9p
bnRyaW5zaWNzLCBmdW5jdGlvbkRlZmluaXRpb24pOworICAgICAgICBpZiAoIWVudHJ5UG9pbnRJ
dGVtcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byBpbnB1dEl0ZW1z
ID0gV1RGTW92ZShlbnRyeVBvaW50SXRlbXMtPmlucHV0cyk7CisgICAgICAgIGF1dG8gb3V0cHV0
SXRlbXMgPSBXVEZNb3ZlKGVudHJ5UG9pbnRJdGVtcy0+b3V0cHV0cyk7CisKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byBjaGVja0R1cGxpY2F0ZVNlbWFudGljcyA9IFsmXShjb25zdCBWZWN0
b3I8RW50cnlQb2ludEl0ZW0+JiBpdGVtcykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IE1ha2UgdGhpcyBmYXN0ZXIgdGhhbiBPKG5eMikuCisgICAgICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBpdGVtcy5zaXplKCk7ICsraikgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zW2ldLnNlbWFudGljID09IGl0ZW1zW2pdLnNl
bWFudGljKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoIWNoZWNrRHVwbGljYXRl
U2VtYW50aWNzKGlucHV0SXRlbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmICghY2hlY2tEdXBsaWNhdGVTZW1hbnRpY3Mob3V0cHV0SXRlbXMpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8gY2hlY2tTZW1hbnRpY1R5cGVzID0gWyZdKGNvbnN0IFZlY3RvcjxFbnRyeVBv
aW50SXRlbT4mIGl0ZW1zKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGl0
ZW0gOiBpdGVtcykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGFjY2VwdGFibGUgPSBXVEY6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEFTVDo6QmFzZVNlbWFudGljJiBzZW1h
bnRpYykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VtYW50aWMu
aXNBY2NlcHRhYmxlVHlwZShpdGVtLnVubmFtZWRUeXBlLCBtX2ludHJpbnNpY3MpOworICAgICAg
ICAgICAgICAgICAgICB9KSwgaXRlbS5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghYWNjZXB0YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgaWYgKCFjaGVja1NlbWFudGljVHlwZXMoaW5wdXRJdGVtcykpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFjaGVja1NlbWFu
dGljVHlwZXMob3V0cHV0SXRlbXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gY2hlY2tTZW1hbnRpY0ZvclNo
YWRlclR5cGUgPSBbJl0oY29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMsIEFTVDo6
QmFzZVNlbWFudGljOjpTaGFkZXJJdGVtRGlyZWN0aW9uIGRpcmVjdGlvbikgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgYXV0byBhY2NlcHRhYmxlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShj
b25zdCBBU1Q6OkJhc2VTZW1hbnRpYyYgc2VtYW50aWMpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljLmlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJl
Y3Rpb24oZGlyZWN0aW9uLCBmdW5jdGlvbkRlZmluaXRpb24pOworICAgICAgICAgICAgICAgICAg
ICB9KSwgaXRlbS5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgICAgIGlmICghYWNjZXB0YWJs
ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworICAgICAg
ICAgICAgaWYgKCFjaGVja1NlbWFudGljRm9yU2hhZGVyVHlwZShpbnB1dEl0ZW1zLCBBU1Q6OkJh
c2VTZW1hbnRpYzo6U2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY0ZvclNoYWRlclR5
cGUob3V0cHV0SXRlbXMsIEFTVDo6QmFzZVNlbWFudGljOjpTaGFkZXJJdGVtRGlyZWN0aW9uOjpP
dXRwdXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGF1dG8gY2hlY2tQT0REYXRhID0gWyZdKGNvbnN0IFZlY3RvcjxF
bnRyeVBvaW50SXRlbT4mIGl0ZW1zKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1
dG8mIGl0ZW0gOiBpdGVtcykgeworICAgICAgICAgICAgICAgICAgICBQT0RDaGVja2VyIHBvZENo
ZWNrZXI7CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPihpdGVt
LnVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tF
cnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGl0ZW0udW5uYW1lZFR5cGUp
LmVsZW1lbnRUeXBlKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZT4oaXRlbS51bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4oaXRlbS51bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPihpdGVtLnVubmFtZWRUeXBlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRv
d25jYXN0PEFTVDo6QXJyYXlUeXBlPihpdGVtLnVubmFtZWRUeXBlKS50eXBlKCkpOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHBvZENoZWNrZXIuZXJyb3IoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKCFjaGVja1BP
RERhdGEoaW5wdXRJdGVtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgaWYgKCFjaGVja1BPRERhdGEob3V0cHV0SXRlbXMpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJsb2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCisgICAgeworICAgICAgICBlbnVtIGNsYXNzIENoZWNr
S2luZCB7CisgICAgICAgICAgICBJbmRleCwKKyAgICAgICAgICAgIERvdAorICAgICAgICB9Owor
CisgICAgICAgIGF1dG8gY2hlY2tHZXR0ZXIgPSBbJl0oQ2hlY2tLaW5kIGtpbmQpIC0+IGJvb2wg
eworICAgICAgICAgICAgc2l6ZV90IG51bUV4cGVjdGVkUGFyYW1ldGVycyA9IGtpbmQgPT0gQ2hl
Y2tLaW5kOjpJbmRleCA/IDIgOiAxOworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlv
bi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBmdW5j
dGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAg
ICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlm
eU5vZGUpOworICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVk
VHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAgIGF1dG8gY2hl
Y2tTZXR0ZXIgPSBbJl0oQ2hlY2tLaW5kIGtpbmQpIC0+IGJvb2wgeworICAgICAgICAgICAgc2l6
ZV90IG51bUV4cGVjdGVkUGFyYW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCA/IDMg
OiAyOworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6
ZSgpICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50VW5pZnlOb2RlID0gZnVuY3Rpb25E
ZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkudW5pZnlOb2RlKCk7CisgICAgICAgICAg
ICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5
cGU+KGZpcnN0QXJndW1lbnRVbmlmeU5vZGUpOworICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6
OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbkRl
ZmluaXRpb24udHlwZSgpLCBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUo
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byYgdmFs
dWVUeXBlID0gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtudW1FeHBlY3RlZFBhcmFt
ZXRlcnMgLSAxXS50eXBlKCk7CisgICAgICAgICAgICBhdXRvIGdldHRlck5hbWUgPSBmdW5jdGlv
bkRlZmluaXRpb24ubmFtZSgpLnN1YnN0cmluZygwLCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgp
Lmxlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICBhdXRvKiBnZXR0ZXJGdW5jcyA9IG1fcHJvZ3Jh
bS5uYW1lQ29udGV4dCgpLmdldEZ1bmN0aW9ucyhnZXR0ZXJOYW1lKTsKKyAgICAgICAgICAgIGlm
ICghZ2V0dGVyRnVuY3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgVmVjdG9yPFJlc29sdmluZ1R5cGU+IGFyZ3VtZW50VHlwZXM7CisgICAgICAgICAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gYXJndW1lbnRUeXBlUmVm
ZXJlbmNlczsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRXhwZWN0ZWRQ
YXJhbWV0ZXJzIC0gMTsgKytpKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5k
KGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpLmNsb25lKCkpOworICAg
ICAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudFR5cGUgOiBhcmd1bWVudFR5cGVzKQorICAgICAg
ICAgICAgICAgIGFyZ3VtZW50VHlwZVJlZmVyZW5jZXMuYXBwZW5kKGFyZ3VtZW50VHlwZSk7Cisg
ICAgICAgICAgICBPcHRpb25hbDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBl
Pj4gY2FzdFJldHVyblR5cGUgPSBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBhdXRvKiBvdmVy
bG9hZCA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbCgqZ2V0dGVyRnVuY3MsIGFyZ3VtZW50
VHlwZVJlZmVyZW5jZXMsIGNhc3RSZXR1cm5UeXBlKTsKKyAgICAgICAgICAgIGlmICghb3Zlcmxv
YWQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byYgcmVz
dWx0VHlwZSA9IG92ZXJsb2FkLT50eXBlKCk7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMocmVz
dWx0VHlwZSwgdmFsdWVUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGNoZWNrQW5k
ZXIgPSBbJl0oQ2hlY2tLaW5kIGtpbmQpIC0+IGJvb2wgeworICAgICAgICAgICAgc2l6ZV90IG51
bUV4cGVjdGVkUGFyYW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCA/IDIgOiAxOwor
ICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9
IG51bUV4cGVjdGVkUGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gZnVuY3Rpb25E
ZWZpbml0aW9uLnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzPEFT
VDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6
VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlBv
aW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvJiB1
bmlmeU5vZGUgPSBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKS51bmlm
eU5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5
Tm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9k
ZSk7CisgICAgICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlw
ZSkgJiYgIWlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKCFmdW5j
dGlvbkRlZmluaXRpb24uaXNPcGVyYXRvcigpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24uaXNDYXN0KCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yKysiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVy
YXRvci0tIikgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpICE9IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgp
LCBmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVu
Y3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IrIgorICAgICAgICAgICAgfHwgZnVu
Y3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ItIikgeworICAgICAgICAgICAgaWYg
KGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IDEKKyAgICAgICAgICAg
ICAgICAmJiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSAyKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRv
cioiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRv
ci8iCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRv
ciUiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRv
ciYiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRv
cnwiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRv
cl4iCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRv
cjw8IgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3ByZWF0
b3I+PiIpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygp
LnNpemUoKSAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24u
bmFtZSgpID09ICJvcGVyYXRvcn4iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVu
Y3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I9PSIKKyAgICAgICAgICAgIHx8IGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPCIKKyAgICAgICAgICAgIHx8IGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPD0iCisgICAgICAgICAgICB8fCBm
dW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcj4iCisgICAgICAgICAgICB8fCBm
dW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcj49IikgeworICAgICAgICAgICAg
aWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IDIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9u
RGVmaW5pdGlvbi50eXBlKCksIG1faW50cmluc2ljcy5ib29sVHlwZSgpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXSIpIHsK
KyAgICAgICAgICAgIGlmICghY2hlY2tHZXR0ZXIoQ2hlY2tLaW5kOjpJbmRleCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW109
IikgeworICAgICAgICAgICAgaWYgKCFjaGVja1NldHRlcihDaGVja0tpbmQ6OkluZGV4KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0
b3ImW10iKSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrQW5kZXIoQ2hlY2tLaW5kOjpJbmRleCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkuc3RhcnRz
V2l0aCgib3BlcmF0b3IuIikpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24u
bmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrU2V0dGVy
KENoZWNrS2luZDo6RG90KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrR2V0dGVyKENoZWNr
S2luZDo6RG90KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgib3BlcmF0b3ImLiIpKSB7CisgICAg
ICAgICAgICBpZiAoIWNoZWNrQW5kZXIoQ2hlY2tLaW5kOjpEb3QpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25E
ZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICAgICAgICAgIGlm
ICghY2hlY2tTaGFkZXJUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKKyAgICAgICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY3MoZnVuY3Rpb25EZWZpbml0aW9uKSkgeworICAg
ICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghY2hlY2tPcGVyYXRvck92ZXJsb2FkKGZ1
bmN0aW9uRGVmaW5pdGlvbikpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rp
b25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSk7CisKKyAg
ICAgICAgYXV0byYgYmFzZVR5cGUgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpLnVuaWZ5
Tm9kZSgpOworCisgICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4oYmFzZVR5cGUpKSB7
CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGF1dG8mIHVubmFtZWRCYXNlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4o
YmFzZVR5cGUpOworICAgICAgICBpZiAoIWlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZEJh
c2UpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2VCYXNlID0gZG93bmNhc3Q8QVNUOjpU
eXBlUmVmZXJlbmNlPih1bm5hbWVkQmFzZSk7CisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNl
QmFzZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGlmICghaXM8QVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUoKSkpIHsKKyAgICAgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
YXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGlm
ICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzSW50KCkpIHsKKyAgICAgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGVudW1l
cmF0aW9uTWVtYmVycyA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1lbWJlcnMo
KTsKKworICAgICAgICBmb3IgKGF1dG8mIG1lbWJlciA6IGVudW1lcmF0aW9uTWVtYmVycykgewor
ICAgICAgICAgICAgaWYgKCFtZW1iZXIuZ2V0KCkudmFsdWUoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICAgICAgYm9vbCBzdWNjZXNzOworICAgICAgICAgICAgbWVtYmVy
LmdldCgpLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGF1dG8mIHZhbHVlKSB7
CisgICAgICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIGl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJnZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgICAgICAg
ICBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoZXMoKnVubmFtZWRUeXBlLCBlbnVtZXJhdGlvbkRlZmluaXRp
b24pOworICAgICAgICAgICAgICAgIH0sIFsmXShSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYgcmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoZW51bWVyYXRpb25EZWZpbml0aW9u
LCByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgICAgICAg
ICAgICAgfSksIGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgICAgICB9KSk7CisgICAgICAgICAg
ICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGludDY0
X3QgbmV4dFZhbHVlID0gMDsKKyAgICAgICAgZm9yIChhdXRvJiBtZW1iZXIgOiBlbnVtZXJhdGlv
bk1lbWJlcnMpIHsKKyAgICAgICAgICAgIGlmIChtZW1iZXIuZ2V0KCkudmFsdWUoKSkgeworICAg
ICAgICAgICAgICAgIGludDY0X3QgdmFsdWU7CisgICAgICAgICAgICAgICAgbWVtYmVyLmdldCgp
LnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwm
IGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW50ZWdlckxp
dGVyYWwudmFsdWVGb3JTZWxlY3RlZFR5cGUoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNU
OjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZUZvclNl
bGVjdGVkVHlwZSgpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYp
IHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5M
aXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgIG5leHRWYWx1ZSA9IG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5zdWNjZXNzb3IoKSh2YWx1ZSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIG1lbWJlci5nZXQoKS5zZXRWYWx1ZShBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbihBU1Q6OkludGVnZXJMaXRlcmFsKExleGVyOjpUb2tlbihtZW1iZXIuZ2V0KCku
b3JpZ2luKCkpLCBuZXh0VmFsdWUpKSk7CisgICAgICAgICAgICAgICAgbmV4dFZhbHVlID0gbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnN1Y2Nlc3NvcigpKG5leHRWYWx1ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudW1lcmF0aW9u
TWVtYmVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byYgbWVtYmVyID0gZW51bWVy
YXRpb25NZW1iZXJzW2ldLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKG1lbWJlci52YWx1ZSgp
KTsKKyAgICAgICAgICAgIGludDY0X3QgdmFsdWU7CisgICAgICAgICAgICBtZW1iZXIudmFsdWUo
KS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdl
ckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGludGVnZXJMaXRlcmFsLnZhbHVl
KCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNp
Z25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB1bnNpZ25lZElu
dGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVy
YWwmKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJikgewor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSwgWyZd
KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9KSk7Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBlbnVtZXJhdGlvbk1lbWJlcnMu
c2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBvdGhlck1lbWJlciA9IGVudW1l
cmF0aW9uTWVtYmVyc1tqXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQob3RoZXJNZW1i
ZXIudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBmYWlsID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgb3RoZXJNZW1iZXIudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
QVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgZmFpbCA9IHZhbHVlID09IGludGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICBmYWlsID0gdmFsdWUgPT0gdW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0
ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkJv
b2xlYW5MaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgIGlmIChmYWls
KSB7CisgICAgICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIGZvdW5kWmVybyA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8mIG1lbWJl
ciA6IGVudW1lcmF0aW9uTWVtYmVycykgeworICAgICAgICAgICAgQVNTRVJUKG1lbWJlci5nZXQo
KS52YWx1ZSgpKTsKKyAgICAgICAgICAgIG1lbWJlci5nZXQoKS52YWx1ZSgpLT52aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgewor
ICAgICAgICAgICAgICAgIGlmIChpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpID09IDApCisgICAgICAg
ICAgICAgICAgICAgIGZvdW5kWmVybyA9IHRydWU7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpV
bnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSA9PSAwKQorICAgICAg
ICAgICAgICAgICAgICBmb3VuZFplcm8gPSB0cnVlOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6
RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0
ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlJikgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgfSkpOworICAgICAgICB9CisgICAgICAgIGlmICghZm91bmRaZXJvKSB7CisgICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVSZWZlcmVuY2UpOworICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9u
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVj
bGFyYXRpb24udHlwZSgpKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlh
bGl6ZXIoKSkgeworICAgICAgICAgICAgYXV0byYgbGhzVHlwZSA9IHZhcmlhYmxlRGVjbGFyYXRp
b24udHlwZSgpOworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp2YXJpYWJsZURlY2xh
cmF0aW9uLmluaXRpYWxpemVyKCkpOworICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fdHlw
ZU1hcC5maW5kKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSk7CisgICAgICAgICAg
ICBBU1NFUlQoaXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgICAgIGF1dG8m
IHJocyA9IGl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5
cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNo
ZXMobGhzVHlwZSwgKnVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KGxo
c1R5cGUsIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAg
ICAgICAgICB9KSwgcmhzKTsKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHBy
ZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOworICAgICAgICBh
dXRvIGxlZnRJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZhc3NpZ25tZW50RXhwcmVzc2lvbi5s
ZWZ0KCkpOworICAgICAgICBBU1NFUlQobGVmdEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7
CisgICAgICAgIGF1dG8mIGxoc1R5cGUgPSBsZWZ0SXRlcmF0b3ItPnZhbHVlOworICAgICAgICAv
LyBGSVhNRTogSG93IHRvIGRvIGx2YWx1ZSBhbmQgYWRkcmVzcyBzcGFjZSBhbmFseXNpcz8KKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOwor
ICAgICAgICBhdXRvIHJpZ2h0SXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmYXNzaWdubWVudEV4
cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIEFTU0VSVChyaWdodEl0ZXJhdG9yICE9IG1fdHlw
ZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIHJoc1R5cGUgPSByaWdodEl0ZXJhdG9yLT52YWx1
ZTsKKyAgICAgICAgYXV0byByZXN1bHRUeXBlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgICAgICByZXR1cm4gV1RGOjp2aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4m
IHJpZ2h0KSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICAg
ICAgICAgIGlmIChtYXRjaGVzKCpsZWZ0LCAqcmlnaHQpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbGVmdC0+Y2xvbmUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdodCkgLT4g
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2hBbmRDb21taXQoKmxlZnQsIHJpZ2h0LT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAg
ICAgICAgIH0pLCByaHNUeXBlKTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZT4mIGxlZnQpIC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB7Cisg
ICAgICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHJpZ2h0KSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpVbm5hbWVkVHlwZT4geworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdCgq
cmlnaHQsIGxlZnQtPnJlc29sdmFibGVUeXBlKCkpOworICAgICAgICAgICAgfSwgWyZdKFJlZjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpV
bm5hbWVkVHlwZT4geworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChsZWZ0
LT5yZXNvbHZhYmxlVHlwZSgpLCByaWdodC0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAgICAg
ICB9KSwgcmhzVHlwZSk7CisgICAgICAgIH0pLCBsaHNUeXBlKTsKKyAgICAgICAgaWYgKCFyZXN1
bHRUeXBlKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmYXNzaWdu
bWVudEV4cHJlc3Npb24sIFdURk1vdmUocmVzdWx0VHlwZSkpOworICAgICAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgICAgICBhdXRvIGxWYWx1ZUl0ZXJh
dG9yID0gbV90eXBlTWFwLmZpbmQoJnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCkp
OworICAgICAgICBBU1NFUlQobFZhbHVlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAg
ICAgICAgYXV0byYgbGhzVHlwZSA9IGxWYWx1ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgLy8g
RklYTUU6IEhvdyB0byBkbyBsdmFsdWUgYW5kIGFkZHJlc3Mgc3BhY2UgYW5hbHlzaXM/CisgICAg
ICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCB0aGUgUmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbidzIEFub255bW91c1ZhcmlhYmxlcy4KKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHByZXNzaW9uKCkpOwor
ICAgICAgICBhdXRvIG5ld1ZhbHVlSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmcmVhZE1vZGlm
eVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSk7CisgICAgICAgIEFTU0VSVChu
ZXdWYWx1ZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIG5ld1Zh
bHVlVHlwZSA9IG5ld1ZhbHVlSXRlcmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvIHN1Y2Nlc3Mg
PSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVu
bmFtZWRUeXBlPiYgbGVmdCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gV1RGOjp2aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4m
IHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygqbGVmdCwg
KnJpZ2h0KTsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+
JiByaWdodCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJv
b2w+KG1hdGNoQW5kQ29tbWl0KCpsZWZ0LCByaWdodC0+cmVzb2x2YWJsZVR5cGUoKSkpOworICAg
ICAgICAgICAgfSksIG5ld1ZhbHVlVHlwZSk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRU
eXBlPiYgcmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxib29sPihtYXRjaEFuZENvbW1pdCgqcmlnaHQsIGxlZnQtPnJlc29sdmFibGVUeXBlKCkpKTsK
KyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdodCkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNo
QW5kQ29tbWl0KGxlZnQtPnJlc29sdmFibGVUeXBlKCksIHJpZ2h0LT5yZXNvbHZhYmxlVHlwZSgp
KSk7CisgICAgICAgICAgICB9KSwgbmV3VmFsdWVUeXBlKTsKKyAgICAgICAgfSksIGxoc1R5cGUp
OworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJl
YWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucmVzdWx0RXhwcmVzc2lvbigpKTsKKyAgICAgICAgYXV0
byByZXN1bHRJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZyZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLnJlc3VsdEV4cHJlc3Npb24oKSk7CisgICAgICAgIEFTU0VSVChyZXN1bHRJdGVyYXRvciAh
PSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiByZXN1bHRUeXBlID0gcmVzdWx0SXRl
cmF0b3ItPnZhbHVlOworICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0KSB7CisgICAgICAgICAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24s
IHJlc3VsdC0+Y2xvbmUoKSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlPiYgcmVzdWx0KSB7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlw
ZU1hcC5hZGQoJnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24sIHJlc3VsdC5jb3B5UmVmKCkpOwor
ICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKKyAgICAgICAgfSksIHJlc3VsdFR5cGUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNU
OjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkZXJlZmVyZW5jZUV4cHJlc3Npb24u
cG9pbnRlcigpKTsKKyAgICAgICAgYXV0byBwb2ludGVySXRlcmF0b3IgPSBtX3R5cGVNYXAuZmlu
ZCgmZGVyZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50ZXIoKSk7CisgICAgICAgIEFTU0VSVChwb2lu
dGVySXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgdHlwZSA9IHBv
aW50ZXJJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1dG8qIHBvaW50ZXJUeXBlID0gV1RGOjp2
aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBl
PiYgdHlwZSkgLT4gQVNUOjpQb2ludGVyVHlwZSogeworICAgICAgICAgICAgYXV0byYgdW5pZnlO
b2RlID0gdHlwZS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1l
ZFR5cGU+KHVuaWZ5Tm9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVu
aWZ5Tm9kZSk7CisgICAgICAgICAgICBpZiAoIWlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRU
eXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVy
biAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICB9LCBb
XShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiB0eXBlKSAtPiBBU1Q6OlBvaW50ZXJUeXBl
KiB7CisgICAgICAgICAgICBhdXRvKiByZXNvbHZlZFR5cGUgPSB0eXBlLT5yZXNvbHZhYmxlVHlw
ZSgpLnJlc29sdmVkVHlwZSgpOworICAgICAgICAgICAgaWYgKCFyZXNvbHZlZFR5cGUpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUg
PSByZXNvbHZlZFR5cGUtPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlVu
bmFtZWRUeXBlPih1bmlmeU5vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBl
Pih1bmlmeU5vZGUpOworICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5h
bWVkVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBy
ZXR1cm4gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICAgICAg
fSksIHR5cGUpOworICAgICAgICBpZiAoIXBvaW50ZXJUeXBlKSB7CisgICAgICAgICAgICBzZXRF
cnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1F
OiBIb3cgdG8gZG8gbHZhbHVlIGFuZCBhZGRyZXNzIHNwYWNlIGFuYWx5c2lzPworICAgICAgICBh
dXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9p
bnRlclR5cGUtPmNsb25lKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRk
UmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlUG9p
bnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkp
OworICAgICAgICBhdXRvIGxWYWx1ZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJm1ha2VQb2lu
dGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgICAgIEFTU0VSVChsVmFsdWVJdGVyYXRvciAh
PSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBlbGVtZW50VHlwZSA9IGxWYWx1ZUl0
ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byogbFZhbHVlVHlwZSA9IFdURjo6dmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHR5cGUp
IC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlLmdldCgpOwor
ICAgICAgICB9LCBbXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiB0eXBlKSAtPiBBU1Q6
OlVubmFtZWRUeXBlKiB7CisgICAgICAgICAgICByZXR1cm4gdHlwZS0+cmVzb2x2YWJsZVR5cGUo
KS5yZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgfSksIGVsZW1lbnRUeXBlKTsKKyAgICAgICAgLy8g
RklYTUU6IEhvdyB0byBkbyBsdmFsdWUgYW5kIGFkZHJlc3Mgc3BhY2UgYW5hbHlzaXM/CisgICAg
ICAgIEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSA9IEFTVDo6
UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV90eXBlTWFwLmFkZCgmbWFrZVBvaW50ZXJFeHByZXNzaW9uLCBzdGQ6Om1ha2VfdW5p
cXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihtYWtlUG9pbnRlckV4cHJlc3Npb24u
b3JpZ2luKCkpLCBhZGRyZXNzU3BhY2UsIGxWYWx1ZVR5cGUtPmNsb25lKCkpKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICAg
ICAgYXV0byBsVmFsdWVJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZtYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUKGxWYWx1ZUl0ZXJhdG9yICE9
IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIGVsZW1lbnRUeXBlID0gbFZhbHVlSXRl
cmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvKiB1bm5hbWVkVHlwZSA9IFdURjo6dmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHR5cGUp
IC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlLmdldCgpOwor
ICAgICAgICB9LCBbXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiB0eXBlKSAtPiBBU1Q6
OlVubmFtZWRUeXBlKiB7CisgICAgICAgICAgICByZXR1cm4gdHlwZS0+cmVzb2x2YWJsZVR5cGUo
KS5yZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgfSksIGVsZW1lbnRUeXBlKTsKKyAgICAgICAgaWYg
KCF1bm5hbWVkVHlwZSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSB1bm5hbWVkVHlwZS0+
dW5pZnlOb2RlKCk7CisgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUp
KSB7CisgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1l
ZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgcG9pbnRlclR5cGUgPSBkb3du
Y2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IEJlY29tZSBhIENvbnZlcnRQb2ludGVyVG9BcnJheVJlZmVyZW5jZUV4cHJlc3Npb24K
KyAgICAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJm1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24sIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigp
KSwgcG9pbnRlclR5cGUuYWRkcmVzc1NwYWNlKCksIHBvaW50ZXJUeXBlLmVsZW1lbnRUeXBlKCku
Y2xvbmUoKSkpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBGSVhNRTogSG93IHRvIGRvIGx2YWx1ZSBhbmQgYWRkcmVzcyBz
cGFjZSBhbmFseXNpcz8KKyAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1l
ZFR5cGUpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNU
OjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSG93
IHRvIGRvIGx2YWx1ZSBhbmQgYWRkcmVzcyBzcGFjZSBhbmFseXNpcz8KKyAgICAgICAgICAgICAg
ICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJl
ZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBTYXZlIHRoZSBudW1iZXIgb2YgZWxlbWVudHMuCisgICAgICAgICAgICAgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBz
dGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgYXJyYXlU
eXBlLnR5cGUoKS5jbG9uZSgpKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRS
ZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogSG93IHRvIGRvIGx2
YWx1ZSBhbmQgYWRkcmVzcyBzcGFjZSBhbmFseXNpcz8KKyAgICAgICAgQVNUOjpSZWZlcmVuY2VU
eXBlOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRy
ZXNzU3BhY2U6OkRldmljZTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRk
KCZtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJy
YXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
bi5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgdW5uYW1lZFR5cGUtPmNsb25lKCkpKTsKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3RFeHByZXNzaW9uLmJh
c2UoKSk7CisgICAgICAgIGF1dG8gYmFzZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmRvdEV4
cHJlc3Npb24uYmFzZSgpKTsKKyAgICAgICAgQVNTRVJUKGJhc2VJdGVyYXRvciAhPSBtX3R5cGVN
YXAuZW5kKCkpOworICAgICAgICBhdXRvJiBiYXNlVHlwZSA9IGJhc2VJdGVyYXRvci0+dmFsdWU7
CisgICAgICAgIGF1dG8qIGJhc2VVbmlmeU5vZGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYgYmFzZVR5cGUpIC0+IEFT
VDo6VHlwZSogeworICAgICAgICAgICAgcmV0dXJuICZiYXNlVHlwZS0+dW5pZnlOb2RlKCk7Cisg
ICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBiYXNlVHlwZSkgLT4g
QVNUOjpUeXBlKiB7CisgICAgICAgICAgICBpZiAoIWJhc2VUeXBlLT5yZXNvbHZhYmxlVHlwZSgp
LnJlc29sdmVkVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxib29s
Pihjb21taXQoYmFzZVR5cGUtPnJlc29sdmFibGVUeXBlKCkpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gJmJh
c2VUeXBlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpLT51bmlmeU5vZGUoKTsKKyAg
ICAgICAgfSksIGJhc2VUeXBlKTsKKyAgICAgICAgaWYgKCFiYXNlVW5pZnlOb2RlKSB7CisgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB3cmFwcGVkQmFzZVR5cGU7Cisg
ICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPigqYmFzZVVuaWZ5Tm9kZSkpCisgICAgICAg
ICAgICB3cmFwcGVkQmFzZVR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPigqYmFzZVVu
aWZ5Tm9kZSkuY2xvbmUoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoaXM8
QVNUOjpOYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpKTsKKyAgICAgICAgICAgIHdyYXBwZWRCYXNl
VHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lv
bi5vcmlnaW4oKSksIGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPigqYmFzZVVuaWZ5Tm9kZSkpOwor
ICAgICAgICB9CisKKyAgICAgICAgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6
Ok5hbWVkVHlwZT4+IGNhc3RSZXR1cm5UeXBlOworCisgICAgICAgIFJlc29sdmluZ1R5cGUgZ2V0
QXJndW1lbnRUeXBlKHdyYXBwZWRCYXNlVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBnZXRBcmd1bWVudFR5cGVzOwor
ICAgICAgICBnZXRBcmd1bWVudFR5cGVzLmFwcGVuZChXVEZNb3ZlKGdldEFyZ3VtZW50VHlwZSkp
OworICAgICAgICBhdXRvKiBnZXRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1w
bChkb3RFeHByZXNzaW9uLnBvc3NpYmxlR2V0T3ZlcmxvYWRzKCksIGdldEFyZ3VtZW50VHlwZXMs
IGNhc3RSZXR1cm5UeXBlKTsKKyAgICAgICAgQVNUOjpVbm5hbWVkVHlwZSogZ2V0UmV0dXJuVHlw
ZSA9IG51bGxwdHI7CisgICAgICAgIGlmIChnZXRGdW5jdGlvbikKKyAgICAgICAgICAgIGdldFJl
dHVyblR5cGUgPSAmZ2V0RnVuY3Rpb24tPnR5cGUoKTsKKworICAgICAgICBBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24qIGFuZEZ1bmN0aW9uID0gbnVsbHB0cjsKKyAgICAgICAgQVNUOjpVbm5hbWVk
VHlwZSogYW5kUmV0dXJuVHlwZSA9IG51bGxwdHI7CisgICAgICAgIGF1dG8gY29tcHV0ZUFuZEFy
Z3VtZW50VHlwZSA9IFsmXShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9u
YWw8UmVzb2x2aW5nVHlwZT4geworICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgdW5uYW1lZFR5
cGUuY2xvbmUoKSB9OworICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVk
VHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBB
U1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBkb3duY2FzdDxBU1Q6OkFy
cmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKS5jbG9uZSgpKSB9OworICAgICAgICAgICAgaWYg
KGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIHsgc3RkOjptYWtlX3VuaXF1ZTxB
U1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFT
VDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGRvd25jYXN0PEFTVDo6QXJy
YXlUeXBlPih1bm5hbWVkVHlwZSkudHlwZSgpLmNsb25lKCkpIH07CisgICAgICAgIH07CisgICAg
ICAgIGF1dG8gY29tcHV0ZUFuZFJldHVyblR5cGUgPSBbJl0oQVNUOjpVbm5hbWVkVHlwZSYgdW5u
YW1lZFR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6
OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuICZkb3du
Y2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKTsKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9OworICAgICAgICBhdXRvIGFuZEFyZ3Vt
ZW50VHlwZSA9IGNvbXB1dGVBbmRBcmd1bWVudFR5cGUoKndyYXBwZWRCYXNlVHlwZSk7CisgICAg
ICAgIGlmIChhbmRBcmd1bWVudFR5cGUpIHsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhbmRBcmd1bWVudFR5cGVzOworICAgICAgICAg
ICAgYW5kQXJndW1lbnRUeXBlcy5hcHBlbmQoV1RGTW92ZSgqYW5kQXJndW1lbnRUeXBlKSk7Cisg
ICAgICAgICAgICBhbmRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RF
eHByZXNzaW9uLnBvc3NpYmxlQW5kT3ZlcmxvYWRzKCksIGFuZEFyZ3VtZW50VHlwZXMsIGNhc3RS
ZXR1cm5UeXBlKTsKKyAgICAgICAgICAgIGlmIChhbmRGdW5jdGlvbikKKyAgICAgICAgICAgICAg
ICBhbmRSZXR1cm5UeXBlID0gY29tcHV0ZUFuZFJldHVyblR5cGUoYW5kRnVuY3Rpb24tPnR5cGUo
KSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWdldFJldHVyblR5cGUgJiYgIWFuZFJldHVy
blR5cGUpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoZ2V0UmV0dXJuVHlwZSAmJiBhbmRSZXR1cm5UeXBlICYm
ICFtYXRjaGVzKCpnZXRSZXR1cm5UeXBlLCAqYW5kUmV0dXJuVHlwZSkpIHsKKyAgICAgICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBS
ZXNvbHZpbmdUeXBlIHNldEFyZ3VtZW50MVR5cGUod3JhcHBlZEJhc2VUeXBlLT5jbG9uZSgpKTsK
KyAgICAgICAgUmVzb2x2aW5nVHlwZSBzZXRBcmd1bWVudDJUeXBlKGdldFJldHVyblR5cGUgPyBn
ZXRSZXR1cm5UeXBlLT5jbG9uZSgpIDogYW5kUmV0dXJuVHlwZS0+Y2xvbmUoKSk7CisgICAgICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBzZXRBcmd1bWVu
dFR5cGVzOworICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZChXVEZNb3ZlKHNldEFyZ3Vt
ZW50MVR5cGUpKTsKKyAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoV1RGTW92ZShzZXRB
cmd1bWVudDJUeXBlKSk7CisgICAgICAgIGF1dG8qIHNldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0
aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVTZXRPdmVybG9hZHMoKSwgc2V0
QXJndW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUpOworICAgICAgICBpZiAoc2V0RnVuY3Rpb24p
IHsKKyAgICAgICAgICAgIGlmICghbWF0Y2hlcyhzZXRGdW5jdGlvbi0+dHlwZSgpLCAqd3JhcHBl
ZEJhc2VUeXBlKSkgeworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6
IEhvdyB0byBkbyBsdmFsdWUgYW5kIGFkZHJlc3Mgc3BhY2UgYW5hbHlzaXM/CisKKyAgICAgICAg
Ly8gRklYTUU6IEdlbmVyYXRlIHRoZSBjYWxsIGV4cHJlc3Npb25zCisgICAgICAgIC8qVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+PiBnZXRBcmd1bWVudHM7CisgICAgICAg
IGdldEFyZ3VtZW50cy5hcHBlbmQoZG90RXhwcmVzc2lvbi5iYXNlKCkpOyAvLyBGSVhNRTogVGhp
cyBoYXMgdG8gYmUgdGhlIHNhbWUgYmFzZSBhcyBkb3RFeHByZXNzaW9uLmJhc2UoKS4KKyAgICAg
ICAgYXV0byBjYWxsRm9yR2V0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNzaW9u
PihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIGRvdEV4cHJlc3Npb24uZ2V0
RnVuY3Rpb25OYW1lKCksIFdURk1vdmUoZ2V0QXJndW1lbnRzKSk7CisgICAgICAgIGNhbGxGb3JH
ZXQtPnNldEZ1bmN0aW9uKCpnZXRGdW5jdGlvbik7CisgICAgICAgIGF1dG8gZ2V0UmVzdWx0VHlw
ZSA9IGdldEZ1bmN0aW9uLT50eXBlKCkuY2xvbmUoKTsqLworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCBtZQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZVJl
ZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NF
UlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV90eXBlTWFwLmFkZCgmdmFyaWFibGVSZWZlcmVuY2UsIHZhcmlhYmxlUmVmZXJlbmNlLnZh
cmlhYmxlKCktPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1
bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQo
cmV0dXJuU3RhdGVtZW50LmZ1bmN0aW9uKCkpOworICAgICAgICBpZiAocmV0dXJuU3RhdGVtZW50
LnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcmV0dXJuU3RhdGVt
ZW50LnZhbHVlKCkpOworICAgICAgICAgICAgYXV0byB2YWx1ZUl0ZXJhdG9yID0gbV90eXBlTWFw
LmZpbmQocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOworICAgICAgICAgICAgQVNTRVJUKHZhbHVl
SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgICAgIGF1dG8mIHJlc3VsdFR5
cGUgPSB2YWx1ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IFdU
Rjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1l
ZFR5cGU+JiByZXN1bHRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0
Y2hlcyhyZXR1cm5TdGF0ZW1lbnQuZnVuY3Rpb24oKS0+dHlwZSgpLCAqcmVzdWx0VHlwZSk7Cisg
ICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzdWx0VHlw
ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1h
dGNoQW5kQ29tbWl0KHJldHVyblN0YXRlbWVudC5mdW5jdGlvbigpLT50eXBlKCksIHJlc3VsdFR5
cGUtPnJlc29sdmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgIH0pLCByZXN1bHRUeXBlKTsKKyAg
ICAgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtYXRjaGVzKHJldHVy
blN0YXRlbWVudC5mdW5jdGlvbigpLT50eXBlKCksIG1faW50cmluc2ljcy52b2lkVHlwZSgpKSkK
KyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlBv
aW50ZXJUeXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZvbGxvd2luZyBwb2ludGVy
IHR5cGVzIGNhbiBjYXVzZSBpbmZpbml0ZSBsb29wcyBiZWNhdXNlIG9mIGRhdGEgc3RydWN0dXJl
cworICAgICAgICAvLyBsaWtlIGxpbmtlZCBsaXN0cy4KKyAgICAgICAgLy8gRklYTUU6IE1ha2Ug
c3VyZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBlbXB0eQorICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8g
Rm9sbG93aW5nIGFycmF5IHJlZmVyZW5jZSB0eXBlcyBjYW4gY2F1c2UgaW5maW5pdGUgbG9vcHMg
YmVjYXVzZSBvZiBkYXRhCisgICAgICAgIC8vIHN0cnVjdHVyZXMgbGlrZSBsaW5rZWQgbGlzdHMu
CisgICAgICAgIC8vIEZJWE1FOiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW1w
dHkKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJM
aXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byByZWYgPSBhZG9wdFJlZigqbmV3
IFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKGludGVnZXJMaXRlcmFsLnR5cGUoKSkpOworICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmludGVnZXJMaXRlcmFsLCBXVEZNb3Zl
KHJlZikpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3
RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0
byByZWYgPSBhZG9wdFJlZigqbmV3IFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKHVuc2lnbmVkSW50
ZWdlckxpdGVyYWwudHlwZSgpKSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFw
LmFkZCgmdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCwgV1RGTW92ZShyZWYpKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBhdXRvIHJlZiA9IGFkb3B0UmVmKCpuZXcgUmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UoZmxvYXRMaXRlcmFsLnR5cGUoKSkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
dHlwZU1hcC5hZGQoJmZsb2F0TGl0ZXJhbCwgV1RGTW92ZShyZWYpKTsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRlcmFsKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgYXV0byByZWYgPSBhZG9wdFJlZigqbmV3IFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
KG51bGxMaXRlcmFsLnR5cGUoKSkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1h
cC5hZGQoJm51bGxMaXRlcmFsLCBXVEZNb3ZlKHJlZikpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmJvb2xlYW5MaXRlcmFsLCBB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGJvb2xlYW5MaXRlcmFsLm9yaWdp
bigpKSwgbV9pbnRyaW5zaWNzLmJvb2xUeXBlKCkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChh
ZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0
YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgYXV0byYgZW51bWVyYXRpb25E
ZWZpbml0aW9uID0gKmNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
LmVudW1lcmF0aW9uRGVmaW5pdGlvbigpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlw
ZU1hcC5hZGQoJmNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLCBB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNvbnN0YW50RXhwcmVzc2lvbkVu
dW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9u
KSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgfQorCisgICAgYm9vbCBpc0Jvb2xUeXBlKFJlc29sdmluZ1R5cGUmIHJlc29sdmlu
Z1R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IGJvb2wgewor
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoKmxlZnQsIG1faW50cmluc2ljcy5ib29sVHlwZSgp
KTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxlZnQpIC0+
IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29t
bWl0KG1faW50cmluc2ljcy5ib29sVHlwZSgpLCBsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpKSk7Cisg
ICAgICAgIH0pLCByZXNvbHZpbmdUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJh
bmQoKSk7CisgICAgICAgIGF1dG8gb3BlcmFuZEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmxv
Z2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQoKSk7CisgICAgICAgIEFTU0VSVChvcGVyYW5kSXRl
cmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgb3BlcmFuZFR5cGUgPSBv
cGVyYW5kSXRlcmF0b3ItPnZhbHVlOworICAgICAgICBpZiAoIWlzQm9vbFR5cGUob3BlcmFuZFR5
cGUpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmbG9naWNhbE5v
dEV4cHJlc3Npb24sIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obG9naWNh
bE5vdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpOworICAg
ICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAg
IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYgbG9naWNhbEV4cHJl
c3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNh
bEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICAgICAgYXV0byBsZWZ0SXRlcmF0b3IgPSBtX3R5cGVN
YXAuZmluZCgmbG9naWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICAgICAgQVNTRVJUKGxlZnRJ
dGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBsZWZ0VHlwZSA9IGxl
ZnRJdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxF
eHByZXNzaW9uLnJpZ2h0KCkpOworICAgICAgICBhdXRvIHJpZ2h0SXRlcmF0b3IgPSBtX3R5cGVN
YXAuZmluZCgmbG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIEFTU0VSVChyaWdo
dEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIHJpZ2h0VHlwZSA9
IHJpZ2h0SXRlcmF0b3ItPnZhbHVlOworCisgICAgICAgIGlmICghaXNCb29sVHlwZShsZWZ0VHlw
ZSkgfHwgIWlzQm9vbFR5cGUocmlnaHRUeXBlKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fdHlwZU1hcC5hZGQoJmxvZ2ljYWxFeHByZXNzaW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAoTGV4ZXI6OlRva2VuKGxvZ2ljYWxFeHByZXNzaW9uLm9yaWdpbigpKSwgbV9pbnRyaW5zaWNz
LmJvb2xUeXBlKCkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQm
IGlmU3RhdGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAgICAgICBhdXRvIGNvbmRpdGlvbmFsSXRl
cmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7CisgICAg
ICAgIEFTU0VSVChjb25kaXRpb25hbEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAg
ICAgIGF1dG8mIGNvbmRpdGlvbmFsVHlwZSA9IGNvbmRpdGlvbmFsSXRlcmF0b3ItPnZhbHVlOwor
ICAgICAgICBpZiAoIWlzQm9vbFR5cGUoY29uZGl0aW9uYWxUeXBlKSkgeworICAgICAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKKyAgICAgICAgaWYgKGlmU3RhdGVt
ZW50LmVsc2VCb2R5KCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVt
ZW50LmVsc2VCb2R5KCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3Am
IHdoaWxlTG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3
aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgICAgIGF1dG8gY29uZGl0aW9uYWxJdGVyYXRv
ciA9IG1fdHlwZU1hcC5maW5kKCZ3aGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgICAgIEFT
U0VSVChjb25kaXRpb25hbEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1
dG8mIGNvbmRpdGlvbmFsVHlwZSA9IGNvbmRpdGlvbmFsSXRlcmF0b3ItPnZhbHVlOworICAgICAg
ICBpZiAoIWlzQm9vbFR5cGUoY29uZGl0aW9uYWxUeXBlKSkgeworICAgICAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQod2hpbGVMb29wLmJvZHkoKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5ib2R5KCkpOworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgICAgIGF1dG8gY29uZGl0aW9u
YWxJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZkb1doaWxlTG9vcC5jb25kaXRpb25hbCgpKTsK
KyAgICAgICAgQVNTRVJUKGNvbmRpdGlvbmFsSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsK
KyAgICAgICAgYXV0byYgY29uZGl0aW9uYWxUeXBlID0gY29uZGl0aW9uYWxJdGVyYXRvci0+dmFs
dWU7CisgICAgICAgIGlmICghaXNCb29sVHlwZShjb25kaXRpb25hbFR5cGUpKSB7CisgICAgICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7CisgICAg
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQp
OworICAgICAgICB9LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJl
c3Npb24pIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZXhwcmVzc2lvbik7Cisg
ICAgICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9uKCkpOworICAgICAgICBpZiAoZm9yTG9v
cC5jb25kaXRpb24oKSkgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmb3JMb29w
LmNvbmRpdGlvbigpKTsKKyAgICAgICAgICAgIGF1dG8gY29uZGl0aW9uSXRlcmF0b3IgPSBtX3R5
cGVNYXAuZmluZChmb3JMb29wLmNvbmRpdGlvbigpKTsKKyAgICAgICAgICAgIEFTU0VSVChjb25k
aXRpb25JdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICAgICAgYXV0byYgY29u
ZGl0aW9uVHlwZSA9IGNvbmRpdGlvbkl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgIGlmICgh
aXNCb29sVHlwZShjb25kaXRpb25UeXBlKSkgeworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmIChmb3JMb29wLmluY3JlbWVudCgpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KCpmb3JMb29wLmluY3JlbWVudCgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZv
ckxvb3AuYm9keSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoU3RhdGVt
ZW50JiBzd2l0Y2hTdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkpOworICAgICAgICBhdXRvIHZhbHVlSXRl
cmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkpOworICAgICAg
ICBBU1NFUlQodmFsdWVJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRv
JiB2YWx1ZVR5cGUgPSB2YWx1ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byB2YWx1ZVVu
aWZ5Tm9kZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRy
PEFTVDo6VW5uYW1lZFR5cGU+JiBsZWZ0KSAtPiBBU1Q6OlR5cGUqIHsKKyAgICAgICAgICAgIHJl
dHVybiAmbGVmdC0+dW5pZnlOb2RlKCk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBBU1Q6OlR5cGUqIHsKKyAgICAgICAgICAgIGlmICghbGVm
dC0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKSkgeworICAgICAgICAgICAgICAgIGlm
ICghc3RhdGljX2Nhc3Q8Ym9vbD4oY29tbWl0KGxlZnQtPnJlc29sdmFibGVUeXBlKCkpKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gJmxlZnQtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCktPnVuaWZ5
Tm9kZSgpOworICAgICAgICB9KSwgdmFsdWVUeXBlKTsKKyAgICAgICAgaWYgKCFpczxBU1Q6Ok5h
bWVkVHlwZT4oKnZhbHVlVW5pZnlOb2RlKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvJiB2YWx1ZU5hbWVkVW5p
ZnlOb2RlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KCp2YWx1ZVVuaWZ5Tm9kZSk7CisgICAg
ICAgIGlmICghKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPih2YWx1ZU5hbWVkVW5pZnlO
b2RlKSAmJiBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4odmFsdWVOYW1lZFVu
aWZ5Tm9kZSkuaXNJbnQoKSkKKyAgICAgICAgICAgICYmICFpczxBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbj4odmFsdWVOYW1lZFVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBib29sIGhhc0RlZmF1
bHQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVt
ZW50LnN3aXRjaENhc2VzKCkpIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0
Y2hDYXNlLmJsb2NrKCkpOworICAgICAgICAgICAgaWYgKCFzd2l0Y2hDYXNlLnZhbHVlKCkpIHsK
KyAgICAgICAgICAgICAgICBoYXNEZWZhdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2wgc3VjY2VzczsKKyAgICAgICAg
ICAgIHN3aXRjaENhc2UudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJ
bnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBzdWNjZXNz
ID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpV
bm5hbWVkVHlwZT4mIHZhbHVlVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdCgqdmFsdWVUeXBlLCBpbnRlZ2Vy
TGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVU
eXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHZhbHVlVHlwZS0+cmVzb2x2
YWJsZVR5cGUoKSwgaW50ZWdlckxpdGVyYWwudHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfSks
IHZhbHVlVHlwZSk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9
IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5u
YW1lZFR5cGU+JiB2YWx1ZVR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoKnZhbHVlVHlwZSwgdW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHZhbHVlVHlwZS0+
cmVzb2x2YWJsZVR5cGUoKSwgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAg
ICAgICAgICAgICB9KSwgdmFsdWVUeXBlKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0
TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5
cGU+JiB2YWx1ZVR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoKnZhbHVlVHlwZSwgZmxvYXRMaXRlcmFsLnR5
cGUoKSkpOworICAgICAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2U+JiB2YWx1ZVR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQodmFsdWVUeXBlLT5yZXNvbHZhYmxlVHlwZSgp
LCBmbG9hdExpdGVyYWwudHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfSksIHZhbHVlVHlwZSk7
CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIHsKKyAg
ICAgICAgICAgICAgICBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHZhbHVlVHlwZSkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1p
dCgqdmFsdWVUeXBlLCBudWxsTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9LCBb
Jl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0
KHZhbHVlVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSwgbnVsbExpdGVyYWwudHlwZSgpKSk7CisgICAg
ICAgICAgICAgICAgfSksIHZhbHVlVHlwZSk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29s
ZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHZhbHVl
VHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKCp2YWx1
ZVR5cGUsIG1faW50cmluc2ljcy5ib29sVHlwZSgpKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0o
UmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KG1f
aW50cmluc2ljcy5ib29sVHlwZSgpLCB2YWx1ZVR5cGUtPnJlc29sdmFibGVUeXBlKCkpKTsKKyAg
ICAgICAgICAgICAgICB9KSwgdmFsdWVUeXBlKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkgeworICAgICAgICAgICAgICAgIEFTU0VS
VChjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlv
bkRlZmluaXRpb24oKSk7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFdURjo6dmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+JiB2YWx1
ZVR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcygqdmFs
dWVUeXBlLCAqY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51
bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAgICAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JiB2YWx1ZVR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoKmNvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmVudW1lcmF0aW9uRGVmaW5pdGlvbigp
LCB2YWx1ZVR5cGUtPnJlc29sdmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9KSwgdmFs
dWVUeXBlKTsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIGlmICghc3VjY2Vzcykgewor
ICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
d2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
YXV0byYgZmlyc3RDYXNlID0gc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKClbaV07CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNo
Q2FzZXMoKS5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGF1dG8mIHNlY29uZENhc2Ug
PSBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKVtqXTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Ym9vbD4oZmlyc3RDYXNlLnZhbHVlKCkpICE9
IHN0YXRpY19jYXN0PGJvb2w+KHNlY29uZENhc2UudmFsdWUoKSkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxib29sPihm
aXJzdENhc2UudmFsdWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgZmlyc3RDYXNlLnZh
bHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGZp
cnN0SW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kQ2FzZS52YWx1
ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBzZWNv
bmRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZp
cnN0SW50ZWdlckxpdGVyYWwudmFsdWUoKSAhPSBzZWNvbmRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgp
OworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
JiBzZWNvbmRVbnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdWNjZXNzID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oZmlyc3RJbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpKSAhPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihzZWNvbmRVbnNpZ25lZEludGVnZXJMaXRlcmFs
LnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwm
KSB7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAg
ICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAg
ICAgICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UmKSB7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAg
ICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiBmaXJzdFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kQ2FzZS52YWx1ZSgpLT52aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBzZWNvbmRJbnRlZ2Vy
TGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHN0YXRpY19jYXN0
PGludDY0X3Q+KGZpcnN0VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKSAhPSBzdGF0aWNf
Y2FzdDxpbnQ2NF90PihzZWNvbmRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgc2Vjb25kVW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZp
cnN0VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpICE9IHNlY29uZFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRM
aXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYp
IHsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7Cisg
ICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0
aW9uTWVtYmVyUmVmZXJlbmNlJikgeworICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAg
ICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAgIH0s
IFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkJv
b2xlYW5MaXRlcmFsJikgeworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBmaXJzdENvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSB7CisgICAgICAgICAgICAgICAgICAgIHNlY29u
ZENhc2UudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0
ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFs
JikgeworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAg
ICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAgICAg
ICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVt
YmVyUmVmZXJlbmNlJiBzZWNvbmRDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJl
ZmVyZW5jZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZpcnN0Q29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIo
KSAhPSBzZWNvbmRDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5l
bnVtZXJhdGlvbk1lbWJlcigpOworICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAg
ICAgICAgfSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFoYXNE
ZWZhdWx0KSB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+
KHZhbHVlTmFtZWRVbmlmeU5vZGUpKSB7CisgICAgICAgICAgICAgICAgSGFzaFNldDxpbnQ2NF90
PiB2YWx1ZXM7CisgICAgICAgICAgICAgICAgYm9vbCB6ZXJvVmFsdWVFeGlzdHM7CisgICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENh
c2VzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoQ2FzZS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShB
U1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZUZvclNlbGVjdGVkVHlwZSgpOworICAg
ICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNp
Z25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVu
c2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWVGb3JTZWxlY3RlZFR5cGUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShB
U1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFs
JikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9u
TWVtYmVyUmVmZXJlbmNlJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHplcm9WYWx1ZUV4aXN0cyA9IHRy
dWU7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlcy5hZGQodmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBib29s
IHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgICAgIGRvd25jYXN0PEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uPih2YWx1ZU5hbWVkVW5pZnlOb2RlKS5pdGVyYXRlQWxsVmFsdWVzKFsmXShp
bnQ2NF90IHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF6ZXJvVmFsdWVFeGlzdHMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcy5jb250YWlucyh2YWx1
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1
Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPih2YWx1
ZU5hbWVkVW5pZnlOb2RlKSk7CisgICAgICAgICAgICAgICAgSGFzaFNldDxBU1Q6OkVudW1lcmF0
aW9uTWVtYmVyKj4gdmFsdWVzOworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgc3dpdGNoQ2Fz
ZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKSB7CisgICAgICAgICAgICAgICAgICAg
IHN3aXRjaENhc2UudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRl
Z2VyTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAg
ICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29s
ZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25N
ZW1iZXJSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChjb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbk1lbWJlcigp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hZGQoY29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9y
IChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uPih2YWx1ZU5hbWVkVW5pZnlOb2RlKS5lbnVtZXJhdGlvbk1lbWJlcnMoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcy5jb250YWlucygmZW51bWVyYXRpb25NZW1iZXIu
Z2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGNvbW1hRXhwcmVzc2lvbi5saXN0KCkuc2l6ZSgpID4gMCk7CisgICAg
ICAgIFZpc2l0b3I6OnZpc2l0KGNvbW1hRXhwcmVzc2lvbik7CisgICAgICAgIGF1dG8gbGFzdEl0
ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoY29tbWFFeHByZXNzaW9uLmxpc3QoKS5sYXN0KCkuZ2V0
KCkpOworICAgICAgICBBU1NFUlQobGFzdEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7Cisg
ICAgICAgIGF1dG8mIGxhc3RUeXBlID0gbGFzdEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgV1RG
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVk
VHlwZT4mIGxhc3RUeXBlKSB7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1h
cC5hZGQoJmNvbW1hRXhwcmVzc2lvbiwgbGFzdFR5cGUtPmNsb25lKCkpOworICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAg
fSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxhc3RUeXBlKSB7CisgICAgICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmNvbW1hRXhwcmVzc2lvbiwgbGFz
dFR5cGUuY29weVJlZigpKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBh
ZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIH0pLCBsYXN0VHlwZSk7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhwcmVzc2lvbikg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVz
c2lvbi5wcmVkaWNhdGUoKSk7CisgICAgICAgIGF1dG8gcHJlZGljYXRlSXRlcmF0b3IgPSBtX3R5
cGVNYXAuZmluZCgmdGVybmFyeUV4cHJlc3Npb24ucHJlZGljYXRlKCkpOworICAgICAgICBBU1NF
UlQocHJlZGljYXRlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYg
cHJlZGljYXRlVHlwZSA9IHByZWRpY2F0ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKCFp
c0Jvb2xUeXBlKHByZWRpY2F0ZVR5cGUpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHRlcm5hcnlFeHByZXNzaW9uLmJvZHlFeHByZXNzaW9uKCkpOworICAgICAgICBhdXRvIGJvZHlJ
dGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZ0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lv
bigpKTsKKyAgICAgICAgQVNTRVJUKGJvZHlJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOwor
ICAgICAgICBhdXRvJiBib2R5VHlwZSA9IGJvZHlJdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkpOwor
ICAgICAgICBhdXRvIGVsc2VJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZ0ZXJuYXJ5RXhwcmVz
c2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKKyAgICAgICAgQVNTRVJUKGVsc2VJdGVyYXRvciAhPSBt
X3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBlbHNlVHlwZSA9IGVsc2VJdGVyYXRvci0+
dmFsdWU7CisKKyAgICAgICAgYXV0byByZXN1bHRUeXBlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VW
aXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIGJvZHlUeXBlKSAt
PiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICAgICAgcmV0dXJu
IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5u
YW1lZFR5cGU+JiBlbHNlVHlwZSkgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
IHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcygqYm9keVR5cGUsICplbHNlVHlwZSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBib2R5VHlwZS0+Y2xvbmUoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2U+JiBlbHNlVHlwZSkgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5
cGU+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQoKmJvZHlUeXBlLCBl
bHNlVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAgICAgICB9KSwgZWxzZVR5cGUpOwor
ICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgYm9keVR5cGUpIC0+
IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgICAgICByZXR1cm4g
V1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5h
bWVkVHlwZT4mIGVsc2VUeXBlKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4g
eworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdCgqZWxzZVR5cGUsIGJvZHlU
eXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2U+JiBlbHNlVHlwZSkgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1l
ZFR5cGU+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQoYm9keVR5cGUt
PnJlc29sdmFibGVUeXBlKCksIGVsc2VUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAg
ICAgIH0pLCBlbHNlVHlwZSk7CisgICAgICAgIH0pLCBib2R5VHlwZSk7CisgICAgICAgIGlmICgh
cmVzdWx0VHlwZSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJnRl
cm5hcnlFeHByZXNzaW9uLCBXVEZNb3ZlKHJlc3VsdFR5cGUpKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lk
IHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50
cygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCphcmd1bWVudCk7CisgICAgICAg
IGlmIChjYWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpKQorICAgICAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGNhbGxFeHByZXNzaW9uLmNhc3RSZXR1cm5UeXBlKCktPmdldCgpKTsKKyAg
ICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHR5cGVz
OworICAgICAgICB0eXBlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNhbGxFeHByZXNzaW9uLmFy
Z3VtZW50cygpLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYXJndW1lbnQgOiBjYWxsRXhw
cmVzc2lvbi5hcmd1bWVudHMoKSkgeworICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fdHlw
ZU1hcC5maW5kKGFyZ3VtZW50LmdldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpdGVyYXRvciAh
PSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICAgICAgdHlwZXMudW5jaGVja2VkQXBwZW5kKGl0
ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoY2FsbEV4cHJlc3Np
b24uaGFzT3ZlcmxvYWRzKCkpOworICAgICAgICBhdXRvKiBmdW5jdGlvbiA9IHJlc29sdmVGdW5j
dGlvbk92ZXJsb2FkSW1wbCgqY2FsbEV4cHJlc3Npb24ub3ZlcmxvYWRzKCksIHR5cGVzLCBjYWxs
RXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgaWYgKCFmdW5jdGlvbikgewor
ICAgICAgICAgICAgaWYgKGF1dG8gbmV3RnVuY3Rpb24gPSByZXNvbHZlQnlJbnN0YW50aWF0aW9u
KGNhbGxFeHByZXNzaW9uLCB0eXBlcywgbV9pbnRyaW5zaWNzKSkgeworICAgICAgICAgICAgICAg
IG1fcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmV3RnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAg
ICBmdW5jdGlvbiA9IG1fcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpLmxhc3Qo
KS5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZnVuY3Rp
b24pIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLT5wYXJhbWV0
ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IFdURjo6dmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
JikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPiht
YXRjaEFuZENvbW1pdChmdW5jdGlvbi0+cGFyYW1ldGVycygpW2ldLnR5cGUoKSwgcmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgIH0pLCB0eXBl
c1tpXS5nZXQoKSk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGNhbGxFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCpmdW5jdGlvbik7
CisKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZjYWxsRXhwcmVzc2lv
biwgZnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRS
ZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKK3ByaXZhdGU6CisKKyAgICAv
KmNsYXNzIFJlc29sdmluZ1R5cGVIYXNoVHJhaXRzIDogcHVibGljIFNpbXBsZUNsYXNzSGFzaFRy
YWl0czxSZXNvbHZpbmdUeXBlPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBS
ZXNvbHZpbmdUeXBlJiBlbXB0eVZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVzb2x2
aW5nVHlwZT4gZW1wdHlWYWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVZhbHVlLmdldCgp
OworICAgICAgICB9CisKKyAgICAgICAgdHlwZWRlZiBSZXNvbHZpbmdUeXBlJiBQZWVrVHlwZTsK
KyAgICAgICAgc3RhdGljIFBlZWtUeXBlIHBlZWsoUmVzb2x2aW5nVHlwZSYgdmFsdWUpIHsgcmV0
dXJuIHZhbHVlOyB9CisgICAgICAgIHR5cGVkZWYgUmVzb2x2aW5nVHlwZSYmIFRha2VUeXBlOwor
ICAgICAgICBzdGF0aWMgVGFrZVR5cGUgdGFrZShSZXNvbHZpbmdUeXBlJiYgdmFsdWUpIHsgcmV0
dXJuIFdURk1vdmUodmFsdWUpOyB9CisgICAgfTsqLworCisgICAgSGFzaE1hcDxBU1Q6OkV4cHJl
c3Npb24qLCBSZXNvbHZpbmdUeXBlIC8qLCBXVEY6OlB0ckhhc2g8QVNUOjpFeHByZXNzaW9uKj4s
IFdURjo6SGFzaFRyYWl0czxBU1Q6OkV4cHJlc3Npb24qPiwgUmVzb2x2aW5nVHlwZUhhc2hUcmFp
dHMqLz4gbV90eXBlTWFwOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3ZlcnRleEVudHJ5UG9pbnRz
OworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50RW50cnlQb2ludHM7CisgICAgSGFzaFNl
dDxTdHJpbmc+IG1fY29tcHV0ZUVudHJ5UG9pbnRzOworICAgIGNvbnN0IEludHJpbnNpY3MmIG1f
aW50cmluc2ljczsKKyAgICBQcm9ncmFtJiBtX3Byb2dyYW07Cit9OworCitib29sIGNoZWNrKFBy
b2dyYW0mIHByb2dyYW0pCit7CisgICAgQ2hlY2tlciBjaGVja2VyKHByb2dyYW0uaW50cmluc2lj
cygpLCBwcm9ncmFtKTsKKyAgICBjaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtKTsK
KyAgICByZXR1cm4gIWNoZWNrZXIuZXJyb3IoKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWQyNjhkNzM0MWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENo
ZWNrZXIuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExT
TCB7CisKK2NsYXNzIFByb2dyYW07CisKK2Jvb2wgY2hlY2soUHJvZ3JhbSYpOworCit9CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhiNWI0YjNmNTVlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBv
aW50SXRlbXMuY3BwCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEdhdGhlckVudHJ5
UG9pbnRJdGVtcy5oIgorCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUg
IldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEdhdGhlcmVyIDogcHVibGlj
IFZpc2l0b3IgeworcHVibGljOgorICAgIEdhdGhlcmVyKGNvbnN0IEludHJpbnNpY3MmIGludHJp
bnNpY3MsIEFTVDo6U2VtYW50aWMqIHNlbWFudGljID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2lu
dHJpbnNpY3MoaW50cmluc2ljcykKKyAgICAgICAgLCBtX2N1cnJlbnRTZW1hbnRpYyhzZW1hbnRp
YykKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+R2F0aGVyZXIoKSA9IGRlZmF1bHQ7CisK
KyAgICB2b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIG1fY3VycmVudFNlbWFudGljID0gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiYgdGFrZUVudHJ5UG9p
bnRJdGVtcygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX2VudHJ5UG9pbnRJdGVt
cyk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYp
CisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBz
ZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fZW50
cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShtX3R5cGVSZWZlcmVuY2VzLmxhc3Qo
KS5nZXQoKSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQorICAgIHsK
KyAgICAgICAgaWYgKCFtX2N1cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobWF0Y2hlcyhu
YXRpdmVUeXBlRGVjbGFyYXRpb24sIG1faW50cmluc2ljcy52b2lkVHlwZSgpKSkgeworICAgICAg
ICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShtX3R5cGVSZWZlcmVu
Y2VzLmxhc3QoKS5nZXQoKSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9p
ZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCisg
ICAgeworICAgICAgICBpZiAobV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1
dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1l
bnRzKCkpIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkpCisg
ICAgICAgICAgICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSAmKnN0cnVjdHVyZUVsZW1lbnQuc2Vt
YW50aWMoKTsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVFbGVtZW50
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlv
biYgdHlwZURlZmluaXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQodHlwZURlZmluaXRpb24u
dHlwZSgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlRGVmaW5pdGlvbi50eXBl
KCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVm
ZXJlbmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBl
KCkpOworICAgICAgICBtX3R5cGVSZWZlcmVuY2VzLmFwcGVuZCh0eXBlUmVmZXJlbmNlKTsKKyAg
ICAgICAgYXV0byBkZXB0aCA9IG1fdHlwZVJlZmVyZW5jZXMuc2l6ZSgpOworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBB
U1NFUlRfVU5VU0VEKGRlcHRoLCBtX3R5cGVSZWZlcmVuY2VzLnNpemUoKSA9PSBkZXB0aCk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkKKyAg
ICB7CisgICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRyeVBv
aW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKHBvaW50ZXJUeXBlLCAqbV9jdXJyZW50U2Vt
YW50aWMpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
JiBhcnJheVJlZmVyZW5jZVR5cGUpCisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFu
dGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShh
cnJheVJlZmVyZW5jZVR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkKKyAgICB7CisgICAgICAgIGlmICgh
bV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVu
dHJ5UG9pbnRJdGVtKGFycmF5VHlwZSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRp
b24pCisgICAgeworICAgICAgICBBU1NFUlQoIW1fY3VycmVudFNlbWFudGljKTsKKyAgICAgICAg
aWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKKyAgICAgICAgICAgIG1fY3VycmVu
dFNlbWFudGljID0gJip2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCk7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIGNvbnN0IEludHJpbnNpY3MmIG1faW50cmluc2ljczsKKyAgICBBU1Q6OlNl
bWFudGljKiBtX2N1cnJlbnRTZW1hbnRpYyB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlR5cGVSZWZlcmVuY2U+PiBtX3R5cGVSZWZlcmVuY2VzOwor
ICAgIFZlY3RvcjxFbnRyeVBvaW50SXRlbT4gbV9lbnRyeVBvaW50SXRlbXM7Cit9OworCitPcHRp
b25hbDxFbnRyeVBvaW50SXRlbXM+IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhjb25zdCBJbnRyaW5z
aWNzJiBpbnRyaW5zaWNzLCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0
aW9uKQoreworICAgIEFTU0VSVChmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSk7
CisgICAgR2F0aGVyZXIgaW5wdXRHYXRoZXJlcihpbnRyaW5zaWNzKTsKKyAgICBmb3IgKGF1dG8m
IHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkpIHsKKyAgICAgICAg
aW5wdXRHYXRoZXJlci5yZXNldCgpOworICAgICAgICBpbnB1dEdhdGhlcmVyLmNoZWNrRXJyb3JB
bmRWaXNpdChwYXJhbWV0ZXIpOworICAgICAgICBpZiAoaW5wdXRHYXRoZXJlci5lcnJvcigpKQor
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisgICAgR2F0aGVyZXIgb3V0
cHV0R2F0aGVyZXIoaW50cmluc2ljcywgZnVuY3Rpb25EZWZpbml0aW9uLnNlbWFudGljKCkgPyAm
KmZ1bmN0aW9uRGVmaW5pdGlvbi5zZW1hbnRpYygpIDogbnVsbHB0cik7CisgICAgb3V0cHV0R2F0
aGVyZXIuY2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAg
IGlmIChvdXRwdXRHYXRoZXJlci5lcnJvcigpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgcmV0dXJuIHt7IGlucHV0R2F0aGVyZXIudGFrZUVudHJ5UG9pbnRJdGVtcygpLCBv
dXRwdXRHYXRoZXJlci50YWtlRW50cnlQb2ludEl0ZW1zKCkgfX07Cit9CisKK30KKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFBhcmFtZXRlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpyZW5hbWUg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQYXJhbWV0
ZXIuaApyZW5hbWUgdG8gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xH
YXRoZXJFbnRyeVBvaW50SXRlbXMuaAppbmRleCA5MjU4NmY4NjkxZi4uZTFlYjgyOTIxYTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFBh
cmFtZXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
R2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKQEAgLTI3LDEzICsyNyw5IEBACiAKICNpZiBFTkFCTEUo
V0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xMZXhlci5oIgotI2luY2x1ZGUgIldITFNMUXVhbGlm
aWVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5o
IgotI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsMzYgKzM3LDMwIEBAIG5hbWVzcGFjZSBXSExT
TCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBQYXJhbWV0ZXIgOiBwdWJsaWMgVmFsdWUg
ewotcHVibGljOgotICAgIFBhcmFtZXRlcihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFF1YWxpZmll
cnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5cGUsIE9wdGlv
bmFsPFN0cmluZz4mJiBuYW1lLCBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiYmIHNlbWFudGljKQot
ICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX3F1YWxpZmll
cnMoV1RGTW92ZShxdWFsaWZpZXJzKSkKLSAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkK
LSAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKLSAgICAgICAgLCBtX3NlbWFudGljKFdU
Rk1vdmUoc2VtYW50aWMpKQotICAgIHsKLSAgICB9CitjbGFzcyBGdW5jdGlvbkRlZmluaXRpb247
CiAKLSAgICB2aXJ0dWFsIH5QYXJhbWV0ZXIoKSA9IGRlZmF1bHQ7Cit9CiAKLSAgICBQYXJhbWV0
ZXIoY29uc3QgUGFyYW1ldGVyJikgPSBkZWxldGU7Ci0gICAgUGFyYW1ldGVyKFBhcmFtZXRlciYm
KSA9IGRlZmF1bHQ7CitjbGFzcyBJbnRyaW5zaWNzOworY2xhc3MgVW5uYW1lZFR5cGU7CiAKLSAg
ICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQotICAgIE9wdGlvbmFsPEFTVDo6U2Vt
YW50aWM+JiBzZW1hbnRpYygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KK3N0cnVjdCBFbnRyeVBv
aW50SXRlbSB7CisgICAgRW50cnlQb2ludEl0ZW0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5
cGUsIEFTVDo6U2VtYW50aWMmIHNlbWFudGljKQorICAgICAgICA6IHVubmFtZWRUeXBlKHVubmFt
ZWRUeXBlKQorICAgICAgICAsIHNlbWFudGljKHNlbWFudGljKQorICAgIHsKKyAgICB9CiAKLXBy
aXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwotICAgIFF1YWxpZmllcnMgbV9xdWFs
aWZpZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKLSAgICBPcHRp
b25hbDxTdHJpbmc+IG1fbmFtZTsKLSAgICBPcHRpb25hbDxBU1Q6OlNlbWFudGljPiBtX3NlbWFu
dGljOworICAgIEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlOworICAgIEFTVDo6U2VtYW50
aWMmIHNlbWFudGljOwogfTsKIAotdHlwZWRlZiBWZWN0b3I8UGFyYW1ldGVyPiBQYXJhbWV0ZXJz
Oworc3RydWN0IEVudHJ5UG9pbnRJdGVtcyB7CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBp
bnB1dHM7CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBvdXRwdXRzOworfTsKIAotfQorT3B0
aW9uYWw8RW50cnlQb2ludEl0ZW1zPiBnYXRoZXJFbnRyeVBvaW50SXRlbXMoY29uc3QgSW50cmlu
c2ljcyYsIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQ2ZTI2MzIwMTRhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZl
clR5cGVzLmNwcApAQCAtMCwwICsxLDIzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgi
CisKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZh
YmxlVHlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K3N0YXRpYyBib29sIG1hdGNoZXMoY29uc3QgQVNUOjpUeXBlJiB1bmlmeVRoaXMsIGNvbnN0IEFT
VDo6VHlwZSYgdW5pZnlPdGhlcikKK3sKKyAgICBpZiAoJnVuaWZ5VGhpcyA9PSAmdW5pZnlPdGhl
cikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVu
aWZ5VGhpcykgJiYgaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5T3RoZXIpKSB7CisjaWYgIUFTU0VS
VF9ESVNBQkxFRAorICAgICAgICBhdXRvJiBuYW1lZFRoaXMgPSBkb3duY2FzdDxBU1Q6Ok5hbWVk
VHlwZT4odW5pZnlUaGlzKTsKKyAgICAgICAgYXV0byYgbmFtZWRPdGhlciA9IGRvd25jYXN0PEFT
VDo6TmFtZWRUeXBlPih1bmlmeU90aGVyKTsKKyAgICAgICAgQVNTRVJUKCFpczxBU1Q6OlR5cGVE
ZWZpbml0aW9uPihuYW1lZFRoaXMpICYmICFpczxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZE90
aGVyKSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAoaXM8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlUaGlzKSAmJiBpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlm
eU90aGVyKSkgeworICAgICAgICBhdXRvJiB1bm5hbWVkVGhpcyA9IGRvd25jYXN0PEFTVDo6VW5u
YW1lZFR5cGU+KHVuaWZ5VGhpcyk7CisgICAgICAgIGF1dG8mIHVubmFtZWRPdGhlciA9IGRvd25j
YXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5T3RoZXIpOworICAgICAgICBBU1NFUlQoIWlzPEFT
VDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFRoaXMpICYmICFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+
KHVubmFtZWRPdGhlcikpOworICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1l
ZFRoaXMpICYmIGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRPdGhlcikpIHsKKyAgICAgICAg
ICAgIGF1dG8mIHBvaW50ZXJUaGlzID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1l
ZFRoaXMpOworICAgICAgICAgICAgYXV0byYgcG9pbnRlck90aGVyID0gZG93bmNhc3Q8QVNUOjpQ
b2ludGVyVHlwZT4odW5uYW1lZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChwb2ludGVyVGhpcy5h
ZGRyZXNzU3BhY2UoKSAhPSBwb2ludGVyT3RoZXIuYWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMocG9pbnRlclRo
aXMuZWxlbWVudFR5cGUoKSwgcG9pbnRlck90aGVyLmVsZW1lbnRUeXBlKCkpOworICAgICAgICB9
CisgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFRoaXMpICYm
IGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkT3RoZXIpKXsKKyAgICAgICAgICAg
IGF1dG8mIGFycmF5UmVmZXJlbmNlVGhpcyA9IGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZU90aGVy
ID0gZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRPdGhlcik7CisgICAg
ICAgICAgICBpZiAoYXJyYXlSZWZlcmVuY2VUaGlzLmFkZHJlc3NTcGFjZSgpICE9IGFycmF5UmVm
ZXJlbmNlT3RoZXIuYWRkcmVzc1NwYWNlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlSZWZlcmVuY2VUaGlzLmVsZW1lbnRU
eXBlKCksIGFycmF5UmVmZXJlbmNlT3RoZXIuZWxlbWVudFR5cGUoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJh
eVR5cGU+KHVubmFtZWRPdGhlcikpIHsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5VGhpcyA9IGRv
d25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRvJiBh
cnJheU90aGVyID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRPdGhlcik7CisgICAg
ICAgICAgICBpZiAoYXJyYXlUaGlzLm51bUVsZW1lbnRzKCkgIT0gYXJyYXlPdGhlci5udW1FbGVt
ZW50cygpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVy
biBtYXRjaGVzKGFycmF5VGhpcy50eXBlKCksIGFycmF5T3RoZXIudHlwZSgpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBB
U1Q6OlVubmFtZWRUeXBlJiBvdGhlcikKK3sKKyAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlw
ZS51bmlmeU5vZGUoKSwgb3RoZXIudW5pZnlOb2RlKCkpOworfQorCitib29sIG1hdGNoZXMoY29u
c3QgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSwgY29uc3QgQVNUOjpOYW1lZFR5cGUmIG90aGVy
KQoreworICAgIHJldHVybiBtYXRjaGVzKG5hbWVkVHlwZS51bmlmeU5vZGUoKSwgb3RoZXIudW5p
ZnlOb2RlKCkpOworfQorCitib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5u
YW1lZFR5cGUsIGNvbnN0IEFTVDo6TmFtZWRUeXBlJiBvdGhlcikKK3sKKyAgICByZXR1cm4gbWF0
Y2hlcyh1bm5hbWVkVHlwZS51bmlmeU5vZGUoKSwgb3RoZXIudW5pZnlOb2RlKCkpOworfQorCitz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFT
VDo6VHlwZSYgdW5pZnlOb2RlLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkK
K3sKKyAgICBpZiAoIXJlc29sdmFibGVUeXBlLmNhblJlc29sdmUodW5pZnlOb2RlKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
IHJlc3VsdDsKKyAgICBpZiAoaXM8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAg
ICAgYXV0byYgbmFtZWRVbmlmeU5vZGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlO
b2RlKTsKKyAgICAgICAgcmVzdWx0ID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihuYW1lZFVuaWZ5Tm9kZS5vcmlnaW4oKSksIG5hbWVkVW5pZnlOb2RlKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgcmVzdWx0ID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2Rl
KS5jbG9uZSgpOworICAgIEFTU0VSVCghcmVzb2x2YWJsZVR5cGUucmVzb2x2ZWRUeXBlKCkpOwor
ICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUocmVzdWx0LT5jbG9uZSgpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRD
b21taXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIEFTVDo6UmVzb2x2YWJsZVR5cGUm
IHJlc29sdmFibGVUeXBlKQoreworICAgIHJldHVybiBtYXRjaEFuZENvbW1pdCh1bm5hbWVkVHlw
ZS51bmlmeU5vZGUoKSwgcmVzb2x2YWJsZVR5cGUpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSwg
QVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCit7CisgICAgcmV0dXJuIG1hdGNo
QW5kQ29tbWl0KG5hbWVkVHlwZS51bmlmeU5vZGUoKSwgcmVzb2x2YWJsZVR5cGUpOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpSZXNv
bHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUxLCBBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZh
YmxlVHlwZTIpCit7CisgICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZTEucmVzb2x2ZWRUeXBlKCkp
OworICAgIEFTU0VSVCghcmVzb2x2YWJsZVR5cGUyLnJlc29sdmVkVHlwZSgpKTsKKyAgICBpZiAo
aXM8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpICYmIGlzPEFTVDo6Rmxv
YXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKSkgeworICAgICAgICByZXNvbHZhYmxlVHlw
ZTEucmVzb2x2ZShkb3duY2FzdDxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBl
MSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXNvbHZhYmxlVHlwZTIucmVz
b2x2ZShkb3duY2FzdDxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikucHJl
ZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpGbG9h
dExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOwor
ICAgIH0KKyAgICBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBl
MSkgJiYgaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikpIHsKKyAg
ICAgICAgcmVzb2x2YWJsZVR5cGUxLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJh
bFR5cGU+KHJlc29sdmFibGVUeXBlMSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAg
ICByZXNvbHZhYmxlVHlwZTIucmVzb2x2ZShkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlw
ZT4ocmVzb2x2YWJsZVR5cGUyKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5w
cmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6VW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKSkgeworICAgICAgICByZXNvbHZhYmxl
VHlwZTEucmVzb2x2ZShkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihy
ZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmVzb2x2
YWJsZVR5cGUyLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlw
ZT4ocmVzb2x2YWJsZVR5cGUyKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxl
VHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpO
dWxsTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpOdWxsTGl0ZXJhbFR5
cGU+KHJlc29sdmFibGVUeXBlMikpIHsKKyAgICAgICAgLy8gRklYTUU6IFRyeWluZyB0byBtYXRj
aCBudWxscHRyIGFuZCBudWxscHRyIGZhaWxzLgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFt
ZWRUeXBlPiBjb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2YWJsZVR5cGUpCit7Cisg
ICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgaWYgKGlzPEFT
VDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7CisgICAgICAgIHJlc29sdmFi
bGVUeXBlLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxl
VHlwZSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8
QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkucHJlZmVycmVkVHlwZSgpLmNs
b25lKCk7CisgICAgfQorICAgIGlmIChpczxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2
YWJsZVR5cGUpKSB7CisgICAgICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUoZG93bmNhc3Q8QVNU
OjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKS5wcmVmZXJyZWRUeXBlKCkuY2xv
bmUoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4o
cmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgIH0KKyAgICBpZiAo
aXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7Cisg
ICAgICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVn
ZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsK
KyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+
KHJlc29sdmFibGVUeXBlKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsKKyAgICB9CisgICAgaWYg
KGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkpIHsKKyAgICAgICAgLy8g
RklYTUU6IFRyeWluZyB0byBtYXRjaCBudWxscHRyIGFuZCBudWxscHRyIGZhaWxzLgorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wg
aW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMoQVNUOjpOYW1lZFR5cGUmIHBvc3NpYmxlVHlwZSwg
QVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKQoreworICAgIGlmIChpczxBU1Q6OlR5
cGVEZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpCisgICAgICAgIHx8IGlzPEFTVDo6U3RydWN0dXJl
RGVmaW5pdGlvbj4ocG9zc2libGVUeXBlKQorICAgICAgICB8fCBpczxBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbj4ocG9zc2libGVUeXBlKSkgeworICAgICAgICByZXR1cm4gdHlwZUFyZ3VtZW50
cy5pc0VtcHR5KCk7CisgICAgfQorCisgICAgQVNTRVJUKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uPihwb3NzaWJsZVR5cGUpKTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24g
PSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocG9zc2libGVUeXBlKTsKKyAg
ICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgIT0gdHlw
ZUFyZ3VtZW50cy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgQVNUOjpDb25zdGFudEV4cHJlc3Npb24qIHR5cGVBcmd1bWVudEV4
cHJlc3Npb24gPSBudWxscHRyOworICAgICAgICBBU1Q6OlR5cGVSZWZlcmVuY2UqIHR5cGVBcmd1
bWVudFR5cGVSZWZlcmVuY2UgPSBudWxscHRyOworICAgICAgICBBU1Q6OkNvbnN0YW50RXhwcmVz
c2lvbiogbmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVzc2lvbiA9IG51bGxwdHI7CisgICAgICAgIEFT
VDo6VHlwZVJlZmVyZW5jZSogbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSA9IG51bGxw
dHI7CisKKyAgICAgICAgYXV0byBhc3NpZ24gPSBbJl0oQVNUOjpUeXBlQXJndW1lbnQmIHR5cGVB
cmd1bWVudCwgQVNUOjpDb25zdGFudEV4cHJlc3Npb24qJiBleHByZXNzaW9uLCBBU1Q6OlR5cGVS
ZWZlcmVuY2UqJiB0eXBlUmVmZXJlbmNlKSB7CisgICAgICAgICAgICBXVEY6OnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Np
b24pIHsKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uID0gJmNvbnN0YW50RXhwcmVzc2lvbjsK
KyAgICAgICAgICAgIH0sIFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVmZXJlbmNlPiYg
dGhlVHlwZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgICAgIHR5cGVSZWZlcmVuY2UgPSB0aGVU
eXBlUmVmZXJlbmNlLmdldCgpOworICAgICAgICAgICAgfSksIHR5cGVBcmd1bWVudCk7CisgICAg
ICAgIH07CisKKyAgICAgICAgYXNzaWduKHR5cGVBcmd1bWVudHNbaV0sIHR5cGVBcmd1bWVudEV4
cHJlc3Npb24sIHR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpOworICAgICAgICBhc3NpZ24obmF0
aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVtpXSwgbmF0aXZlVHlwZUFyZ3VtZW50
RXhwcmVzc2lvbiwgbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSk7CisKKyAgICAgICAg
aWYgKHR5cGVBcmd1bWVudEV4cHJlc3Npb24gJiYgbmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVzc2lv
bikgeworICAgICAgICAgICAgaWYgKCF0eXBlQXJndW1lbnRFeHByZXNzaW9uLT5tYXRjaGVzKCpu
YXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSAmJiBuYXRp
dmVUeXBlQXJndW1lbnRUeXBlUmVmZXJlbmNlKSB7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMo
KnR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UsICpuYXRpdmVUeXBlQXJndW1lbnRUeXBlUmVmZXJl
bmNlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBpbmZlclR5cGVzRm9yQ2FsbChBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rpb24sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgT3B0aW9uYWw8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+JiBjYXN0UmV0dXJuVHlwZSkKK3sKKyAgICBp
ZiAocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IGFyZ3VtZW50VHlwZXMu
c2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwb3NzaWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBh
dXRvIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAgICAg
ICAgcmV0dXJuIG1hdGNoZXMocG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgp
LCAqdW5uYW1lZFR5cGUpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0
dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUo
cG9zc2libGVGdW5jdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgpKTsKKyAgICAgICAgfSksIGFy
Z3VtZW50VHlwZXNbaV0uZ2V0KCkpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChjYXN0UmV0dXJuVHlwZSAmJiAhbWF0Y2hl
cyhjYXN0UmV0dXJuVHlwZS0+Z2V0KCksIHBvc3NpYmxlRnVuY3Rpb24udHlwZSgpKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit9CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTElu
ZmVyVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5m
ZXJUeXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42M2IwNjEw
YzNlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMSW5mZXJUeXBlcy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFJlc29sdmlu
Z1R5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgPG1lbW9y
eT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3Bh
Y2UgQVNUIHsKKworY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNzIE5hbWVkVHlwZTsK
K2NsYXNzIFJlc29sdmFibGVUeXBlOworY2xhc3MgVW5uYW1lZFR5cGU7CisKK30KKworYm9vbCBt
YXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBBU1Q6OlVubmFtZWRUeXBlJik7
Citib29sIG1hdGNoZXMoY29uc3QgQVNUOjpOYW1lZFR5cGUmLCBjb25zdCBBU1Q6Ok5hbWVkVHlw
ZSYpOworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBBU1Q6Ok5h
bWVkVHlwZSYpOworLy8gRklYTUU6IElzIGFueW9uZSBhY3R1YWxseSB1c2luZyB0aGUgcmV0dXJu
IHR5cGUgaGVyZT8KK3N0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENv
bW1pdChBU1Q6OlVubmFtZWRUeXBlJiwgQVNUOjpSZXNvbHZhYmxlVHlwZSYpOworc3RkOjp1bmlx
dWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6TmFtZWRUeXBlJiwg
QVNUOjpSZXNvbHZhYmxlVHlwZSYpOworc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
IG1hdGNoQW5kQ29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmLCBBU1Q6OlJlc29sdmFibGVUeXBl
Jik7CitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gY29tbWl0KEFTVDo6UmVzb2x2
YWJsZVR5cGUmKTsKK2Jvb2wgaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMoQVNUOjpOYW1lZFR5
cGUmIHBvc3NpYmxlVHlwZSwgQVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKTsKK2Jv
b2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBwb3NzaWJsZUZ1
bmN0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFy
Z3VtZW50VHlwZXMsIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5
cGU+PiYgY2FzdFJldHVyblR5cGUpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNzLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2Y0ZmJjM2E3NDMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTElu
dHJpbnNpY3MuY3BwCkBAIC0wLDAgKzEsNDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3Mu
aCIKKworI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNs
dWRlIDxhbGdvcml0aG0+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNM
IHsKKworSW50cmluc2ljczo6SW50cmluc2ljcygpCisgICAgOiBtX3RleHR1cmVUeXBlTmFtZXMg
eyBTdHJpbmcoIlRleHR1cmUxRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAg
ICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUxRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLAorICAgICAgICAgICAgU3RyaW5nKCJUZXh0dXJlMURBcnJheSIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUxREFycmF5Iiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1
cmUyRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5n
KCJSV1RleHR1cmUyRCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAg
ICAgU3RyaW5nKCJUZXh0dXJlMkRBcnJheSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LAorICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUyREFycmF5IiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUzRCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJSV1RleHR1cmUzRCIs
IFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJUZXh0
dXJlQ3ViZSIsICBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSB9CisgICAgLCBtX3RleHR1
cmVJbm5lclR5cGVOYW1lcyB7IFN0cmluZygidWNoYXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygidXNob3J0IiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoInVpbnQiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiY2hhciIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJzaG9ydCIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJpbnQiLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiaGFsZiIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJmbG9hdCIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0KKyAgICAsIG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBl
cyB7IFN0cmluZygiaGFsZiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAg
ICAgICAgU3RyaW5nKCJmbG9hdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpIH0KK3sK
KyAgICBBU1NFUlQobV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKSA9PSAxMSk7IC8vIGZ1bGxUZXh0
dXJlcyBoYXJkY29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorICAgIEFTU0VSVChtX3Rl
eHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCkgPT0gOCk7IC8vIGZ1bGxUZXh0dXJlcyBoYXJkY29k
ZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorICAgIEFTU0VSVChtX2RlcHRoVGV4dHVyZUlu
bmVyVHlwZXMuc2l6ZSgpID09IDIpOyAvLyB0ZXh0dXJlRGVwdGgyRCAmIGZyaWVuZHMgaGFyZGNv
ZGVzIHRoZSBsZW5ndGggb2YgdGhpcyBhcnJheS4KK30KKwordm9pZCBJbnRyaW5zaWNzOjphZGQo
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJikKK3sKKyAgICAvLyBGSVhNRTogUG9wdWxh
dGUgdGhpcy4KK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRQcmltaXRpdmUoQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobmF0aXZl
VHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgIT0gMCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInZv
aWQiKQorICAgICAgICBtX3ZvaWRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBl
bHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJib29sIikKKyAgICAgICAg
bV9ib29sVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZl
VHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidWNoYXIiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0
SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2Vu
dEludGVnZXIoW10oaW50IHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4ID49IDAgJiYgeCA8PSAw
eEZGOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJl
cHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4KSB7CisgICAgICAgICAgICByZXR1
cm4geCA8PSAweEZGOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9u
LnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8dWludDhfdD4oeCkpID09IHg7CisgICAgICAg
IH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0U3VjY2Vzc29yKFtdKGludDY0
X3QgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhf
dD4oeCArIDEpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNl
dEZvcm1hdFZhbHVlRnJvbUludGVnZXIoW10oaW50IHgpIC0+IGludDY0X3QgeworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAg
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcihb
XSh1bnNpZ25lZCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50OF90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRJdGVyYXRlQWxsVmFsdWVzKFtdKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2NF90
KT4mIGNhbGxiYWNrKSB7CisgICAgICAgICAgICBmb3IgKGludDY0X3QgaSA9IDA7IGkgPCAweDEw
MDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGkpKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1fdWNo
YXJUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVzaG9ydCIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnNldElzSW50KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJ
c051bWJlcigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50
SW50ZWdlcihbXShpbnQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPj0gMCAmJiB4IDw9IDB4
RkZGRjsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5S
ZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAgICAgICAgICAgcmV0
dXJuIHggPD0gMHhGRkZGOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHgpKSA9PSB4OworICAg
ICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldFN1Y2Nlc3NvcihbXShp
bnQ2NF90IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVp
bnQxNl90Pih4ICsgMSk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uc2V0Rm9ybWF0VmFsdWVGcm9tSW50ZWdlcihbXShpbnQgeCkgLT4gaW50NjRfdCB7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHgpOworICAgICAgICB9KTsKKyAg
ICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50
ZWdlcihbXSh1bnNpZ25lZCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1aW50MTZfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uc2V0SXRlcmF0ZUFsbFZhbHVlcyhbXShjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2wo
aW50NjRfdCk+JiBjYWxsYmFjaykgeworICAgICAgICAgICAgZm9yIChpbnQ2NF90IGkgPSAwOyBp
IDwgMHgxMDAwMDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGkpKQorICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAg
ICAgIG1fdXNob3J0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlm
IChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1aW50IikgeworICAgICAgICBuYXRp
dmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5S
ZXByZXNlbnRJbnRlZ2VyKFtdKGludCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA+PSAwOwor
ICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2Vu
dFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVz
ZW50RmxvYXQoW10oZmxvYXQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0PihzdGF0aWNfY2FzdDx1aW50MzJfdD4oeCkpID09IHg7CisgICAgICAgIH0pOworICAgICAg
ICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0U3VjY2Vzc29yKFtdKGludDY0X3QgeCkgLT4gaW50
NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHggKyAxKTsK
KyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1
ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1aW50MzJfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVk
IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90
Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJdGVy
YXRlQWxsVmFsdWVzKFtdKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2NF90KT4mIGNhbGxi
YWNrKSB7CisgICAgICAgICAgICBmb3IgKGludDY0X3QgaSA9IDA7IGkgPCAweDEwMDAwMDAwMDsg
KytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGkpKQorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1fdWludFR5
cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIH0gZWxzZSBpZiAobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAiY2hhciIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnNldElzSW50KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJl
cigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNTaWduZWQoKTsKKyAgICAg
ICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50IHgp
IHsKKyAgICAgICAgICAgIHJldHVybiB4ID49IC0xMjggJiYgeCA8PSAxMjc7CisgICAgICAgIH0p
OworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJ
bnRlZ2VyKFtdKHVuc2lnbmVkIHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4IDw9IDEyNzsKKyAg
ICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRG
bG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHN0YXRpY19jYXN0PGludDhfdD4oeCkpID09IHg7CisgICAgICAgIH0pOworICAgICAgICBuYXRp
dmVUeXBlRGVjbGFyYXRpb24uc2V0U3VjY2Vzc29yKFtdKGludDY0X3QgeCkgLT4gaW50NjRfdCB7
CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50OF90Pih4ICsgMSk7CisgICAgICAg
IH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tSW50
ZWdlcihbXShpbnQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50OF90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgLT4gaW50
NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50OF90Pih4KTsKKyAgICAg
ICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJdGVyYXRlQWxsVmFsdWVz
KFtdKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2NF90KT4mIGNhbGxiYWNrKSB7CisgICAg
ICAgICAgICBmb3IgKGludDY0X3QgaSA9IC0xMjg7IGkgPCAxMjg7ICsraSkgeworICAgICAgICAg
ICAgICAgIGlmIChjYWxsYmFjayhpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBtX2NoYXJUeXBlID0gJm5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gInNob3J0IikgeworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsK
KyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc1NpZ25lZCgpOworICAgICAgICBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQgeCkgeworICAgICAgICAgICAg
cmV0dXJuIHggPj0gLTMyNzY4ICYmIHggPD0gMzI3Njc7CisgICAgICAgIH0pOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVu
c2lnbmVkIHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4IDw9IDMyNzY3OworICAgICAgICB9KTsK
KyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZs
b2F0IHgpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nh
c3Q8aW50MTZfdD4oeCkpID09IHg7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uc2V0U3VjY2Vzc29yKFtdKGludDY0X3QgeCkgLT4gaW50NjRfdCB7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MTZfdD4oeCArIDEpOworICAgICAgICB9KTsKKyAg
ICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbUludGVnZXIoW10o
aW50IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDE2
X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZv
cm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4KSAtPiBpbnQ2NF90IHsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQxNl90Pih4KTsKKyAgICAgICAgfSk7
CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJdGVyYXRlQWxsVmFsdWVzKFtdKGNv
bnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2NF90KT4mIGNhbGxiYWNrKSB7CisgICAgICAgICAg
ICBmb3IgKGludDY0X3QgaSA9IC0zMjc2ODsgaSA8IDMyNzY4OyArK2kpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY2FsbGJhY2soaSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgbV9zaG9ydFR5cGUgPSAmbmF0aXZlVHlwZURl
Y2xhcmF0aW9uOworICAgIH0gZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9
PSAiaW50IikgeworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAg
ICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc1NpZ25lZCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFy
YXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQpIHsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENh
blJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4KSB7CisgICAgICAgICAgICBy
ZXR1cm4geCA8PSAyMTQ3NDgzNjQ3OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4oeCkpID09IHg7
CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0U3VjY2Vzc29y
KFtdKGludDY0X3QgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50MzJfdD4oeCArIDEpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbUludGVnZXIoW10oaW50IHgpIC0+IGludDY0X3Qgewor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHgpOworICAgICAgICB9KTsK
KyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbVVuc2lnbmVk
SW50ZWdlcihbXSh1bnNpZ25lZCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQzMl90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5zZXRJdGVyYXRlQWxsVmFsdWVzKFtdKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9v
bChpbnQ2NF90KT4mIGNhbGxiYWNrKSB7CisgICAgICAgICAgICBmb3IgKGludDY0X3QgaSA9IC0y
MTQ3NDgzNjQ3OyBpIDwgMjE0NzQ4MzY0ODsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNh
bGxiYWNrKGkpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSk7CisgICAgICAgIG1faW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247Cisg
ICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJoYWxmIikgewor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldElzRmxvYXRpbmcoKTsKKyAgICAgICAgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50KSB7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXRDYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQpIHsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9u
LnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG1faGFsZlR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0
aW9uOworICAgIH0gZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiZmxv
YXQiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOworICAg
ICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNGbG9hdGluZygpOworICAgICAgICBuYXRp
dmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbV9mbG9hdFR5cGUgPSAmbmF0aXZlVHlw
ZURlY2xhcmF0aW9uOworICAgIH0KKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24u
bmFtZSgpID09ICJhdG9taWNfaW50IikKKyAgICAgICAgbV9hdG9taWNJbnRUeXBlID0gJm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJhdG9taWNfdWludCIpCisgICAgICAgIG1fYXRvbWljVWludFR5cGUgPSAmbmF0aXZl
VHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gInNhbXBsZXIiKQorICAgICAgICBtX3NhbXBsZXJUeXBlID0gJm5hdGl2ZVR5cGVEZWNs
YXJhdGlvbjsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6OmFkZFZlY3RvcihBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlmIChuYXRpdmVU
eXBlRGVjbGFyYXRpb24ubmFtZSgpICE9ICJ2ZWN0b3IiKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXpl
KCkgPT0gMik7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8c3RkOjp1bmlxdWVf
cHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKClbMF0pKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSkp
OworICAgIGF1dG8mIGlubmVyVHlwZVBvaW50ZXIgPSBXVEY6OmdldDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMo
KVswXSk7CisgICAgYXV0byYgbGVuZ3RoRXhwcmVzc2lvbiA9IFdURjo6Z2V0PEFTVDo6Q29uc3Rh
bnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKTsK
KyAgICBBU1NFUlQoaW5uZXJUeXBlUG9pbnRlcik7CisgICAgYXV0byYgaW5uZXJUeXBlID0gKmlu
bmVyVHlwZVBvaW50ZXI7CisgICAgQVNTRVJUKGlubmVyVHlwZS50eXBlQXJndW1lbnRzKCkuc2l6
ZSgpID09IDApOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiogYXJyYXk7CisgICAg
aWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImJvb2wiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9y
Qm9vbDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJ1Y2hhciIpCisgICAgICAg
IGFycmF5ID0gbV92ZWN0b3JVY2hhcjsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09
ICJ1c2hvcnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yVXNob3J0OworICAgIGVsc2UgaWYg
KGlubmVyVHlwZS5uYW1lKCkgPT0gInVpbnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yVWlu
dDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJjaGFyIikKKyAgICAgICAgYXJy
YXkgPSBtX3ZlY3RvckNoYXI7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAic2hv
cnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yU2hvcnQ7CisgICAgZWxzZSBpZiAoaW5uZXJU
eXBlLm5hbWUoKSA9PSAiaW50IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3RvckludDsKKyAgICBl
bHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJoYWxmIikKKyAgICAgICAgYXJyYXkgPSBtX3Zl
Y3RvckhhbGY7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiZmxvYXQiKQorICAg
ICAgICBhcnJheSA9IG1fdmVjdG9yRmxvYXQ7CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICBpbnQgbGVuZ3RoID0gbGVuZ3RoRXhwcmVzc2lvbi5pbnRlZ2VyTGl0
ZXJhbCgpLnZhbHVlKCk7CisgICAgQVNTRVJUKGxlbmd0aCA+PSAyICYmIGxlbmd0aCA8PSA0KTsK
KyAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNWZWN0b3IoKTsKKyAgICBhcnJheVtsZW5n
dGggLSAyXSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgSW50cmluc2ljczo6YWRkTWF0cml4KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBu
YXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5u
YW1lKCkgIT0gIm1hdHJpeCIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChu
YXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAzKTsKKyAgICBB
U1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlUmVm
ZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAg
IEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihu
YXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgQVNTRVJUKFdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMl0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGVQb2lu
dGVyID0gV1RGOjpnZXQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pOworICAgIGF1dG8mIHJvd0V4cHJl
c3Npb24gPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xh
cmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSk7CisgICAgYXV0byYgY29sdW1uRXhwcmVzc2lvbiA9
IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24u
dHlwZUFyZ3VtZW50cygpWzJdKTsKKyAgICBBU1NFUlQoaW5uZXJUeXBlUG9pbnRlcik7CisgICAg
YXV0byYgaW5uZXJUeXBlID0gKmlubmVyVHlwZVBvaW50ZXI7CisgICAgQVNTRVJUKGlubmVyVHlw
ZS50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDApOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiAoKmFycmF5KVszXTsKKyAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiaGFsZiIp
CisgICAgICAgIGFycmF5ID0gbV9tYXRyaXhIYWxmOworICAgIGlmIChpbm5lclR5cGUubmFtZSgp
ID09ICJmbG9hdCIpCisgICAgICAgIGFycmF5ID0gbV9tYXRyaXhGbG9hdDsKKyAgICBpbnQgcm93
ID0gcm93RXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgpLnZhbHVlKCk7CisgICAgQVNTRVJUKHJv
dyA+PSAyICYmIHJvdyA8PSA0KTsKKyAgICBpbnQgY29sdW1uID0gY29sdW1uRXhwcmVzc2lvbi5p
bnRlZ2VyTGl0ZXJhbCgpLnZhbHVlKCk7CisgICAgQVNTRVJUKGNvbHVtbiA+PSAyICYmIGNvbHVt
biA8PSA0KTsKKyAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNNYXRyaXgoKTsKKyAgICBh
cnJheVtyb3cgLSAyXVtjb2x1bW4gLSAyXSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50cmluc2ljczo6YWRkRnVsbFRleHR1cmUoQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgQVNUOjpUeXBlUmVm
ZXJlbmNlJiBpbm5lclR5cGUpCit7CisgICAgdW5zaWduZWQgdGV4dHVyZVR5cGVJbmRleCA9IG1f
dGV4dHVyZVR5cGVOYW1lcy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
dGV4dHVyZVR5cGVOYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLm5hbWUoKSA9PSBtX3RleHR1cmVUeXBlTmFtZXNbaV0pCisgICAgICAgICAgICB0
ZXh0dXJlVHlwZUluZGV4ID0gaTsKKyAgICB9CisgICAgaWYgKHRleHR1cmVUeXBlSW5kZXggPT0g
bV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
dW5zaWduZWQgaW5uZXJUeXBlSW5kZXggPSBtX3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCk7
CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoaW5u
ZXJUeXBlLm5hbWUoKS5zdGFydHNXaXRoKG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzW2ldKSkgewor
ICAgICAgICAgICAgdGV4dHVyZVR5cGVJbmRleCA9IGk7CisgICAgICAgICAgICBpZiAoaW5uZXJU
eXBlLm5hbWUoKSA9PSBtX3RleHR1cmVJbm5lclR5cGVOYW1lc1tpXSkKKyAgICAgICAgICAgICAg
ICB2ZWN0b3JMZW5ndGggPSAxOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGlubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgPT0gbV90ZXh0dXJlSW5uZXJUeXBlTmFt
ZXNbaV0ubGVuZ3RoKCkgKyAxKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5uZXJUeXBlLm5h
bWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0gPT0gJzInCisgICAgICAgICAgICAg
ICAgICAgIHx8IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAtIDFd
ID09ICczJworICAgICAgICAgICAgICAgICAgICB8fCBpbm5lclR5cGUubmFtZSgpW2lubmVyVHlw
ZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSA9PSAnNCcpOworICAgICAgICAgICAgICAgIHZlY3Rvckxl
bmd0aCA9IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAtIDFdIC0g
JzAnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIEFTU0VSVChpbm5lclR5
cGVJbmRleCAhPSBtX3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCkpOworICAgIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5zZXRJc1RleHR1cmUoKTsKKyAgICBtX2Z1bGxUZXh0dXJlc1t0ZXh0dXJl
VHlwZUluZGV4XVtpbm5lclR5cGVJbmRleF1bdmVjdG9yTGVuZ3RoIC0gMV0gPSAmbmF0aXZlVHlw
ZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEludHJpbnNpY3M6OmFk
ZERlcHRoVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2UmIGlubmVyVHlwZSkKK3sKKyAgICBBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbioqIHRleHR1cmU7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5uYW1lKCkgPT0gIlRleHR1cmVEZXB0aDJEIikKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVy
ZURlcHRoMkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
UldUZXh0dXJlRGVwdGgyRCIpCisgICAgICAgIHRleHR1cmUgPSBtX3J3VGV4dHVyZURlcHRoMkQ7
CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZURl
cHRoMkRBcnJheSIpCisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVEZXB0aDJEQXJyYXk7Cisg
ICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlRGVw
dGgyREFycmF5IikKKyAgICAgICAgdGV4dHVyZSA9IG1fcndUZXh0dXJlRGVwdGgyREFycmF5Owor
ICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVEZXB0
aEN1YmUiKQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlRGVwdGhDdWJlOworICAgIGVsc2UK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgdW5zaWduZWQgaW5uZXJUeXBlSW5k
ZXggPSBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzW2ldKQor
ICAgICAgICAgICAgaW5uZXJUeXBlSW5kZXggPSBpOworICAgIH0KKyAgICBBU1NFUlQoaW5uZXJU
eXBlSW5kZXggIT0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKSk7CisgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldElzVGV4dHVyZSgpOworICAgIHRleHR1cmVbaW5uZXJUeXBlSW5k
ZXhdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBJbnRyaW5zaWNzOjphZGRUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRp
dmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50
eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDEpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVj
bGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlUG9pbnRl
ciA9IFdURjo6Z2V0PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVU
eXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKTsKKyAgICBBU1NFUlQoaW5uZXJUeXBl
UG9pbnRlcik7CisgICAgYXV0byYgaW5uZXJUeXBlID0gKmlubmVyVHlwZVBvaW50ZXI7CisgICAg
QVNTRVJUKGlubmVyVHlwZS50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDApOworICAgIGlmIChh
ZGRGdWxsVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlubmVyVHlwZSkpIHsKKyAgICAg
ICAgbV90ZXh0dXJlU2V0LmFkZCgmbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoYWRkRGVwdGhUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
biwgaW5uZXJUeXBlKSkKKyAgICAgICAgbV90ZXh0dXJlU2V0LmFkZCgmbmF0aXZlVHlwZURlY2xh
cmF0aW9uKTsKK30KKwordm9pZCBJbnRyaW5zaWNzOjphZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoYWRkUHJpbWl0aXZlKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoYWRkVmVjdG9y
KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoYWRkTWF0
cml4KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpCisgICAgICAgIHJldHVybjsKKyAgICBhZGRUZXh0
dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2lj
cy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5zaWNz
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMxYTk4YWIzZGI3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xJbnRyaW5zaWNzLmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgor
I2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBX
SExTTCB7CisKK2NsYXNzIEludHJpbnNpY3MgeworcHVibGljOgorICAgIEludHJpbnNpY3MoKTsK
KworICAgIHZvaWQgYWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZv
aWQgYWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiYgdm9pZFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
dm9pZFR5cGUpOworICAgICAgICByZXR1cm4gKm1fdm9pZFR5cGU7CisgICAgfQorCisgICAgQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIGJvb2xUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX2Jvb2xUeXBlKTsKKyAgICAgICAgcmV0dXJuICptX2Jvb2xUeXBlOworICAgIH0K
KworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBpbnRUeXBlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX2ludFR5cGUpOworICAgICAgICByZXR1cm4gKm1faW50VHlwZTsK
KyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgdWludFR5cGUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdWludFR5cGUpOworICAgICAgICByZXR1cm4gKm1f
dWludFR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIHNhbXBs
ZXJUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3NhbXBsZXJUeXBlKTsKKyAg
ICAgICAgcmV0dXJuICptX3NhbXBsZXJUeXBlOworICAgIH0KKworICAgIEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJiBmbG9hdFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
ZmxvYXRUeXBlKTsKKyAgICAgICAgcmV0dXJuICptX2Zsb2F0VHlwZTsKKyAgICB9CisKKyAgICBB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgZmxvYXQzVHlwZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQobV92ZWN0b3JGbG9hdFsxXSk7CisgICAgICAgIHJldHVybiAqbV92ZWN0b3JG
bG9hdFsxXTsKKyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgZmxvYXQ0
VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV92ZWN0b3JGbG9hdFsyXSk7Cisg
ICAgICAgIHJldHVybiAqbV92ZWN0b3JGbG9hdFsyXTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBhZGRQcmltaXRpdmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBib29s
IGFkZFZlY3RvcihBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkTWF0
cml4KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7CisgICAgYm9vbCBhZGRGdWxsVGV4dHVy
ZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYsIEFTVDo6VHlwZVJlZmVyZW5jZSYpOworICAg
IGJvb2wgYWRkRGVwdGhUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiwgQVNUOjpU
eXBlUmVmZXJlbmNlJik7CisgICAgdm9pZCBhZGRUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uJik7CisKKyAgICBIYXNoU2V0PGNvbnN0IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
Kj4gbV90ZXh0dXJlU2V0OworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdm9p
ZFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fYm9vbFR5cGU7CisgICAg
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdWNoYXJUeXBlOworICAgIEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uKiBtX3VzaG9ydFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24qIG1fdWludFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fY2hh
clR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fc2hvcnRUeXBlOworICAg
IEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2ludFR5cGU7CisgICAgQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24qIG1faGFsZlR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24qIG1fZmxvYXRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2F0b21p
Y0ludFR5cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fYXRvbWljVWludFR5
cGU7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fc2FtcGxlclR5cGU7CisKKyAg
ICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JCb29sWzNdOworICAgIEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvclVjaGFyWzNdOworICAgIEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvclVzaG9ydFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV92ZWN0b3JVaW50WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uKiBtX3ZlY3RvckNoYXJbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1f
dmVjdG9yU2hvcnRbM107CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9y
SW50WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckhhbGZbM107
CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yRmxvYXRbM107CisKKyAg
ICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9tYXRyaXhIYWxmWzNdWzNdOworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX21hdHJpeEZsb2F0WzNdWzNdOworCisgICAgVmVj
dG9yPFN0cmluZz4gbV90ZXh0dXJlVHlwZU5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+IG1fdGV4
dHVyZUlubmVyVHlwZU5hbWVzOworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1f
ZnVsbFRleHR1cmVzWzExXVs4XVs0XTsKKworICAgIFZlY3RvcjxTdHJpbmc+IG1fZGVwdGhUZXh0
dXJlSW5uZXJUeXBlczsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV90ZXh0dXJl
RGVwdGgyRFsyXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9yd1RleHR1cmVE
ZXB0aDJEWzJdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3RleHR1cmVEZXB0
aDJEQXJyYXlbMl07CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fcndUZXh0dXJl
RGVwdGgyREFycmF5WzJdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3RleHR1
cmVEZXB0aEN1YmVbMl07Cit9OworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCmluZGV4IDNiMTkzNGU5
MzE2Li5lOWFlYWU3YjU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKQEAgLTIzLDggKzIzLDYgQEAKICAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jcHJhZ21hIG9uY2UKLQogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGU4NmJiOTgwNGEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250
ZXh0LmNwcApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BV
KQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgor
CisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExT
TEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlRGVm
aW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK05hbWVDb250ZXh0OjpOYW1l
Q29udGV4dChOYW1lQ29udGV4dCogcGFyZW50KQorICAgIDogbV9wYXJlbnQocGFyZW50KQorewor
fQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmlu
aXRpb24pCit7CisgICAgaWYgKGV4aXN0cyh0eXBlRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZCh0eXBlRGVmaW5p
dGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBl
PiwgMT4oKSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKHR5cGVEZWZpbml0aW9uKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoZXhpc3RzKHN0
cnVjdHVyZURlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1
dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQoc3RydWN0dXJlRGVmaW5pdGlvbi5uYW1lKCksIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4oKSk7CisgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKHN0cnVjdHVyZURlZmluaXRpb24pOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoZXhpc3RzKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1
bHQgPSBtX3R5cGVzLmFkZChlbnVtZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOworICAgIGlmICghcmVz
dWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLmFwcGVuZChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1
bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAobV90eXBlcy5maW5kKGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkpICE9IG1fdHlwZXMuZW5kKCkKKyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmlu
ZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV9mdW5jdGlvbnMuYWRkKGZ1bmN0
aW9uRGVmaW5pdGlvbi5uYW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUu
YXBwZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
TmFtZUNvbnRleHQ6OmFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG1fdHlwZXMuZmluZChuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQorICAgICAgICB8fCBtX3Zhcmlh
Ymxlcy5maW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3ZhcmlhYmxl
cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV9mdW5j
dGlvbnMuYWRkKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG1fZnVu
Y3Rpb25zLmZpbmQobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV9mdW5jdGlvbnMu
ZW5kKCkKKyAgICAgICAgfHwgbV92YXJpYWJsZXMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24u
bmFtZSgpKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSwg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAg
ICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQoreworICAgIGlmIChleGlzdHModmFy
aWFibGVEZWNsYXJhdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0
byByZXN1bHQgPSBtX3ZhcmlhYmxlcy5hZGQoU3RyaW5nKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFt
ZSgpKSwgJnZhcmlhYmxlRGVjbGFyYXRpb24pOworICAgIHJldHVybiByZXN1bHQuaXNOZXdFbnRy
eTsKK30KKworVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAx
PiogTmFtZUNvbnRleHQ6OmdldFR5cGVzKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRv
IGl0ZXJhdG9yID0gbV90eXBlcy5maW5kKG5hbWUpOworICAgIGlmIChpdGVyYXRvciA9PSBtX3R5
cGVzLmVuZCgpKSB7CisgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAgIHJldHVybiBt
X3BhcmVudC0+Z2V0VHlwZXMobmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0K
KyAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKK30KKworVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4qIE5hbWVDb250ZXh0OjpnZXRG
dW5jdGlvbnMoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX2Z1
bmN0aW9ucy5maW5kKG5hbWUpOworICAgIGlmIChpdGVyYXRvciA9PSBtX2Z1bmN0aW9ucy5lbmQo
KSkgeworICAgICAgICBpZiAobV9wYXJlbnQpCisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQt
PmdldEZ1bmN0aW9ucyhuYW1lKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAg
IHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOworfQorCitBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24q
IE5hbWVDb250ZXh0OjpnZXRWYXJpYWJsZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0
byBpdGVyYXRvciA9IG1fdmFyaWFibGVzLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09
IG1fdmFyaWFibGVzLmVuZCgpKSB7CisgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAg
IHJldHVybiBtX3BhcmVudC0+Z2V0VmFyaWFibGUobmFtZSk7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKyAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlOworfQorCitib29sIE5hbWVD
b250ZXh0OjpleGlzdHMoU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBtX3R5cGVzLmZpbmQo
bmFtZSkgIT0gbV90eXBlcy5lbmQoKQorICAgICAgICB8fCBtX2Z1bmN0aW9ucy5maW5kKG5hbWUp
ICE9IG1fZnVuY3Rpb25zLmVuZCgpCisgICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmFtZSkg
IT0gbV92YXJpYWJsZXMuZW5kKCk7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDNkZjgwMDE0YWUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVDb250ZXh0LmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNM
IHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIE5hbWVkVHlwZTsKK2NsYXNzIEZ1bmN0aW9u
RGVjbGFyYXRpb247CitjbGFzcyBUeXBlRGVmaW5pdGlvbjsKK2NsYXNzIFN0cnVjdHVyZURlZmlu
aXRpb247CitjbGFzcyBFbnVtZXJhdGlvbkRlZmluaXRpb247CitjbGFzcyBGdW5jdGlvbkRlZmlu
aXRpb247CitjbGFzcyBOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3MgTmF0aXZlVHlw
ZURlY2xhcmF0aW9uOworY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbjsKKworfQorCitjbGFzcyBO
YW1lQ29udGV4dCB7CitwdWJsaWM6CisgICAgTmFtZUNvbnRleHQoTmFtZUNvbnRleHQqIHBhcmVu
dCA9IG51bGxwdHIpOworCisgICAgYm9vbCBhZGQoQVNUOjpUeXBlRGVmaW5pdGlvbiYpOworICAg
IGJvb2wgYWRkKEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mKTsKKyAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKTsK
KyAgICBib29sIGFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRk
KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpOworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiogZ2V0VHlwZXMoY29uc3QgU3RyaW5nJik7Cisg
ICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
PiwgMT4qIGdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmKTsKKyAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24qIGdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYpOworCitwcml2YXRlOgorICAgIGJv
b2wgZXhpc3RzKFN0cmluZyYpOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4+IG1fdHlwZXM7CisgICAgSGFzaE1h
cDxTdHJpbmcsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbj4sIDE+PiBtX2Z1bmN0aW9uczsKKyAgICBIYXNoTWFwPFN0cmluZywgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uKj4gbV92YXJpYWJsZXM7CisgICAgTmFtZUNvbnRleHQqIG1fcGFyZW50
OworfTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCmluZGV4IDc4MGQ1YzU0
MjVhLi5mYmY1MDU4NTQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcApAQCAtMjgsMTkgKzI4LDI1MCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCiAK
LSNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVt
YmVyTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKKyNpbmNsdWRlICJX
SExTTFJlc29sdmVPdmVybG9hZEltcGwuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2Uu
aCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNM
SWZTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgorI2luY2x1ZGUgIldI
TFNMRG9XaGlsZUxvb3AuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNpbmNsdWRlICJX
SExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJl
bmNlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXR1cm4uaCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgorI2lu
Y2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDYWxs
RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKLWNsYXNzIE5hbWVSZXNvbHZlciA6IHB1Ymxp
YyBWaXNpdG9yIHsKLSAgICB+TmFtZVJlc29sdmVyKCkgPSBkZWZhdWx0OwotfTsKK05hbWVSZXNv
bHZlcjo6TmFtZVJlc29sdmVyKE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKKyAgICA6IG1fbmFt
ZUNvbnRleHQobmFtZUNvbnRleHQpCit7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChB
U1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCit7CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0KHR5cGVSZWZlcmVuY2UpOworICAgIGlmICh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBjYW5kaWRhdGVzID0gbV9uYW1lQ29udGV4
dC5nZXRUeXBlcyh0eXBlUmVmZXJlbmNlLm5hbWUoKSk7CisgICAgaWYgKGNhbmRpZGF0ZXMgPT0g
bnVsbHB0cikgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKCpjYW5kaWRhdGVz
LCB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkpCisgICAgICAgIHR5cGVSZWZlcmVuY2Uu
c2V0UmVzb2x2ZWRUeXBlKCpyZXN1bHQpOworICAgIGVsc2UgeworICAgICAgICBzZXRFcnJvcigp
OworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQo
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBOYW1l
Q29udGV4dCBuZXdOYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVy
IG5ld05hbWVSZXNvbHZlcihuZXdOYW1lQ29udGV4dCk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDog
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkgeworICAgICAgICBuZXdOYW1lUmVzb2x2
ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHBhcmFtZXRlcik7CisgICAgICAgIGF1dG8gc3VjY2VzcyA9
IG5ld05hbWVDb250ZXh0LmFkZChwYXJhbWV0ZXIpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsK
KyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRl
ZmluaXRpb24uYmxvY2soKSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkJs
b2NrJiBibG9jaykKK3sKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4
dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQoYmxv
Y2spOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZT
dGF0ZW1lbnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlv
bmFsKCkpOworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAg
ICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVu
dC5ib2R5KCkpOworICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgpKSB7CisgICAgICAgIE5h
bWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAgICAgICAgTmFtZVJlc29s
dmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5
KCkpOworICAgIH0KK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6V2hpbGVMb29w
JiB3aGlsZUxvb3ApCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25kaXRp
b25hbCgpKTsKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7Cisg
ICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29w
LmJvZHkoKSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29w
JiB3aGlsZUxvb3ApCit7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRl
eHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KHdo
aWxlTG9vcC5ib2R5KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0
aW9uYWwoKSk7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OkZvckxvb3AmIGZv
ckxvb3ApCit7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOwor
ICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3Ap
OworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
JiB2YXJpYWJsZURlY2xhcmF0aW9uKQoreworICAgIG1fbmFtZUNvbnRleHQuYWRkKHZhcmlhYmxl
RGVjbGFyYXRpb24pOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9u
KTsKK30KIAotdm9pZCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mKQordm9pZCBOYW1lUmVz
b2x2ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKQog
eworICAgIGlmICh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoYXV0byogdmFyaWFibGUgPSBtX25hbWVDb250ZXh0LmdldFZhcmlhYmxlKHZh
cmlhYmxlUmVmZXJlbmNlLm5hbWUoKSkpCisgICAgICAgIHZhcmlhYmxlUmVmZXJlbmNlLnNldFZh
cmlhYmxlKCp2YXJpYWJsZSk7CisgICAgZWxzZSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlJl
dHVybiYgcmV0dXJuU3RhdGVtZW50KQoreworICAgIEFTU0VSVChtX2N1cnJlbnRGdW5jdGlvbik7
CisgICAgcmV0dXJuU3RhdGVtZW50LnNldEZ1bmN0aW9uKG1fY3VycmVudEZ1bmN0aW9uKTsKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQocmV0dXJuU3RhdGVtZW50KTsKK30KIAordm9pZCBOYW1lUmVz
b2x2ZXI6OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24pCit7CisgICAgaWYgKGF1dG8qIGdldEZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRl
eHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5nZXRGdW5jdGlvbk5hbWUo
KSkpCisgICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3NzaWJsZUdldE92ZXJs
b2FkcygqZ2V0RnVuY3Rpb25zKTsKKyAgICBpZiAoYXV0byogc2V0RnVuY3Rpb25zID0gbV9uYW1l
Q29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldEZ1bmN0aW9u
TmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNldFBvc3NpYmxlU2V0
T3ZlcmxvYWRzKCpzZXRGdW5jdGlvbnMpOworICAgIGlmIChhdXRvKiBhbmRGdW5jdGlvbnMgPSBt
X25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kRnVu
Y3Rpb25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9zc2li
bGVBbmRPdmVybG9hZHMoKmFuZEZ1bmN0aW9ucyk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChB
U1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCit7CisgICAgaWYgKGlzPEFTVDo6VmFy
aWFibGVSZWZlcmVuY2U+KGRvdEV4cHJlc3Npb24uYmFzZSgpKSkgeworICAgICAgICBpZiAoYXV0
byBlbnVtZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhkb3duY2FzdDxBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNzaW9uLmJhc2UoKSkubmFtZSgpKSkgeworICAg
ICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uVHlwZXMtPnNpemUoKSA9PSAxKTsKKyAgICAgICAg
ICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBlID0gKCplbnVtZXJhdGlvblR5cGVzKVswXTsKKyAgICAg
ICAgICAgIGlmIChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSkpIHsKKyAgICAg
ICAgICAgICAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0
aW9uID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHR5cGUpOworICAgICAg
ICAgICAgICAgIGlmIChhdXRvKiBtZW1iZXIgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24ubWVtYmVy
QnlOYW1lKGRvdEV4cHJlc3Npb24uZmllbGROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSA8PSBz
aXplb2YoQVNUOjpEb3RFeHByZXNzaW9uKSwgIkRvdCBleHByZXNzaW9ucyBuZWVkIHRvIGJlIGFi
bGUgdG8gYmVjb21lIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbHMgd2l0aG91dCB1cGRhdGluZyBi
YWNrcmVmZXJlbmNlcyIpOworICAgICAgICAgICAgICAgICAgICBMZXhlcjo6VG9rZW4gb3JpZ2lu
ID0gZG90RXhwcmVzc2lvbi5vcmlnaW4oKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFBlcmhhcHMgZG8gdGhpcyB3aXRoIHZhcmlhbnRzIG9yIGEgUmV3cml0ZXIgaW5zdGVhZC4KKyAg
ICAgICAgICAgICAgICAgICAgZG90RXhwcmVzc2lvbi5+RG90RXhwcmVzc2lvbigpOworICAgICAg
ICAgICAgICAgICAgICBuZXcgKCZkb3RFeHByZXNzaW9uKSBBU1Q6OkVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbChXVEZNb3ZlKG9yaWdpbiksICptZW1iZXIpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChkb3RFeHByZXNzaW9uKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6Q2Fs
bEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQoreworICAgIGlmICghY2FsbEV4cHJlc3Npb24u
aGFzT3ZlcmxvYWRzKCkpIHsKKyAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9IG1fbmFtZUNv
bnRleHQuZ2V0RnVuY3Rpb25zKGNhbGxFeHByZXNzaW9uLm5hbWUoKSkpCisgICAgICAgICAgICBj
YWxsRXhwcmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGF1dG8qIHR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhjYWxs
RXhwcmVzc2lvbi5uYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVzLT5zaXplKCkg
PT0gMSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogZnVuY3Rpb25zID0gbV9uYW1l
Q29udGV4dC5nZXRGdW5jdGlvbnMoU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRXhwcmVz
c2lvbi5zZXRDYXN0RGF0YSgoKnR5cGVzKVswXS5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsRXhwcmVzc2lvbi5zZXRPdmVybG9hZHMoKmZ1bmN0aW9ucyk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKCFjYWxsRXhwcmVzc2lvbi5oYXNPdmVybG9hZHMoKSkgeworICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChjYWxsRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6
OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4
cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkKK3sKKyAgICBpZiAoYXV0byBlbnVt
ZXJhdGlvblR5cGVzID0gbV9uYW1lQ29udGV4dC5nZXRUeXBlcyhjb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5sZWZ0KCkpKSB7CisgICAgICAgIEFTU0VSVChlbnVt
ZXJhdGlvblR5cGVzLT5zaXplKCkgPT0gMSk7CisgICAgICAgIEFTVDo6TmFtZWRUeXBlJiB0eXBl
ID0gKCplbnVtZXJhdGlvblR5cGVzKVswXTsKKyAgICAgICAgaWYgKGlzPEFTVDo6RW51bWVyYXRp
b25EZWZpbml0aW9uPih0eXBlKSkgeworICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmlu
aXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uPih0eXBlKTsKKyAgICAgICAgICAgIGlmIChhdXRvKiBtZW1iZXIgPSBlbnVtZXJh
dGlvbkRlZmluaXRpb24ubWVtYmVyQnlOYW1lKGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9u
TWVtYmVyUmVmZXJlbmNlLnJpZ2h0KCkpKSB7CisgICAgICAgICAgICAgICAgY29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Uuc2V0RW51bWVyYXRpb25NZW1iZXIoZW51
bWVyYXRpb25EZWZpbml0aW9uLCAqbWVtYmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc2V0RXJyb3IoKTsKK30K
KworLy8gRklYTUU6IE1ha2Ugc3VyZSBhbGwgdGhlIG5hbWVzIGhhdmUgYmVlbiByZXNvbHZlZC4K
KworYm9vbCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mIHByb2dyYW0sIE5hbWVSZXNvbHZl
ciYgbmFtZVJlc29sdmVyKQoreworICAgIGZvciAoYXV0byYgdHlwZURlZmluaXRpb24gOiBwcm9n
cmFtLnR5cGVEZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9y
QW5kVmlzaXQoKnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJv
cigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIHN0
cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpIHsKKyAg
ICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCgqc3RydWN0dXJlRGVmaW5pdGlv
bik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBw
cm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIu
Y2hlY2tFcnJvckFuZFZpc2l0KCplbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICBpZiAo
bmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGZvciAoYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVUeXBl
RGVjbGFyYXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNp
dCgqbmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJv
cigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1l
UmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5p
dGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNv
bHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKGZ1bmN0aW9uRGVmaW5pdGlvbi5nZXQo
KSk7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoKmZ1bmN0aW9uRGVm
aW5pdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJyb3IoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbmFtZVJlc29sdmVyLnNldEN1cnJlbnRGdW5jdGlv
bkRlZmluaXRpb24obnVsbHB0cik7CisgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKSB7CisgICAgICAg
IG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24pOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaApp
bmRleCA0N2Q0ZDZhNTc5My4uMTVhZmRlM2QwM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaApAQCAtMjcsMTMg
KzI3LDQ5IEBACiAKICNpZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xQcm9ncmFt
LmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lQ29udGV4dC5oIgorI2luY2x1ZGUgIldITFNMVmlzaXRv
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAKLXZvaWQg
cmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtKTsKK2NsYXNzIFByb2dyYW07CisK
K2NsYXNzIE5hbWVSZXNvbHZlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBOYW1l
UmVzb2x2ZXIoTmFtZUNvbnRleHQmKTsKKworICAgIHZpcnR1YWwgfk5hbWVSZXNvbHZlcigpID0g
ZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0
aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHNldEN1cnJlbnRGdW5jdGlvbkRl
ZmluaXRpb24oQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAg
ICB7CisgICAgICAgIG1fY3VycmVudEZ1bmN0aW9uID0gZnVuY3Rpb25EZWZpbml0aW9uOworICAg
IH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYpIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlz
aXQoQVNUOjpJZlN0YXRlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpXaGls
ZUxvb3AmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYpIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6
OlJldHVybiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYp
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSYpIG92ZXJyaWRlOworCisgICAgTmFtZUNvbnRleHQgbV9uYW1lQ29udGV4dDsK
KyAgICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogbV9jdXJyZW50RnVuY3Rpb24geyBudWxscHRy
IH07Cit9OworCitib29sIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYsIE5hbWVSZXNvbHZl
ciYpOworYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiwgTmFtZVJlc29sdmVy
Jik7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQYXJzZXIuY3BwCmluZGV4IGJjNmU3M2U2YTFmLi5hN2RiNWU1MzQ3ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcApA
QCAtMzgsNyArMzgsOCBAQCBQYXJzZXI6OlBhcnNlcigpCiB7CiB9CiAKLWF1dG8gUGFyc2VyOjpw
YXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAt
PiBPcHRpb25hbDxFcnJvcj4KKy8vIEZJWE1FOiBSZXR1cm4gYSBiZXR0ZXIgZXJyb3IgY29kZSBm
cm9tIHRoaXMsIGFuZCByZXBvcnQgaXQgdG8gSmF2YVNjcmlwdC4KK2F1dG8gUGFyc2VyOjpwYXJz
ZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4g
T3B0aW9uYWw8RXJyb3I+CiB7CiAgICAgbV9sZXhlciA9IExleGVyKHN0cmluZ1ZpZXcpOwogICAg
IG1fbW9kZSA9IG1vZGU7CkBAIC01NCw3ICs1NSwxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJv
Z3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9u
YQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVEZWZpbml0aW9uKCk7CiAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIGlmICh0eXBlRGVmaW5pdGlvbikgewotICAgICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqdHlwZURlZmluaXRpb24pKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCp0eXBlRGVmaW5pdGlv
bikpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAg
ICBXVEZMb2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgdHlwZURlZmluaXRpb24tPm5hbWUoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTY0LDcgKzY5LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZShQcm9n
cmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb25h
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3RydWN0dXJlRGVmaW5pdGlvbigpOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoc3RydWN0dXJlRGVmaW5pdGlvbikgewotICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqc3RydWN0dXJlRGVmaW5pdGlvbikp
OworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUo
KnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsK
KyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIHN0cnVj
dHVyZURlZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTc0LDcgKzgzLDExIEBA
IGF1dG8gUGFyc2VyOjpwYXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmll
dywgTW9kZSBtb2RlKSAtPiBPcHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRW51
bWVyYXRpb25EZWZpbml0aW9uKCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChl
bnVtZXJhdGlvbkRlZmluaXRpb24pIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdU
Rk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3Vj
Y2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOwor
ICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZM
b2dBbHdheXMoIk5hbWUgRXJyb3IhICVzIiwgZW51bWVyYXRpb25EZWZpbml0aW9uLT5uYW1lKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CkBAIC04NSw3ICs5OCwxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJv
Z3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9u
YQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbigpOwogICAg
ICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uKSB7Ci0gICAg
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpmdW5jdGlvbkRlZmluaXRpb24pKTsK
KyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpm
dW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAg
ICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIGZ1bmN0aW9u
RGVmaW5pdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVycm9yID0gZnVuY3Rpb25EZWZp
bml0aW9uLmVycm9yKCk7CkBAIC05Niw3ICsxMTMsMTEgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFBy
b2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlv
bmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KCk7CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gcHJv
Z3JhbS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAg
ICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdh
eXMoIk5hbWUgRXJyb3IhICVzIiwgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi0+bmFtZSgpLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtMTA2LDcgKzEyNywxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJv
Z3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9u
YQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlvbigpOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpuYXRpdmVUeXBlRGVjbGFy
YXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKCpuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1
Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAl
cyIsIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi0+bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDU0
LDE2ICs0NzksNTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVk
KCkgLT4gRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGUKICAgICAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihyaWdodFNxdWFyZUJyYWNrZXQuZXJyb3IoKSk7CiAgICAgICAg
IHJldHVybiB7eyAqdG9rZW4sIFdURjo6bnVsbG9wdCwgKm51bUVsZW1lbnRzIH19OwogICAgIH0K
LSAgICBhdXRvIGFkZHJlc3NTcGFjZSA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlw
ZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5
cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOwotICAgIGlmICgh
YWRkcmVzc1NwYWNlKQotICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYWRkcmVzc1Nw
YWNlLmVycm9yKCkpOwotICAgIHJldHVybiB7eyAqdG9rZW4sIHsgKmFkZHJlc3NTcGFjZSB9LCBX
VEY6Om51bGxvcHQgfX07CisgICAgYXV0byBhZGRyZXNzU3BhY2VUb2tlbiA9IGNvbnN1bWVUeXBl
cyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2
aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6
OlRocmVhZH0pOworICAgIGlmICghYWRkcmVzc1NwYWNlVG9rZW4pCisgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VUb2tlbi5lcnJvcigpKTsKKyAgICBBU1Q6OlJl
ZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7CisgICAgc3dpdGNoIChhZGRy
ZXNzU3BhY2VUb2tlbi0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25z
dGFudDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNz
U3BhY2U6OkNvbnN0YW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6
VHlwZTo6RGV2aWNlOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6
OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpU
b2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVm
ZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZDoKKyAgICAgICAgYWRkcmVzc1NwYWNl
ID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJpbmcoIlNvbWV0aGluZyByZWFsbHkg
YmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHt7ICp0b2tlbiwgeyBhZGRyZXNzU3BhY2UgfSwgV1RGOjpudWxsb3B0IH19Owog
fQogCi1hdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiB7Ci0gICAgYXV0byBhZGRyZXNzU3BhY2Ug
PSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0YW50LCBMZXhlcjo6VG9r
ZW46OlR5cGU6OkRldmljZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cCwgTGV4ZXI6
OlRva2VuOjpUeXBlOjpUaHJlYWR9KTsKLSAgICBpZiAoIWFkZHJlc3NTcGFjZSkKLSAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZS5lcnJvcigpKTsKK2F1dG8gUGFy
c2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiB7CisgICAgYXV0byBhZGRyZXNzU3BhY2VUb2tlbiA9
IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tl
bjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6
VG9rZW46OlR5cGU6OlRocmVhZH0pOworICAgIGlmICghYWRkcmVzc1NwYWNlVG9rZW4pCisgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VUb2tlbi5lcnJvcigpKTsK
KyAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7CisgICAg
c3dpdGNoIChhZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpDb25zdGFudDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VU
eXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworICAgICAgICBicmVhazsKKyAgICBjYXNlIExl
eGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJl
ZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6CisgICAgICAgIGFkZHJlc3NTcGFj
ZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWRncm91cDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZDoKKyAgICAgICAg
YWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJpbmcoIlNvbWV0
aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkp
KTsKKyAgICB9CiAgICAgYXV0byBuYW1lID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBl
OjpJZGVudGlmaWVyKTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihuYW1lLmVycm9yKCkpOwpAQCAtNDcxLDEyICs1MzIsMTIgQEAgYXV0byBQYXJzZXI6
OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlR5cGU+LCBFcnIKICAgICBpZiAoIXR5cGVBcmd1bWVudHMpCiAgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPih0eXBlQXJndW1lbnRzLmVycm9yKCkpOwogCi0gICAgYXV0byBjb25zdHJ1
Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhBYmJyZXZp
YXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYm
IHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiB7CisgICAgYXV0byBjb25z
dHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhBYmJy
ZXZpYXRlZCYgdHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5h
bWVkVHlwZT4mJiBwcmV2aW91cykgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+
IHsKICAgICAgICAgc3dpdGNoICh0eXBlU3VmZml4QWJicmV2aWF0ZWQudG9rZW4udHlwZSkgewog
ICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3RhcjoKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3Vm
Zml4QWJicmV2aWF0ZWQudG9rZW4pLCBhZGRyZXNzU3BhY2UtPnN0cmluZ1ZpZXcudG9TdHJpbmco
KSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50
b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExl
eGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5
cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZS0+c3RyaW5nVmlldy50b1N0
cmluZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhB
YmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAg
ICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6CiAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRva2Vu
KHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAqdHlwZVN1
ZmZpeEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQ4OCw3
ICs1NDksNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0
ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycgogICAgIGF1dG8gZmlyc3RUeXBlU3Vm
Zml4QWJicmV2aWF0ZWQgPSBwYXJzZVR5cGVTdWZmaXhBYmJyZXZpYXRlZCgpOwogICAgIGlmICgh
Zmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVy
cm9yPihmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZC5lcnJvcigpKTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpUeXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZVJlZmVy
ZW5jZT4oTGV4ZXI6OlRva2VuKCphZGRyZXNzU3BhY2UpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3Ry
aW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpVbm5hbWVkVHlwZT4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlR5cGVSZWZlcmVu
Y2U+KFdURk1vdmUoKmFkZHJlc3NTcGFjZVRva2VuKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmlu
ZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CiAgICAgcmVzdWx0ID0gY29uc3RydWN0VHlw
ZUZyb21TdWZmaXhBYmJyZXZpYXRlZCgqZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQsIFdURk1v
dmUocmVzdWx0KSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byB0eXBlU3VmZml4
QWJicmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxUeXBlU3VmZml4QWJicmV2
aWF0ZWQsIEVycm9yPj4oWyZdKCkgewpAQCAtNTAzLDcgKzU2NCw3IEBAIGF1dG8gUGFyc2VyOjpw
YXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpU
eXBlPiwgRXJyCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQYXJzZXI6
OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlR5cGU+LCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlw
ZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiwgRXJyb3I+
IHsKICAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKICAgICBpZiAoIW9yaWdpbikKICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKQEAgLTUxNCwxMiArNTc1
LDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwKICAgICBpZiAoIXR5cGVBcmd1bWVudHMpCiAg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlQXJndW1lbnRzLmVycm9yKCkpOwog
Ci0gICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5vbkFiYnJldmlhdGVkID0gWyZdKGNv
bnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHByZXZpb3VzKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpUeXBlPiB7CisgICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeE5vbkFiYnJldmlh
dGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCYgdHlwZVN1ZmZpeE5vbkFi
YnJldmlhdGVkLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mJiBwcmV2aW91cykg
LT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKICAgICAgICAgc3dpdGNoICh0
eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4udHlwZSkgewogICAgICAgICBjYXNlIExleGVy
OjpUb2tlbjo6VHlwZTo6U3RhcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQu
dG9rZW4pLCB0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNlLT5zdHJpbmdWaWV3
LnRvU3RyaW5nKCksIFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9u
QWJicmV2aWF0ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NTcGFj
ZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6
U3F1YXJlQnJhY2tldFBhaXI6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxB
U1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJyZXZp
YXRlZC50b2tlbiksIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2UtPnN0cmlu
Z1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbih0
eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVk
LmFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBjYXNlIExleGVyOjpU
b2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJy
ZXZpYXRlZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlh
dGVkLm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTUyOCw3ICs1ODksNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPEFTVDo6VHlwZT4sCiAgICAgICAgIH0KICAgICB9OwogCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEFTVDo6VHlwZT4gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlR5cGVSZWZl
cmVuY2U+KFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RG
TW92ZSgqdHlwZUFyZ3VtZW50cykpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRU
eXBlPiByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZVJlZmVyZW5jZT4oV1RGTW92
ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJn
dW1lbnRzKSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgYXV0byB0eXBlU3VmZml4Tm9u
QWJicmV2aWF0ZWQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxUeXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQsIEVycm9yPj4oWyZdKCkgewogICAgICAgICAgICAgcmV0dXJuIHBhcnNlVHlwZVN1
ZmZpeE5vbkFiYnJldmlhdGVkKCk7CkBAIC01NDIsMTQgKzYwMywxNCBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFT
VDo6VHlwZT4sCiAgICAgcmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQYXJzZXI6
OnBhcnNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJv
cj4gewotICAgIGF1dG8gdHlwZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKK2F1dG8gUGFyc2VyOjpwYXJzZVR5
cGUoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9y
PiB7CisgICAgYXV0byB0eXBlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKICAgICAgICAgcmV0dXJu
IHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOwogICAgIH0pOwogICAgIGlmICh0eXBlKQogICAgICAg
ICByZXR1cm4gdHlwZTsKIAotICAgIHR5cGUgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+PihbJl0oKSB7CisgICAgdHlwZSA9IGJh
Y2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBl
PiwgRXJyb3I+PihbJl0oKSB7CiAgICAgICAgIHJldHVybiBwYXJzZU5vbkFkZHJlc3NTcGFjZVR5
cGUoKTsKICAgICB9KTsKICAgICBpZiAodHlwZSkKQEAgLTg0Nyw3ICs5MDgsNyBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbgogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBl
PiB0eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB0eXBlOwogICAg
IGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29sb24pKSB7CiAgICAgICAgIGF1dG8g
cGFyc2VkVHlwZSA9IHBhcnNlVHlwZSgpOwogICAgICAgICBpZiAoIXBhcnNlZFR5cGUpCkBAIC04
NjMsMjEgKzkyNCwyNSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24o
KSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbgogICAgIGlmICghZmlyc3RF
bnVtZXJhdGlvbk1lbWJlcikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0
RW51bWVyYXRpb25NZW1iZXIuZXJyb3IoKSk7CiAKLSAgICBBU1Q6OkVudW1lcmF0aW9uTWVtYmVy
cyBtZW1iZXJzOwotICAgIG1lbWJlcnMuYXBwZW5kKFdURk1vdmUoKmZpcnN0RW51bWVyYXRpb25N
ZW1iZXIpKTsKKyAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiByZXN1bHQoV1RGTW92ZSgq
b3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHR5cGUpKTsKKyAg
ICBhdXRvIHN1Y2Nlc3MgPSByZXN1bHQuYWRkKFdURk1vdmUoKmZpcnN0RW51bWVyYXRpb25NZW1i
ZXIpKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWlsKFN0cmluZygiQ2Fu
bm90IGFkZCBlbnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSk7CiAKICAgICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkgewog
ICAgICAgICBhdXRvIG1lbWJlciA9IHBhcnNlRW51bWVyYXRpb25NZW1iZXIoKTsKICAgICAgICAg
aWYgKCFtZW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obWVtYmVy
LmVycm9yKCkpOwotICAgICAgICBtZW1iZXJzLmFwcGVuZChXVEZNb3ZlKCptZW1iZXIpKTsKKyAg
ICAgICAgc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgqbWVtYmVyKSk7CisgICAgICAgIGlm
ICghc3VjY2VzcykKKyAgICAgICAgICAgIHJldHVybiBmYWlsKFN0cmluZygiQ2Fubm90IGFkZCBl
bnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAgICAg
fQogCiAgICAgYXV0byByaWdodEN1cmx5QnJhY2tldCA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tl
bjo6VHlwZTo6UmlnaHRDdXJseUJyYWNrZXQpOwogICAgIGlmICghcmlnaHRDdXJseUJyYWNrZXQp
CiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodEN1cmx5QnJhY2tldC5lcnJv
cigpKTsKIAotICAgIHJldHVybiBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbihXVEZNb3ZlKCpv
cmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUodHlwZSksIFdURk1v
dmUobWVtYmVycykpOworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKIGF1dG8gUGFy
c2VyOjpwYXJzZUVudW1lcmF0aW9uTWVtYmVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpFbnVtZXJhdGlv
bk1lbWJlciwgRXJyb3I+IHsKQEAgLTk4MSw3ICsxMDQ2LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNl
QXR0cmlidXRlQmxvY2soKSAtPiBFeHBlY3RlZDxBU1Q6OkF0dHJpYnV0ZUJsb2NrLCBFcnJvcj4g
ewogICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVBh
cmFtZXRlcigpIC0+IEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVyLCBFcnJvcj4geworYXV0byBQYXJz
ZXI6OnBhcnNlUGFyYW1ldGVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
LCBFcnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygpOwogICAgIGlmICghb3JpZ2luKQog
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwpAQCAtOTky
LDcgKzEwNTcsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxB
U1Q6OlBhcmFtZXRlciwgRXJyb3I+IHsKICAgICBpZiAoIXR5cGUpCiAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOwogCi0gICAgT3B0aW9uYWw8U3RyaW5nPiBu
YW1lOworICAgIFN0cmluZyBuYW1lOwogICAgIGlmIChhdXRvIHRva2VuID0gdHJ5VHlwZShMZXhl
cjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIpKQogICAgICAgICBuYW1lID0gdG9rZW4tPnN0cmlu
Z1ZpZXcudG9TdHJpbmcoKTsKIApAQCAtMTAwMCwxOCArMTA2NSwxOCBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHsKICAg
ICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAgICAgaWYgKCFzZW1h
bnRpYykKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5lcnJv
cigpKTsKLSAgICAgICAgcmV0dXJuIEFTVDo6UGFyYW1ldGVyKFdURk1vdmUoKm9yaWdpbiksIFdU
Rk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3Zl
KCpzZW1hbnRpYykpOworICAgICAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdU
Rk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZN
b3ZlKG5hbWUpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIG51bGxwdHIpOwogICAgIH0KIAotICAgIHJl
dHVybiBBU1Q6OlBhcmFtZXRlcihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmllcnMp
LCBXVEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShuYW1lKSwgV1RGOjpudWxsb3B0KTsKKyAgICByZXR1
cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVh
bGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEY6Om51bGxvcHQsIG51
bGxwdHIpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXJzKCkgLT4gRXhwZWN0ZWQ8
QVNUOjpQYXJhbWV0ZXJzLCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVycygp
IC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMsIEVycm9yPiB7CiAgICAgYXV0
byBsZWZ0UGFyZW50aGVzaXMgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRQ
YXJlbnRoZXNpcyk7CiAgICAgaWYgKCFsZWZ0UGFyZW50aGVzaXMpCiAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihsZWZ0UGFyZW50aGVzaXMuZXJyb3IoKSk7CiAKLSAgICBBU1Q6OlBh
cmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFt
ZXRlcnM7CiAgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodFBhcmVudGhl
c2lzKSkKICAgICAgICAgcmV0dXJuIFdURk1vdmUocGFyYW1ldGVycyk7CiAKQEAgLTEwOTUsMTQg
KzExNjAsMTYgQEAgYXV0byBQYXJzZXI6OnBhcnNlRW50cnlQb2ludEZ1bmN0aW9uRGVjbGFyYXRp
b24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGEKICAgICBpZiAoIXBhcmFtZXRlcnMp
CiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihwYXJhbWV0ZXJzLmVycm9yKCkpOwog
CisgICAgYm9vbCBpc09wZXJhdG9yID0gZmFsc2U7CisKICAgICBpZiAodHJ5VHlwZShMZXhlcjo6
VG9rZW46OlR5cGU6OkNvbG9uKSkgewogICAgICAgICBhdXRvIHNlbWFudGljID0gcGFyc2VTZW1h
bnRpYygpOwogICAgICAgICBpZiAoIXNlbWFudGljKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KHNlbWFudGljLmVycm9yKCkpOwotICAgICAgICByZXR1cm4gQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoYXR0cmlidXRlQmxvY2sp
LCBlbnRyeVBvaW50VHlwZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJp
bmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSk7CisgICAgICAg
IHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92
ZShhdHRyaWJ1dGVCbG9jayksIGVudHJ5UG9pbnRUeXBlLCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+
c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2Vt
YW50aWMpLCBpc09wZXJhdG9yKTsKICAgICB9CiAKLSAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoYXR0cmlidXRlQmxvY2spLCBlbnRy
eVBvaW50VHlwZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwg
V1RGTW92ZSgqcGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCk7CisgICAgcmV0dXJuIEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKGF0dHJpYnV0ZUJsb2Nr
KSwgZW50cnlQb2ludFR5cGUsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3Ry
aW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpOwog
fQogCiBhdXRvIFBhcnNlcjo6cGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4
cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHsKQEAgLTExMTcsNiArMTE4
NCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4g
RXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0CiAgICAgYXV0byBuYW1lID0gY29uc3VtZVR5
cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyLCBMZXhlcjo6VG9rZW46OlR5cGU6
Ok9wZXJhdG9yTmFtZSB9KTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihuYW1lLmVycm9yKCkpOworICAgIGF1dG8gaXNPcGVyYXRvciA9IG5hbWUtPnR5
cGUgPT0gTGV4ZXI6OlRva2VuOjpUeXBlOjpPcGVyYXRvck5hbWU7CiAKICAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBwYXJzZVBhcmFtZXRlcnMoKTsKICAgICBpZiAoIXBhcmFtZXRlcnMpCkBAIC0xMTI2
LDEwICsxMTk0LDEwIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0
aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0CiAgICAgICAgIGF1dG8gc2Vt
YW50aWMgPSBwYXJzZVNlbWFudGljKCk7CiAgICAgICAgIGlmICghc2VtYW50aWMpCiAgICAgICAg
ICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oc2VtYW50aWMuZXJyb3IoKSk7Ci0gICAgICAg
IHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBX
VEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCks
IFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYykpOworICAgICAgICByZXR1
cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpu
dWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZN
b3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBpc09wZXJhdG9yKTsKICAgICB9
CiAKLSAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiks
IHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0
cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0KTsKKyAgICByZXR1cm4g
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpudWxs
b3B0LCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3Zl
KCpwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKTsKIH0KIAogYXV0byBQYXJz
ZXI6OnBhcnNlT3BlcmF0b3JGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4gewpAQCAtMTE0NSwxNCArMTIxMywxNiBAQCBhdXRv
IFBhcnNlcjo6cGFyc2VPcGVyYXRvckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxB
U1Q6OkZ1bmN0aW9uRGVjbGFyYQogICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KHBhcmFtZXRlcnMuZXJyb3IoKSk7CiAKKyAgICBib29sIGlzT3Bl
cmF0b3IgPSB0cnVlOworCiAgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb2xv
bikpIHsKICAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKICAgICAgICAg
aWYgKCFzZW1hbnRpYykKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1h
bnRpYy5lcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihX
VEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIFN0cmlu
ZygiT3BlcmF0b3IgQ2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3Zl
KCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsKKyAgICAgICAgcmV0dXJuIEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwg
V1RGTW92ZSgqdHlwZSksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBp
c09wZXJhdG9yKTsKICAgICB9CiAKLSAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgU3Ry
aW5nKCJPcGVyYXRvciBDYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1v
dmUoKnBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQpOworICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUo
KnR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcik7CiB9
CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiB7CkBAIC0xMjAwLDcgKzEyNzAsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8
QVNUOjpOYXRpdmVGdW5jdGlvbkRlYwogICAgIGlmICghc2VtaWNvbG9uKQogICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4oc2VtaWNvbG9uLmVycm9yKCkpOwogCi0gICAgcmV0dXJuIEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihmdW5jdGlvbkRlY2xhcmF0aW9uLT50YWtlT3Jp
Z2luKCksIGZ1bmN0aW9uRGVjbGFyYXRpb24tPnRha2VBdHRyaWJ1dGVCbG9jaygpLCBmdW5jdGlv
bkRlY2xhcmF0aW9uLT50YWtlRW50cnlQb2ludFR5cGUoKSwgZnVuY3Rpb25EZWNsYXJhdGlvbi0+
dGFrZVR5cGUoKSwgZnVuY3Rpb25EZWNsYXJhdGlvbi0+dGFrZU5hbWUoKSwgZnVuY3Rpb25EZWNs
YXJhdGlvbi0+dGFrZVBhcmFtZXRlcnMoKSwgZnVuY3Rpb25EZWNsYXJhdGlvbi0+dGFrZVNlbWFu
dGljKCksIHJlc3RyaWN0ZWQpOworICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oV1RGTW92ZSgqZnVuY3Rpb25EZWNsYXJhdGlvbiksIHJlc3RyaWN0ZWQpOwogfQogCiBh
dXRvIFBhcnNlcjo6cGFyc2VCbG9jaygpIC0+IEV4cGVjdGVkPEFTVDo6QmxvY2ssIEVycm9yPiB7
CkBAIC0xMjYxLDcgKzEzMzEsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlSWZTdGF0ZW1lbnQoKSAt
PiBFeHBlY3RlZDxBU1Q6OklmU3RhdGVtZW50LCBFcnJvcj4gewogICAgICAgICBlbHNlQm9keSA9
IFdURk1vdmUoKnBhcnNlZEVsc2VCb2R5KTsKICAgICB9CiAKLSAgICByZXR1cm4gQVNUOjpJZlN0
YXRlbWVudChXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKCpjb25kaXRpb25hbCksIFdURk1vdmUo
KmJvZHkpLCBXVEZNb3ZlKGVsc2VCb2R5KSk7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OkV4cHJlc3Npb24+PiBjYXN0QXJndW1lbnRzOworICAgIGNhc3RBcmd1bWVudHMuYXBwZW5k
KFdURk1vdmUoKmNvbmRpdGlvbmFsKSk7CisgICAgYXV0byBib29sQ2FzdCA9IHN0ZDo6bWFrZV91
bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpvcmlnaW4pLCBTdHJpbmco
ImJvb2wiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYXN0QXJndW1l
bnRzKSk7CisgICAgcmV0dXJuIEFTVDo6SWZTdGF0ZW1lbnQoV1RGTW92ZSgqb3JpZ2luKSwgV1RG
TW92ZShib29sQ2FzdCksIFdURk1vdmUoKmJvZHkpLCBXVEZNb3ZlKGVsc2VCb2R5KSk7CiB9CiAK
IGF1dG8gUGFyc2VyOjpwYXJzZVN3aXRjaFN0YXRlbWVudCgpIC0+IEV4cGVjdGVkPEFTVDo6U3dp
dGNoU3RhdGVtZW50LCBFcnJvcj4gewpAQCAtMTQ0Myw3ICsxNTE2LDcgQEAgYXV0byBQYXJzZXI6
OnBhcnNlRG9XaGlsZUxvb3AoKSAtPiBFeHBlY3RlZDxBU1Q6OkRvV2hpbGVMb29wLCBFcnJvcj4g
ewogICAgIHJldHVybiBBU1Q6OkRvV2hpbGVMb29wKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUo
KmJvZHkpLCBXVEZNb3ZlKCpjb25kaXRpb25hbCkpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VW
YXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSkgLT4g
RXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4geworYXV0byBQYXJzZXI6
OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlw
ZT4mJiB0eXBlKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiB7
CiAgICAgYXV0byBvcmlnaW4gPSBwZWVrKCk7CiAgICAgaWYgKCFvcmlnaW4pCiAgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CkBAIC0xNDg4LDcgKzE1NjEs
NyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpIC0+IEV4cGVjdGVk
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdAogICAgIGlmICghdHlwZSkKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7CiAKLSAgICBhdXRvIGZpcnN0VmFy
aWFibGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpUeXBlPigoKnR5cGUpLT5jbG9uZSgpKSk7CisgICAgYXV0byBmaXJzdFZhcmlhYmxl
RGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKCp0eXBlKS0+Y2xvbmUoKSk7
CiAgICAgaWYgKCFmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAKQEAgLTE0
OTYsNyArMTU2OSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkg
LT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0CiAgICAgcmVzdWx0LmFwcGVu
ZChXVEZNb3ZlKCpmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pKTsKIAogICAgIHdoaWxlICh0cnlU
eXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29tbWEpKSB7Ci0gICAgICAgIGF1dG8gdmFyaWFibGVE
ZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpUeXBlPigoKnR5cGUpLT5jbG9uZSgpKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJh
dGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKICAgICAg
ICAgaWYgKCF2YXJpYWJsZURlY2xhcmF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KHZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoV1RGTW92ZSgqdmFyaWFibGVEZWNsYXJhdGlvbikpOwpAQCAtMTk1OSw4ICsyMDMyLDEw
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVRlcm5hcnlDb25kaXRpb25hbCgpIC0+IEV4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3NpCiAgICAgaWYgKCFlbHNlRXhwcmVzc2lvbikKICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGVsc2VFeHByZXNzaW9uLmVycm9yKCkpOwog
Ci0gICAgLy8gRklYTUU6IENhc3QgdGhlIHByZWRpY2F0ZSB0byBhIGJvb2wuCi0gICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpU
ZXJuYXJ5RXhwcmVzc2lvbj4oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZSgqcHJlZGljYXRlKSwg
V1RGTW92ZSgqYm9keUV4cHJlc3Npb24pLCBXVEZNb3ZlKCplbHNlRXhwcmVzc2lvbikpKTsKKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4+IGNhc3RBcmd1bWVudHM7
CisgICAgY2FzdEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSgqcHJlZGljYXRlKSk7CisgICAgYXV0
byBib29sQ2FzdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6
OlRva2VuKCpvcmlnaW4pLCBTdHJpbmcoImJvb2wiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSwgV1RGTW92ZShjYXN0QXJndW1lbnRzKSk7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OkV4cHJlc3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUZXJuYXJ5RXhwcmVzc2lv
bj4oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShib29sQ2FzdCksIFdURk1vdmUoKmJvZHlFeHBy
ZXNzaW9uKSwgV1RGTW92ZSgqZWxzZUV4cHJlc3Npb24pKSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpw
YXJzZUFzc2lnbm1lbnQoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNz
aW9uPiwgRXJyb3I+IHsKQEAgLTIxNzgsNyArMjI1Myw2IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBv
c3NpYmxlUmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbigpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0CiAgICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzKSk7
CiAgICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpuZXh0KSk7CiAgICAg
ICAgICAgICBwcmV2aW91cyA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4o
TGV4ZXI6OlRva2VuKCpyZWxhdGlvbmFsQmluYXJ5T3BlcmF0aW9uKSwgU3RyaW5nKCJvcGVyYXRv
cj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50
cykpOwotICAgICAgICAgICAgLy8gRklYTUU6IENhc3QgdGhlIGFyZ3VtZW50IHRvIGEgYm9vbAog
ICAgICAgICAgICAgcHJldmlvdXMgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6TG9naWNhbE5vdEV4
cHJlc3Npb24+KFdURk1vdmUoKnJlbGF0aW9uYWxCaW5hcnlPcGVyYXRpb24pLCBXVEZNb3ZlKHBy
ZXZpb3VzKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjM2NCw4ICsyNDM4
LDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlUHJlZml4KCkgLT4gRXhwZWN0ZWQ8c3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4sCiAgICAgICAgICAgICBjYWxsQXJndW1lbnRz
LmFwcGVuZChXVEZNb3ZlKCpuZXh0KSk7CiAgICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEFTVDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNzaW9u
PihMZXhlcjo6VG9rZW4oKnByZWZpeCksIFN0cmluZygib3BlcmF0b3J+IiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpKTsKICAgICAgICAgfQot
ICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6RXhjbGFtYXRpb25Qb2ludDoKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1ha2Vf
dW5pcXVlPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwg
V1RGTW92ZSgqbmV4dCkpKTsKKyAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkV4Y2xh
bWF0aW9uUG9pbnQ6IHsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpF
eHByZXNzaW9uPj4gY2FzdEFyZ3VtZW50czsKKyAgICAgICAgICAgIGNhc3RBcmd1bWVudHMuYXBw
ZW5kKFdURk1vdmUoKm5leHQpKTsKKyAgICAgICAgICAgIGF1dG8gYm9vbENhc3QgPSBzdGQ6Om1h
a2VfdW5pcXVlPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwgU3Ry
aW5nKCJib29sIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FzdEFy
Z3VtZW50cykpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJl
c3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oTGV4ZXI6
OlRva2VuKCpwcmVmaXgpLCBXVEZNb3ZlKGJvb2xDYXN0KSkpOworICAgICAgICB9CiAgICAgICAg
IGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpBbmQ6CiAgICAgICAgICAgICByZXR1cm4gc3RkOjp1
bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok1ha2VQb2lu
dGVyRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpwcmVmaXgpLCBXVEZNb3ZlKCpuZXh0KSkpOwog
ICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6QXQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAppbmRleCBkYTNlMDZiMDFlNC4u
ODAxMzkxNDk4MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQYXJzZXIuaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkK
IAotI2luY2x1ZGUgIldITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oIgogI2luY2x1
ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUu
aCIKICNpbmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCkBAIC02OCw3ICs2Nyw2
IEBACiAjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCiAjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbC5o
IgogI2luY2x1ZGUgIldITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgiCi0jaW5jbHVk
ZSAiV0hMU0xQYXJhbWV0ZXIuaCIKICNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCiAjaW5j
bHVkZSAiV0hMU0xQcm9ncmFtLmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uaCIKQEAgLTE1NCwxMyArMTUyLDEzIEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8VHlw
ZVN1ZmZpeEFiYnJldmlhdGVkLCBFcnJvcj4gcGFyc2VUeXBlU3VmZml4QWJicmV2aWF0ZWQoKTsK
ICAgICBzdHJ1Y3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkIHsKICAgICAgICAgTGV4ZXI6OlRv
a2VuIHRva2VuOwotICAgICAgICBPcHRpb25hbDxMZXhlcjo6VG9rZW4+IGFkZHJlc3NTcGFjZTsK
KyAgICAgICAgT3B0aW9uYWw8QVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U+IGFkZHJl
c3NTcGFjZTsKICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG51bUVsZW1lbnRzOwogICAgIH07
CiAgICAgRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBFcnJvcj4gcGFyc2VUeXBl
U3VmZml4Tm9uQWJicmV2aWF0ZWQoKTsKLSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpUeXBlPiwgRXJyb3I+IHBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpOwotICAgIEV4cGVjdGVkPHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnJvcj4gcGFyc2VOb25BZGRyZXNzU3BhY2VUeXBl
KCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiBwYXJz
ZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4s
IEVycm9yPiBwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZU5vbkFkZHJlc3NTcGFjZVR5cGUo
KTsKKyAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9y
PiBwYXJzZVR5cGUoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlR5cGVEZWZpbml0aW9uLCBFcnJvcj4g
cGFyc2VUeXBlRGVmaW5pdGlvbigpOwogICAgIEV4cGVjdGVkPEFTVDo6QnVpbHRJblNlbWFudGlj
LCBFcnJvcj4gcGFyc2VCdWlsdEluU2VtYW50aWMoKTsKICAgICBFeHBlY3RlZDxBU1Q6OlJlc291
cmNlU2VtYW50aWMsIEVycm9yPiBwYXJzZVJlc291cmNlU2VtYW50aWMoKTsKQEAgLTE3NSw4ICsx
NzMsOCBAQCBwcml2YXRlOgogICAgIEV4cGVjdGVkPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
LCBFcnJvcj4gcGFyc2VOYXRpdmVUeXBlRGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6
Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSwgRXJyb3I+IHBhcnNlTnVtVGhyZWFkc0Z1bmN0
aW9uQXR0cmlidXRlKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpBdHRyaWJ1dGVCbG9jaywgRXJyb3I+
IHBhcnNlQXR0cmlidXRlQmxvY2soKTsKLSAgICBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJy
b3I+IHBhcnNlUGFyYW1ldGVyKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXJzLCBFcnJv
cj4gcGFyc2VQYXJhbWV0ZXJzKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uLCBFcnJvcj4gcGFyc2VQYXJhbWV0ZXIoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb25zLCBFcnJvcj4gcGFyc2VQYXJhbWV0ZXJzKCk7CiAgICAgRXhwZWN0ZWQ8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VFbnRyeVBvaW50RnVuY3Rpb25EZWNs
YXJhdGlvbigpOwogICAgIEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+
IHBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXJhdGlv
bigpOwpAQCAtMTkyLDcgKzE5MCw3IEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNUOjpGb3JM
b29wLCBFcnJvcj4gcGFyc2VGb3JMb29wKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpXaGlsZUxvb3As
IEVycm9yPiBwYXJzZVdoaWxlTG9vcCgpOwogICAgIEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxvb3As
IEVycm9yPiBwYXJzZURvV2hpbGVMb29wKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlR5cGU+JiYpOworICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwg
RXJyb3I+IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5h
bWVkVHlwZT4mJik7CiAgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudCwgRXJyb3I+IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKTsKICAgICBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcj4gcGFyc2VTdGF0ZW1lbnQoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cmVwYXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJl
cGFyZS5jcHAKaW5kZXggMGViNjRkZWNkNGQuLjQ2MGU5NDZmZGRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKQEAgLTI4
LDEwICsyOCwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldITFNMUHJlcGFy
ZS5oIgogCisjaW5jbHVkZSAiV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgorI2luY2x1
ZGUgIldITFNMQ2hlY2tlci5oIgogI2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCiAjaW5j
bHVkZSAiV0hMU0xQYXJzZXIuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRl
ICJXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGFuZGFyZExp
YnJhcnkuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgi
CisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgiCisjaW5jbHVkZSAiV0hM
U0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRo
ZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01
MCw4ICs1NywyMyBAQCBPcHRpb25hbDxQcmVwYXJhdGlvblJlc3VsdD4gcHJlcGFyZShTdHJpbmdW
aWV3IHNvdXJjZSkKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICByZXNvbHZlTmFtZXNJblR5cGVzKHByb2dyYW0pOworICAgIE5hbWVSZXNvbHZl
ciBuYW1lUmVzb2x2ZXIocHJvZ3JhbS5uYW1lQ29udGV4dCgpKTsKKyAgICBpZiAoIXJlc29sdmVO
YW1lc0luVHlwZXMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICBpZiAoIWNoZWNrUmVjdXJzaXZlVHlwZXMocHJvZ3JhbSkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhw
cm9ncmFtKTsKKyAgICBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMocHJvZ3JhbSk7Cisg
ICAgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgocHJvZ3JhbSk7CisgICAgc3ludGhlc2l6
ZUNvbnN0cnVjdG9ycyhwcm9ncmFtKTsKKyAgICBpZiAoIWNoZWNrRHVwbGljYXRlRnVuY3Rpb25z
KHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghcmVzb2x2
ZU5hbWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKwogCisgICAgaWYgKGNoZWNrKHByb2dyYW0pKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgIHJldHVybiBQcmVwYXJhdGlvblJlc3VsdCgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb2dy
YW0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5o
CmluZGV4IDU2MzBmZTY5ZWU0Li42MGVlNDc5MDE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKQEAgLTI5LDYgKzI5LDggQEAK
IAogI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCiAjaW5jbHVkZSAiV0hM
U0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKyNp
bmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIK
ICNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKQEAgLTQ0LDQ1ICs0Niw2NCBA
QCBwdWJsaWM6CiAgICAgUHJvZ3JhbSgpID0gZGVmYXVsdDsKICAgICBQcm9ncmFtKFByb2dyYW0m
JikgPSBkZWZhdWx0OwogCi0gICAgdm9pZCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5pdGlvbiYmIHR5
cGVEZWZpbml0aW9uKQorICAgIGJvb2wgYXBwZW5kKEFTVDo6VHlwZURlZmluaXRpb24mJiB0eXBl
RGVmaW5pdGlvbikKICAgICB7Ci0gICAgICAgIG1fdHlwZURlZmluaXRpb25zLmFwcGVuZChXVEZN
b3ZlKHR5cGVEZWZpbml0aW9uKSk7CisgICAgICAgIG1fdHlwZURlZmluaXRpb25zLmFwcGVuZChz
dGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZURlZmluaXRpb24+KFdURk1vdmUodHlwZURlZmluaXRp
b24pKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV90eXBlRGVmaW5pdGlv
bnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0
aW9uJiYgc3RydWN0dXJlRGVmaW5pdGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbiYmIHN0cnVjdHVyZURlZmluaXRpb24pCiAgICAgewotICAgICAgICBtX3N0
cnVjdHVyZURlZmluaXRpb25zLmFwcGVuZChXVEZNb3ZlKHN0cnVjdHVyZURlZmluaXRpb24pKTsK
KyAgICAgICAgbV9zdHJ1Y3R1cmVEZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxB
U1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KFdURk1vdmUoc3RydWN0dXJlRGVmaW5pdGlvbikpKTsK
KyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX3N0cnVjdHVyZURlZmluaXRpb25z
Lmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uJiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24mJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCiAgICAgewotICAgICAg
ICBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoZW51bWVyYXRpb25EZWZp
bml0aW9uKSk7CisgICAgICAgIG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5hcHBlbmQoc3RkOjpt
YWtlX3VuaXF1ZTxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShlbnVtZXJhdGlv
bkRlZmluaXRpb24pKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9lbnVt
ZXJhdGlvbkRlZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uJiYgZnVuY3Rpb25EZWZpbml0aW9uKQorCisgICAgYm9vbCBhcHBl
bmQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mJiBmdW5jdGlvbkRlZmluaXRpb24pCiAgICAgewot
ICAgICAgICBtX2Z1bmN0aW9uRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoZnVuY3Rpb25EZWZp
bml0aW9uKSk7CisgICAgICAgIG1fZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtl
X3VuaXF1ZTxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShmdW5jdGlvbkRlZmluaXRp
b24pKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9mdW5jdGlvbkRlZmlu
aXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiYmIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCisKKyAgICBib29sIGFw
cGVuZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mJiBuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKQogICAgIHsKLSAgICAgICAgbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5hcHBl
bmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgIG1fbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uPihXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKSk7
CisgICAgICAgIG1faW50cmluc2ljcy5hZGQoKm1fbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMu
bGFzdCgpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX25hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uJiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQorCisgICAgYm9vbCBh
cHBlbmQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24p
CiAgICAgewotICAgICAgICBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdURk1vdmUo
bmF0aXZlVHlwZURlY2xhcmF0aW9uKSk7CisgICAgICAgIG1fbmF0aXZlVHlwZURlY2xhcmF0aW9u
cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oV1RG
TW92ZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pKSk7CisgICAgICAgIG1faW50cmluc2ljcy5hZGQo
Km1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5sYXN0KCkpOworICAgICAgICByZXR1cm4gbV9uYW1l
Q29udGV4dC5hZGQoKm1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5sYXN0KCkpOwogICAgIH0KIAot
ICAgIFZlY3RvcjxBU1Q6OlR5cGVEZWZpbml0aW9uPiYgdHlwZURlZmluaXRpb25zKCkgeyByZXR1
cm4gbV90eXBlRGVmaW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0
aW9uPiYgc3RydWN0dXJlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3N0cnVjdHVyZURlZmluaXRp
b25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPiYgZW51bWVyYXRp
b25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uczsgfQotICAg
IFZlY3RvcjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4mIGZ1bmN0aW9uRGVmaW5pdGlvbnMoKSB7
IHJldHVybiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uPiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7IHJldHVy
biBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uPiYgbmF0aXZlVHlwZURlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1fbmF0
aXZlVHlwZURlY2xhcmF0aW9uczsgfQorICAgIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCgpIHsg
cmV0dXJuIG1fbmFtZUNvbnRleHQ7IH0KKyAgICBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKCkgeyBy
ZXR1cm4gbV9pbnRyaW5zaWNzOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5
cGVEZWZpbml0aW9uPj4mIHR5cGVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fdHlwZURlZmluaXRp
b25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24+PiYgc3RydWN0dXJlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3N0cnVjdHVyZURlZmluaXRp
b25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbj4+JiBlbnVtZXJhdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbkRl
ZmluaXRpb25zOyB9CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbj4+JiBmdW5jdGlvbkRlZmluaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9m
dW5jdGlvbkRlZmluaXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbj4+JiBmdW5jdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9mdW5j
dGlvbkRlZmluaXRpb25zOyB9CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMo
KSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOyB9CisgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiYgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbj4+JiBuYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRpdmVUeXBl
RGVjbGFyYXRpb25zOyB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPEFTVDo6VHlwZURlZmluaXRp
b24+IG1fdHlwZURlZmluaXRpb25zOwotICAgIFZlY3RvcjxBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24+IG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uPiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uPiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uczsK
LSAgICBWZWN0b3I8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+IG1fbmF0aXZlVHlwZURlY2xh
cmF0aW9uczsKKyAgICBOYW1lQ29udGV4dCBtX25hbWVDb250ZXh0OworICAgIEludHJpbnNpY3Mg
bV9pbnRyaW5zaWNzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlRGVmaW5p
dGlvbj4+IG1fdHlwZURlZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uPj4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPj4gbV9lbnVtZXJh
dGlvbkRlZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpGdW5jdGlv
bkRlZmluaXRpb24+PiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiBtX25hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24+PiBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnM7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5
cGVDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi5kNmIxYjRhOTgzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCkBAIC0wLDAg
KzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCisKKyNpbmNs
dWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFJlY3Vyc2l2ZVR5cGVD
aGVja2VyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIH5SZWN1cnNpdmVUeXBlQ2hl
Y2tlcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYg
dHlwZURlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fdHlwZXMuYWRkKCZ0eXBlRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlRGVmaW5pdGlvbik7
CisKKyAgICAgICAgYXV0byBzdWNjZXNzID0gbV90eXBlcy5yZW1vdmUoJnR5cGVEZWZpbml0aW9u
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlv
bikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlcy5hZGQo
JnN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkp
IHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisK
KyAgICAgICAgYXV0byBzdWNjZXNzID0gbV90eXBlcy5yZW1vdmUoJnN0cnVjdHVyZURlZmluaXRp
b24pOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVzLmFkZCgmdHlwZVJlZmVy
ZW5jZSk7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZv
ciAoYXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpCisg
ICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZUFyZ3VtZW50KTsKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKworICAgICAg
ICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmdHlwZVJlZmVyZW5jZSk7CisgICAgICAg
IEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OlJlZmVyZW5jZVR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgSGFzaFNldDxBU1Q6OlR5cGUqPiBtX3R5cGVzOworfTsKKworYm9vbCBjaGVja1JlY3Vy
c2l2ZVR5cGVzKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgUmVjdXJzaXZlVHlwZUNoZWNrZXIg
cmVjdXJzaXZlVHlwZUNoZWNrZXI7CisgICAgcmVjdXJzaXZlVHlwZUNoZWNrZXIuY2hlY2tFcnJv
ckFuZFZpc2l0KHByb2dyYW0pOworICAgIHJldHVybiByZWN1cnNpdmVUeXBlQ2hlY2tlci5lcnJv
cigpOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlhM2ExOWRjZTIwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xS
ZWN1cnNpdmVUeXBlQ2hlY2tlci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCitib29sIGNoZWNrUmVjdXJz
aXZlVHlwZXMoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3Zl
cmxvYWRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjM1
Mjg0NWVjMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCkBAIC0wLDAgKzEsMTEyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCIKKworI2luY2x1ZGUgIldITFNMSW5m
ZXJUeXBlcy5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCitzdGF0aWMgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uJiBjYW5kaWRhdGUsIGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcykKK3sKKyAgICB1bnNpZ25l
ZCBjb252ZXJzaW9uQ29zdCA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjYW5kaWRh
dGUucGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnZlcnNpb25Db3N0ICs9
IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5u
YW1lZFR5cGU+JikgLT4gdW5zaWduZWQgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZSkgLT4gdW5zaWduZWQgeworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNvbnZlcnNpb25Db3N0KGNhbmRpZGF0ZS5wYXJhbWV0
ZXJzKClbaV0udHlwZSgpKTsKKyAgICAgICAgfSksIGFyZ3VtZW50VHlwZXNbaV0uZ2V0KCkpOwor
ICAgIH0KKyAgICAvLyBUaGUgcmV0dXJuIHR5cGUgY2FuIG5ldmVyIGJlIGEgbGl0ZXJhbCB0eXBl
LCBzbyBpdHMgY29udmVyc2lvbiBjb3N0IGlzIGFsd2F5cyAwLgorICAgIHJldHVybiBjb252ZXJz
aW9uQ29zdDsKK30KKworQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25P
dmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIE9wdGlvbmFsPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiYgY2FzdFJldHVyblR5cGUpCit7CisgICAg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwg
MT4gY2FuZGlkYXRlczsKKyAgICBmb3IgKGF1dG8mIHBvc3NpYmxlRnVuY3Rpb24gOiBwb3NzaWJs
ZUZ1bmN0aW9ucykgeworICAgICAgICBpZiAocG9zc2libGVGdW5jdGlvbi5nZXQoKS5lbnRyeVBv
aW50VHlwZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpbmZlclR5cGVz
Rm9yQ2FsbChwb3NzaWJsZUZ1bmN0aW9uLmdldCgpLCBhcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJu
VHlwZSkpCisgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChwb3NzaWJsZUZ1bmN0aW9uLmdl
dCgpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtaW5pbXVtQ29udmVyc2lvbkNvc3QgPSBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CisgICAgZm9yIChhdXRvJiBjYW5kaWRh
dGUgOiBjYW5kaWRhdGVzKQorICAgICAgICBtaW5pbXVtQ29udmVyc2lvbkNvc3QgPSBzdGQ6Om1p
bihtaW5pbXVtQ29udmVyc2lvbkNvc3QsIGNvbnZlcnNpb25Db3N0KGNhbmRpZGF0ZS5nZXQoKSwg
YXJndW1lbnRUeXBlcykpOworCisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbWluaW11bUNvc3RDYW5kaWRhdGVzOworICAgIGZv
ciAoYXV0byYgY2FuZGlkYXRlIDogY2FuZGlkYXRlcykgeworICAgICAgICBpZiAoY29udmVyc2lv
bkNvc3QoY2FuZGlkYXRlLmdldCgpLCBhcmd1bWVudFR5cGVzKSA9PSBtaW5pbXVtQ29udmVyc2lv
bkNvc3QpCisgICAgICAgICAgICBtaW5pbXVtQ29zdENhbmRpZGF0ZXMuYXBwZW5kKGNhbmRpZGF0
ZSk7CisgICAgfQorCisgICAgYm9vbCByZXN0cmljdGVkQ2FuZGlkYXRlRXhpc3RzID0gZmFsc2U7
CisgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBtaW5pbXVtQ29zdENhbmRpZGF0ZXMpIHsKKyAg
ICAgICAgaWYgKGlzPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpICYm
IGRvd25jYXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpLnJlc3Ry
aWN0ZWQoKSkgeworICAgICAgICAgICAgcmVzdHJpY3RlZENhbmRpZGF0ZUV4aXN0cyA9IHRydWU7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNhbmRpZGF0ZXMu
Y2xlYXIoKTsKKyAgICBpZiAocmVzdHJpY3RlZENhbmRpZGF0ZUV4aXN0cykgeworICAgICAgICBm
b3IgKGF1dG8mIGNhbmRpZGF0ZSA6IG1pbmltdW1Db3N0Q2FuZGlkYXRlcykgeworICAgICAgICAg
ICAgaWYgKGlzPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpICYmIGRv
d25jYXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5kaWRhdGUuZ2V0KCkpLnJlc3RyaWN0
ZWQoKSkKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChjYW5kaWRhdGUuZ2V0KCkp
OworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGNhbmRpZGF0ZXMgPSBtaW5pbXVtQ29z
dENhbmRpZGF0ZXM7CisKKyAgICBpZiAoY2FuZGlkYXRlcy5zaXplKCkgPT0gMSkKKyAgICAgICAg
cmV0dXJuICZjYW5kaWRhdGVzWzBdLmdldCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitB
U1Q6Ok5hbWVkVHlwZSogcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiYgcG9zc2libGVUeXBlcywgQVNUOjpUeXBl
QXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKQoreworICAgIEFTVDo6TmFtZWRUeXBlKiByZXN1bHQg
PSBudWxscHRyOworICAgIGZvciAoYXV0byYgcG9zc2libGVUeXBlIDogcG9zc2libGVUeXBlcykg
eworICAgICAgICBpZiAoaW5mZXJUeXBlc0ZvclR5cGVBcmd1bWVudHMocG9zc2libGVUeXBlLCB0
eXBlQXJndW1lbnRzKSkgeworICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJlc3VsdCA9ICZzdGF0aWNfY2FzdDxBU1Q6
Ok5hbWVkVHlwZSY+KHBvc3NpYmxlVHlwZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xh
cmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29s
dmVPdmVybG9hZEltcGwuaApzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURl
Y2xhcmF0aW9uLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCmluZGV4IGVmNjFlZDEyNjE5Li5hYzc5MDNiYWZj
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCkBAIC0yNyw4ICsy
NywxMCBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIK
LSNpbmNsdWRlICJXSExTTFZhbHVlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZpbmdUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiwy
NiArMzgsMTQgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNz
IEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24gOiBwdWJsaWMgVmFsdWUgewotcHVibGljOgot
ICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQot
ICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICB7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB+QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbigpID0gZGVmYXVsdDsKLQotICAg
IEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oY29uc3QgQW5vbnltb3VzVmFyaWFibGVEZWNs
YXJhdGlvbiYpID0gZGVsZXRlOwotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oQW5v
bnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7Ci0KLSAgICBMZXhlcjo6VG9r
ZW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KLQotcHJpdmF0ZToKLSAgICBM
ZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci19OworY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbjsKK2Ns
YXNzIE5hbWVkVHlwZTsKIAogfQogCitBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVG
dW5jdGlvbk92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMsIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgT3B0aW9uYWw8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+JiBjYXN0UmV0dXJuVHlwZSk7
CitBU1Q6Ok5hbWVkVHlwZSogcmVzb2x2ZVR5cGVPdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiYsIEFTVDo6VHlwZUFyZ3VtZW50cyYp
OworCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUmVzb2x2aW5nVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmI3OWQyYjJhNTFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKQEAgLTAsMCArMSw2OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBSZXNvbHZh
YmxlVHlwZTsKK2NsYXNzIFVubmFtZWRUeXBlOworCit9CisKK2NsYXNzIFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlIDogcHVibGljIFJlZkNvdW50ZWQ8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+IHsK
K3B1YmxpYzoKKyAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShBU1Q6OlJlc29sdmFibGVUeXBl
JiByZXNvbHZhYmxlVHlwZSkKKyAgICAgICAgOiBtX3Jlc29sdmFibGVUeXBlKCZyZXNvbHZhYmxl
VHlwZSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UoY29uc3Qg
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UmKSA9IGRlbGV0ZTsKKyAgICBSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZShSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYmKSA9IGRlbGV0ZTsKKworICAgIEFTVDo6
UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKCkgeyByZXR1cm4gKm1fcmVzb2x2YWJsZVR5
cGU7IH0KKworcHJpdmF0ZToKKyAgICBBU1Q6OlJlc29sdmFibGVUeXBlKiBtX3Jlc29sdmFibGVU
eXBlOworfTsKKwordXNpbmcgUmVzb2x2aW5nVHlwZSA9IFZhcmlhbnQ8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6VW5uYW1lZFR5cGU+LCBSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+PjsKKworfQor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVu
Z3RoLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODY5Y2UyNTQx
NmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcApAQCAtMCwwICsxLDc2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgRmluZEFycmF5VHlw
ZXMgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgfkZpbmRBcnJheVR5cGVzKCkgPSBk
ZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgbV9hcnJheVR5cGVzLmFwcGVuZChhcnJheVR5cGUpOworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlUeXBlKTsKKyAgICB9CisKKyAgICBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkFycmF5VHlwZT4+JiYgdGFrZUFycmF5VHlwZXMo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9hcnJheVR5cGVzKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpBcnJheVR5
cGU+PiBtX2FycmF5VHlwZXM7Cit9OworCit2b2lkIHN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVu
Z3RoKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgRmluZEFycmF5VHlwZXMgZmluZEFycmF5VHlw
ZXM7CisgICAgZmluZEFycmF5VHlwZXMuY2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0pOworICAg
IGF1dG8gYXJyYXlUeXBlcyA9IGZpbmRBcnJheVR5cGVzLnRha2VBcnJheVR5cGVzKCk7CisKKyAg
ICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7
CisKKyAgICBmb3IgKGF1dG8mIGFycmF5VHlwZSA6IGFycmF5VHlwZXMpIHsKKyAgICAgICAgQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGFy
cmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBhcnJheVR5cGUuZ2V0
KCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgcGFyYW1ldGVycy5h
cHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNU
OjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3Jh
cChMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgcHJvZ3JhbS5pbnRyaW5z
aWNzKCkudWludFR5cGUoKSksIFN0cmluZygib3BlcmF0b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNP
cGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUo
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgIH0KK30KKworfQorCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lOWE5YTExNGYyNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZUFycmF5T3BlcmF0b3JMZW5ndGguaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhlc2l6ZUFy
cmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVD
b25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uNDIyMWZhMDIyZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwCkBA
IC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBGaW5k
QWxsVHlwZXMgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgfkZpbmRBbGxUeXBlcygp
ID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRlclR5
cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQocG9pbnRl
clR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQocG9pbnRlclR5cGUpOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNl
VHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVuZChhcnJh
eVJlZmVyZW5jZVR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlSZWZlcmVu
Y2VUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5
cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQoYXJyYXlU
eXBlKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFycmF5VHlwZSk7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZp
bml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9uYW1lZFR5cGVzLmFwcGVuZChlbnVt
ZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZW51bWVyYXRp
b25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1f
bmFtZWRUeXBlcy5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pIG92ZXJy
aWRlCisgICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChuYXRpdmVUeXBlRGVjbGFyYXRpb24p
OworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VW5uYW1l
ZFR5cGU+PiYmIHRha2VVbm5hbWVkVHlwZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURk1v
dmUobV91bm5hbWVkVHlwZXMpOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4mJiB0YWtlTmFtZWRUeXBlcygpCisgICAgeworICAgICAg
ICByZXR1cm4gV1RGTW92ZShtX25hbWVkVHlwZXMpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4gbV91bm5hbWVk
VHlwZXM7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+
PiBtX25hbWVkVHlwZXM7Cit9OworCit2b2lkIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3Jh
bSYgcHJvZ3JhbSkKK3sKKyAgICBGaW5kQWxsVHlwZXMgZmluZEFsbFR5cGVzOworICAgIGZpbmRB
bGxUeXBlcy5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAgYXV0byBtX3VubmFtZWRU
eXBlcyA9IGZpbmRBbGxUeXBlcy50YWtlVW5uYW1lZFR5cGVzKCk7CisgICAgYXV0byBtX25hbWVk
VHlwZXMgPSBmaW5kQWxsVHlwZXMudGFrZU5hbWVkVHlwZXMoKTsKKworICAgIGJvb2wgaXNPcGVy
YXRvciA9IHRydWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKworICAgIGZvciAo
YXV0byYgdW5uYW1lZFR5cGUgOiBtX3VubmFtZWRUeXBlcykgeworICAgICAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5
cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgdW5uYW1lZFR5cGUuZ2V0KCku
Y2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgcGFyYW1ldGVycy5hcHBl
bmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
KExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRl
QmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpLCBTdHJpbmco
Im9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAg
ICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShjb3B5Q29uc3RydWN0b3IpKTsKKworICAgICAg
ICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVmYXVsdENvbnN0cnVjdG9yKEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2lu
KCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUuZ2V0
KCkuY2xvbmUoKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCksIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMoKSwgV1RGOjpudWxsb3B0LCBpc09w
ZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShk
ZWZhdWx0Q29uc3RydWN0b3IpKTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIG5hbWVkVHlwZSA6
IG1fbmFtZWRUeXBlcykgeworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFi
bGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNU
OjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFt
ZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgU3RyaW5nKCksIFdURjo6
bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFy
YW1ldGVyczsKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xh
cmF0aW9uKSk7CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29u
c3RydWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUu
Z2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNU
OjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2lu
KCkpLCBuYW1lZFR5cGUuZ2V0KCkpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBp
c09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92
ZShjb3B5Q29uc3RydWN0b3IpKTsKKworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24gZGVmYXVsdENvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBX
VEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRU
eXBlLmdldCgpLm9yaWdpbigpKSwgbmFtZWRUeXBlLmdldCgpKSwgU3RyaW5nKCJvcGVyYXRvciBj
YXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbnMoKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAg
ICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShkZWZhdWx0Q29uc3RydWN0b3IpKTsKKyAgICB9Cit9
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgwMDIwZGQ3YzcwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50
aGVzaXplQ29uc3RydWN0b3JzLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCit2b2lkIHN5bnRoZXNpemVDb25z
dHJ1Y3RvcnMoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlv
bkZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjBiYTkwNTYyYmRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25G
dW5jdGlvbnMuY3BwCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdF
QkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUVu
dW1lcmF0aW9uRnVuY3Rpb25zLmgiCisKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNs
dWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgV0hMU0wgeworCit2b2lkIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9n
cmFtJiBwcm9ncmFtKQoreworICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CisgICAgYm9vbCBp
c1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlv
biA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhl
cjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVy
cygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVm
aW5pdGlvbi0+b3JpZ2luKCkpLCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCksIFdU
Rjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24gdmFyaWFibGVEZWNsYXJhdGlvbjIoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlv
bi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgKmVudW1lcmF0
aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAg
ICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAg
cGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMSkpOworICAgICAg
ICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uMikpOwor
ICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVtZXJh
dGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51
bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25E
ZWZpbml0aW9uLT5vcmlnaW4oKSksIHByb2dyYW0uaW50cmluc2ljcygpLmJvb2xUeXBlKCkpLCBT
dHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsK
KyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbikpOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJl
bmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwg
KmVudW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIp
OworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
CisgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1l
cmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6
bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCJv
cGVyYXRvci52YWx1ZSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAg
ICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
KSk7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCAqZW51
bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAg
ICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAg
ICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRp
b25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxs
b3B0LCBlbnVtZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoIm9wZXJh
dG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0
ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAg
ICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOwor
ICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlv
bi0+b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50
eXBlKCkuY2xvbmUoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAg
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAg
ICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlv
bi0+b3JpZ2luKCkpLCAqZW51bWVyYXRpb25EZWZpbml0aW9uKSwgU3RyaW5nKCJvcGVyYXRvciBj
YXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyks
IFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAgICBw
cm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5j
dGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmFjMTA3ODcyZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMu
aApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K2NsYXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFBy
b2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0
cnVjdHVyZUFjY2Vzc29ycy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLmZlODEzZGIzODE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcApAQCAt
MCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMu
aCIKKworI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb2dy
YW0uaCIKKyNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5
cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCit2b2lkIHN5bnRoZXNp
emVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBib29sIGlzT3Bl
cmF0b3IgPSB0cnVlOworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisgICAgZm9yIChh
dXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygp
KSB7CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6IHN0cnVjdHVyZURlZmlu
aXRpb24tPnN0cnVjdHVyZUVsZW1lbnRzKCkpIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAvLyBUaGUgZ2V0dGVyOiBvcGVyYXRvci5maWVsZAorICAgICAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1
Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVy
ZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksICpzdHJ1
Y3R1cmVEZWZpbml0aW9uKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAg
ICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikp
OworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4o
c3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpu
dWxsb3B0LCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBTdHJpbmc6OmZvcm1hdCgi
b3BlcmF0b3IuJXMiLCBzdHJ1Y3R1cmVFbGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RG
TW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVk
KTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIC8vIFRoZSBzZXR0ZXI6IG9wZXJhdG9yLmZpZWxkPQorICAgICAgICAgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4o
c3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCAq
c3RydWN0dXJlRGVmaW5pdGlvbiksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOwor
ICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0
aW9uMihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlm
aWVycygpLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoKSwgV1RGOjpu
dWxsb3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92
ZSh2YXJpYWJsZURlY2xhcmF0aW9uMSkpOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjIpKTsKKyAgICAgICAgICAgICAgICBBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2lu
KCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJl
bmNlOjp3cmFwKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgKnN0cnVj
dHVyZURlZmluaXRpb24pLCBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3IuJXM9Iiwgc3RydWN0dXJl
RWxlbWVudC5uYW1lKCkudXRmOCgpLmRhdGEoKSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6
bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAgICAgICAgcHJv
Z3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoZSBhbmRlcjogb3BlcmF0b3ImLmZpZWxkCisgICAg
ICAgICAgICBhdXRvIGNyZWF0ZUFuZGVyID0gWyZdKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVz
c1NwYWNlIGFkZHJlc3NTcGFjZSkgLT4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IHN0ZDo6bWFrZV91bmlxdWU8QVNU
OjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBh
ZGRyZXNzU3BhY2UsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0
dXJlRWxlbWVudC5vcmlnaW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CisgICAgICAgICAg
ICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6
OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgV1RG
TW92ZShhcmd1bWVudFR5cGUpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsKKyAg
ICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAg
ICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9u
KSk7CisgICAgICAgICAgICAgICAgYXV0byByZXR1cm5UeXBlID0gc3RkOjptYWtlX3VuaXF1ZTxB
U1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSks
IGFkZHJlc3NTcGFjZSwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSk7CisgICAgICAg
ICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVF
bGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdU
Rk1vdmUocmV0dXJuVHlwZSksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvciYuJXMiLCBzdHJ1Y3R1
cmVFbGVtZW50Lm5hbWUoKS51dGY4KCkuZGF0YSgpKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RG
OjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJl
c3NTcGFjZTo6Q29uc3RhbnQpKTsKKyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFu
ZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2UpKTsKKyAgICAgICAg
ICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVz
c1NwYWNlOjpUaHJlYWRncm91cCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3JlYXRl
QW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZCkpOworICAgICAg
ICB9CisgICAgfQorfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3Nv
cnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6
ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi40ZTliOWZmNzBjMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oCkBAIC0w
LDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJH
UFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3Mg
UHJvZ3JhbTsKKwordm9pZCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0mKTsK
KworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjdmNDM5MTM2YWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcApAQCAtMCwwICsxLDEwMzEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisj
aW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5
VHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIldITFNMQmFzZVNlbWFu
dGljLmgiCisjaW5jbHVkZSAiV0hMU0xCbG9jay5oIgorI2luY2x1ZGUgIldITFNMQm9vbGVhbkxp
dGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEJyZWFrLmgiCisjaW5jbHVkZSAiV0hMU0xCdWlsdElu
U2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xDb21tYUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lv
bi5oIgorI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJS
ZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTENvbnRpbnVlLmgiCisjaW5jbHVkZSAiV0hMU0xE
ZXJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCisj
aW5jbHVkZSAiV0hMU0xEb3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFZmZlY3RmdWxF
eHByZXNzaW9uU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRp
b24uaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyLmgiCisjaW5jbHVkZSAiV0hM
U0xFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGYWxsdGhyb3VnaC5oIgorI2luY2x1ZGUg
IldITFNMRmxvYXRMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCisjaW5jbHVk
ZSAiV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNs
YXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xJZlN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMSW5kZXhFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMTG9naWNh
bEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5o
IgorI2luY2x1ZGUgIldITFNMTm9kZS5oIgorI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIK
KyNpbmNsdWRlICJXSExTTE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgorI2luY2x1ZGUg
IldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbi5oIgorI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgiCisjaW5jbHVkZSAiV0hMU0xSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xSZXR1
cm4uaCIKKyNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xTcGVjaWFs
aXphdGlvbkNvbnN0YW50U2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFN0YWdlSW5PdXRTZW1h
bnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xTdHJ1
Y3R1cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgiCisj
aW5jbHVkZSAiV0hMU0xTd2l0Y2hDYXNlLmgiCisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hTdGF0ZW1l
bnQuaCIKKyNpbmNsdWRlICJXSExTTFRlcm5hcnlFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xUcmFwLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJn
dW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFs
LmgiCisjaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNs
YXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQu
aCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xX
aGlsZUxvb3AuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
Cit2b2lkIFZpc2l0b3I6OnZpc2l0KFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgLy8gVGhlc2Ug
dmlzaXRpbmcgZnVuY3Rpb25zIG1pZ2h0IGFkZCBuZXcgZ2xvYmFsIHN0YXRlbWVudHMsIHNvIGRv
bid0IHVzZSBmb3JlYWNoIHN5bnRheC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2dy
YW0udHlwZURlZmluaXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdCgqcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKVtpXSk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpW2ld
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0
aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnByb2dyYW0u
ZW51bWVyYXRpb25EZWZpbml0aW9ucygpW2ldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoKnByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpW2ldKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMo
KS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpwcm9ncmFtLm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKClbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCgqcHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25zKClbaV0pOwor
fQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQor
eworICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5
cGUpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5h
bWVkVHlwZSkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5h
bWVkVHlwZSkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkFycmF5
UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJU
KGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpOworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgfQorfQor
Cit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpCit7CisgICAg
aWYgKGlzPEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uPihuYW1lZFR5cGUpKTsKKyAg
ICBlbHNlIGlmIChpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KG5hbWVkVHlwZSkpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+
KG5hbWVkVHlwZSkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
PihuYW1lZFR5cGUpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpF
bnVtZXJhdGlvbkRlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAgIGVsc2UgeworICAgICAgICBB
U1NFUlQoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpOworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+
KG5hbWVkVHlwZSkpOworICAgIH0KK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlR5cGVE
ZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAodHlwZURlZmluaXRpb24udHlw
ZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnR5cGVEZWZpbml0aW9uLnR5cGUoKSk7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1
Y3R1cmVEZWZpbml0aW9uKQoreworICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6IHN0
cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KHN0cnVjdHVyZUVsZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCit7CisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgIGZv
ciAoYXV0byYgZW51bWVyYXRpb25NZW1iZXIgOiBlbnVtZXJhdGlvbkRlZmluaXRpb24uZW51bWVy
YXRpb25NZW1iZXJzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlbnVtZXJhdGlvbk1l
bWJlcik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24m
IGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nh
c3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4oZnVuY3Rpb25EZWZpbml0aW9uKSk7CisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0
PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsK
K30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0
aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHR5cGVBcmd1bWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpUeXBl
UmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQoreworICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50
IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdCh0eXBlQXJndW1lbnQpOworICAgIGlmICh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgp
ICYmIGlzPEFTVDo6VHlwZURlZmluaXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgp
KSkgeworICAgICAgICBhdXRvJiB0eXBlRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6VHlwZURl
ZmluaXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgaWYgKHR5
cGVEZWZpbml0aW9uLnR5cGUoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdHlw
ZURlZmluaXRpb24udHlwZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpQb2ludGVyVHlwZSYgcG9pbnRlclR5cGUpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0
YXRpY19jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZSY+KHBvaW50ZXJUeXBlKSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlw
ZSkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VU
eXBlJj4oYXJyYXlSZWZlcmVuY2VUeXBlKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpBcnJheVR5cGUmIGFycmF5VHlwZSkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlU
eXBlLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVt
ZW50JiBzdHJ1Y3R1cmVFbGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1
cmVFbGVtZW50LnR5cGUoKSk7CisgICAgaWYgKHN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkp
OworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1l
cmF0aW9uTWVtYmVyKQoreworICAgIGlmIChlbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpOworfQor
Cit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25E
ZWNsYXJhdGlvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlv
bi5hdHRyaWJ1dGVCbG9jaygpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWNs
YXJhdGlvbi50eXBlKCkpOworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWNs
YXJhdGlvbi5wYXJhbWV0ZXJzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChwYXJhbWV0
ZXIpOworICAgIGlmIChmdW5jdGlvbkRlY2xhcmF0aW9uLnNlbWFudGljKCkpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCgqZnVuY3Rpb25EZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsKK30KKwor
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlR5cGVBcmd1bWVudCYgdHlwZUFyZ3VtZW50KQorewor
ICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Np
b24mIGNvbnN0YW50RXhwcmVzc2lvbikgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoY29u
c3RhbnRFeHByZXNzaW9uKTsKKyAgICB9LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJl
ZmVyZW5jZT4mIHR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp0
eXBlUmVmZXJlbmNlKTsKKyAgICB9KSwgdHlwZUFyZ3VtZW50KTsKK30KKwordm9pZCBWaXNpdG9y
Ojp2aXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmIHJlZmVyZW5jZVR5cGUpCit7CisgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHJlZmVyZW5jZVR5cGUuZWxlbWVudFR5cGUoKSk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMpCit7CisgICAgV1RGOjp2aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYgYnVpbHRJblNlbWFudGlj
KSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChidWlsdEluU2VtYW50aWMpOworICAgIH0s
IFsmXShBU1Q6OlJlc291cmNlU2VtYW50aWMmIHJlc291cmNlU2VtYW50aWMpIHsKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHJlc291cmNlU2VtYW50aWMpOworICAgIH0sIFsmXShBU1Q6OlNw
ZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYgc3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFu
dGljKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzcGVjaWFsaXphdGlvbkNvbnN0YW50
U2VtYW50aWMpOworICAgIH0sIFsmXShBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYgc3RhZ2VJbk91
dFNlbWFudGljKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGFnZUluT3V0U2VtYW50
aWMpOworICAgIH0pLCBzZW1hbnRpYyk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpD
b25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikKK3sKKyAgICBjb25zdGFudEV4
cHJlc3Npb24udmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYg
aW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGludGVnZXJMaXRl
cmFsKTsKKyAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZElu
dGVnZXJMaXRlcmFsKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh1bnNpZ25lZEludGVn
ZXJMaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkg
eworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZmxvYXRMaXRlcmFsKTsKKyAgICB9LCBbJl0o
QVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KG51bGxMaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVh
bkxpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGJvb2xlYW5MaXRlcmFsKTsK
KyAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpIHsKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVt
YmVyUmVmZXJlbmNlKTsKKyAgICB9KSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpB
dHRyaWJ1dGVCbG9jayYgYXR0cmlidXRlQmxvY2spCit7CisgICAgZm9yIChhdXRvJiBmdW5jdGlv
bkF0dHJpYnV0ZSA6IGF0dHJpYnV0ZUJsb2NrKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZnVuY3Rpb25BdHRyaWJ1dGUpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QnVpbHRJ
blNlbWFudGljJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlc291cmNlU2Vt
YW50aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3BlY2lhbGl6YXRpb25D
b25zdGFudFNlbWFudGljJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN0YWdl
SW5PdXRTZW1hbnRpYyYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpJbnRlZ2Vy
TGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGludGVn
ZXJMaXRlcmFsLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpVbnNpZ25l
ZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKQoreworICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkKK3sKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZmxvYXRMaXRlcmFsLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpCit7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KG51bGxMaXRlcmFsLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpCb29sZWFuTGl0ZXJhbCYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpJbnRl
Z2VyTGl0ZXJhbFR5cGUmIGludGVnZXJMaXRlcmFsVHlwZSkKK3sKKyAgICBpZiAoaW50ZWdlckxp
dGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmlu
dGVnZXJMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGludGVnZXJMaXRlcmFsVHlwZS5wcmVmZXJyZWRUeXBlKCkpOworfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmIHVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlKQoreworICAgIGlmICh1bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5yZXNvbHZl
ZFR5cGUoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp1bnNpZ25lZEludGVnZXJMaXRl
cmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHVuc2lnbmVk
SW50ZWdlckxpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
dmlzaXQoQVNUOjpGbG9hdExpdGVyYWxUeXBlJiBmbG9hdExpdGVyYWxUeXBlKQoreworICAgIGlm
IChmbG9hdExpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoKmZsb2F0TGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChmbG9hdExpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbFR5cGUmIG51bGxMaXRlcmFsVHlwZSkKK3sKKyAg
ICBpZiAobnVsbExpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKm51bGxMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZSYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkF0dHJpYnV0
ZSYgZnVuY3Rpb25BdHRyaWJ1dGUpCit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYgbnVtVGhyZWFkc0Z1bmN0aW9u
QXR0cmlidXRlKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChudW1UaHJlYWRzRnVuY3Rp
b25BdHRyaWJ1dGUpOworICAgIH0pLCBmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmKQoreworfQorCit2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQoreworICAgIGZvciAoYXV0byYg
c3RhdGVtZW50IDogYmxvY2suc3RhdGVtZW50cygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoKnN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdGF0ZW1lbnQm
IHN0YXRlbWVudCkKK3sKKyAgICBpZiAoaXM8QVNUOjpCbG9jaz4oc3RhdGVtZW50KSkKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QmxvY2s+KHN0YXRlbWVudCkpOwor
ICAgIGVsc2UgaWYgKGlzPEFTVDo6QnJlYWs+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkJyZWFrPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlm
IChpczxBU1Q6OkNvbnRpbnVlPihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoZG93bmNhc3Q8QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8
QVNUOjpEb1doaWxlTG9vcD4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGRvd25jYXN0PEFTVDo6RG9XaGlsZUxvb3A+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlz
PEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudD4oc3RhdGVtZW50KSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRl
bWVudD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpGYWxsdGhyb3VnaD4oc3Rh
dGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RmFsbHRo
cm91Z2g+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6Rm9yTG9vcD4oc3RhdGVt
ZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Rm9yTG9vcD4o
c3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpJZlN0YXRlbWVudD4oc3RhdGVtZW50
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6SWZTdGF0ZW1lbnQ+
KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6UmV0dXJuPihzdGF0ZW1lbnQpKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpSZXR1cm4+KHN0YXRlbWVu
dCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6U3dpdGNoQ2FzZT4oc3RhdGVtZW50KSkKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6U3dpdGNoQ2FzZT4oc3RhdGVtZW50
KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlN3aXRjaFN0YXRlbWVudD4o
c3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpUcmFwPihzdGF0ZW1lbnQpKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpUcmFwPihzdGF0ZW1lbnQpKTsK
KyAgICBlbHNlIGlmIChpczxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50PihzdGF0
ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSB7CisgICAgICAg
IEFTU0VSVChpczxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7CisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7CisgICAgfQor
fQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QnJlYWsmKQoreworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6Q29udGludWUmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChk
b1doaWxlTG9vcC5ib2R5KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5j
b25kaXRpb25hbCgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkV4cHJlc3Npb24m
IGV4cHJlc3Npb24pCit7CisgICAgaWYgKGlzPEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGV4
cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBc3Np
Z25tZW50RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6Qm9v
bGVhbkxpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93
bmNhc3Q8QVNUOjpCb29sZWFuTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlz
PEFTVDo6Q2FsbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpDYWxsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVs
c2UgaWYgKGlzPEFTVDo6Q29tbWFFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Q29tbWFFeHByZXNzaW9uPihleHByZXNzaW9u
KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Np
b24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpEZXJlZmVyZW5j
ZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkZsb2F0TGl0
ZXJhbD4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxB
U1Q6OkZsb2F0TGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6SW50
ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93
bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlz
PEFTVDo6TG9naWNhbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwor
ICAgIGVsc2UgaWYgKGlzPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsTm90RXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChk
b3duY2FzdDxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsK
KyAgICBlbHNlIGlmIChpczxBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6Ok1ha2VQb2ludGVyRXhw
cmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWw+
KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpO
dWxsTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RG90RXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxB
U1Q6OkRvdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6Oklu
ZGV4RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChk
b3duY2FzdDxBU1Q6OkluZGV4RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYg
KGlzPEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlRlcm5hcnlFeHByZXNzaW9u
PihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6
VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlVu
c2lnbmVkSW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSk7
CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihl
eHByZXNzaW9uKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlZh
cmlhYmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSk7CisgICAgfQorfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihk
b3RFeHByZXNzaW9uKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpJbmRleEV4cHJl
c3Npb24mIGluZGV4RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaW5kZXhF
eHByZXNzaW9uLmluZGV4RXhwcmVzc2lvbigpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3Rh
dGljX2Nhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mPihpbmRleEV4cHJlc3Npb24p
KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
biYgZXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZXhwcmVzc2lvbi5iYXNl
KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0
YXRlbWVudCYgZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkKK3sKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNzaW9u
KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKQoreworfQor
Cit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKK3sKKyAgICBXVEY6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7CisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgfSwgWyZdKHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCgqZXhwcmVzc2lvbik7CisgICAgfSksIGZvckxvb3AuaW5pdGlhbGl6
YXRpb24oKSk7CisgICAgaWYgKGZvckxvb3AuY29uZGl0aW9uKCkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqZm9yTG9vcC5jb25kaXRpb24oKSk7CisgICAgaWYgKGZvckxvb3AuaW5jcmVt
ZW50KCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuYm9keSgpKTsKK30KKwordm9pZCBWaXNp
dG9yOjp2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKK3sKKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CisgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5
KCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkK
K3sKKyAgICBpZiAocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqcmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZp
c2l0KEFTVDo6U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBpZiAoc3dpdGNoQ2FzZS52
YWx1ZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnN3aXRjaENhc2UudmFsdWUoKSk7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkKK3sK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoU3RhdGVtZW50LnZhbHVlKCkpOworICAgIGZv
ciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
dmlzaXQoQVNUOjpUcmFwJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkK
K3sKKyAgICBmb3IgKGF1dG8mIHZhcmlhYmxlRGVjbGFyYXRpb24gOiB2YXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudC52YXJpYWJsZURlY2xhcmF0aW9ucygpKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hp
bGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3Au
Ym9keSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlh
YmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5zZW1h
bnRpYygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24u
c2VtYW50aWMoKSk7CisgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxp
emVyKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Np
b24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3Np
Z25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25t
ZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNh
bGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKK3sKKyAgICBmb3IgKGF1dG8mIGFyZ3VtZW50
IDogY2FsbEV4cHJlc3Npb24uYXJndW1lbnRzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCgqYXJndW1lbnQpOworICAgIGlmIChjYWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoY2FsbEV4cHJlc3Npb24uY2FzdFJldHVyblR5cGUo
KS0+Z2V0KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9u
JiBjb21tYUV4cHJlc3Npb24pCit7CisgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogY29tbWFF
eHByZXNzaW9uLmxpc3QoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpleHByZXNzaW9u
KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYg
ZGVyZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkZXJlZmVy
ZW5jZUV4cHJlc3Npb24ucG9pbnRlcigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlz
aXQobG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCit7CisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQoKSk7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBt
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCht
YWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKK30KKwordm9pZCBWaXNpdG9y
Ojp2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9u
KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVl
KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlz
aXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFsdWUoKSk7CisgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWUoKSk7CisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHBy
ZXNzaW9uKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLnJlc3VsdEV4cHJlc3Npb24oKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpU
ZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5k
VmlzaXQodGVybmFyeUV4cHJlc3Npb24uYm9keUV4cHJlc3Npb24oKSk7CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkpOworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKQoreworfQorCit2b2lkIFZp
c2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIGlmICgh
ZXJyb3IoKSkKKyAgICAgICAgdmlzaXQocHJvZ3JhbSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQoreworICAgIGlm
ICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodW5uYW1lZFR5cGUpOworfQorCit2b2lkIFZpc2l0
b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKQoreworICAg
IGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobmFtZWRUeXBlKTsKK30KKwordm9pZCBWaXNp
dG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRp
b24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh0eXBlRGVmaW5pdGlvbik7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZp
bml0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZW51bWVyYXRpb25E
ZWZpbml0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpG
dW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoIWVycm9y
KCkpCisgICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZp
c2l0KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xh
cmF0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobmF0aXZlVHlwZURl
Y2xhcmF0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpU
eXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAg
ICAgdmlzaXQodHlwZVJlZmVyZW5jZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKQoreworICAgIGlmICghZXJyb3Io
KSkKKyAgICAgICAgdmlzaXQocG9pbnRlclR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBl
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYXJyYXlSZWZlcmVuY2VUeXBl
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBcnJheVR5cGUm
IGFycmF5VHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGFycmF5VHlw
ZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RydWN0dXJl
RWxlbWVudCYgc3RydWN0dXJlRWxlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAg
IHZpc2l0KHN0cnVjdHVyZUVsZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKK3sKKyAg
ICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGVudW1lcmF0aW9uTWVtYmVyKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
JiBmdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQoZnVuY3Rpb25EZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBlQXJndW1lbnQpCit7CisgICAgaWYgKCFlcnJv
cigpKQorICAgICAgICB2aXNpdCh0eXBlQXJndW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmIHJlZmVyZW5jZVR5cGUpCit7Cisg
ICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChyZWZlcmVuY2VUeXBlKTsKK30KKwordm9p
ZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMpCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzZW1hbnRpYyk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25z
dGFudEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChjb25z
dGFudEV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OkF0dHJpYnV0ZUJsb2NrJiBhdHRyaWJ1dGVCbG9jaykKK3sKKyAgICBpZiAoIWVycm9yKCkp
CisgICAgICAgIHZpc2l0KGF0dHJpYnV0ZUJsb2NrKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVj
a0Vycm9yQW5kVmlzaXQoQVNUOjpCdWlsdEluU2VtYW50aWMmIGJ1aWx0SW5TZW1hbnRpYykKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGJ1aWx0SW5TZW1hbnRpYyk7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYg
cmVzb3VyY2VTZW1hbnRpYykKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHJl
c291cmNlU2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYgc3BlY2lhbGl6YXRpb25Db25zdGFu
dFNlbWFudGljKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoc3BlY2lhbGl6
YXRpb25Db25zdGFudFNlbWFudGljKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmIHN0YWdlSW5PdXRTZW1hbnRpYykKK3sKKyAg
ICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHN0YWdlSW5PdXRTZW1hbnRpYyk7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGlu
dGVnZXJMaXRlcmFsKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoaW50ZWdl
ckxpdGVyYWwpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlVu
c2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0
TGl0ZXJhbCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZsb2F0TGl0ZXJh
bCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TnVsbExpdGVy
YWwmIG51bGxMaXRlcmFsKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobnVs
bExpdGVyYWwpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJv
b2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KGJvb2xlYW5MaXRlcmFsKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGUmIGludGVnZXJMaXRlcmFsVHlwZSkKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGludGVnZXJMaXRlcmFsVHlwZSk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbFR5cGUmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKQoreworICAgIGlmICghZXJy
b3IoKSkKKyAgICAgICAgdmlzaXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUpOworfQorCit2
b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZsb2F0TGl0ZXJhbFR5cGUmIGZs
b2F0TGl0ZXJhbFR5cGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChmbG9h
dExpdGVyYWxUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpOdWxsTGl0ZXJhbFR5cGUmIG51bGxMaXRlcmFsVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkp
CisgICAgICAgIHZpc2l0KG51bGxMaXRlcmFsVHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJS
ZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKQor
eworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJiBmdW5jdGlvbkF0dHJpYnV0ZSkKK3sKKyAg
ICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZ1bmN0aW9uQXR0cmlidXRlKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25B
dHRyaWJ1dGUmIG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkKK3sKKyAgICBpZiAoIWVycm9y
KCkpCisgICAgICAgIHZpc2l0KG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQoreworICAg
IGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYmxvY2spOworfQorCit2b2lkIFZpc2l0b3I6
OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KQoreworICAgIGlm
ICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoc3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9y
OjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCcmVhayYgYnJlYWtTdGF0ZW1lbnQpCit7CisgICAg
aWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChicmVha1N0YXRlbWVudCk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29udGludWUmIGNvbnRpbnVlU3RhdGVt
ZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY29udGludWVTdGF0ZW1l
bnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkRvV2hpbGVM
b29wJiBkb1doaWxlTG9vcCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGRv
V2hpbGVMb29wKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpF
eHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQoZXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisg
ICAgICAgIHZpc2l0KGRvdEV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKQoreworICAg
IGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoaW5kZXhFeHByZXNzaW9uKTsKK30KKwordm9p
ZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCYgZWZm
ZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAg
IHZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6
OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZhbGx0aHJvdWdoJiBmYWxsdGhyb3VnaFN0YXRlbWVu
dCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZhbGx0aHJvdWdoU3RhdGVt
ZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGb3JMb29w
JiBmb3JMb29wKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZm9yTG9vcCk7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQm
IGlmU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoaWZTdGF0
ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJldHVy
biYgcmV0dXJuU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQo
cmV0dXJuU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAg
ICAgdmlzaXQoc3dpdGNoQ2FzZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpCit7CisgICAgaWYgKCFl
cnJvcigpKQorICAgICAgICB2aXNpdChzd2l0Y2hTdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0
b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlRyYXAmIHRyYXApCit7CisgICAgaWYgKCFlcnJv
cigpKQorICAgICAgICB2aXNpdCh0cmFwKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh2
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCit7CisgICAgaWYgKCFlcnJv
cigpKQorICAgICAgICB2aXNpdCh3aGlsZUxvb3ApOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRp
b24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh2YXJpYWJsZURlY2xhcmF0
aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBc3NpZ25t
ZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9u
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY2FsbEV4cHJlc3Npb24pOwor
fQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lv
biYgY29tbWFFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQo
Y29tbWFFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikKK3sKKyAg
ICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbik7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Np
b24mIGxvZ2ljYWxFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQobG9naWNhbEV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lvbikKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGxvZ2ljYWxOb3RFeHByZXNzaW9uKTsK
K30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAgIGlm
ICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbik7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TWFrZVBvaW50ZXJF
eHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQor
ICAgICAgICB2aXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6
OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNp
dChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFyeUV4cHJlc3Npb24pCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbik7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVu
Y2UmIHZhcmlhYmxlUmVmZXJlbmNlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQodmFyaWFibGVSZWZlcmVuY2UpOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCmluZGV4IDUx
Njg1NmU0MWQwLi44NWU3OGZmNTk5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmgKQEAgLTI3LDU0MyArMjcsMjM0IEBACiAKICNp
ZiBFTkFCTEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCi0jaW5jbHVkZSAi
V0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xBcnJh
eVJlZmVyZW5jZVR5cGUuaCIKLSNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgotI2luY2x1ZGUg
IldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTEJhc2VGdW5jdGlv
bkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgiCi0jaW5jbHVkZSAi
V0hMU0xCbG9jay5oIgotI2luY2x1ZGUgIldITFNMQm9vbGVhbkxpdGVyYWwuaCIKLSNpbmNsdWRl
ICJXSExTTEJyZWFrLmgiCi0jaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKLSNpbmNs
dWRlICJXSExTTENhbGxFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xDb21tYUV4cHJlc3Np
b24uaCIKLSNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldI
TFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuaCIKLSNpbmNs
dWRlICJXSExTTENvbnRpbnVlLmgiCi0jaW5jbHVkZSAiV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Np
b24uaCIKLSNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCi0jaW5jbHVkZSAiV0hMU0xEb3RF
eHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50
LmgiCi0jaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCIKLSNpbmNsdWRlICJX
SExTTEVudW1lcmF0aW9uTWVtYmVyLmgiCi0jaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCi0j
aW5jbHVkZSAiV0hMU0xGYWxsdGhyb3VnaC5oIgotI2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFs
LmgiCi0jaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCiAjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkF0
dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgotI2luY2x1
ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVu
dC5oIgotI2luY2x1ZGUgIldITFNMSW5kZXhFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xJ
bnRlZ2VyTGl0ZXJhbC5oIgotI2luY2x1ZGUgIldITFNMTG9naWNhbEV4cHJlc3Npb24uaCIKLSNp
bmNsdWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xNYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xNYWtlUG9pbnRlckV4
cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaCIK
LSNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNM
Tm9kZS5oIgotI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTE51
bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oIgotI2luY2x1ZGUgIldITFNMUGFyYW1ldGVyLmgi
Ci0jaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgotI2luY2x1ZGUgIldITFNMUHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKLSNpbmNsdWRl
ICJXSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTFJlZmVy
ZW5jZVR5cGUuaCIKLSNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKLSNpbmNsdWRl
ICJXSExTTFJldHVybi5oIgogI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKLSNpbmNsdWRlICJX
SExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMU3Rh
Z2VJbk91dFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKLSNpbmNsdWRl
ICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKLSNpbmNsdWRlICJXSExTTFN0cnVjdHVyZUVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJXSExTTFN3aXRjaENhc2UuaCIKLSNpbmNsdWRlICJXSExTTFN3
aXRjaFN0YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIKLSNp
bmNsdWRlICJXSExTTFRyYXAuaCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKICNpbmNsdWRlICJX
SExTTFR5cGVBcmd1bWVudC5oIgotI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKLSNp
bmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKLSNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50
ZWdlckxpdGVyYWwuaCIKLSNpbmNsdWRlICJXSExTTFZhbHVlLmgiCi0jaW5jbHVkZSAiV0hMU0xW
YXJpYWJsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudC5oIgotI2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKLSNpbmNs
dWRlICJXSExTTFdoaWxlTG9vcC5oIgotCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNw
YWNlIFdITFNMIHsKIAotY2xhc3MgVmlzaXRvciB7Ci0gICAgflZpc2l0b3IoKSA9IGRlZmF1bHQ7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKLSAgICB7Ci0gICAg
ICAgIGZvciAoYXV0byYgdHlwZURlZmluaXRpb24gOiBwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygp
KQotICAgICAgICAgICAgdmlzaXQodHlwZURlZmluaXRpb24pOwotICAgICAgICBmb3IgKGF1dG8m
IHN0cnVjdHVyZURlZmluaXRpb24gOiBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkpCi0g
ICAgICAgICAgICB2aXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKLSAgICAgICAgZm9yIChhdXRv
JiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMo
KSkKLSAgICAgICAgICAgIHZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7Ci0gICAgICAgIGZv
ciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25z
KCkpCi0gICAgICAgICAgICB2aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOwotICAgICAgICBmb3Ig
KGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKTsKLSAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFt
Lm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbik7Ci0gICAgfQotCi0gICAgdm9pZCB2aXNpdFR5cGUoQVNUOjpUeXBlJiB0eXBl
KQotICAgIHsKLSAgICAgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odHlwZSkpCi0gICAg
ICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpKTsKLSAgICAg
ICAgZWxzZSBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odHlwZSkpCi0gICAgICAgICAgICB2aXNp
dChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih0eXBlKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlz
PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih0eXBlKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25j
YXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih0eXBlKSk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgQVNTRVJUKGlzPEFTVDo6QXJyYXlUeXBlPih0eXBlKSk7Ci0gICAgICAgICAgICB2
aXNpdChkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odHlwZSkpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0
aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHR5cGVEZWZpbml0aW9uLnR5cGUoKSk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYg
c3RydWN0dXJlRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJl
RWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkKLSAgICAg
ICAgICAgIHZpc2l0KHN0cnVjdHVyZUVsZW1lbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9u
KQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkp
OwotICAgICAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25EZWZp
bml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpKQotICAgICAgICAgICAgdmlzaXQoZW51bWVyYXRp
b25NZW1iZXIpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9u
RGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQoc3Rh
dGljX2Nhc3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4oZnVuY3Rpb25EZWZpbml0aW9uKSk7
Ci0gICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi5ibG9jaygpKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQoc3RhdGljX2Nhc3Q8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiB0eXBl
QXJndW1lbnQgOiBuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpKQotICAgICAg
ICAgICAgdmlzaXQodHlwZUFyZ3VtZW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQotICAgIHsKLSAgICAgICAgZm9y
IChhdXRvJiB0eXBlQXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMoKSkKLSAg
ICAgICAgICAgIHZpc2l0KHR5cGVBcmd1bWVudCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKQotICAgIHsKLSAgICAgICAgdmlz
aXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlJj4ocG9pbnRlclR5cGUpKTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5
UmVmZXJlbmNlVHlwZSkKLSAgICB7Ci0gICAgICAgIHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UmVm
ZXJlbmNlVHlwZSY+KGFycmF5UmVmZXJlbmNlVHlwZSkpOwotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQotICAgIHsKLSAgICAgICAgdmlz
aXRUeXBlKGFycmF5VHlwZS50eXBlKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpCi0gICAgewotICAgICAg
ICB2aXNpdFR5cGUoc3RydWN0dXJlRWxlbWVudC50eXBlKCkpOwotICAgICAgICBpZiAoc3RydWN0
dXJlRWxlbWVudC5zZW1hbnRpYygpKQotICAgICAgICAgICAgdmlzaXQoKnN0cnVjdHVyZUVsZW1l
bnQuc2VtYW50aWMoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RW51
bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKGVu
dW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpCi0gICAgICAgICAgICB2aXNpdCgqZW51bWVyYXRpb25N
ZW1iZXIudmFsdWUoKSk7Ci0gICAgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFyYXRpb24pCi0gICAgewotICAgICAg
ICB2aXNpdChmdW5jdGlvbkRlY2xhcmF0aW9uLmF0dHJpYnV0ZUJsb2NrKCkpOwotICAgICAgICB2
aXNpdFR5cGUoZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOwotICAgICAgICBmb3IgKGF1dG8m
IHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpKQotICAgICAgICAg
ICAgdmlzaXQocGFyYW1ldGVyKTsKLSAgICAgICAgaWYgKGZ1bmN0aW9uRGVjbGFyYXRpb24uc2Vt
YW50aWMoKSkKLSAgICAgICAgICAgIHZpc2l0KCpmdW5jdGlvbkRlY2xhcmF0aW9uLnNlbWFudGlj
KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlR5cGVBcmd1bWVudCYg
dHlwZUFyZ3VtZW50KQotICAgIHsKLSAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKSB7Ci0gICAg
ICAgICAgICB2aXNpdChjb25zdGFudEV4cHJlc3Npb24pOwotICAgICAgICB9LCBbJl0oc3RkOjp1
bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4mIHR5cGVSZWZlcmVuY2UpIHsKLSAgICAgICAg
ICAgIHZpc2l0KCp0eXBlUmVmZXJlbmNlKTsKLSAgICAgICAgfSksIHR5cGVBcmd1bWVudCk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYgcmVmZXJl
bmNlVHlwZSkKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShyZWZlcmVuY2VUeXBlLmVsZW1lbnRU
eXBlKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlNlbWFudGljJiBz
ZW1hbnRpYykKLSAgICB7Ci0gICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
QVNUOjpCdWlsdEluU2VtYW50aWMmIGJ1aWx0SW5TZW1hbnRpYykgewotICAgICAgICAgICAgdmlz
aXQoYnVpbHRJblNlbWFudGljKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6UmVzb3VyY2VTZW1hbnRp
YyYgcmVzb3VyY2VTZW1hbnRpYykgewotICAgICAgICAgICAgdmlzaXQocmVzb3VyY2VTZW1hbnRp
Yyk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYg
c3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljKSB7Ci0gICAgICAgICAgICB2aXNpdChzcGVj
aWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMpOwotICAgICAgICB9LCBbJl0oQVNUOjpTdGFnZUlu
T3V0U2VtYW50aWMmIHN0YWdlSW5PdXRTZW1hbnRpYykgewotICAgICAgICAgICAgdmlzaXQoc3Rh
Z2VJbk91dFNlbWFudGljKTsKLSAgICAgICAgfSksIHNlbWFudGljKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVz
c2lvbikKLSAgICB7Ci0gICAgICAgIGNvbnN0YW50RXhwcmVzc2lvbi52aXNpdChXVEY6Om1ha2VW
aXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgewotICAgICAg
ICAgICAgdmlzaXQoaW50ZWdlckxpdGVyYWwpOwotICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25l
ZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7Ci0gICAgICAgICAgICB2
aXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRM
aXRlcmFsJiBmbG9hdExpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KGZsb2F0TGl0ZXJhbCk7
Ci0gICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgewotICAgICAg
ICAgICAgdmlzaXQobnVsbExpdGVyYWwpOwotICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0
ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KGJvb2xlYW5MaXRlcmFs
KTsKLSAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
KSB7Ci0gICAgICAgICAgICB2aXNpdChjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSk7Ci0gICAgICAgIH0pKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRlQmxvY2spCi0gICAgewotICAgICAgICBm
b3IgKGF1dG8mIGZ1bmN0aW9uQXR0cmlidXRlIDogYXR0cmlidXRlQmxvY2spCi0gICAgICAgICAg
ICB2aXNpdChmdW5jdGlvbkF0dHJpYnV0ZSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6UGFyYW1ldGVyJiBwYXJhbWV0ZXIpCi0gICAgewotICAgICAgICB2aXNpdFR5cGUo
cGFyYW1ldGVyLnR5cGUoKSk7Ci0gICAgICAgIGlmIChwYXJhbWV0ZXIuc2VtYW50aWMoKSkKLSAg
ICAgICAgICAgIHZpc2l0KCpwYXJhbWV0ZXIuc2VtYW50aWMoKSk7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6QnVpbHRJblNlbWFudGljJikKLSAgICB7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYpCi0gICAgewotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRT
ZW1hbnRpYyYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0
YWdlSW5PdXRTZW1hbnRpYyYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OkludGVnZXJMaXRlcmFsJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpCi0gICAgewotICAgIH0KLQotICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYpCi0gICAgewotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJikKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmKQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJiBmdW5jdGlvbkF0dHJpYnV0ZSkKLSAgICB7
Ci0gICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpOdW1UaHJlYWRz
RnVuY3Rpb25BdHRyaWJ1dGUmIG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkgewotICAgICAg
ICAgICAgdmlzaXQobnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKTsKLSAgICAgICAgfSksIGZ1
bmN0aW9uQXR0cmlidXRlKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpO
dW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpCbG9jayYgYmxvY2spCi0gICAgewotICAgICAgICBmb3IgKGF1dG8m
IHN0YXRlbWVudCA6IGJsb2NrLnN0YXRlbWVudHMoKSkKLSAgICAgICAgICAgIHZpc2l0KCpzdGF0
ZW1lbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0YXRlbWVudCYg
c3RhdGVtZW50KQotICAgIHsKLSAgICAgICAgaWYgKGlzPEFTVDo6QmxvY2s+KHN0YXRlbWVudCkp
Ci0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkJsb2NrPihzdGF0ZW1lbnQpKTsKLSAg
ICAgICAgZWxzZSBpZiAoaXM8QVNUOjpCcmVhaz4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZp
c2l0KGRvd25jYXN0PEFTVDo6QnJlYWs+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChp
czxBU1Q6OkNvbnRpbnVlPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8
QVNUOjpDb250aW51ZT4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6RG9X
aGlsZUxvb3A+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkRv
V2hpbGVMb29wPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpFZmZlY3Rm
dWxFeHByZXNzaW9uU3RhdGVtZW50PihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93
bmNhc3Q8QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKLSAg
ICAgICAgZWxzZSBpZiAoaXM8QVNUOjpGYWxsdGhyb3VnaD4oc3RhdGVtZW50KSkKLSAgICAgICAg
ICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVudCkpOwotICAgICAg
ICBlbHNlIGlmIChpczxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNp
dChkb3duY2FzdDxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChp
czxBU1Q6OklmU3RhdGVtZW50PihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNh
c3Q8QVNUOjpJZlN0YXRlbWVudD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFT
VDo6UmV0dXJuPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpS
ZXR1cm4+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlN3aXRjaENhc2U+
KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlN3aXRjaENhc2U+
KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlN3aXRjaFN0YXRlbWVudD4o
c3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6U3dpdGNoU3RhdGVt
ZW50PihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpUcmFwPihzdGF0ZW1l
bnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpUcmFwPihzdGF0ZW1lbnQpKTsK
LSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4o
c3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIEFTU0VSVChpczxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7Ci0gICAgICAgICAgICB2
aXNpdChkb3duY2FzdDxBU1Q6OldoaWxlTG9vcD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCcmVhayYpCi0gICAgewotICAgIH0K
LQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNvbnRpbnVlJikKLSAgICB7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKQot
ICAgIHsKLSAgICAgICAgdmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKLSAgICAgICAgdmlzaXQo
ZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIGlmIChpczxB
U1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0
KGRvd25jYXN0PEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAg
ICAgZWxzZSBpZiAoaXM8QVNUOjpCb29sZWFuTGl0ZXJhbD4oZXhwcmVzc2lvbikpCi0gICAgICAg
ICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkJvb2xlYW5MaXRlcmFsPihleHByZXNzaW9uKSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6Q2FsbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAg
ICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpDYWxsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
OwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkNvbW1hRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
Ci0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkNvbW1hRXhwcmVzc2lvbj4oZXhwcmVz
c2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4o
ZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkRlcmVmZXJlbmNl
RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkZsb2F0
TGl0ZXJhbD4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkZs
b2F0TGl0ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkludGVn
ZXJMaXRlcmFsPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6
SW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpM
b2dpY2FsRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2Fz
dDxBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYg
KGlzPEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAg
dmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwot
ICAgICAgICBlbHNlIGlmIChpczxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGV4
cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpNYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6
TWFrZVBvaW50ZXJFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRv
d25jYXN0PEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAg
IGVsc2UgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAg
dmlzaXQoZG93bmNhc3Q8QVNUOjpOdWxsTGl0ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAgICBl
bHNlIGlmIChpczxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0g
ICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbj4o
ZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYg
KGlzPEFTVDo6VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlz
aXQoZG93bmNhc3Q8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAg
ICBlbHNlIGlmIChpczxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKQot
ICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihl
eHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6
VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgICAgIHZpc2l0KGRvd25j
YXN0PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0
ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQpCi0gICAgewotICAgICAgICB2aXNp
dChlZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmVmZmVjdGZ1bEV4cHJlc3Npb24oKSk7Ci0g
ICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKQotICAgIHsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKQot
ICAgIHsKLSAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkg
ewotICAgICAgICAgICAgdmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpOwotICAg
ICAgICB9LCBbJl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24p
IHsKLSAgICAgICAgICAgIHZpc2l0KCpleHByZXNzaW9uKTsKLSAgICAgICAgfSksIGZvckxvb3Au
aW5pdGlhbGl6YXRpb24oKSk7Ci0gICAgICAgIGlmIChmb3JMb29wLmNvbmRpdGlvbigpKQotICAg
ICAgICAgICAgdmlzaXQoKmZvckxvb3AuY29uZGl0aW9uKCkpOwotICAgICAgICBpZiAoZm9yTG9v
cC5pbmNyZW1lbnQoKSkKLSAgICAgICAgICAgIHZpc2l0KCpmb3JMb29wLmluY3JlbWVudCgpKTsK
LSAgICAgICAgdmlzaXQoZm9yTG9vcC5ib2R5KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKLSAgICB7Ci0gICAgICAgIHZp
c2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOwotICAgICAgICB2aXNpdChpZlN0YXRlbWVu
dC5ib2R5KCkpOwotICAgICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkKLSAgICAgICAg
ICAgIHZpc2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKLSAgICB7Ci0gICAgICAg
IGlmIChyZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSkKLSAgICAgICAgICAgIHZpc2l0KCpyZXR1cm5T
dGF0ZW1lbnQudmFsdWUoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKLSAgICB7Ci0gICAgICAgIGlmIChzd2l0Y2hDYXNlLnZh
bHVlKCkpCi0gICAgICAgICAgICB2aXNpdCgqc3dpdGNoQ2FzZS52YWx1ZSgpKTsKLSAgICAgICAg
dmlzaXQoc3dpdGNoQ2FzZS5ibG9jaygpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkKLSAgICB7Ci0gICAgICAg
IHZpc2l0KHN3aXRjaFN0YXRlbWVudC52YWx1ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBzd2l0
Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpCi0gICAgICAgICAgICB2aXNp
dChzd2l0Y2hDYXNlKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUcmFw
JikKLSAgICB7Ci0gICAgfQorY2xhc3MgUHJvZ3JhbTsKKworbmFtZXNwYWNlIEFTVCB7CisKK2Ns
YXNzIFR5cGVEZWZpbml0aW9uOworY2xhc3MgU3RydWN0dXJlRGVmaW5pdGlvbjsKK2NsYXNzIEVu
dW1lcmF0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIEZ1bmN0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIE5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBOYXRpdmVUeXBlRGVjbGFyYXRpb247Citj
bGFzcyBUeXBlUmVmZXJlbmNlOworY2xhc3MgUG9pbnRlclR5cGU7CitjbGFzcyBBcnJheVJlZmVy
ZW5jZVR5cGU7CitjbGFzcyBBcnJheVR5cGU7CitjbGFzcyBTdHJ1Y3R1cmVFbGVtZW50OworY2xh
c3MgRW51bWVyYXRpb25NZW1iZXI7CitjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3Mg
UmVmZXJlbmNlVHlwZTsKK2NsYXNzIENvbnN0YW50RXhwcmVzc2lvbjsKK2NsYXNzIEJ1aWx0SW5T
ZW1hbnRpYzsKK2NsYXNzIFJlc291cmNlU2VtYW50aWM7CitjbGFzcyBTcGVjaWFsaXphdGlvbkNv
bnN0YW50U2VtYW50aWM7CitjbGFzcyBTdGFnZUluT3V0U2VtYW50aWM7CitjbGFzcyBJbnRlZ2Vy
TGl0ZXJhbDsKK2NsYXNzIFVuc2lnbmVkSW50ZWdlckxpdGVyYWw7CitjbGFzcyBGbG9hdExpdGVy
YWw7CitjbGFzcyBOdWxsTGl0ZXJhbDsKK2NsYXNzIEJvb2xlYW5MaXRlcmFsOworY2xhc3MgQ29u
c3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2U7CitjbGFzcyBOdW1UaHJl
YWRzRnVuY3Rpb25BdHRyaWJ1dGU7CitjbGFzcyBCbG9jazsKK2NsYXNzIFN0YXRlbWVudDsKK2Ns
YXNzIEJyZWFrOworY2xhc3MgQ29udGludWU7CitjbGFzcyBEb1doaWxlTG9vcDsKK2NsYXNzIEV4
cHJlc3Npb247CitjbGFzcyBEb3RFeHByZXNzaW9uOworY2xhc3MgSW5kZXhFeHByZXNzaW9uOwor
Y2xhc3MgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uOworY2xhc3MgRWZmZWN0ZnVsRXhwcmVzc2lv
blN0YXRlbWVudDsKK2NsYXNzIEZhbGx0aHJvdWdoOworY2xhc3MgRm9yTG9vcDsKK2NsYXNzIElm
U3RhdGVtZW50OworY2xhc3MgUmV0dXJuOworY2xhc3MgU3dpdGNoQ2FzZTsKK2NsYXNzIFN3aXRj
aFN0YXRlbWVudDsKK2NsYXNzIFRyYXA7CitjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudDsKK2NsYXNzIFdoaWxlTG9vcDsKK2NsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb247CitjbGFz
cyBBc3NpZ25tZW50RXhwcmVzc2lvbjsKK2NsYXNzIENhbGxFeHByZXNzaW9uOworY2xhc3MgQ29t
bWFFeHByZXNzaW9uOworY2xhc3MgRGVyZWZlcmVuY2VFeHByZXNzaW9uOworY2xhc3MgTG9naWNh
bEV4cHJlc3Npb247CitjbGFzcyBMb2dpY2FsTm90RXhwcmVzc2lvbjsKK2NsYXNzIE1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb247CitjbGFzcyBNYWtlUG9pbnRlckV4cHJlc3Npb247CitjbGFz
cyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uOworY2xhc3MgVGVybmFyeUV4cHJlc3Npb247Citj
bGFzcyBWYXJpYWJsZVJlZmVyZW5jZTsKK2NsYXNzIFVubmFtZWRUeXBlOworY2xhc3MgTmFtZWRU
eXBlOwogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQotICAgIHsKLSAgICAgICAg
Zm9yIChhdXRvJiB2YXJpYWJsZURlY2xhcmF0aW9uIDogdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQudmFyaWFibGVEZWNsYXJhdGlvbnMoKSkKLSAgICAgICAgICAgIHZpc2l0KHZhcmlhYmxl
RGVjbGFyYXRpb24pOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OldoaWxl
TG9vcCYgd2hpbGVMb29wKQotICAgIHsKLSAgICAgICAgdmlzaXQod2hpbGVMb29wLmNvbmRpdGlv
bmFsKCkpOwotICAgICAgICB2aXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xh
cmF0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHZhcmlhYmxlRGVjbGFyYXRpb24udHlw
ZSgpKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKLSAgICAg
ICAgICAgIHZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpOwotICAgICAgICBp
ZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKQotICAgICAgICAgICAgdmlzaXQo
KnZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNz
aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsK
LSAgICAgICAgdmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7Ci0gICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9u
KQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFy
Z3VtZW50cygpKQotICAgICAgICAgICAgdmlzaXQoKmFyZ3VtZW50KTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikK
LSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGNvbW1hRXhwcmVzc2lvbi5s
aXN0KCkpCi0gICAgICAgICAgICB2aXNpdCgqZXhwcmVzc2lvbik7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4
cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChkZXJlZmVyZW5jZUV4cHJlc3Npb24ucG9p
bnRlcigpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsRXhw
cmVzc2lvbiYgbG9naWNhbEV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChsb2dpY2Fs
RXhwcmVzc2lvbi5sZWZ0KCkpOwotICAgICAgICB2aXNpdChsb2dpY2FsRXhwcmVzc2lvbi5yaWdo
dCgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsTm90RXhw
cmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChsb2dp
Y2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChtYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uLmxWYWx1ZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpN
YWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKLSAgICB7Ci0gICAg
ICAgIHZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChwcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24uYmFzZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQotICAg
IHsKLSAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Ci0g
ICAgICAgIHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ub2xkVmFsdWUoKSk7Ci0gICAg
ICAgIHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWUoKSk7Ci0gICAgICAg
IHZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHByZXNzaW9uKCkpOwot
ICAgICAgICB2aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnJlc3VsdEV4cHJlc3Npb24o
KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Np
b24mIHRlcm5hcnlFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQodGVybmFyeUV4cHJl
c3Npb24ucHJlZGljYXRlKCkpOwotICAgICAgICB2aXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5
RXhwcmVzc2lvbigpKTsKLSAgICAgICAgdmlzaXQodGVybmFyeUV4cHJlc3Npb24uZWxzZUV4cHJl
c3Npb24oKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVS
ZWZlcmVuY2UmKQotICAgIHsKLSAgICB9Cit9CiAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uJikKLSAgICB7Ci0gICAgfQorY2xhc3MgVmlz
aXRvciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+VmlzaXRvcigpID0gZGVmYXVsdDsKKworICAg
IC8vIEZJWE1FOiBBZGQgYSB3YXkgdG8gdmlzaXQgYSBjb25zdCBQcm9ncmFtCisKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoUHJvZ3JhbSYpOworICAgIHZvaWQgdmlzaXQoQVNUOjpVbm5hbWVkVHlw
ZSYgdW5uYW1lZFR5cGUpOworICAgIHZvaWQgdmlzaXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlw
ZSk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OlR5cGVSZWZlcmVuY2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQb2lu
dGVyVHlwZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYpOworICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpU
eXBlQXJndW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBl
Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U2VtYW50aWMmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkJ1aWx0SW5TZW1hbnRpYyYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlc291cmNl
U2VtYW50aWMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTcGVjaWFsaXphdGlvbkNv
bnN0YW50U2VtYW50aWMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdGFnZUluT3V0
U2VtYW50aWMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OkJvb2xlYW5MaXRlcmFsJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6SW50ZWdl
ckxpdGVyYWxUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGbG9hdExpdGVy
YWxUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TnVsbExpdGVyYWxUeXBlJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlv
bkF0dHJpYnV0ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bVRocmVhZHNGdW5j
dGlvbkF0dHJpYnV0ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6QnJlYWsmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb250aW51
ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OkRvdEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJbmRl
eEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxFeHBy
ZXNzaW9uU3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RmFsbHRocm91
Z2gmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpSZXR1cm4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hDYXNlJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50Jik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6V2hpbGVMb29wJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHBy
ZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlJik7CisKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChQcm9n
cmFtJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5u
YW1lZFR5cGUpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TmFtZWRUeXBlJiBu
YW1lZFR5cGUpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VHlwZURlZmluaXRp
b24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRp
b24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5cGVSZWZl
cmVuY2UmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlBvaW50ZXJUeXBlJik7
CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmKTsK
KyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkFycmF5VHlwZSYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RydWN0dXJlRWxlbWVudCYpOworICAgIHZvaWQgY2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXImKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OlR5cGVBcmd1bWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6U2VtYW50aWMmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXR0cmli
dXRlQmxvY2smKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJ1aWx0SW5TZW1h
bnRpYyYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRp
YyYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3BlY2lhbGl6YXRpb25Db25z
dGFudFNlbWFudGljJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTdGFnZUlu
T3V0U2VtYW50aWMmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkludGVnZXJM
aXRlcmFsJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpVbnNpZ25lZEludGVn
ZXJMaXRlcmFsJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGbG9hdExpdGVy
YWwmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok51bGxMaXRlcmFsJik7Cisg
ICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYpOworICAgIHZv
aWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlJik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYpOwor
ICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsVHlwZSYpOworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TnVsbExpdGVyYWxUeXBlJik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RnVuY3Rp
b25BdHRyaWJ1dGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok51bVRocmVh
ZHNGdW5jdGlvbkF0dHJpYnV0ZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
QmxvY2smKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0YXRlbWVudCYpOwor
ICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QnJlYWsmKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkNvbnRpbnVlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpEb1doaWxlTG9vcCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RG90RXhwcmVz
c2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9u
Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJl
c3Npb25TdGF0ZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZhbGx0
aHJvdWdoJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGb3JMb29wJik7Cisg
ICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpJZlN0YXRlbWVudCYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmV0dXJuJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpTd2l0Y2hDYXNlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpTd2l0Y2hTdGF0ZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlRy
YXAmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpXaGlsZUxv
b3AmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNz
aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYp
OworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJik7Cisg
ICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mKTsK
KyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJik7Cisg
ICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYpOwor
ICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHBy
ZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUZXJuYXJ5
RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFyaWFibGVS
ZWZlcmVuY2UmKTsKKworICAgIHZvaWQgc2V0RXJyb3IoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFtX2Vycm9yKTsKKyAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgfQorCisgICAgYm9vbCBl
cnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1f
ZXJyb3IgeyBmYWxzZSB9OyAvLyBGSVhNRTogTWlncmF0ZSB0aGlzIHRvIGJlIHNvbWUgc29ydCBv
ZiBkZXNjcmlwdGl2ZSBzdHJpbmcuCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDNjMGUzNjQ3
MDU0Li5kNDBjMzRmMDRkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTMwNiw4ICszMDYsMzIgQEAgTW9k
dWxlcy93ZWJncHUvRE9NV2luZG93V2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xMZXhlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAogTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xJbnRyaW5zaWNzLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcAor
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVDb250ZXh0LmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hl
Y2tlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlv
bnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nl
c3NvcnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlv
bkZ1bmN0aW9ucy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5
T3BlcmF0b3JMZW5ndGguY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVD
b25zdHJ1Y3RvcnMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCitNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuY3BwCitNb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNwcAorTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcAorTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTE51bGxMaXRlcmFsVHlwZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMVHlwZVJlZmVyZW5jZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2
ZU92ZXJsb2FkSW1wbC5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQ
b2ludEl0ZW1zLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVy
YWwuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRl
cmFsLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV2ViR1BV
QWRhcHRlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUJpbmRHcm91cExheW91dC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCAwN2MxNmVmMTc3NS4uNGYwNTZiYjFhMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0MDMsOSArNjQwMywyMCBAQAogCQkx
QzI0RUVBNzFDNzJBN0I0MDA4MEY4RkMgLyogSlNGb250RmFjZVNldC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBKU0ZvbnRGYWNlU2V0Lmg7IHBhdGggPSBEZXJpdmVkU291cmNl
cy9XZWJDb3JlL0pTRm9udEZhY2VTZXQuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJ
UjsgfTsKIAkJMUMyNjQ5NzkwRDdFMjQ4QTAwQkQxMEYyIC8qIERvY3VtZW50TG9hZGVyTWFjLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERvY3VtZW50TG9hZGVyTWFj
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMzMjQ5MTAxQzZENkEzQjAwN0VE
QjMyIC8qIEZvbnRWYXJpYW50QnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGb250VmFyaWFudEJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxQzMzMjc2QzIxQ0VEQTQyMDAwREM5RjIgLyogV0hMU0xFbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NkUyMUNFRkY3NDAwMERDOUYy
IC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlc29s
dmVPdmVybG9hZEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NkYy
MUNGMDEzMTAwMERDOUYyIC8qIFdITFNMSW5mZXJUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TEluZmVyVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzEyMUNG
MEJFMTAwMERDOUYyIC8qIFdITFNMTmFtZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTmFt
ZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzcyMjFDRjBEMkUw
MDBEQzlGMiAvKiBXSExTTFVubmFtZWRUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVW5uYW1l
ZFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzQyMUQ1QTcwNjAw
MERDOUYyIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
QzMzMjc3NTIxRDVCMEY4MDAwREM5RjIgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc2MjFENUMwN0UwMDBEQzlGMiAvKiBXSExTTFN5
bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTeW50aGVz
aXplU3RydWN0dXJlQWNjZXNzb3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
MzMyNzc3MjFENUNBODMwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0
aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3ODIxRDVDRUQ0MDAwREM5
RjIgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDMzk2OUNGMUI3NDIxMUUwMDJCQ0ZBNyAvKiBGb250Q2FjaGVDb3JlVGV4
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FjaGVDb3Jl
VGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjYyNjBFMUM2RTdDQTYw
MEFCNTI3QyAvKiBGb250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGb250RmFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDNjYyNjBG
MUM2RTdDQTYwMEFCNTI3QyAvKiBGb250RmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGb250RmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzdDQzIx
RDIxQ0RFMTk4MDBDMUZBMkMgLyogV0hMU0xOYW1lQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTE5hbWVDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCOTU2
MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRy
b2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9y
Q29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFCOTU4MEU5
NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02NDE1LDYgKzY0MjYsMTggQEAKIAkJMUNBRjM0N0UwQTZDNDA1MjAwQUJFMDZFIC8qIFdl
YlNjcmlwdE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTY3Jp
cHRPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBRjM0N0YwQTZDNDA1
MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUNBRjM0ODAwQTZDNDA1MjAwQUJFMDZFIC8qIFdlYlNjcmlwdE9iamVjdFByaXZh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0UHJp
dmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIyQzIxREQ5NkVGMDA2
RTg0NkEgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxQ0I2OUIyRDIxREQ5NkVGMDA2RTg0NkEgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50
SXRlbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCMzIyMURFRDQwQjAwNkU4NDZBIC8qIFdI
TFNMUmVzb2x2YWJsZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZXNvbHZhYmxlVHlwZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIzNDIxREVENjNBMDA2RTg0NkEg
LyogV0hMU0xGbG9hdExpdGVyYWxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRmxvYXRMaXRl
cmFsVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIzNTIxREVENjQ5
MDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNC
NjlCMzYyMURFRDY1NzAwNkU4NDZBIC8qIFdITFNMTnVsbExpdGVyYWxUeXBlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMTnVsbExpdGVyYWxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTFDQjY5QjM3MjFERUQ2NkIwMDZFODQ2QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVy
YWxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCMzgyMURGMDNFMTAwNkU4NDZB
IC8qIFdITFNMRmxvYXRMaXRlcmFsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEZs
b2F0TGl0ZXJhbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIz
OTIxREYwM0YzMDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkxQ0I2OUIzQTIxREYwNDAzMDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJh
bFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIzQjIxREYwNDFFMDA2RTg0NkEgLyog
V0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
SExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUNCNjlCM0UyMUUwMzVGMzAwNkU4NDZBIC8qIFdITFNMUmVzb2x2aW5nVHlwZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTFJlc29sdmluZ1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUNCNkI0RjgyMTdCODM5MzAwOTNCOUNEIC8qIFRleHREZWNvcmF0aW9uVGhp
Y2tuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQjZCNEZCMjE3QjgzOTQwMDkzQjlDRCAvKiBUZXh0
VW5kZXJsaW5lT2Zmc2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRVbmRlcmxpbmVPZmZzZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNDREY1QkIxOTkwMzMyNDAwQkNFQkFEIC8q
IFNWR1RvT1RGRm9udENvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1ZHVG9PVEZGb250Q29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMzIxNCw5ICsxMzIzNywxOSBAQAogCQlDMTFBOUVDRDIxNDAzQTVDMDBDRkIy
MEEgLyogU3dpdGNoaW5nR1BVQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN3aXRjaGluZ0dQVUNs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMTFBOUVEMjIxNDA1NzhCMDBD
RkIyMEEgLyogU3dpdGNoaW5nR1BVQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN3aXRj
aGluZ0dQVUNsaWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMxRTFEMjM1
MjAzREYxNTQwMDU4NDY2NSAvKiBTY3JlZW5Qcm9wZXJ0aWVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNj
cmVlblByb3BlcnRpZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwMTMzNDQy
MURBQzA5NTAwQjYwQzI3IC8qIFdITFNMSW50cmluc2ljcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TEludHJpbnNpY3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwMTMzNDYyMURB
RUU2RTAwQjYwQzI3IC8qIFdITFNMSW50cmluc2ljcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
SExTTEludHJpbnNpY3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjAxMzM0
NzIxREI0MzYzMDBCNjBDMjcgLyogV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMjAxNUMwOTFCRTZGRTJDMDA4MjIzODkgLyogRm9udFZhcmlhbnRCdWls
ZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRWYXJpYW50QnVpbGRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMjBGNEY2NDIxREZCRTVDMDA3MEM0NUEgLyogV0hMU0xUeXBlUmVm
ZXJlbmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVHlwZVJlZmVyZW5jZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMEY0RjY2MjFERkYyMzYwMDcwQzQ1QSAvKiBX
SExTTEludGVnZXJMaXRlcmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW50ZWdlckxp
dGVyYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjBGNEY2NzIxREZGM0E3
MDA3MEM0NUEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMTBFOTExMjFCNEJEMTAwMEI3RjgzRCAvKiBXSExTTExleGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTGV4ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMjEwRTkxMjIxQjRCRDEwMDBCN0Y4M0QgLyogV0hMU0xMZXhlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTExleGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMTM4
QTEzMjFEREVDRDMwMEY1MTZCQSAvKiBXSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyMTM4QTE1MjFEREVDRTkwMEY1MTZCQSAvKiBXSExTTFJlc291cmNlU2VtYW50
aWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzhBMTYyMURERUNGQjAwRjUxNkJBIC8qIFdI
TFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQzIxMzhBMTcyMURERUQwRDAwRjUxNkJBIC8qIFdITFNMU3RhZ2VJbk91
dFNlbWFudGljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU3RhZ2VJbk91dFNlbWFudGlj
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY2RjMyMUNEODlBRDAwMjI3
OTc5IC8qIFdITFNMVHJhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFRyYXAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY2RjQyMUNEODlCMzAwMjI3OTc5IC8qIFdITFNMRnVu
Y3Rpb25EZWZpbml0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRnVuY3Rpb25EZWZpbml0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNkY1MjFDRDg5QjUwMDIyNzk3
OSAvKiBXSExTTENvbnRpbnVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ29udGludWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjQ1LDcgKzEzMjc4LDYgQEAKIAkJQzIxQkY3
MEMyMUNEODlDQzAwMjI3OTc5IC8qIFdITFNMRXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MEQy
MUNEODlDRDAwMjI3OTc5IC8qIFdITFNMUmVmZXJlbmNlVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTFJlZmVyZW5jZVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3
MEUyMUNEODlDRTAwMjI3OTc5IC8qIFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUMyMUJGNzBGMjFDRDg5Q0YwMDIyNzk3OSAvKiBXSExTTEFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xh
cmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzEwMjFDRDg5RDAw
MDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
MUJGNzExMjFDRDg5RDEwMDIyNzk3OSAvKiBXSExTTFR5cGVBcmd1bWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTFR5cGVBcmd1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFCRjcxMjIxQ0Q4OUQxMDAyMjc5NzkgLyogV0hMU0xTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0hMU0xTdGF0ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjUz
LDcgKzEzMjg1LDYgQEAKIAkJQzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFyaWFi
bGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xWYXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFC
RjcxNTIxQ0Q4OUQ0MDAyMjc5NzkgLyogV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMUJGNzE2MjFDRDg5RDUwMDIyNzk3OSAvKiBXSExTTENhbGxFeHByZXNz
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ2FsbEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQzIxQkY3MTcyMUNEODlENjAwMjI3OTc5IC8qIFdITFNMUGFyYW1l
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUGFyYW1ldGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMUJGNzE4MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTERvdEV4cHJlc3Np
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xEb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyMUJGNzE5MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTFN3aXRjaENh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyMUJGNzFBMjFDRDg5RDgwMDIyNzk3OSAvKiBXSExTTEJyZWFrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMQnJlYWsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEzMjk5LDE1ICsxMzMzMCwyNyBAQAogCQlDMjgwODMzRDFDNkRDMjJDMDAxNDUxQjYgLyogSlNG
b250RmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKU0ZvbnRG
YWNlLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZS5jcHA7IHNv
dXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUMyODA4MzNFMUM2REMyMkMwMDE0
NTFCNiAvKiBKU0ZvbnRGYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEpT
Rm9udEZhY2UuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250RmFjZS5oOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlDMjgwQjNGRDFFRjQ2MDg5MDBE
MzUxMzUgLyogRm9udEZhbWlseVNwZWNpZmljYXRpb25OdWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyODZFRDlFMjFEQjVBQkEwMDcxM0M0MCAvKiBX
SExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xSZXNv
bHZlT3ZlcmxvYWRJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3
MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MjkyMUM4Q0E1
MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFBy
ZXBhcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyQTIxQzhDQTUw
MDAyREY1Q0EgLyogV0hMU0xQcmVwYXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUHJlcGFyZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjg4QzcyQjIxQzhDQ0MyMDAyREY1Q0Eg
LyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lUmVz
b2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjg4QzcyQzIxQzhDQ0My
MDAyREY1Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1l
UmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MkQyMUM5OTFE
QTAwMkRGNUNBIC8qIFdITFNMVHlwZUFyZ3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMVHlwZUFyZ3VtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJBQjBB
RjQxRTZCM0M2QzAwMTM0OEM1IC8qIEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udFNlbGVjdGlvbkFsZ29yaXRobS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQUIwQUY1MUU2QjNDNkMwMDEzNDhDNSAv
KiBGb250U2VsZWN0aW9uQWxnb3JpdGhtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzJBQjBCMDMxRTZERTkyQzAwMTM0OEM1IC8qIEZvbnRTZWxlY3Rpb25WYWx1ZUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRm9udFNlbGVjdGlvblZhbHVlSW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3MDIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVj
a2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTcxMjFEQjRCNDgwMDRCRTI2RSAvKiBXSExTTENoZWNr
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyQjU1MTczMjFEQjRCQkQwMDRCRTI2RSAvKiBXSExTTE5hbWVSZXNvbHZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTE5hbWVSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc0MjFEQjUxMEYwMDRCRTI2RSAvKiBXSExTTE5hbWVD
b250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTmFtZUNvbnRleHQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3NTIxREI1MjY2MDA0QkUyNkUgLyogV0hM
U0xJbmZlclR5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW5mZXJUeXBlcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc2MjFEQjUzOTQwMDRCRTI2RSAv
KiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNM
UmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MkI1NTE3NzIxREI1NDBGMDA0QkUyNkUgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzgyMURCNTU3NTAwNEJFMjZFIC8q
IFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMkI1NTE3OTIxREI1NThGMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXpl
RW51bWVyYXRpb25GdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVz
aXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMkI1NTE3QTIxREI1NTlFMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRv
ckxlbmd0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxN0IyMURC
NTVBRjAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMkI1NTE3QzIxREI1N0VEMDA0QkUyNkUgLyogV0hMU0xWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUMyQzJDRjU1MUVGMzc2MUEwMDQyODFBOCAvKiBGb250RmFtaWx5U3Bl
Y2lmaWNhdGlvbk51bGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udEZh
bWlseVNwZWNpZmljYXRpb25OdWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
RTM4RUZCMUU4Mzk2RkQwMENBM0FERiAvKiBDU1NGb250U3R5bGVWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250U3R5bGVWYWx1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRTM4RUZDMUU4Mzk2RkQwMENBM0FERiAvKiBDU1NG
b250U3R5bGVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250
U3R5bGVWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzMzIsMTEgKzI1
Mzc1LDM3IEBACiAJCQkJQzIxQkY3MzcyMUNEOEEwMjAwMjI3OTc5IC8qIFdITFNMUGFyc2VyLmNw
cCAqLywKIAkJCQlDMjFCRjczODIxQ0Q4QTAzMDAyMjc5NzkgLyogV0hMU0xQYXJzZXIuaCAqLywK
IAkJCQlDMjFCRjczQTIxQ0Q4RDcwMDAyMjc5NzkgLyogV0hMU0xQcm9ncmFtLmggKi8sCi0gCQkJ
CUMyODhDNzI3MjFDOEM2RUYwMDJERjVDQSAvKiBXSExTTFZpc2l0b3IuaCAqLywKLSAJCQkJQzI4
OEM3MjkyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8sCi0gCQkJCUMyODhD
NzJBMjFDOENBNTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuaCAqLywKLSAJCQkJQzI4OEM3MkIy
MUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLywKLSAJCQkJQzI4OEM3
MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJlc29sdmVyLmggKi8sCisJCQkJQzI4OEM3
MjcyMUM4QzZFRjAwMkRGNUNBIC8qIFdITFNMVmlzaXRvci5oICovLAorCQkJCUMyQjU1MTdDMjFE
QjU3RUQwMDRCRTI2RSAvKiBXSExTTFZpc2l0b3IuY3BwICovLAorCQkJCUMyODhDNzI5MjFDOENB
NTAwMDJERjVDQSAvKiBXSExTTFByZXBhcmUuY3BwICovLAorCQkJCUMyODhDNzJBMjFDOENBNTAw
MDJERjVDQSAvKiBXSExTTFByZXBhcmUuaCAqLywKKwkJCQlDMjg4QzcyQzIxQzhDQ0MyMDAyREY1
Q0EgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLywKKwkJCQlDMkI1NTE3MzIxREI0QkJEMDA0QkUy
NkUgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovLAorCQkJCTFDN0NDMjFEMjFDREUxOTgwMEMx
RkEyQyAvKiBXSExTTE5hbWVDb250ZXh0LmggKi8sCisJCQkJQzJCNTUxNzQyMURCNTEwRjAwNEJF
MjZFIC8qIFdITFNMTmFtZUNvbnRleHQuY3BwICovLAorCQkJCTFDMzMyNzZFMjFDRUZGNzQwMDBE
QzlGMiAvKiBXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCAqLywKKwkJCQlDMjg2RUQ5RTIxREI1
QUJBMDA3MTNDNDAgLyogV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNwcCAqLywKKwkJCQkxQzMz
Mjc2RjIxQ0YwMTMxMDAwREM5RjIgLyogV0hMU0xJbmZlclR5cGVzLmggKi8sCisJCQkJQzJCNTUx
NzUyMURCNTI2NjAwNEJFMjZFIC8qIFdITFNMSW5mZXJUeXBlcy5jcHAgKi8sCisJCQkJMUMzMzI3
NzQyMUQ1QTcwNjAwMERDOUYyIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCAqLywKKwkJ
CQlDMkI1NTE3NjIxREI1Mzk0MDA0QkUyNkUgLyogV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5j
cHAgKi8sCisJCQkJMUMzMzI3NzUyMUQ1QjBGODAwMERDOUYyIC8qIFdITFNMQ2hlY2tEdXBsaWNh
dGVGdW5jdGlvbnMuaCAqLywKKwkJCQlDMkI1NTE3NzIxREI1NDBGMDA0QkUyNkUgLyogV0hMU0xD
aGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJMUMzMzI3NzYyMUQ1QzA3RTAwMERD
OUYyIC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oICovLAorCQkJCUMyQjU1
MTc4MjFEQjU1NzUwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMu
Y3BwICovLAorCQkJCTFDMzMyNzc3MjFENUNBODMwMDBEQzlGMiAvKiBXSExTTFN5bnRoZXNpemVF
bnVtZXJhdGlvbkZ1bmN0aW9ucy5oICovLAorCQkJCUMyQjU1MTc5MjFEQjU1OEYwMDRCRTI2RSAv
KiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAgKi8sCisJCQkJMUMzMzI3
NzgyMUQ1Q0VENDAwMERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgu
aCAqLywKKwkJCQlDMkI1NTE3QTIxREI1NTlFMDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplQXJy
YXlPcGVyYXRvckxlbmd0aC5jcHAgKi8sCisJCQkJQzIwMTMzNDcyMURCNDM2MzAwQjYwQzI3IC8q
IFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oICovLAorCQkJCUMyQjU1MTdCMjFEQjU1QUYw
MDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwICovLAorCQkJCUMyMDEz
MzQ0MjFEQUMwOTUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNpY3MuaCAqLywKKwkJCQlDMjAxMzM0
NjIxREFFRTZFMDBCNjBDMjcgLyogV0hMU0xJbnRyaW5zaWNzLmNwcCAqLywKKwkJCQlDMkI1NTE3
MDIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVja2VyLmNwcCAqLywKKwkJCQlDMkI1NTE3MTIx
REI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVja2VyLmggKi8sCisJCQkJMUNCNjlCMkMyMUREOTZF
RjAwNkU4NDZBIC8qIFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcCAqLywKKwkJCQkxQ0I2
OUIyRDIxREQ5NkVGMDA2RTg0NkEgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCAqLywK
KwkJCQkxQ0I2OUIzRTIxRTAzNUYzMDA2RTg0NkEgLyogV0hMU0xSZXNvbHZpbmdUeXBlLmggKi8s
CiAJCQkpOwogCQkJcGF0aCA9IFdITFNMOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTI1MzQ0LDcgKzI1NDEzLDYgQEAKIAkJQzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5IC8qIEFTVCAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQzIxQkY3MEYy
MUNEODlDRjAwMjI3OTc5IC8qIFdITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oICov
LAogCQkJCUMyMUJGNzI1MjFDRDg5RTIwMDIyNzk3OSAvKiBXSExTTEFycmF5UmVmZXJlbmNlVHlw
ZS5oICovLAogCQkJCUMyMUJGNzA5MjFDRDg5Q0EwMDIyNzk3OSAvKiBXSExTTEFycmF5VHlwZS5o
ICovLAogCQkJCUMyMUJGNzMwMjFDRDg5RUQwMDIyNzk3OSAvKiBXSExTTEFzc2lnbm1lbnRFeHBy
ZXNzaW9uLmggKi8sCkBAIC0yNTM4NCw3ICsyNTQ1Miw2IEBACiAJCQkJQzIxQkY3MjQyMUNEODlF
MTAwMjI3OTc5IC8qIFdITFNMTm9kZS5oICovLAogCQkJCUMyMUJGNzA3MjFDRDg5QzgwMDIyNzk3
OSAvKiBXSExTTE51bGxMaXRlcmFsLmggKi8sCiAJCQkJQzIxQkY3MjEyMUNEODlERTAwMjI3OTc5
IC8qIFdITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmggKi8sCi0JCQkJQzIxQkY3MTcy
MUNEODlENjAwMjI3OTc5IC8qIFdITFNMUGFyYW1ldGVyLmggKi8sCiAJCQkJQzIxQkY3MkYyMUNE
ODlFQzAwMjI3OTc5IC8qIFdITFNMUG9pbnRlclR5cGUuaCAqLywKIAkJCQlDMjFCRjcyRTIxQ0Q4
OUVBMDAyMjc5NzkgLyogV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCAqLywKIAkJCQlD
MjFCRjcwQjIxQ0Q4OUNDMDAyMjc5NzkgLyogV0hMU0xRdWFsaWZpZXIuaCAqLywKQEAgLTI1NDEy
LDcgKzI1NDc5LDI2IEBACiAJCQkJQzIxQkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFy
aWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLywKIAkJCQlDMjFCRjcxMzIxQ0Q4OUQyMDAy
Mjc5NzkgLyogV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oICovLAogCQkJCUMyMUJGNzA0MjFDRDg5
QzYwMDIyNzk3OSAvKiBXSExTTFdoaWxlTG9vcC5oICovLAotIAkJCQlDMjg4QzcyRDIxQzk5MURB
MDAyREY1Q0EgLyogV0hMU0xUeXBlQXJndW1lbnQuY3BwICovLAorCQkJCUMyODhDNzJEMjFDOTkx
REEwMDJERjVDQSAvKiBXSExTTFR5cGVBcmd1bWVudC5jcHAgKi8sCisJCQkJMUMzMzI3NkMyMUNF
REE0MjAwMERDOUYyIC8qIFdITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmggKi8sCisJCQkJ
MUMzMzI3NzEyMUNGMEJFMTAwMERDOUYyIC8qIFdITFNMTmFtZWRUeXBlLmggKi8sCisJCQkJMUMz
MzI3NzIyMUNGMEQyRTAwMERDOUYyIC8qIFdITFNMVW5uYW1lZFR5cGUuaCAqLywKKwkJCQlDMjEz
OEExMzIxRERFQ0QzMDBGNTE2QkEgLyogV0hMU0xCdWlsdEluU2VtYW50aWMuY3BwICovLAorCQkJ
CUMyMTM4QTE1MjFEREVDRTkwMEY1MTZCQSAvKiBXSExTTFJlc291cmNlU2VtYW50aWMuY3BwICov
LAorCQkJCUMyMTM4QTE2MjFEREVDRkIwMEY1MTZCQSAvKiBXSExTTFNwZWNpYWxpemF0aW9uQ29u
c3RhbnRTZW1hbnRpYy5jcHAgKi8sCisJCQkJQzIxMzhBMTcyMURERUQwRDAwRjUxNkJBIC8qIFdI
TFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcCAqLywKKwkJCQkxQ0I2OUIzMjIxREVENDBCMDA2RTg0
NkEgLyogV0hMU0xSZXNvbHZhYmxlVHlwZS5oICovLAorCQkJCTFDQjY5QjM0MjFERUQ2M0EwMDZF
ODQ2QSAvKiBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCAqLywKKwkJCQkxQ0I2OUIzNTIxREVENjQ5
MDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaCAqLywKKwkJCQkxQ0I2OUIzNjIx
REVENjU3MDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCAqLywKKwkJCQkxQ0I2OUIz
NzIxREVENjZCMDA2RTg0NkEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oICov
LAorCQkJCTFDQjY5QjM4MjFERjAzRTEwMDZFODQ2QSAvKiBXSExTTEZsb2F0TGl0ZXJhbFR5cGUu
Y3BwICovLAorCQkJCTFDQjY5QjM5MjFERjAzRjMwMDZFODQ2QSAvKiBXSExTTEludGVnZXJMaXRl
cmFsVHlwZS5jcHAgKi8sCisJCQkJMUNCNjlCM0EyMURGMDQwMzAwNkU4NDZBIC8qIFdITFNMTnVs
bExpdGVyYWxUeXBlLmNwcCAqLywKKwkJCQkxQ0I2OUIzQjIxREYwNDFFMDA2RTg0NkEgLyogV0hM
U0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8sCisJCQkJQzIwRjRGNjQyMURGQkU1
QzAwNzBDNDVBIC8qIFdITFNMVHlwZVJlZmVyZW5jZS5jcHAgKi8sCisJCQkJQzIwRjRGNjYyMURG
RjIzNjAwNzBDNDVBIC8qIFdITFNMSW50ZWdlckxpdGVyYWwuY3BwICovLAorCQkJCUMyMEY0RjY3
MjFERkYzQTcwMDcwQzQ1QSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwICovLAog
CQkJKTsKIAkJCXBhdGggPSBBU1Q7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358667</attachid>
            <date>2019-01-08 20:53:01 -0800</date>
            <delta_ts>2019-01-09 11:44:06 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>500496</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1VuaXF1ZVJlZi5oIGIvU291cmNlL1dURi93dGYv
VW5pcXVlUmVmLmgKaW5kZXggMjAzOTk1MGQ5ZDguLmQyYTM3YTI4NGE1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9VbmlxdWVSZWYu
aApAQCAtNjAsNiArNjAsOCBAQCBwdWJsaWM6CiAgICAgb3BlcmF0b3IgVCYoKSB7IEFTU0VSVCht
X3JlZik7IHJldHVybiAqbV9yZWY7IH0KICAgICBvcGVyYXRvciBjb25zdCBUJigpIGNvbnN0IHsg
QVNTRVJUKG1fcmVmKTsgcmV0dXJuICptX3JlZjsgfQogCisgICAgc3RkOjp1bmlxdWVfcHRyPFQ+
JiYgdGFrZVVuaXF1ZVB0cigpIHsgcmV0dXJuIFdURk1vdmUobV9yZWYpOyB9CisKIHByaXZhdGU6
CiAgICAgdGVtcGxhdGU8Y2xhc3MgVSwgY2xhc3MuLi4gQXJncz4gZnJpZW5kIFVuaXF1ZVJlZjxV
PiBtYWtlVW5pcXVlUmVmKEFyZ3MmJi4uLik7CiAgICAgdGVtcGxhdGU8Y2xhc3MgVT4gZnJpZW5k
IGNsYXNzIFVuaXF1ZVJlZjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgKaW5kZXgg
MmQ1NjdmMDBlNzAuLjAxZDY4ZjEyNzZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5
cGUuaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1
ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MzksOCArNDAsOCBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBl
IDogcHVibGljIFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIEFycmF5UmVmZXJlbmNlVHlw
ZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIGFkZHJlc3NTcGFjZSwgc3RkOjp1bmlx
dWVfcHRyPFR5cGU+JiYgZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZN
b3ZlKG9yaWdpbiksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkp
CisgICAgQXJyYXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1Nw
YWNlIGFkZHJlc3NTcGFjZSwgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQor
ICAgICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdU
Rk1vdmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDIyICs1MCwyMiBAQCBw
dWJsaWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlKGNvbnN0IEFycmF5UmVmZXJlbmNlVHlwZSYp
ID0gZGVsZXRlOwogICAgIEFycmF5UmVmZXJlbmNlVHlwZShBcnJheVJlZmVyZW5jZVR5cGUmJikg
PSBkZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBl
PiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBjbG9u
ZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhhZGRy
ZXNzU3BhY2UoKSksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBtYWtl
VW5pcXVlUmVmPEFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgYWRk
cmVzc1NwYWNlKCksIGVsZW1lbnRUeXBlKCkuY2xvbmUoKSk7CiAgICAgfQogCiBwcml2YXRlOgog
fTsKIAotfQorfSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KIAogfQogCi1TUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1dITFNMX1RZUEUoQXJyYXlSZWZlcmVuY2VUeXBlLCBpc0FycmF5UmVmZXJlbmNlVHlw
ZSgpKQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoQXJyYXlSZWZl
cmVuY2VUeXBlLCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBl
LmgKaW5kZXggNDBiNWY4ZGY2ZmUuLjQyMmZkM2M3MTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUuaApAQCAt
MjgsOCArMjgsOSBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNsdWRlICJXSExTTExleGVy
LmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5o
IgogI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJl
Zi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0zOCwxMCArMzksMTAgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFT
VCB7CiAKLWNsYXNzIEFycmF5VHlwZSA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIEFycmF5VHlwZSA6
IHB1YmxpYyBVbm5hbWVkVHlwZSB7CiBwdWJsaWM6Ci0gICAgQXJyYXlUeXBlKExleGVyOjpUb2tl
biYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPFR5cGU+JiYgZWxlbWVudFR5cGUsIHVuc2lnbmVk
IG51bUVsZW1lbnRzKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICBB
cnJheVR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+JiYg
ZWxlbWVudFR5cGUsIHVuc2lnbmVkIG51bUVsZW1lbnRzKQorICAgICAgICA6IFVubmFtZWRUeXBl
KFdURk1vdmUob3JpZ2luKSkKICAgICAgICAgLCBtX2VsZW1lbnRUeXBlKFdURk1vdmUoZWxlbWVu
dFR5cGUpKQogICAgICAgICAsIG1fbnVtRWxlbWVudHMobnVtRWxlbWVudHMpCiAgICAgewpAQCAt
NTIsMjkgKzUzLDI4IEBAIHB1YmxpYzoKICAgICBBcnJheVR5cGUoY29uc3QgQXJyYXlUeXBlJikg
PSBkZWxldGU7CiAgICAgQXJyYXlUeXBlKEFycmF5VHlwZSYmKSA9IGRlZmF1bHQ7CiAKLSAgICB1
bnNpZ25lZCBudW1FbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtRWxlbWVudHM7IH0KLQot
ICAgIGJvb2wgaXNBcnJheVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQor
ICAgIGJvb2wgaXNBcnJheVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAK
LSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fZWxlbWVudFR5cGU7IH0KKyAgICBjb25zdCBV
bm5hbWVkVHlwZSYgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFVubmFt
ZWRUeXBlJj4obV9lbGVtZW50VHlwZSk7IH0KKyAgICBVbm5hbWVkVHlwZSYgdHlwZSgpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PFVubmFtZWRUeXBlJj4obV9lbGVtZW50VHlwZSk7IH0KKyAgICB1bnNp
Z25lZCBudW1FbGVtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fbnVtRWxlbWVudHM7IH0KIAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgVW5pcXVl
UmVmPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBcnJheVR5cGU+KExleGVyOjpUb2tlbihtX29yaWdpbiks
IG1fZWxlbWVudFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMpOworICAgICAgICByZXR1cm4g
bWFrZVVuaXF1ZVJlZjxBcnJheVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIG1fZWxlbWVu
dFR5cGUtPmNsb25lKCksIG1fbnVtRWxlbWVudHMpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBM
ZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IG1fZWxlbWVu
dFR5cGU7CisgICAgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBtX2VsZW1lbnRUeXBlOwogICAgIHVu
c2lnbmVkIG1fbnVtRWxlbWVudHM7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQog
CiB9CiAKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShBcnJheVR5cGUsIGlzQXJy
YXlUeXBlKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShBcnJh
eVR5cGUsIGlzQXJyYXlUeXBlKCkpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFzc2lnbm1lbnRF
eHByZXNzaW9uLmgKaW5kZXggZWFhNjk0ZjU5ODUuLjlkZDA3ZjhjODI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBc3NpZ25tZW50RXhw
cmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUg
IldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlIDx3
dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzgsNyArMzksNyBA
QCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQXNzaWdubWVudEV4cHJlc3Npb24gOiBwdWJsaWMg
RXhwcmVzc2lvbiB7CiBwdWJsaWM6Ci0gICAgQXNzaWdubWVudEV4cHJlc3Npb24oTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4mJiBsZWZ0LCBzdGQ6OnVu
aXF1ZV9wdHI8RXhwcmVzc2lvbj4mJiByaWdodCkKKyAgICBBc3NpZ25tZW50RXhwcmVzc2lvbihM
ZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGxlZnQsIFVuaXF1
ZVJlZjxFeHByZXNzaW9uPiYmIHJpZ2h0KQogICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShv
cmlnaW4pKQogICAgICAgICAsIG1fbGVmdChXVEZNb3ZlKGxlZnQpKQogICAgICAgICAsIG1fcmln
aHQoV1RGTW92ZShyaWdodCkpCkBAIC01MiwxNSArNTMsMTUgQEAgcHVibGljOgogCiAgICAgYm9v
bCBpc0Fzc2lnbm1lbnRFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQogCi0gICAgRXhwcmVzc2lvbiYgbGVmdCgpIHsgcmV0dXJuICptX2xlZnQ7IH0KLSAgICBFeHBy
ZXNzaW9uJiByaWdodCgpIHsgcmV0dXJuICptX3JpZ2h0OyB9CisgICAgRXhwcmVzc2lvbiYgbGVm
dCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEV4cHJlc3Npb24mPihtX2xlZnQpOyB9CisgICAgRXhw
cmVzc2lvbiYgcmlnaHQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxFeHByZXNzaW9uJj4obV9yaWdo
dCk7IH0KIAogcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9sZWZ0
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX3JpZ2h0OworICAgIFVuaXF1ZVJl
ZjxFeHByZXNzaW9uPiBtX2xlZnQ7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fcmlnaHQ7
CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1
dGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJhc2VG
dW5jdGlvbkF0dHJpYnV0ZS5oCmluZGV4IDVjMjQ0Y2E4MmE5Li5hNmEwNjEzYjJlOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQmFzZUZ1
bmN0aW9uQXR0cmlidXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQmFzZUZ1bmN0aW9uQXR0cmlidXRlLmgKQEAgLTUyLDcgKzUyLDcgQEAgcHJp
dmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiB9OwogCi19Cit9IC8vIG5hbWVzcGFj
ZSBBU1QKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xCYXNlU2VtYW50aWMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEJhc2VTZW1hbnRpYy5oCmluZGV4IDY1NzMzNzJmMTM3Li45MzJj
NDZjNzk2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQmFzZVNlbWFudGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQmFzZVNlbWFudGljLmgKQEAgLTM0LDggKzM0LDEzIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAorY2xhc3MgSW50cmluc2ljczsK
KwogbmFtZXNwYWNlIEFTVCB7CiAKK2NsYXNzIEZ1bmN0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIFVu
bmFtZWRUeXBlOworCiBjbGFzcyBCYXNlU2VtYW50aWMgOiBwdWJsaWMgTm9kZSB7CiBwdWJsaWM6
CiAgICAgQmFzZVNlbWFudGljKExleGVyOjpUb2tlbiYmIG9yaWdpbikKQEAgLTQ4LDExICs1Mywx
OSBAQCBwdWJsaWM6CiAgICAgQmFzZVNlbWFudGljKGNvbnN0IEJhc2VTZW1hbnRpYyYpID0gZGVs
ZXRlOwogICAgIEJhc2VTZW1hbnRpYyhCYXNlU2VtYW50aWMmJikgPSBkZWZhdWx0OwogCisgICAg
dmlydHVhbCBib29sIGlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYsIGNv
bnN0IEludHJpbnNpY3MmKSBjb25zdCA9IDA7CisKKyAgICBlbnVtIGNsYXNzIFNoYWRlckl0ZW1E
aXJlY3Rpb24gOiB1aW50OF90IHsKKyAgICAgICAgSW5wdXQsCisgICAgICAgIE91dHB1dAorICAg
IH07CisgICAgdmlydHVhbCBib29sIGlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24o
U2hhZGVySXRlbURpcmVjdGlvbiwgY29uc3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3QgPSAw
OworCiBwcml2YXRlOgogICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKIH07CiAKLX0KK30gLy8g
bmFtZXNwYWNlIEFTVAogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xCbG9jay5oCmluZGV4IGM0ZDEyOWZlZGUzLi42YzQzNmNkMDc0
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xCbG9jay5oCkBAIC01OCw3ICs1OCw3IEBAIHByaXZhdGU6CiAgICAgU3RhdGVtZW50cyBt
X3N0YXRlbWVudHM7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCb29sZWFu
TGl0ZXJhbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
Qm9vbGVhbkxpdGVyYWwuaAppbmRleCAyMDBmMzY0OTMyYi4uM2IyNWM4YjVkN2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJvb2xlYW5M
aXRlcmFsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMQm9vbGVhbkxpdGVyYWwuaApAQCAtNDYsMTggKzQ2LDI2IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgfkJvb2xlYW5MaXRlcmFsKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgQm9vbGVh
bkxpdGVyYWwoY29uc3QgQm9vbGVhbkxpdGVyYWwmKSA9IGRlZmF1bHQ7CisgICAgQm9vbGVhbkxp
dGVyYWwoY29uc3QgQm9vbGVhbkxpdGVyYWwmKSA9IGRlbGV0ZTsKICAgICBCb29sZWFuTGl0ZXJh
bChCb29sZWFuTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CiAKKyAgICBCb29sZWFuTGl0ZXJhbCYgb3Bl
cmF0b3I9KGNvbnN0IEJvb2xlYW5MaXRlcmFsJikgPSBkZWxldGU7CisgICAgQm9vbGVhbkxpdGVy
YWwmIG9wZXJhdG9yPShCb29sZWFuTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CisKICAgICBib29sIHZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQogCiAgICAgYm9vbCBpc0Jvb2xlYW5MaXRl
cmFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgQm9vbGVhbkxpdGVy
YWwgY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEJvb2xlYW5MaXRlcmFsKExl
eGVyOjpUb2tlbihvcmlnaW4oKSksIG1fdmFsdWUpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBi
b29sIG1fdmFsdWU7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCcmVhay5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnJlYWsuaApp
bmRleCA3NDc1Y2MzZjZmYi4uNWZmZmU4Njk4YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJyZWFrLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnJlYWsuaApAQCAtNTMsNyArNTMsNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QnVpbHRJblNlbWFudGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjg0MTRiYTM0NjFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcApAQCAt
MCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xCdWlsdEluU2VtYW50aWMuaCIKKworI2luY2x1
ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVz
LmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVm
ZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
bmFtZXNwYWNlIEFTVCB7CisKK2Jvb2wgQnVpbHRJblNlbWFudGljOjppc0FjY2VwdGFibGVUeXBl
KGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBJbnRyaW5zaWNzJiBp
bnRyaW5zaWNzKSBjb25zdAoreworICAgIHN3aXRjaCAobV92YXJpYWJsZSkgeworICAgIGNhc2Ug
VmFyaWFibGU6OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5
cGUsIGludHJpbnNpY3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZWZXJ0ZXhJ
RDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWludFR5
cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6UFNpemU6CisgICAgICAgIHJldHVybiBtYXRjaGVz
KHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxl
OjpTVlBvc2l0aW9uOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwgaW50cmlu
c2ljcy5mbG9hdDRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZhY2U6Cisg
ICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkp
OworICAgIGNhc2UgVmFyaWFibGU6OlNWU2FtcGxlSW5kZXg6CisgICAgICAgIHJldHVybiBtYXRj
aGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFi
bGU6OlNWSW5uZXJDb3ZlcmFnZToKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUs
IGludHJpbnNpY3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJnZXQ6Cisg
ICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0NFR5cGUo
KSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZEZXB0aDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXMo
dW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6
OlNWQ292ZXJhZ2U6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5z
aWNzLnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWRGlzcGF0Y2hUaHJlYWRJRDoK
KyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXQzVHlw
ZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwSUQ6CisgICAgICAgIHJldHVybiBtYXRj
aGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7CisgICAgY2FzZSBWYXJp
YWJsZTo6U1ZHcm91cEluZGV4OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlwZSwg
aW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwVGhyZWFk
SUQ6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0
M1R5cGUoKSk7CisgICAgfQorfQorCitib29sIEJ1aWx0SW5TZW1hbnRpYzo6aXNBY2NlcHRhYmxl
Rm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29u
c3QgRnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIGNvbnN0Cit7CisgICAg
c3dpdGNoICgqZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICBjYXNl
IEZ1bmN0aW9uRGVjbGFyYXRpb246OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgIHN3
aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNhc2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5w
dXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAgICAgICAgIGNhc2Ug
VmFyaWFibGU6OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWVmVy
dGV4SUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBTaGFkZXJJdGVtRGlyZWN0aW9uOjpPdXRwdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1f
dmFyaWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlBTaXplOgorICAgICAgICAg
ICAgY2FzZSBWYXJpYWJsZTo6U1ZQb3NpdGlvbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpF
bnRyeVBvaW50VHlwZTo6RnJhZ21lbnQ6CisgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7Cisg
ICAgICAgIGNhc2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ6CisgICAgICAgICAgICBzd2l0
Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSXNGcm9udEZh
Y2U6CisgICAgICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVlBvc2l0aW9uOgorICAgICAgICAgICAg
Y2FzZSBWYXJpYWJsZTo6U1ZTYW1wbGVJbmRleDoKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6
OlNWSW5uZXJDb3ZlcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICBjYXNlIFNoYWRlckl0ZW1EaXJlY3Rpb246Ok91dHB1dDoKKyAgICAgICAgICAg
IHN3aXRjaCAobV92YXJpYWJsZSkgeworICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZUYXJn
ZXQ6CisgICAgICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkRlcHRoOgorICAgICAgICAgICAgY2Fz
ZSBWYXJpYWJsZTo6U1ZDb3ZlcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBv
aW50VHlwZTo6Q29tcHV0ZToKKyAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICAgICAg
Y2FzZSBTaGFkZXJJdGVtRGlyZWN0aW9uOjpJbnB1dDoKKyAgICAgICAgICAgIHN3aXRjaCAobV92
YXJpYWJsZSkgeworICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZEaXNwYXRjaFRocmVhZElE
OgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cElEOgorICAgICAgICAgICAgY2Fz
ZSBWYXJpYWJsZTo6U1ZHcm91cEluZGV4OgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZH
cm91cFRocmVhZElEOgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgIGNhc2UgU2hhZGVySXRlbURpcmVjdGlvbjo6T3V0cHV0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBBU1QKKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaAppbmRleCA3MDQ2ZGYz
MmNmYS4uZjJjMjc0Y2Y0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1aWx0SW5TZW1hbnRpYy5oCkBAIC0zOSw3
ICszOSw3IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBCdWlsdEluU2VtYW50aWMgOiBwdWJs
aWMgQmFzZVNlbWFudGljIHsKIHB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFZhcmlhYmxlIHsKKyAg
ICBlbnVtIGNsYXNzIFZhcmlhYmxlIDogdWludDhfdCB7CiAgICAgICAgIFNWSW5zdGFuY2VJRCwK
ICAgICAgICAgU1ZWZXJ0ZXhJRCwKICAgICAgICAgUFNpemUsCkBAIC03MCwxMiArNzAsMjUgQEAg
cHVibGljOgogCiAgICAgVmFyaWFibGUgdmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX3Zhcmlh
YmxlOyB9CiAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQnVpbHRJblNlbWFudGljJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IG90aGVyLm1fdmFy
aWFibGUgJiYgbV90YXJnZXRJbmRleCA9PSBvdGhlci5tX3RhcmdldEluZGV4OworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBCdWlsdEluU2VtYW50aWMmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJv
b2wgaXNBY2NlcHRhYmxlVHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgSW50cmlu
c2ljcyYpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRl
bURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24m
KSBjb25zdCBvdmVycmlkZTsKKwogcHJpdmF0ZToKICAgICBWYXJpYWJsZSBtX3ZhcmlhYmxlOwog
ICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3RhcmdldEluZGV4OwogfTsKIAotfQorfSAvLyBuYW1l
c3BhY2UgQVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKaW5kZXggNjRhZjcxMzI5
OWMuLjZmN2E0N2M0NmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENhbGxFeHByZXNzaW9uLmgKQEAgLTI4LDcgKzI4
LDkgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xM
ZXhlci5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0zNiw5ICszOCwxMSBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNU
IHsKIAorY2xhc3MgTmFtZWRUeXBlOworCiBjbGFzcyBDYWxsRXhwcmVzc2lvbiA6IHB1YmxpYyBF
eHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBDYWxsRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBv
cmlnaW4sIFN0cmluZyYmIG5hbWUsIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+
JiYgYXJndW1lbnRzKQorICAgIENhbGxFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwg
U3RyaW5nJiYgbmFtZSwgVmVjdG9yPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4mJiBhcmd1bWVudHMp
CiAgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9uYW1l
KFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV9hcmd1bWVudHMoV1RGTW92ZShhcmd1bWVudHMp
KQpAQCAtNTIsMTQgKzU2LDQwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNDYWxsRXhwcmVzc2lv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8RXhwcmVzc2lvbj4+JiBhcmd1bWVudHMoKSB7IHJldHVybiBtX2FyZ3VtZW50czsg
fQorICAgIFZlY3RvcjxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+JiBhcmd1bWVudHMoKSB7IHJldHVy
biBtX2FyZ3VtZW50czsgfQorCisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9
CisKKyAgICB2b2lkIHNldENhc3REYXRhKEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpCisgICAg
eworICAgICAgICBtX2Nhc3RSZXR1cm5UeXBlID0geyBuYW1lZFR5cGUgfTsKKyAgICB9CisKKyAg
ICBib29sIGlzQ2FzdCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fY2FzdFJldHVyblR5
cGUpOyB9CisgICAgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlw
ZT4+JiBjYXN0UmV0dXJuVHlwZSgpIHsgcmV0dXJuIG1fY2FzdFJldHVyblR5cGU7IH0KKyAgICBi
b29sIGhhc092ZXJsb2FkcygpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1fb3Zl
cmxvYWRzKTsgfQorICAgIE9wdGlvbmFsPFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPj4mIG92ZXJsb2FkcygpIHsgcmV0dXJuIG1fb3ZlcmxvYWRz
OyB9CisgICAgdm9pZCBzZXRPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMpCisgICAgeworICAgICAg
ICBhc3NlcnQoIWhhc092ZXJsb2FkcygpKTsKKyAgICAgICAgbV9vdmVybG9hZHMgPSBvdmVybG9h
ZHM7CisgICAgfQorCisgICAgdm9pZCBzZXRGdW5jdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uJiBm
dW5jdGlvbkRlY2xhcmF0aW9uKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KCFtX2Z1bmN0aW9uKTsK
KyAgICAgICAgbV9mdW5jdGlvbiA9ICZmdW5jdGlvbkRlY2xhcmF0aW9uOworICAgIH0KIAogcHJp
dmF0ZToKICAgICBTdHJpbmcgbV9uYW1lOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhw
cmVzc2lvbj4+IG1fYXJndW1lbnRzOworICAgIFZlY3RvcjxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+
IG1fYXJndW1lbnRzOworICAgIE9wdGlvbmFsPFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPj4gbV9vdmVybG9hZHM7CisgICAgRnVuY3Rpb25EZWNs
YXJhdGlvbiogbV9mdW5jdGlvbiB7IG51bGxwdHIgfTsKKyAgICBPcHRpb25hbDxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4gbV9jYXN0UmV0dXJuVHlwZSB7IFdURjo6bnVs
bG9wdCB9OwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29tbWFFeHByZXNz
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb21t
YUV4cHJlc3Npb24uaAppbmRleCBiOGQyYmEzOGRiYy4uZTMyMmY1M2U3MzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbW1hRXhwcmVz
c2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENvbW1hRXhwcmVzc2lvbi5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJXSExTTEV4
cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1
ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtMzksNyArNDAsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgQ29tbWFFeHByZXNzaW9u
IDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgotICAgIENvbW1hRXhwcmVzc2lvbihMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+JiYg
bGlzdCkKKyAgICBDb21tYUV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBWZWN0b3I8
VW5pcXVlUmVmPEV4cHJlc3Npb24+PiYmIGxpc3QpCiAgICAgICAgIDogRXhwcmVzc2lvbihXVEZN
b3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9saXN0KFdURk1vdmUobGlzdCkpCiAgICAgewpAQCAt
NTIsMTMgKzUzLDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNDb21tYUV4cHJlc3Npb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEV4cHJlc3Npb24+PiYgbGlzdCgpIHsgcmV0dXJuIG1fbGlzdDsgfQorICAgIFZlY3RvcjxV
bmlxdWVSZWY8RXhwcmVzc2lvbj4+JiBsaXN0KCkgeyByZXR1cm4gbV9saXN0OyB9CiAKIHByaXZh
dGU6Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4gbV9saXN0OworICAg
IFZlY3RvcjxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+IG1fbGlzdDsKIH07CiAKLX0KK30gLy8gbmFt
ZXNwYWNlIEFTVAogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgKaW5kZXgg
YTM4YjBkNWIzYTEuLjFkNGZhN2Q5ZmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Np
b24uaApAQCAtNzYsMTEgKzc2LDkyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgQ29u
c3RhbnRFeHByZXNzaW9uKGNvbnN0IENvbnN0YW50RXhwcmVzc2lvbiYpID0gZGVsZXRlOworICAg
IENvbnN0YW50RXhwcmVzc2lvbihDb25zdGFudEV4cHJlc3Npb24mJikgPSBkZWZhdWx0OworCisg
ICAgQ29uc3RhbnRFeHByZXNzaW9uJiBvcGVyYXRvcj0oY29uc3QgQ29uc3RhbnRFeHByZXNzaW9u
JikgPSBkZWxldGU7CisgICAgQ29uc3RhbnRFeHByZXNzaW9uJiBvcGVyYXRvcj0oQ29uc3RhbnRF
eHByZXNzaW9uJiYpID0gZGVmYXVsdDsKKworICAgIEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0
ZXJhbCgpCisgICAgeworICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxJbnRl
Z2VyTGl0ZXJhbD4obV92YXJpYW50KSk7CisgICAgICAgIHJldHVybiBXVEY6OmdldDxJbnRlZ2Vy
TGl0ZXJhbD4obV92YXJpYW50KTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2
b2lkIHZpc2l0KFQmJiB0KQogICAgIHsKICAgICAgICAgV1RGOjp2aXNpdChXVEZNb3ZlKHQpLCBt
X3ZhcmlhbnQpOwogICAgIH0KIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgdmlzaXQo
VCYmIHQpIGNvbnN0CisgICAgeworICAgICAgICBXVEY6OnZpc2l0KFdURk1vdmUodCksIG1fdmFy
aWFudCk7CisgICAgfQorCisgICAgQ29uc3RhbnRFeHByZXNzaW9uIGNsb25lKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0
IEludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9uIHsK
KyAgICAgICAgICAgIHJldHVybiBpbnRlZ2VyTGl0ZXJhbC5jbG9uZSgpOworICAgICAgICB9LCBb
Jl0oY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkg
LT4gQ29uc3RhbnRFeHByZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiB1bnNpZ25lZEludGVn
ZXJMaXRlcmFsLmNsb25lKCk7CisgICAgICAgIH0sIFsmXShjb25zdCBGbG9hdExpdGVyYWwmIGZs
b2F0TGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBm
bG9hdExpdGVyYWwuY2xvbmUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IE51bGxMaXRlcmFsJiBu
dWxsTGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9uIHsKKyAgICAgICAgICAgIHJldHVybiBu
dWxsTGl0ZXJhbC5jbG9uZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgQm9vbGVhbkxpdGVyYWwm
IGJvb2xlYW5MaXRlcmFsKSAtPiBDb25zdGFudEV4cHJlc3Npb24geworICAgICAgICAgICAgcmV0
dXJuIGJvb2xlYW5MaXRlcmFsLmNsb25lKCk7CisgICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpIC0+IENvbnN0YW50RXhwcmVzc2lvbiB7CisgICAg
ICAgICAgICByZXR1cm4gY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UuY2xvbmUoKTsKKyAgICAgICAgfSksIG1fdmFyaWFudCk7CisgICAgfQorCisgICAgYm9vbCBt
YXRjaGVzKGNvbnN0IENvbnN0YW50RXhwcmVzc2lvbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICBPcHRpb25hbDxib29sPiByZXN1bHQ7CisgICAgICAgIGRvdWJsZSB2YWx1ZTsKKyAgICAg
ICAgdmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgSW50ZWdlckxpdGVyYWwmIGludGVn
ZXJMaXRlcmFsKSB7CisgICAgICAgICAgICB2YWx1ZSA9IGludGVnZXJMaXRlcmFsLnZhbHVlKCk7
CisgICAgICAgIH0sIFsmXShjb25zdCBVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZElu
dGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVy
YWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRl
cmFsKSB7CisgICAgICAgICAgICB2YWx1ZSA9IGZsb2F0TGl0ZXJhbC52YWx1ZSgpOworICAgICAg
ICB9LCBbJl0oY29uc3QgTnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICByZXN1bHQgPSBXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPE51bGxMaXRlcmFsPihvdGhlci5tX3ZhcmlhbnQpOworICAgICAg
ICB9LCBbJl0oY29uc3QgQm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSB7CisgICAgICAg
ICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxCb29sZWFuTGl0ZXJhbD4ob3RoZXIubV92
YXJpYW50KSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIG90aGVyQm9vbGVhbkxpdGVy
YWwgPSBXVEY6OmdldDxCb29sZWFuTGl0ZXJhbD4ob3RoZXIubV92YXJpYW50KTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBib29sZWFuTGl0ZXJhbC52YWx1ZSgpID09IG90aGVyQm9vbGVhbkxp
dGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGZhbHNlOworICAgICAgICB9LCBbJl0oY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVy
UmVmZXJlbmNlKSB7CisgICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb25z
dGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZT4ob3RoZXIubV92YXJpYW50
KSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIG90aGVyTWVtYmVyUmVmZXJlbmNlID0g
V1RGOjpnZXQ8Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2U+KG90
aGVyLm1fdmFyaWFudCk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnRFeHByZXNz
aW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKSA9PSBvdGhl
ck1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbk1lbWJlcigpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIH0pKTsKKworICAgICAg
ICBpZiAocmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuICpyZXN1bHQ7CisKKyAgICAgICAgb3Ro
ZXIudmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgSW50ZWdlckxpdGVyYWwmIGludGVn
ZXJMaXRlcmFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZSA9PSBpbnRlZ2VyTGl0ZXJh
bC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYg
dW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUgPT0g
dW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgRmxv
YXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlID09
IGZsb2F0TGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgTnVsbExpdGVyYWwm
KSB7CisgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEJv
b2xlYW5MaXRlcmFsJikgeworICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIH0s
IFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYp
IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICB9KSk7CisKKyAgICAgICAg
QVNTRVJUKHJlc3VsdCk7CisgICAgICAgIHJldHVybiAqcmVzdWx0OworICAgIH0KKwogcHJpdmF0
ZToKICAgICBWYXJpYW50PAogICAgICAgICBJbnRlZ2VyTGl0ZXJhbCwKQEAgLTkyLDcgKzE3Myw3
IEBAIHByaXZhdGU6CiAgICAgICAgID4gbV92YXJpYW50OwogfTsKIAotfQorfSAvLyBuYW1lc3Bh
Y2UgQVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnN0
YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgKaW5kZXggMmMyNGE5OGIy
Y2EuLjJjNGNlZDFmYTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgKQEAgLTM2LDEw
ICszNiwxMyBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsKIAotY2xhc3Mg
Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UgOiBwdWJsaWMgTm9k
ZSB7CitjbGFzcyBFbnVtZXJhdGlvbkRlZmluaXRpb247CitjbGFzcyBFbnVtZXJhdGlvbk1lbWJl
cjsKKworY2xhc3MgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Ug
OiBwdWJsaWMgRXhwcmVzc2lvbiB7CiBwdWJsaWM6CiAgICAgQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBs
ZWZ0LCBTdHJpbmcmJiByaWdodCkKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikp
CisgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9sZWZ0
KFdURk1vdmUobGVmdCkpCiAgICAgICAgICwgbV9yaWdodChXVEZNb3ZlKHJpZ2h0KSkKICAgICB7
CkBAIC01MCwxMyArNTMsNTMgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IENvbnN0YW50RXhwcmVz
c2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKGNvbnN0IENvbnN0YW50RXhwcmVzc2lvbkVu
dW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikgPSBkZWZhdWx0OwogICAgIENvbnN0YW50RXhwcmVz
c2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0
aW9uTWVtYmVyUmVmZXJlbmNlJiYpID0gZGVmYXVsdDsKIAorICAgIENvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgQ29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSA9IGRlbGV0ZTsKKyAgICBDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgb3BlcmF0b3I9KENvbnN0YW50
RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiYpID0gZGVmYXVsdDsKKworICAg
IGNvbnN0IFN0cmluZyYgbGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdDsgfQorICAgIGNvbnN0
IFN0cmluZyYgcmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CisKKyAgICBDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSBjbG9uZSgpIGNvbnN0CisgICAg
eworICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVt
YmVyUmVmZXJlbmNlKExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhtX2xlZnQpLCBTdHJp
bmcobV9yaWdodCkpOworICAgICAgICByZXN1bHQubV9lbnVtZXJhdGlvbk1lbWJlciA9IG1fZW51
bWVyYXRpb25NZW1iZXI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgQVNU
OjpFbnVtZXJhdGlvbkRlZmluaXRpb24qIGVudW1lcmF0aW9uRGVmaW5pdGlvbigpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb247CisgICAgfQorCisgICAgQVNU
OjpFbnVtZXJhdGlvbkRlZmluaXRpb24qIGVudW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmluaXRpb247CisgICAgfQorCisg
ICAgQVNUOjpFbnVtZXJhdGlvbk1lbWJlciogZW51bWVyYXRpb25NZW1iZXIoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fZW51bWVyYXRpb25NZW1iZXI7CisgICAgfQorCisgICAgQVNUOjpFbnVt
ZXJhdGlvbk1lbWJlciogZW51bWVyYXRpb25NZW1iZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fZW51bWVyYXRpb25NZW1iZXI7CisgICAgfQorCisgICAgdm9pZCBzZXRFbnVtZXJh
dGlvbk1lbWJlcihBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0
aW9uLCBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKKyAgICB7Cisg
ICAgICAgIG1fZW51bWVyYXRpb25EZWZpbml0aW9uID0gJmVudW1lcmF0aW9uRGVmaW5pdGlvbjsK
KyAgICAgICAgbV9lbnVtZXJhdGlvbk1lbWJlciA9ICZlbnVtZXJhdGlvbk1lbWJlcjsKKyAgICB9
CisKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIFN0cmluZyBtX2xl
ZnQ7CiAgICAgU3RyaW5nIG1fcmlnaHQ7CisgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24q
IG1fZW51bWVyYXRpb25EZWZpbml0aW9uIHsgbnVsbHB0ciB9OworICAgIEFTVDo6RW51bWVyYXRp
b25NZW1iZXIqIG1fZW51bWVyYXRpb25NZW1iZXIgeyBudWxscHRyIH07CiB9OwogCi19Cit9IC8v
IG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb250aW51ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29udGludWUuaAppbmRleCAzYjA2ZWM1OWQyMi4uNTM0
YWUyMjA2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTENvbnRpbnVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMQ29udGludWUuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiBwcml2
YXRlOgogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xE
ZXJlZmVyZW5jZUV4cHJlc3Npb24uaAppbmRleCA2YzU1ZGUzNGE3Zi4uYWZjMzEwMzE4OGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERl
cmVmZXJlbmNlRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oCkBAIC0yOSw2ICsyOSw3IEBA
CiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgi
CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTM4LDcgKzM5LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIERlcmVmZXJlbmNlRXhwcmVz
c2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBEZXJlZmVyZW5jZUV4cHJl
c3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4m
JiBwb2ludGVyKQorICAgIERlcmVmZXJlbmNlRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmln
aW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIHBvaW50ZXIpCiAgICAgICAgIDogRXhwcmVzc2lv
bihXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9wb2ludGVyKFdURk1vdmUocG9pbnRlcikp
CiAgICAgewpAQCAtNTEsMTMgKzUyLDEzIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNEZXJlZmVy
ZW5jZUV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBF
eHByZXNzaW9uJiBwb2ludGVyKCkgeyByZXR1cm4gKm1fcG9pbnRlcjsgfQorICAgIEV4cHJlc3Np
b24mIHBvaW50ZXIoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxFeHByZXNzaW9uJj4obV9wb2ludGVy
KTsgfQogCiBwcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX3BvaW50
ZXI7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fcG9pbnRlcjsKIH07CiAKLX0KK30gLy8g
bmFtZXNwYWNlIEFTVAogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTERvV2hpbGVMb29wLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb1doaWxlTG9vcC5oCmluZGV4IGQyNmVkZjkyMmNl
Li5mYmY0NDg3MmRlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRG9XaGlsZUxvb3AuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb1doaWxlTG9vcC5oCkBAIC0zMCw2ICszMCw3IEBACiAj
aW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2lu
Y2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDcgKzQwLDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAK
IGNsYXNzIERvV2hpbGVMb29wIDogcHVibGljIFN0YXRlbWVudCB7CiBwdWJsaWM6Ci0gICAgRG9X
aGlsZUxvb3AoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8U3RhdGVtZW50
PiYmIGJvZHksIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIGNvbmRpdGlvbmFsKQorICAg
IERvV2hpbGVMb29wKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPFN0YXRlbWVudD4m
JiBib2R5LCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBjb25kaXRpb25hbCkKICAgICAgICAgOiBT
dGF0ZW1lbnQoV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fYm9keShXVEZNb3ZlKGJvZHkp
KQogICAgICAgICAsIG1fY29uZGl0aW9uYWwoV1RGTW92ZShjb25kaXRpb25hbCkpCkBAIC01Mywx
NSArNTQsMTUgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNEb1doaWxlTG9vcCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIFN0YXRlbWVudCYgYm9keSgpIHsgcmV0
dXJuICptX2JvZHk7IH0KLSAgICBFeHByZXNzaW9uJiBjb25kaXRpb25hbCgpIHsgcmV0dXJuICpt
X2NvbmRpdGlvbmFsOyB9CisgICAgU3RhdGVtZW50JiBib2R5KCkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8U3RhdGVtZW50Jj4obV9ib2R5KTsgfQorICAgIEV4cHJlc3Npb24mIGNvbmRpdGlvbmFsKCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8RXhwcmVzc2lvbiY+KG1fY29uZGl0aW9uYWwpOyB9CiAKIHBy
aXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFN0YXRlbWVudD4gbV9ib2R5OwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2NvbmRpdGlvbmFsOworICAgIFVuaXF1ZVJlZjxTdGF0
ZW1lbnQ+IG1fYm9keTsKKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9jb25kaXRpb25hbDsK
IH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIEFTVAogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24u
aAppbmRleCBjNDNjNjllZTU0MS4uYzFjZjUwZTU2MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEb3RFeHByZXNzaW9u
LmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRl
ICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVS
ZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCw3ICszOSw3IEBAIG5hbWVzcGFj
ZSBBU1QgewogCiBjbGFzcyBEb3RFeHByZXNzaW9uIDogcHVibGljIFByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbiB7CiBwdWJsaWM6Ci0gICAgRG90RXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmln
aW4sIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIGJhc2UsIFN0cmluZyYmIGZpZWxkTmFt
ZSkKKyAgICBEb3RFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4
cHJlc3Npb24+JiYgYmFzZSwgU3RyaW5nJiYgZmllbGROYW1lKQogICAgICAgICA6IFByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoYmFzZSkpCiAgICAgICAg
ICwgbV9maWVsZE5hbWUoV1RGTW92ZShmaWVsZE5hbWUpKQogICAgIHsKQEAgLTQ5LDE0ICs1MCwz
NSBAQCBwdWJsaWM6CiAgICAgRG90RXhwcmVzc2lvbihjb25zdCBEb3RFeHByZXNzaW9uJikgPSBk
ZWxldGU7CiAgICAgRG90RXhwcmVzc2lvbihEb3RFeHByZXNzaW9uJiYpID0gZGVmYXVsdDsKIAor
ICAgIGJvb2wgaXNEb3RFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgU3RyaW5nIGdldEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIm9wZXJhdG9yLiVzIiwgbV9maWVsZE5hbWUu
dXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgU3RyaW5nIHNldEZ1bmN0aW9uTmFtZSgpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5nOjpmb3JtYXQoIm9wZXJh
dG9yLiVzPSIsIG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIH0KKworICAgIFN0cmlu
ZyBhbmRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvciYuJXMiLCBtX2ZpZWxkTmFtZS51dGY4KCkuZGF0YSgp
KTsKKyAgICB9CisKKyAgICBTdHJpbmcmIGZpZWxkTmFtZSgpIHsgcmV0dXJuIG1fZmllbGROYW1l
OyB9CisKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZmllbGROYW1lOwogfTsKIAotfQorfSAvLyBu
YW1lc3BhY2UgQVNUCiAKIH0KIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0VY
UFJFU1NJT04oRG90RXhwcmVzc2lvbiwgaXNEb3RFeHByZXNzaW9uKCkpCisKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRWZm
ZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oCmluZGV4IGQ5
Y2E5OWFkOGUwLi4zMzMyNWYxNzgyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVmZmVjdGZ1
bEV4cHJlc3Npb25TdGF0ZW1lbnQuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIldITFNM
RXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFN0
YXRlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0zOSw3ICs0MCw3IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBFZmZlY3Rm
dWxFeHByZXNzaW9uU3RhdGVtZW50IDogcHVibGljIFN0YXRlbWVudCB7CiBwdWJsaWM6Ci0gICAg
RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudChzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4m
JiBlZmZlY3RmdWxFeHByZXNzaW9uKQorICAgIEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQo
VW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgZWZmZWN0ZnVsRXhwcmVzc2lvbikKICAgICAgICAgOiBT
dGF0ZW1lbnQoTGV4ZXI6OlRva2VuKGVmZmVjdGZ1bEV4cHJlc3Npb24tPm9yaWdpbigpKSkKICAg
ICAgICAgLCBtX2VmZmVjdGZ1bEV4cHJlc3Npb24oV1RGTW92ZShlZmZlY3RmdWxFeHByZXNzaW9u
KSkKICAgICB7CkBAIC01MiwxMyArNTMsMTMgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0VmZmVj
dGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CiAKLSAgICBFeHByZXNzaW9uJiBlZmZlY3RmdWxFeHByZXNzaW9uKCkgeyByZXR1cm4gKm1fZWZm
ZWN0ZnVsRXhwcmVzc2lvbjsgfQorICAgIEV4cHJlc3Npb24mIGVmZmVjdGZ1bEV4cHJlc3Npb24o
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxFeHByZXNzaW9uJj4obV9lZmZlY3RmdWxFeHByZXNzaW9u
KTsgfQogCiBwcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2VmZmVj
dGZ1bEV4cHJlc3Npb247CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fZWZmZWN0ZnVsRXhw
cmVzc2lvbjsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIEFTVAogCiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9u
RGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgKaW5kZXggNzk3MGI1OWU1NGEuLmM1NzIzMjY5ODg2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaApAQCAtMjksOCArMjks
MTMgQEAKIAogI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKICNpbmNsdWRlICJX
SExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1l
ZFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCisjaW5jbHVkZSA8bWVtb3J5
PgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTM5LDEzICs0NCwxMSBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNUIHsK
IAotY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uIDogcHVibGljIE5vZGUgeworY2xhc3MgRW51
bWVyYXRpb25EZWZpbml0aW9uIDogcHVibGljIE5hbWVkVHlwZSB7CiBwdWJsaWM6Ci0gICAgRW51
bWVyYXRpb25EZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwg
c3RkOjp1bmlxdWVfcHRyPFR5cGU+JiYgdHlwZSwgRW51bWVyYXRpb25NZW1iZXJzJiYgbWVtYmVy
cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9uYW1l
KFdURk1vdmUobmFtZSkpCisgICAgRW51bWVyYXRpb25EZWZpbml0aW9uKExleGVyOjpUb2tlbiYm
IG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiYmIHR5
cGUpCisgICAgICAgIDogTmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkK
ICAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkKLSAgICAgICAgLCBtX21lbWJlcnMoV1RG
TW92ZShtZW1iZXJzKSkKICAgICB7CiAgICAgfQogCkBAIC01NCwyMCArNTcsNDMgQEAgcHVibGlj
OgogICAgIEVudW1lcmF0aW9uRGVmaW5pdGlvbihjb25zdCBFbnVtZXJhdGlvbkRlZmluaXRpb24m
KSA9IGRlbGV0ZTsKICAgICBFbnVtZXJhdGlvbkRlZmluaXRpb24oRW51bWVyYXRpb25EZWZpbml0
aW9uJiYpID0gZGVmYXVsdDsKIAotICAgIFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90eXBlOyB9
Ci0gICAgRW51bWVyYXRpb25NZW1iZXJzJiBlbnVtZXJhdGlvbk1lbWJlcnMoKSB7IHJldHVybiBt
X21lbWJlcnM7IH0KKyAgICBib29sIGlzRW51bWVyYXRpb25EZWZpbml0aW9uKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgVW5uYW1lZFR5cGUmIHR5cGUoKSB7IHJldHVy
biAqbV90eXBlOyB9CisKKyAgICBib29sIGFkZChFbnVtZXJhdGlvbk1lbWJlciYmIG1lbWJlcikK
KyAgICB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9tZW1iZXJzLmFkZChtZW1iZXIubmFtZSgp
LCBzdGQ6Om1ha2VfdW5pcXVlPEVudW1lcmF0aW9uTWVtYmVyPihXVEZNb3ZlKG1lbWJlcikpKTsK
KyAgICAgICAgcmV0dXJuICFyZXN1bHQuaXNOZXdFbnRyeTsKKyAgICB9CisKKyAgICBFbnVtZXJh
dGlvbk1lbWJlciogbWVtYmVyQnlOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAg
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX21lbWJlcnMuZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGl0
ZXJhdG9yID09IG1fbWVtYmVycy5lbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVlLmdldCgpOworICAgIH0KKworICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEVudW1lcmF0aW9uTWVtYmVyPj4gZW51bWVyYXRpb25N
ZW1iZXJzKCkKKyAgICB7CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEVu
dW1lcmF0aW9uTWVtYmVyPj4gcmVzdWx0OworICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX21l
bWJlcnMpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCpwYWlyLnZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3Jp
Z2luOwotICAgIFN0cmluZyBtX25hbWU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFR5cGU+IG1fdHlw
ZTsKLSAgICBFbnVtZXJhdGlvbk1lbWJlcnMgbV9tZW1iZXJzOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxVbm5hbWVkVHlwZT4gbV90eXBlOworICAgIEhhc2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9w
dHI8RW51bWVyYXRpb25NZW1iZXI+PiBtX21lbWJlcnM7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFj
ZSBBU1QKIAogfQogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQ
RShFbnVtZXJhdGlvbkRlZmluaXRpb24sIGlzRW51bWVyYXRpb25EZWZpbml0aW9uKCkpCisKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRW51bWVyYXRpb25NZW1iZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKaW5kZXggOWQ5ZDg1NDg4M2UuLmFm
ZWIxODYwMGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKQEAgLTU0LDE3ICs1
NCwyNSBAQCBwdWJsaWM6CiAgICAgRW51bWVyYXRpb25NZW1iZXIoY29uc3QgRW51bWVyYXRpb25N
ZW1iZXImKSA9IGRlbGV0ZTsKICAgICBFbnVtZXJhdGlvbk1lbWJlcihFbnVtZXJhdGlvbk1lbWJl
ciYmKSA9IGRlZmF1bHQ7CiAKKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1l
OyB9CiAgICAgT3B0aW9uYWw8Q29uc3RhbnRFeHByZXNzaW9uPiYgdmFsdWUoKSB7IHJldHVybiBt
X3ZhbHVlOyB9CiAKKyAgICB2b2lkIHNldFZhbHVlKENvbnN0YW50RXhwcmVzc2lvbiYmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3ZhbHVlKTsKKyAgICAgICAgbV92YWx1ZSA9IFdU
Rk1vdmUodmFsdWUpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmln
aW47CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBPcHRpb25hbDxDb25zdGFudEV4cHJlc3Npb24+
IG1fdmFsdWU7CiB9OwogCi10eXBlZGVmIFZlY3RvcjxFbnVtZXJhdGlvbk1lbWJlcj4gRW51bWVy
YXRpb25NZW1iZXJzOwordXNpbmcgRW51bWVyYXRpb25NZW1iZXJzID0gVmVjdG9yPEVudW1lcmF0
aW9uTWVtYmVyPjsKIAotfQorfSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uNDA5NWFmMzNmMjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIgorI2lu
Y2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsK
KworY2xhc3MgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsIDogcHVibGljIEV4cHJlc3Npb24gewor
cHVibGljOgorICAgIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChMZXhlcjo6VG9rZW4mJiBvcmln
aW4sIEVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKKyAgICAgICAgOiBFeHBy
ZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgLCBtX2VudW1lcmF0aW9uTWVtYmVyKGVu
dW1lcmF0aW9uTWVtYmVyKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5FbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwoKSA9IGRlZmF1bHQ7CisKKyAgICBFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwoY29uc3QgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJikgPSBkZWxldGU7CisgICAgRW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsKEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7
CisKKyAgICBib29sIGlzRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgRW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVt
YmVyKCkgeyByZXR1cm4gbV9lbnVtZXJhdGlvbk1lbWJlcjsgfQorCitwcml2YXRlOgorICAgIEVu
dW1lcmF0aW9uTWVtYmVyJiBtX2VudW1lcmF0aW9uTWVtYmVyOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJ
T04oRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLCBpc0VudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCgp
KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaAppbmRleCBlMzY4MzgzNjQ2ZC4uOGZhZmEyOWZl
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xFeHByZXNzaW9uLmgKQEAgLTQ4LDE0ICs0OCwxOSBAQCBwdWJsaWM6CiAgICAg
ZXhwbGljaXQgRXhwcmVzc2lvbihjb25zdCBFeHByZXNzaW9uJikgPSBkZWZhdWx0OwogICAgIEV4
cHJlc3Npb24oRXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBMZXhlcjo6VG9rZW4gb3Jp
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBFeHByZXNzaW9uJiBvcGVyYXRv
cj0oY29uc3QgRXhwcmVzc2lvbiYpID0gZGVmYXVsdDsKKyAgICBFeHByZXNzaW9uJiBvcGVyYXRv
cj0oRXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CisKKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9y
aWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNB
c3NpZ25tZW50RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzQm9vbGVhbkxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBpc0NhbGxFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNDb21tYUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBpc0RlcmVmZXJlbmNlRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRG90RXhwcmVzc2lvbigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRmxvYXRMaXRlcmFsKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmRleEV4cHJlc3Npb24oKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0ludGVnZXJMaXRlcmFs
KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNMb2dpY2FsRXhw
cmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9n
aWNhbE5vdEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpAQCAtNjcsMTIgKzcy
LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNUZXJuYXJ5RXhwcmVzc2lvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzVmFy
aWFibGVSZWZlcmVuY2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc0VudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAK
IHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogfTsKIAotfQorfSAvLyBuYW1l
c3BhY2UgQVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRmFsbHRocm91Z2guaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEZhbGx0aHJvdWdoLmgKaW5kZXggMDk5MTU3ZDRlNmQuLjRl
NjZjOWE0ZjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xGYWxsdGhyb3VnaC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZhbGx0aHJvdWdoLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIEFTVAogCiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0
ZXJhbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxv
YXRMaXRlcmFsLmgKaW5kZXggY2JmNTQ2OWRiZmEuLjIyNjNiNGEyMDQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9h
dExpdGVyYWwuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAKICNpbmNs
dWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEZsb2F0TGl0ZXJhbFR5cGUu
aCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5
LDI1ICs0MCwzOSBAQCBuYW1lc3BhY2UgQVNUIHsKIGNsYXNzIEZsb2F0TGl0ZXJhbCA6IHB1Ymxp
YyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKICAgICBGbG9hdExpdGVyYWwoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBmbG9hdCB2YWx1ZSkKLSAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2lu
KSkKKyAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQorICAgICAgICAs
IG1fdHlwZShXVEZNb3ZlKG9yaWdpbiksIHZhbHVlKQogICAgICAgICAsIG1fdmFsdWUodmFsdWUp
CiAgICAgewogICAgIH0KIAogICAgIHZpcnR1YWwgfkZsb2F0TGl0ZXJhbCgpID0gZGVmYXVsdDsK
IAotICAgIGV4cGxpY2l0IEZsb2F0TGl0ZXJhbChjb25zdCBGbG9hdExpdGVyYWwmKSA9IGRlZmF1
bHQ7CisgICAgRmxvYXRMaXRlcmFsKGNvbnN0IEZsb2F0TGl0ZXJhbCYpID0gZGVsZXRlOwogICAg
IEZsb2F0TGl0ZXJhbChGbG9hdExpdGVyYWwmJikgPSBkZWZhdWx0OwogCisgICAgRmxvYXRMaXRl
cmFsJiBvcGVyYXRvcj0oY29uc3QgRmxvYXRMaXRlcmFsJikgPSBkZWxldGU7CisgICAgRmxvYXRM
aXRlcmFsJiBvcGVyYXRvcj0oRmxvYXRMaXRlcmFsJiYpID0gZGVmYXVsdDsKKworICAgIEZsb2F0
TGl0ZXJhbFR5cGUmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KICAgICBmbG9hdCB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KIAogICAgIGJvb2wgaXNGbG9hdExpdGVyYWwoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBGbG9hdExpdGVyYWwgY2xvbmUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgRmxvYXRMaXRlcmFsIHJlc3VsdChMZXhlcjo6VG9rZW4o
b3JpZ2luKCkpLCBtX3ZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdC5tX3R5cGUucmVzb2x2ZWRU
eXBlKCkpCisgICAgICAgICAgICByZXN1bHQubV90eXBlLnJlc29sdmUocmVzdWx0Lm1fdHlwZS5y
ZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CiBwcml2YXRlOgorICAgIEZsb2F0TGl0ZXJhbFR5cGUgbV90eXBlOwogICAgIGZsb2F0IG1fdmFs
dWU7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0
TGl0ZXJhbFR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5j
ODI2NmI4YjRhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwCkBAIC0wLDAgKzEsNzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsVHlwZS5oIgorCisjaW5jbHVkZSAiV0hMU0xJbmZl
clR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK0Zsb2F0
TGl0ZXJhbFR5cGU6OkZsb2F0TGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBmbG9h
dCB2YWx1ZSkKKyAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgLCBtX3ByZWZlcnJlZFR5cGUobWFr
ZVVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKG9yaWdpbiksIFN0cmluZygiZmxvYXQi
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgVHlwZUFyZ3VtZW50cygpKSkKK3sKK30K
KworRmxvYXRMaXRlcmFsVHlwZTo6fkZsb2F0TGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKK2Jv
b2wgRmxvYXRMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShjb25zdCBUeXBlJiB0eXBlKSBjb25zdAor
eworICAgIGlmICghaXM8TmFtZWRUeXBlPih0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PE5hbWVkVHlwZT4odHlwZSk7CisgICAgaWYg
KCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxOYXRpdmVU
eXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRp
b24uaXNGbG9hdGluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFuYXRpdmVU
eXBlRGVjbGFyYXRpb24uY2FuUmVwcmVzZW50RmxvYXQoKShtX3ZhbHVlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBGbG9hdExpdGVyYWxU
eXBlOjpjb252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIGNvbnN0
Cit7CisgICAgaWYgKG1hdGNoZXModW5uYW1lZFR5cGUsIHN0YXRpY19jYXN0PGNvbnN0IFR5cGVS
ZWZlcmVuY2UmPihtX3ByZWZlcnJlZFR5cGUpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIDE7Cit9CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9h
dExpdGVyYWxUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xGbG9hdExpdGVyYWxUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjFhYWQyZjQ3YzY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5oCkBAIC0wLDAgKzEs
NzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisK
KyNpbmNsdWRlICJXSExTTFJlc29sdmFibGVUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJl
Zi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBUeXBl
UmVmZXJlbmNlOworCitjbGFzcyBGbG9hdExpdGVyYWxUeXBlIDogcHVibGljIFJlc29sdmFibGVU
eXBlIHsKK3B1YmxpYzoKKyAgICBGbG9hdExpdGVyYWxUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdp
biwgZmxvYXQgdmFsdWUpOworCisgICAgdmlydHVhbCB+RmxvYXRMaXRlcmFsVHlwZSgpOworCisg
ICAgRmxvYXRMaXRlcmFsVHlwZShjb25zdCBGbG9hdExpdGVyYWxUeXBlJikgPSBkZWxldGU7Cisg
ICAgRmxvYXRMaXRlcmFsVHlwZShGbG9hdExpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKworICAg
IEZsb2F0TGl0ZXJhbFR5cGUmIG9wZXJhdG9yPShjb25zdCBGbG9hdExpdGVyYWxUeXBlJikgPSBk
ZWxldGU7CisgICAgRmxvYXRMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KEZsb2F0TGl0ZXJhbFR5cGUm
JikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc0Zsb2F0TGl0ZXJhbFR5cGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBUeXBlUmVmZXJlbmNlJiBwcmVmZXJyZWRUeXBl
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZVJlZmVyZW5jZSY+KG1fcHJlZmVycmVkVHlwZSk7
IH0KKworICAgIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdCBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBmbG9hdCBtX3ZhbHVlOworICAgIC8vIFRoaXMgaXMgYSB1
bmlxdWVfcHRyIHRvIHJlc29sdmUgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4KKyAgICAv
LyBDb25zdGFudEV4cHJlc3Npb24gLT4gTGl0ZXJhbFR5cGUgLT4gVHlwZVJlZmVyZW5jZSAtPiBU
eXBlQXJndW1lbnRzIC0+IENvbnN0YW50RXhwcmVzc2lvbgorICAgIFVuaXF1ZVJlZjxUeXBlUmVm
ZXJlbmNlPiBtX3ByZWZlcnJlZFR5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQor
Cit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfUkVTT0xWQUJMRV9UWVBFKEZsb2F0
TGl0ZXJhbFR5cGUsIGlzRmxvYXRMaXRlcmFsVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZvckxvb3AuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZvckxvb3AuaApp
bmRleCAyOGZjMTM3NmRhYy4uNzYzOWM2OGNjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZvckxvb3AuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGb3JMb29wLmgKQEAgLTMxLDYgKzMx
LDggQEAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQu
aCIKICNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgiCisjaW5j
bHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYv
VmFyaWFudC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDIsNyArNDQsNyBAQCBu
YW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgRm9yTG9vcCA6IHB1YmxpYyBTdGF0ZW1lbnQgewogcHVi
bGljOgotICAgIEZvckxvb3AoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBWYXJpYW50PFZhcmlhYmxl
RGVjbGFyYXRpb25zU3RhdGVtZW50LCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4+JiYgaW5p
dGlhbGl6YXRpb24sIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIGNvbmRpdGlvbiwgc3Rk
Ojp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgaW5jcmVtZW50LCBzdGQ6OnVuaXF1ZV9wdHI8U3Rh
dGVtZW50PiYmIGJvZHkpCisgICAgRm9yTG9vcChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFZhcmlh
bnQ8VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQsIFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4m
JiBpbml0aWFsaXphdGlvbiwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgY29uZGl0aW9u
LCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4mJiBpbmNyZW1lbnQsIFVuaXF1ZVJlZjxTdGF0
ZW1lbnQ+JiYgYm9keSkKICAgICAgICAgOiBTdGF0ZW1lbnQoV1RGTW92ZShvcmlnaW4pKQogICAg
ICAgICAsIG1faW5pdGlhbGl6YXRpb24oV1RGTW92ZShpbml0aWFsaXphdGlvbikpCiAgICAgICAg
ICwgbV9jb25kaXRpb24oV1RGTW92ZShjb25kaXRpb24pKQpAQCAtNjAsMTkgKzYyLDE5IEBAIHB1
YmxpYzoKICAgICAKICAgICBib29sIGlzRm9yTG9vcCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KIAotICAgIFZhcmlhbnQ8VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQsIHN0
ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4mIGluaXRpYWxpemF0aW9uKCkgeyByZXR1cm4gbV9p
bml0aWFsaXphdGlvbjsgfQorICAgIFZhcmlhbnQ8VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQsIFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4mIGluaXRpYWxpemF0aW9uKCkgeyByZXR1cm4gbV9p
bml0aWFsaXphdGlvbjsgfQogICAgIEV4cHJlc3Npb24qIGNvbmRpdGlvbigpIHsgcmV0dXJuIG1f
Y29uZGl0aW9uLmdldCgpOyB9CiAgICAgRXhwcmVzc2lvbiogaW5jcmVtZW50KCkgeyByZXR1cm4g
bV9pbmNyZW1lbnQuZ2V0KCk7IH0KLSAgICBTdGF0ZW1lbnQmIGJvZHkoKSB7IHJldHVybiAqbV9i
b2R5OyB9CisgICAgU3RhdGVtZW50JiBib2R5KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U3RhdGVt
ZW50Jj4obV9ib2R5KTsgfQogCiBwcml2YXRlOgotICAgIFZhcmlhbnQ8VmFyaWFibGVEZWNsYXJh
dGlvbnNTdGF0ZW1lbnQsIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPj4gbV9pbml0aWFsaXph
dGlvbjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9jb25kaXRpb247IC8vIG51
bGxhYmxlCi0gICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1faW5jcmVtZW50OyAvLyBu
dWxsYWJsZQotICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGF0ZW1lbnQ+IG1fYm9keTsKKyAgICBWYXJp
YW50PFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4+
IG1faW5pdGlhbGl6YXRpb247CisgICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fY29u
ZGl0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2luY3JlbWVudDsKKyAg
ICBVbmlxdWVSZWY8U3RhdGVtZW50PiBtX2JvZHk7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBB
U1QKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaAppbmRleCBjYmQ3MmQ0YTkw
Yy4uNzc0OWJlNjUyMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaApAQCAtMzcs
MTAgKzM3LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi10eXBl
ZGVmIFZhcmlhbnQ8TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlPiBGdW5jdGlvbkF0dHJpYnV0
ZTsKLXR5cGVkZWYgVmVjdG9yPEZ1bmN0aW9uQXR0cmlidXRlPiBBdHRyaWJ1dGVCbG9jazsKK3Vz
aW5nIEZ1bmN0aW9uQXR0cmlidXRlID0gVmFyaWFudDxOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1
dGU+OwordXNpbmcgQXR0cmlidXRlQmxvY2sgPSBWZWN0b3I8RnVuY3Rpb25BdHRyaWJ1dGU+Owog
Ci19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xh
cmF0aW9uLmgKaW5kZXggN2E3ZTBhMDY1NmMuLmNiYmFjYWFjNDdlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RnVuY3Rpb25EZWNsYXJhdGlvbi5oCkBAIC0zMCw5ICszMCwxMCBAQAogI2luY2x1ZGUgIldITFNM
RnVuY3Rpb25BdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAi
V0hMU0xOb2RlLmgiCi0jaW5jbHVkZSAiV0hMU0xQYXJhbWV0ZXIuaCIKICNpbmNsdWRlICJXSExT
TFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5h
bWVkVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1
ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsMTMgKzQ0LDE0IEBAIG5hbWVzcGFjZSBBU1Qgewog
CiBjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHVibGljIE5vZGUgewogcHVibGljOgotICAg
IGVudW0gY2xhc3MgRW50cnlQb2ludFR5cGUgeworICAgIGVudW0gY2xhc3MgRW50cnlQb2ludFR5
cGUgOiB1aW50OF90IHsKICAgICAgICAgVmVydGV4LAogICAgICAgICBGcmFnbWVudCwKLSAgICAg
ICAgQ29tcHV0ZQorICAgICAgICBDb21wdXRlLAorICAgICAgICAvLyBGSVhNRTogQWRkIGFuIGVu
dHJ5IHBvaW50IHR5cGUgZm9yIHRlc3RpbmcKICAgICB9OwogCi0gICAgRnVuY3Rpb25EZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEF0dHJpYnV0ZUJsb2NrJiYgYXR0cmlidXRlQmxv
Y2ssIE9wdGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBlbnRyeVBvaW50VHlwZSwgc3RkOjp1bmlxdWVf
cHRyPEFTVDo6VHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBQYXJhbWV0ZXJzJiYgcGFyYW1l
dGVycywgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mJiBzZW1hbnRpYykKKyAgICBGdW5jdGlvbkRl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQXR0cmlidXRlQmxvY2smJiBhdHRyaWJ1
dGVCbG9jaywgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+IGVudHJ5UG9pbnRUeXBlLCBVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB0eXBlLCBTdHJpbmcmJiBuYW1lLCBWYXJpYWJsZURlY2xh
cmF0aW9ucyYmIHBhcmFtZXRlcnMsIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+JiYgc2VtYW50aWMs
IGJvb2wgaXNPcGVyYXRvcikKICAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCiAg
ICAgICAgICwgbV9hdHRyaWJ1dGVCbG9jayhXVEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSkKICAgICAg
ICAgLCBtX2VudHJ5UG9pbnRUeXBlKGVudHJ5UG9pbnRUeXBlKQpAQCAtNTcsNiArNTksNyBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCiAgICAgICAgICwgbV9wYXJh
bWV0ZXJzKFdURk1vdmUocGFyYW1ldGVycykpCiAgICAgICAgICwgbV9zZW1hbnRpYyhXVEZNb3Zl
KHNlbWFudGljKSkKKyAgICAgICAgLCBtX2lzT3BlcmF0b3IoV1RGTW92ZShpc09wZXJhdG9yKSkK
ICAgICB7CiAgICAgfQogCkBAIC02NSwzMyArNjgsNDAgQEAgcHVibGljOgogICAgIEZ1bmN0aW9u
RGVjbGFyYXRpb24oY29uc3QgRnVuY3Rpb25EZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIEZ1
bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbkRlZmluaXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgQXR0cmlidXRlQmxvY2smIGF0dHJpYnV0ZUJsb2Nr
KCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVCbG9jazsgfQotICAgIEFTVDo6VHlwZSYgdHlwZSgpIHsg
cmV0dXJuICptX3R5cGU7IH0KLSAgICBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKCkgeyByZXR1cm4g
bV9wYXJhbWV0ZXJzOyB9CisgICAgY29uc3QgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+JiBlbnRy
eVBvaW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fZW50cnlQb2ludFR5cGU7IH0KKyAgICBjb25z
dCBBU1Q6OlVubmFtZWRUeXBlJiB0eXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgQVNUOjpVbm5hbWVkVHlwZSY+KG1fdHlwZSk7IH0KKyAgICBBU1Q6OlVubmFtZWRUeXBlJiB0
eXBlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KG1fdHlwZSk7IH0K
KyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBi
b29sIGlzQ2FzdCgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZSA9PSAib3BlcmF0b3IgY2FzdCI7IH0K
KyAgICBjb25zdCBWYXJpYWJsZURlY2xhcmF0aW9ucyYgcGFyYW1ldGVycygpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyYW1ldGVyczsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRpb25zJiBwYXJhbWV0ZXJz
KCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CiAgICAgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4m
IHNlbWFudGljKCkgeyByZXR1cm4gbV9zZW1hbnRpYzsgfQotCi0gICAgTGV4ZXI6OlRva2VuJiYg
dGFrZU9yaWdpbigpIHsgcmV0dXJuIFdURk1vdmUobV9vcmlnaW4pOyB9Ci0gICAgQXR0cmlidXRl
QmxvY2smJiB0YWtlQXR0cmlidXRlQmxvY2soKSB7IHJldHVybiBXVEZNb3ZlKG1fYXR0cmlidXRl
QmxvY2spOyB9Ci0gICAgT3B0aW9uYWw8RW50cnlQb2ludFR5cGU+JiYgdGFrZUVudHJ5UG9pbnRU
eXBlKCkgeyByZXR1cm4gV1RGTW92ZShtX2VudHJ5UG9pbnRUeXBlKTsgfQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlR5cGU+JiYgdGFrZVR5cGUoKSB7IHJldHVybiBXVEZNb3ZlKG1fdHlwZSk7
IH0KLSAgICBTdHJpbmcmJiB0YWtlTmFtZSgpIHsgcmV0dXJuIFdURk1vdmUobV9uYW1lKTsgfQot
ICAgIFBhcmFtZXRlcnMmJiB0YWtlUGFyYW1ldGVycygpIHsgcmV0dXJuIFdURk1vdmUobV9wYXJh
bWV0ZXJzKTsgfQotICAgIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+JiYgdGFrZVNlbWFudGljKCkg
eyByZXR1cm4gV1RGTW92ZShtX3NlbWFudGljKTsgfQorICAgIGJvb2wgaXNPcGVyYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1faXNPcGVyYXRvcjsgfQogCiBwcml2YXRlOgogICAgIExleGVyOjpUb2tl
biBtX29yaWdpbjsKICAgICBBdHRyaWJ1dGVCbG9jayBtX2F0dHJpYnV0ZUJsb2NrOwogICAgIE9w
dGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBtX2VudHJ5UG9pbnRUeXBlOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKKyAgICBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IG1fdHlw
ZTsKICAgICBTdHJpbmcgbV9uYW1lOwotICAgIFBhcmFtZXRlcnMgbV9wYXJhbWV0ZXJzOworICAg
IFZhcmlhYmxlRGVjbGFyYXRpb25zIG1fcGFyYW1ldGVyczsKICAgICBPcHRpb25hbDxBU1Q6OlNl
bWFudGljPiBtX3NlbWFudGljOworICAgIGJvb2wgbV9pc09wZXJhdG9yOwogfTsKIAotfQorfSAv
LyBuYW1lc3BhY2UgQVNUCiAKIH0KIAogfQogCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfRlVOQ1RJT05fREVDTEFSQVRJT04oVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUp
IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9W
YWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldI
TFNMOjpBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGlj
YXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlv
bkRlZmluaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oCmluZGV4IGE0OTA3YjBkMjk4Li4yYTRiOTgzNDc1MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RnVuY3Rpb25EZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgKQEAgLTUwLDYgKzUwLDggQEAgcHVi
bGljOgogICAgIEZ1bmN0aW9uRGVmaW5pdGlvbihjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSA9
IGRlbGV0ZTsKICAgICBGdW5jdGlvbkRlZmluaXRpb24oRnVuY3Rpb25EZWZpbml0aW9uJiYpID0g
ZGVmYXVsdDsKIAorICAgIGJvb2wgaXNGdW5jdGlvbkRlZmluaXRpb24oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CisKICAgICBCbG9jayYgYmxvY2soKSB7IHJldHVybiBtX2Jsb2Nr
OyB9CiAgICAgYm9vbCByZXN0cmljdGVkKCkgY29uc3QgeyByZXR1cm4gbV9yZXN0cmljdGVkOyB9
CiAKQEAgLTU4LDEwICs2MCwxMiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9yZXN0cmljdGVkOwog
fTsKIAotfQorfSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KIAogfQogCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1dITFNMX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OKEZ1bmN0aW9uRGVmaW5pdGlvbiwgaXNG
dW5jdGlvbkRlZmluaXRpb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJZlN0YXRlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSWZTdGF0ZW1lbnQuaAppbmRleCAx
ZWYxMGUyZTcxZC4uZmMyMGQ3NjEzYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTElmU3RhdGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSWZTdGF0ZW1lbnQuaApAQCAtMzAsNiAr
MzAsOCBAQAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4
ZXIuaCIKICNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNp
bmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzks
NyArNDEsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgSWZTdGF0ZW1lbnQgOiBwdWJsaWMg
U3RhdGVtZW50IHsKIHB1YmxpYzoKLSAgICBJZlN0YXRlbWVudChMZXhlcjo6VG9rZW4mJiBvcmln
aW4sIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIGNvbmRpdGlvbmFsLCBzdGQ6OnVuaXF1
ZV9wdHI8U3RhdGVtZW50PiYmIGJvZHksIHN0ZDo6dW5pcXVlX3B0cjxTdGF0ZW1lbnQ+JiYgZWxz
ZUJvZHkpCisgICAgSWZTdGF0ZW1lbnQoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8
RXhwcmVzc2lvbj4mJiBjb25kaXRpb25hbCwgVW5pcXVlUmVmPFN0YXRlbWVudD4mJiBib2R5LCBz
dGQ6OnVuaXF1ZV9wdHI8U3RhdGVtZW50PiYmIGVsc2VCb2R5KQogICAgICAgICA6IFN0YXRlbWVu
dChXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9jb25kaXRpb25hbChXVEZNb3ZlKGNvbmRp
dGlvbmFsKSkKICAgICAgICAgLCBtX2JvZHkoV1RGTW92ZShib2R5KSkKQEAgLTU0LDE3ICs1Niwx
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0lmU3RhdGVtZW50KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVzc2lvbiYgY29uZGl0aW9uYWwoKSB7IHJl
dHVybiAqbV9jb25kaXRpb25hbDsgfQotICAgIFN0YXRlbWVudCYgYm9keSgpIHsgcmV0dXJuICpt
X2JvZHk7IH0KKyAgICBFeHByZXNzaW9uJiBjb25kaXRpb25hbCgpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PEV4cHJlc3Npb24mPihtX2NvbmRpdGlvbmFsKTsgfQorICAgIFN0YXRlbWVudCYgYm9keSgp
IHsgcmV0dXJuIHN0YXRpY19jYXN0PFN0YXRlbWVudCY+KG1fYm9keSk7IH0KICAgICBTdGF0ZW1l
bnQqIGVsc2VCb2R5KCkgeyByZXR1cm4gbV9lbHNlQm9keS5nZXQoKTsgfQogCiBwcml2YXRlOgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2NvbmRpdGlvbmFsOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTdGF0ZW1lbnQ+IG1fYm9keTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhdGVt
ZW50PiBtX2Vsc2VCb2R5OyAvLyBudWxsYWJsZQorICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBt
X2NvbmRpdGlvbmFsOworICAgIFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+IG1fYm9keTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8U3RhdGVtZW50PiBtX2Vsc2VCb2R5OwogfTsKIAotfQorfSAvLyBuYW1lc3Bh
Y2UgQVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMSW5kZXhFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Npb24uaAppbmRleCA2YmI2YTBmMGRh
Yi4uMzM5MDFmY2E1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCkBAIC0yOSw2ICsy
OSw3IEBACiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24uaCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtMzgsNyArMzksNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xh
c3MgSW5kZXhFeHByZXNzaW9uIDogcHVibGljIFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiB7CiBw
dWJsaWM6Ci0gICAgSW5kZXhFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1
bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgYmFzZSwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+
JiYgaW5kZXgpCisgICAgSW5kZXhFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5p
cXVlUmVmPEV4cHJlc3Npb24+JiYgYmFzZSwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgaW5kZXgp
CiAgICAgICAgIDogUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSwgV1RG
TW92ZShiYXNlKSkKICAgICAgICAgLCBtX2luZGV4KFdURk1vdmUoaW5kZXgpKQogICAgIHsKQEAg
LTQ5LDE0ICs1MCwzNSBAQCBwdWJsaWM6CiAgICAgSW5kZXhFeHByZXNzaW9uKGNvbnN0IEluZGV4
RXhwcmVzc2lvbiYpID0gZGVsZXRlOwogICAgIEluZGV4RXhwcmVzc2lvbihJbmRleEV4cHJlc3Np
b24mJikgPSBkZWZhdWx0OwogCisgICAgYm9vbCBpc0luZGV4RXhwcmVzc2lvbigpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUoKSBj
b25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZygib3BlcmF0b3JbXSIs
IFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIH0KKworICAgIFN0cmluZyBzZXRG
dW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmlu
Zygib3BlcmF0b3ImW10iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICB9CisK
KyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIHJldHVybiBTdHJpbmcoIm9wZXJhdG9yW109IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCk7CisgICAgfQorCisgICAgRXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8RXhwcmVzc2lvbiY+KG1faW5kZXgpOyB9CisKIHByaXZhdGU6Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1faW5kZXg7CisgICAgVW5pcXVlUmVmPEV4cHJl
c3Npb24+IG1faW5kZXg7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCiB9CiAK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRVhQUkVTU0lPTihJbmRleEV4cHJlc3Npb24s
IGlzSW5kZXhFeHByZXNzaW9uKCkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43ZTRmZmIzMGIwMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEludGVnZXJMaXRlcmFsLmNwcApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExT
TEludGVnZXJMaXRlcmFsLmgiCisKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitpbnQ2NF90IElu
dGVnZXJMaXRlcmFsOjp2YWx1ZUZvclNlbGVjdGVkVHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1fdHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25j
YXN0PFR5cGVSZWZlcmVuY2U+KCptX3R5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIEFTU0VSVCh0
eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24gPSBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlLnJl
c29sdmVkVHlwZSgpKTsKKyAgICByZXR1cm4gbmF0aXZlVHlwZURlY2xhcmF0aW9uLmZvcm1hdFZh
bHVlRnJvbUludGVnZXIoKShtX3ZhbHVlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30K
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCmluZGV4IDY4NTRkZDI3ZjBj
Li5jYzlhMGVkNTg0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5oCkBAIC0yOCw2ICsyOCw3
IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgor
I2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWxUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhl
ci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOSwyNSArNDAsNDEgQEAgbmFtZXNwYWNl
IEFTVCB7CiBjbGFzcyBJbnRlZ2VyTGl0ZXJhbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1Ymxp
YzoKICAgICBJbnRlZ2VyTGl0ZXJhbChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIGludCB2YWx1ZSkK
LSAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgOiBFeHByZXNz
aW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQorICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKG9yaWdp
biksIHZhbHVlKQogICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgewogICAgIH0KIAogICAg
IHZpcnR1YWwgfkludGVnZXJMaXRlcmFsKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgSW50
ZWdlckxpdGVyYWwoY29uc3QgSW50ZWdlckxpdGVyYWwmKSA9IGRlZmF1bHQ7CisgICAgSW50ZWdl
ckxpdGVyYWwoY29uc3QgSW50ZWdlckxpdGVyYWwmKSA9IGRlbGV0ZTsKICAgICBJbnRlZ2VyTGl0
ZXJhbChJbnRlZ2VyTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CiAKKyAgICBJbnRlZ2VyTGl0ZXJhbCYg
b3BlcmF0b3I9KGNvbnN0IEludGVnZXJMaXRlcmFsJikgPSBkZWxldGU7CisgICAgSW50ZWdlckxp
dGVyYWwmIG9wZXJhdG9yPShJbnRlZ2VyTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBJbnRl
Z2VyTGl0ZXJhbFR5cGUmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KICAgICBpbnQgdmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAKICAgICBib29sIGlzSW50ZWdlckxpdGVyYWwo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICBJbnRlZ2VyTGl0ZXJhbCBj
bG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICBJbnRlZ2VyTGl0ZXJhbCByZXN1bHQoTGV4ZXI6
OlRva2VuKG9yaWdpbigpKSwgbV92YWx1ZSk7CisgICAgICAgIGlmIChyZXN1bHQubV90eXBlLnJl
c29sdmVkVHlwZSgpKQorICAgICAgICAgICAgcmVzdWx0Lm1fdHlwZS5yZXNvbHZlKHJlc3VsdC5t
X3R5cGUucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIGludDY0X3QgdmFsdWVGb3JTZWxlY3RlZFR5cGUoKSBjb25zdDsKKwogcHJp
dmF0ZToKKyAgICBJbnRlZ2VyTGl0ZXJhbFR5cGUgbV90eXBlOwogICAgIGludCBtX3ZhbHVlOwog
fTsKIAotfQorfSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJM
aXRlcmFsVHlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmY4
MDkzMGI2MTgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmNwcApAQCAtMCwwICsxLDc1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFsVHlwZS5oIgorCisjaW5jbHVkZSAiV0hMU0xJ
bmZlclR5cGVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsK
KworbmFtZXNwYWNlIEFTVCB7CisKK0ludGVnZXJMaXRlcmFsVHlwZTo6SW50ZWdlckxpdGVyYWxU
eXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgaW50IHZhbHVlKQorICAgIDogbV92YWx1ZSh2YWx1
ZSkKKyAgICAsIG1fcHJlZmVycmVkVHlwZShtYWtlVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+KFdU
Rk1vdmUob3JpZ2luKSwgU3RyaW5nKCJpbnQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwgVHlwZUFyZ3VtZW50cygpKSkKK3sKK30KKworSW50ZWdlckxpdGVyYWxUeXBlOjp+SW50ZWdl
ckxpdGVyYWxUeXBlKCkgPSBkZWZhdWx0OworCitib29sIEludGVnZXJMaXRlcmFsVHlwZTo6Y2Fu
UmVzb2x2ZShjb25zdCBUeXBlJiB0eXBlKSBjb25zdAoreworICAgIGlmICghaXM8TmFtZWRUeXBl
Pih0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRv
d25jYXN0PE5hbWVkVHlwZT4odHlwZSk7CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVjbGFyYXRp
b24+KG5hbWVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYXRpdmVU
eXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlw
ZSk7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNOdW1iZXIoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmNhblJlcHJlc2Vu
dEludGVnZXIoKShtX3ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0
cnVlOworfQorCit1bnNpZ25lZCBJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNvbnZlcnNpb25Db3N0KGNv
bnN0IFVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgY29uc3QKK3sKKyAgICBpZiAobWF0Y2hlcyh1
bm5hbWVkVHlwZSwgc3RhdGljX2Nhc3Q8Y29uc3QgVHlwZVJlZmVyZW5jZSY+KG1fcHJlZmVycmVk
VHlwZSkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsKK30KKworfSAvLyBuYW1l
c3BhY2UgQVNUCisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsVHlwZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxU
eXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhhY2FmMmU5Zjhj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNM
UmVzb2x2YWJsZVR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNl
IFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIFR5cGVSZWZlcmVuY2U7CisKK2Ns
YXNzIEludGVnZXJMaXRlcmFsVHlwZSA6IHB1YmxpYyBSZXNvbHZhYmxlVHlwZSB7CitwdWJsaWM6
CisgICAgSW50ZWdlckxpdGVyYWxUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgaW50IHZhbHVl
KTsKKworICAgIHZpcnR1YWwgfkludGVnZXJMaXRlcmFsVHlwZSgpOworCisgICAgSW50ZWdlckxp
dGVyYWxUeXBlKGNvbnN0IEludGVnZXJMaXRlcmFsVHlwZSYpID0gZGVsZXRlOworICAgIEludGVn
ZXJMaXRlcmFsVHlwZShJbnRlZ2VyTGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgSW50
ZWdlckxpdGVyYWxUeXBlJiBvcGVyYXRvcj0oY29uc3QgSW50ZWdlckxpdGVyYWxUeXBlJikgPSBk
ZWxldGU7CisgICAgSW50ZWdlckxpdGVyYWxUeXBlJiBvcGVyYXRvcj0oSW50ZWdlckxpdGVyYWxU
eXBlJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNJbnRlZ2VyTGl0ZXJhbFR5cGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBUeXBlUmVmZXJlbmNlJiBwcmVmZXJy
ZWRUeXBlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZVJlZmVyZW5jZSY+KG1fcHJlZmVycmVk
VHlwZSk7IH0KKworICAgIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdW5zaWduZWQgY29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25z
dCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBpbnQgbV92YWx1ZTsKKyAgICAvLyBUaGlzIGlz
IGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCisg
ICAgLy8gQ29uc3RhbnRFeHByZXNzaW9uIC0+IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2Ug
LT4gVHlwZUFyZ3VtZW50cyAtPiBDb25zdGFudEV4cHJlc3Npb24KKyAgICBVbmlxdWVSZWY8VHlw
ZVJlZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgQVNUCisK
K30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1JFU09MVkFCTEVfVFlQRShJ
bnRlZ2VyTGl0ZXJhbFR5cGUsIGlzSW50ZWdlckxpdGVyYWxUeXBlKCkpCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTG9n
aWNhbEV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTExvZ2ljYWxFeHByZXNzaW9uLmgKaW5kZXggZDk5NmZhNWY1ZDQuLjc4NzE4YmRmYTk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xMb2dpY2FsRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTExvZ2ljYWxFeHByZXNzaW9uLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAog
I2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNp
bmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzgs
MTIgKzM5LDEyIEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBMb2dpY2FsRXhwcmVzc2lvbiA6
IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIFR5cGUgeworICAg
IGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgewogICAgICAgICBBbmQsCiAgICAgICAgIE9yCiAg
ICAgfTsKIAotICAgIExvZ2ljYWxFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVHlw
ZSB0eXBlLCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4mJiBsZWZ0LCBzdGQ6OnVuaXF1ZV9w
dHI8RXhwcmVzc2lvbj4mJiByaWdodCkKKyAgICBMb2dpY2FsRXhwcmVzc2lvbihMZXhlcjo6VG9r
ZW4mJiBvcmlnaW4sIFR5cGUgdHlwZSwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgbGVmdCwgVW5p
cXVlUmVmPEV4cHJlc3Npb24+JiYgcmlnaHQpCiAgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3Zl
KG9yaWdpbikpCiAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgICAgICwgbV9sZWZ0KFdURk1v
dmUobGVmdCkpCkBAIC02MCwxNiArNjEsMTYgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0xvZ2lj
YWxFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhw
cmVzc2lvbiYgbGVmdCgpIHsgcmV0dXJuICptX2xlZnQ7IH0KLSAgICBFeHByZXNzaW9uJiByaWdo
dCgpIHsgcmV0dXJuICptX3JpZ2h0OyB9CisgICAgRXhwcmVzc2lvbiYgbGVmdCgpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PEV4cHJlc3Npb24mPihtX2xlZnQpOyB9CisgICAgRXhwcmVzc2lvbiYgcmln
aHQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxFeHByZXNzaW9uJj4obV9yaWdodCk7IH0KIAogcHJp
dmF0ZToKICAgICBUeXBlIG1fdHlwZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4g
bV9sZWZ0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX3JpZ2h0OworICAgIFVu
aXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xlZnQ7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1f
cmlnaHQ7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsTm90RXhw
cmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TG9naWNhbE5vdEV4cHJlc3Npb24uaAppbmRleCAyZDRmMGNiODYxOS4uZGVjYWQzNWI1MjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTExv
Z2ljYWxOb3RFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaApAQCAtMjksNiArMjksNyBAQAog
CiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgor
I2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0z
OCw3ICszOSw3IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBMb2dpY2FsTm90RXhwcmVzc2lv
biA6IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBMb2dpY2FsTm90RXhwcmVzc2lv
bihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIG9w
ZXJhbmQpCisgICAgTG9naWNhbE5vdEV4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBV
bmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBvcGVyYW5kKQogICAgICAgICA6IEV4cHJlc3Npb24oV1RG
TW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fb3BlcmFuZChXVEZNb3ZlKG9wZXJhbmQpKQogICAg
IHsKQEAgLTUxLDEzICs1MiwxMyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzTG9naWNhbE5vdEV4
cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBFeHByZXNz
aW9uJiBvcGVyYW5kKCkgeyByZXR1cm4gKm1fb3BlcmFuZDsgfQorICAgIEV4cHJlc3Npb24mIG9w
ZXJhbmQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxFeHByZXNzaW9uJj4obV9vcGVyYW5kKTsgfQog
CiBwcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX29wZXJhbmQ7Cisg
ICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fb3BlcmFuZDsKIH07CiAKLX0KK30gLy8gbmFtZXNw
YWNlIEFTVAogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4
cHJlc3Npb24uaAppbmRleCA5YWI3OTk4M2VmZi4uNjY4OGY4N2YzOTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKQEAgLTI5LDYgKzI5LDcg
QEAKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtMzgsNyArMzksNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAogY2xhc3MgTWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBNYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVf
cHRyPEV4cHJlc3Npb24+JiYgbFZhbHVlKQorICAgIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsVmFsdWUp
CiAgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9sVmFs
dWUoV1RGTW92ZShsVmFsdWUpKQogICAgIHsKQEAgLTUxLDEzICs1MiwxMyBAQCBwdWJsaWM6CiAK
ICAgICBib29sIGlzTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuICpt
X2xWYWx1ZTsgfQorICAgIEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0
PEV4cHJlc3Npb24mPihtX2xWYWx1ZSk7IH0KIAogcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8RXhwcmVzc2lvbj4gbV9sVmFsdWU7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbFZh
bHVlOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xN
YWtlUG9pbnRlckV4cHJlc3Npb24uaAppbmRleCAyYTZiODUxMGUzMS4uMGRhNGJlNTg5ZGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1h
a2VQb2ludGVyRXhwcmVzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oCkBAIC0yOSw2ICsyOSw3IEBA
CiAKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgi
CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTM4LDcgKzM5LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIE1ha2VQb2ludGVyRXhwcmVz
c2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBNYWtlUG9pbnRlckV4cHJl
c3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4m
JiBsVmFsdWUpCisgICAgTWFrZVBvaW50ZXJFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdp
biwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgbFZhbHVlKQogICAgICAgICA6IEV4cHJlc3Npb24o
V1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fbFZhbHVlKFdURk1vdmUobFZhbHVlKSkKICAg
ICB7CkBAIC01MSwxMyArNTIsMTMgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc01ha2VQb2ludGVy
RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEV4cHJl
c3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuICptX2xWYWx1ZTsgfQorICAgIEV4cHJlc3Npb24mIGxW
YWx1ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEV4cHJlc3Npb24mPihtX2xWYWx1ZSk7IH0KIAog
cHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9sVmFsdWU7CisgICAg
VW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbFZhbHVlOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2Ug
QVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTmFtZWRUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xOYW1lZFR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uZjkwZGJlZjNjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUuaApAQCAtMCwwICsxLDg0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5j
bHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMTm9kZS5oIgorI2luY2x1ZGUgIldI
TFNMVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFz
cyBOYW1lZFR5cGUgOiBwdWJsaWMgVHlwZSB7CitwdWJsaWM6CisgICAgTmFtZWRUeXBlKExleGVy
OjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSkKKyAgICAgICAgOiBtX29yaWdpbihXVEZN
b3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgfk5hbWVkVHlwZSgpID0gZGVmYXVsdDsKKworICAgIE5hbWVkVHlw
ZShjb25zdCBOYW1lZFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBOYW1lZFR5cGUoTmFtZWRUeXBlJiYp
ID0gZGVmYXVsdDsKKworICAgIGNvbnN0IExleGVyOjpUb2tlbiYgb3JpZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcmlnaW47IH0KKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0K
KworICAgIGJvb2wgaXNOYW1lZFR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CisgICAgdmlydHVhbCBib29sIGlzVHlwZURlZmluaXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1N0cnVjdHVyZURlZmluaXRpb24oKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0aW9uRGVmaW5pdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzTmF0aXZlVHlwZURl
Y2xhcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgY29uc3Qg
VHlwZSYgdW5pZnlOb2RlKCkgY29uc3QgeyByZXR1cm4gKnRoaXM7IH0KKyAgICB2aXJ0dWFsIFR5
cGUmIHVuaWZ5Tm9kZSgpIHsgcmV0dXJuICp0aGlzOyB9CisKK3ByaXZhdGU6CisgICAgTGV4ZXI6
OlRva2VuIG1fb3JpZ2luOworICAgIFN0cmluZyBtX25hbWU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBBU1QKKworfQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9O
QU1FRF9UWVBFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OldITFNMOjpBU1Q6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAg
IHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpXSExTTDo6QVNUOjpOYW1lZFR5cGUm
IHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9UWVBFKE5hbWVkVHlwZSwg
aXNOYW1lZFR5cGUoKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uLmgKaW5kZXggMDEwZTZlYmE3MDAuLjA2ZDhlMzYyMjNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oCkBAIC0zNyw4ICszNyw4IEBA
IG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHVi
bGljIEZ1bmN0aW9uRGVjbGFyYXRpb24gewogcHVibGljOgotICAgIE5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBdHRyaWJ1dGVCbG9jayYmIGF0dHJpYnV0
ZUJsb2NrLCBPcHRpb25hbDxFbnRyeVBvaW50VHlwZT4gZW50cnlQb2ludFR5cGUsIHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgUGFyYW1ldGVycyYmIHBh
cmFtZXRlcnMsIE9wdGlvbmFsPEFTVDo6U2VtYW50aWM+JiYgc2VtYW50aWMsIGJvb2wgcmVzdHJp
Y3RlZCkKLSAgICAgICAgOiBGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUob3JpZ2luKSwgV1RG
TW92ZShhdHRyaWJ1dGVCbG9jayksIFdURk1vdmUoZW50cnlQb2ludFR5cGUpLCBXVEZNb3ZlKHR5
cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEZNb3ZlKHNlbWFudGlj
KSkKKyAgICBOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24mJiBm
dW5jdGlvbkRlY2xhcmF0aW9uLCBib29sIHJlc3RyaWN0ZWQpCisgICAgICAgIDogRnVuY3Rpb25E
ZWNsYXJhdGlvbihXVEZNb3ZlKGZ1bmN0aW9uRGVjbGFyYXRpb24pKQogICAgICAgICAsIG1fcmVz
dHJpY3RlZChyZXN0cmljdGVkKQogICAgIHsKICAgICB9CkBAIC00OCwxNiArNDgsMjAgQEAgcHVi
bGljOgogICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oY29uc3QgTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oTmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKKyAgICBib29sIGlzTmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwog
ICAgIGJvb2wgcmVzdHJpY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3RlZDsgfQogCiBw
cml2YXRlOgogICAgIGJvb2wgbV9yZXN0cmljdGVkOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2Ug
QVNUCiAKIH0KIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0ZVTkNUSU9OX0RF
Q0xBUkFUSU9OKE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIGlzTmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbigpKQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9u
LmgKaW5kZXggMzIwYWJjM2M0NzUuLmU3OTgwYjRmNDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRp
dmVUeXBlRGVjbGFyYXRpb24uaApAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUp
CiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5j
bHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKICNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0zOCwxMSArMzgsMTAgQEAgbmFt
ZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIE5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA6IHB1
YmxpYyBOYW1lZFR5cGUgewogcHVibGljOgogICAgIE5hdGl2ZVR5cGVEZWNsYXJhdGlvbihMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIFR5cGVBcmd1bWVudHMmJiB0eXBlQXJn
dW1lbnRzKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBt
X25hbWUoV1RGTW92ZShuYW1lKSkKKyAgICAgICAgOiBOYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4p
LCBXVEZNb3ZlKG5hbWUpKQogICAgICAgICAsIG1fdHlwZUFyZ3VtZW50cyhXVEZNb3ZlKHR5cGVB
cmd1bWVudHMpKQogICAgIHsKICAgICB9CkBAIC01MiwyNCArNTEsNjcgQEAgcHVibGljOgogICAg
IE5hdGl2ZVR5cGVEZWNsYXJhdGlvbihjb25zdCBOYXRpdmVUeXBlRGVjbGFyYXRpb24mKSA9IGRl
bGV0ZTsKICAgICBOYXRpdmVUeXBlRGVjbGFyYXRpb24oTmF0aXZlVHlwZURlY2xhcmF0aW9uJiYp
ID0gZGVmYXVsdDsKIAorICAgIGJvb2wgaXNOYXRpdmVUeXBlRGVjbGFyYXRpb24oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBjb25zdCBTdHJpbmcmIG5hbWUoKSBjb25z
dCB7IHJldHVybiBtX25hbWU7IH0KKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25hbWU7
IH0KICAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gbV90eXBlQXJn
dW1lbnRzOyB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xvbmUoKSBjb25zdCBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KKyAgICBib29sIGlzSW50KCkgY29uc3QgeyByZXR1cm4gbV9pc0lu
dDsgfQorICAgIGJvb2wgaXNOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2lzTnVtYmVyOyB9Cisg
ICAgYm9vbCBpc0Zsb2F0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc0Zsb2F0aW5nOyB9CisgICAg
Ym9vbCBpc1ZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faXNWZWN0b3I7IH0KKyAgICBib29sIGlz
TWF0cml4KCkgY29uc3QgeyByZXR1cm4gbV9pc01hdHJpeDsgfQorICAgIGJvb2wgaXNUZXh0dXJl
KCkgY29uc3QgeyByZXR1cm4gbV9pc1RleHR1cmU7IH0KKyAgICBib29sIGlzU2lnbmVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc1NpZ25lZDsgfQorICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChp
bnQpPiYgY2FuUmVwcmVzZW50SW50ZWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fY2FuUmVwcmVzZW50
SW50ZWdlcjsgfQorICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbCh1bnNpZ25lZCk+JiBjYW5S
ZXByZXNlbnRVbnNpZ25lZEludGVnZXIoKSBjb25zdCB7IHJldHVybiBtX2NhblJlcHJlc2VudFVu
c2lnbmVkSW50ZWdlcjsgfQorICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChmbG9hdCk+JiBj
YW5SZXByZXNlbnRGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FuUmVwcmVzZW50RmxvYXQ7IH0K
KyAgICBjb25zdCBzdGQ6OmZ1bmN0aW9uPGludDY0X3QoaW50NjRfdCk+JiBzdWNjZXNzb3IoKSBj
b25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcjsgfQorICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248aW50
NjRfdChpbnQpPiYgZm9ybWF0VmFsdWVGcm9tSW50ZWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9y
bWF0VmFsdWVGcm9tSW50ZWdlcjsgfQorICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248aW50NjRfdCh1
bnNpZ25lZCk+JiBmb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIoKSBjb25zdCB7IHJldHVy
biBtX2Zvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcjsgfQorICAgIHZvaWQgaXRlcmF0ZUFs
bFZhbHVlcyhjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woaW50NjRfdCk+JiBjYWxsYmFjaykgeyBt
X2l0ZXJhdGVBbGxWYWx1ZXMoY2FsbGJhY2spOyB9CisKKyAgICB2b2lkIHNldElzSW50KCkgeyBt
X2lzSW50ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0SXNOdW1iZXIoKSB7IG1faXNOdW1iZXIgPSB0
cnVlOyB9CisgICAgdm9pZCBzZXRJc0Zsb2F0aW5nKCkgeyBtX2lzRmxvYXRpbmcgPSB0cnVlOyB9
CisgICAgdm9pZCBzZXRJc1ZlY3RvcigpIHsgbV9pc1ZlY3RvciA9IHRydWU7IH0KKyAgICB2b2lk
IHNldElzTWF0cml4KCkgeyBtX2lzTWF0cml4ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0SXNUZXh0
dXJlKCkgeyBtX2lzVGV4dHVyZSA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzU2lnbmVkKCkgeyBt
X2lzU2lnbmVkID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihzdGQ6
OmZ1bmN0aW9uPGJvb2woaW50KT4mJiBjYW5SZXByZXNlbnQpIHsgbV9jYW5SZXByZXNlbnRJbnRl
Z2VyID0gV1RGTW92ZShjYW5SZXByZXNlbnQpOyB9CisgICAgdm9pZCBzZXRDYW5SZXByZXNlbnRV
bnNpZ25lZEludGVnZXIoc3RkOjpmdW5jdGlvbjxib29sKHVuc2lnbmVkKT4mJiBjYW5SZXByZXNl
bnQpIHsgbV9jYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIgPSBXVEZNb3ZlKGNhblJlcHJlc2Vu
dCk7IH0KKyAgICB2b2lkIHNldENhblJlcHJlc2VudEZsb2F0KHN0ZDo6ZnVuY3Rpb248Ym9vbChm
bG9hdCk+JiYgY2FuUmVwcmVzZW50KSB7IG1fY2FuUmVwcmVzZW50RmxvYXQgPSBXVEZNb3ZlKGNh
blJlcHJlc2VudCk7IH0KKyAgICB2b2lkIHNldFN1Y2Nlc3NvcihzdGQ6OmZ1bmN0aW9uPGludDY0
X3QoaW50NjRfdCk+JiYgc3VjY2Vzc29yKSB7IG1fc3VjY2Vzc29yID0gV1RGTW92ZShzdWNjZXNz
b3IpOyB9CisgICAgdm9pZCBzZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKHN0ZDo6ZnVuY3Rpb248
aW50NjRfdChpbnQpPiYmIGZvcm1hdFZhbHVlKSB7IG1fZm9ybWF0VmFsdWVGcm9tSW50ZWdlciA9
IFdURk1vdmUoZm9ybWF0VmFsdWUpOyB9CisgICAgdm9pZCBzZXRGb3JtYXRWYWx1ZUZyb21VbnNp
Z25lZEludGVnZXIoc3RkOjpmdW5jdGlvbjxpbnQ2NF90KHVuc2lnbmVkKT4mJiBmb3JtYXRWYWx1
ZSkgeyBtX2Zvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlciA9IFdURk1vdmUoZm9ybWF0VmFs
dWUpOyB9CisgICAgdm9pZCBzZXRJdGVyYXRlQWxsVmFsdWVzKHN0ZDo6ZnVuY3Rpb248dm9pZChj
b25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woaW50NjRfdCk+Jik+JiYgaXRlcmF0ZUFsbFZhbHVlcykg
eyBtX2l0ZXJhdGVBbGxWYWx1ZXMgPSBXVEZNb3ZlKGl0ZXJhdGVBbGxWYWx1ZXMpOyB9CiAKIHBy
aXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIFN0cmluZyBtX25hbWU7CiAg
ICAgVHlwZUFyZ3VtZW50cyBtX3R5cGVBcmd1bWVudHM7CisgICAgc3RkOjpmdW5jdGlvbjxib29s
KGludCk+IG1fY2FuUmVwcmVzZW50SW50ZWdlcjsKKyAgICBzdGQ6OmZ1bmN0aW9uPGJvb2wodW5z
aWduZWQpPiBtX2NhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcjsKKyAgICBzdGQ6OmZ1bmN0aW9u
PGJvb2woZmxvYXQpPiBtX2NhblJlcHJlc2VudEZsb2F0OworICAgIHN0ZDo6ZnVuY3Rpb248aW50
NjRfdChpbnQ2NF90KT4gbV9zdWNjZXNzb3I7CisgICAgc3RkOjpmdW5jdGlvbjxpbnQ2NF90KGlu
dCk+IG1fZm9ybWF0VmFsdWVGcm9tSW50ZWdlcjsKKyAgICBzdGQ6OmZ1bmN0aW9uPGludDY0X3Qo
dW5zaWduZWQpPiBtX2Zvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcjsKKyAgICBzdGQ6OmZ1
bmN0aW9uPHZvaWQoY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGludDY0X3QpPiYpPiBtX2l0ZXJh
dGVBbGxWYWx1ZXM7CisgICAgYm9vbCBtX2lzSW50IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNO
dW1iZXIgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0Zsb2F0aW5nIHsgZmFsc2UgfTsKKyAgICBi
b29sIG1faXNWZWN0b3IgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc01hdHJpeCB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2lzVGV4dHVyZSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzU2lnbmVkIHsg
ZmFsc2UgfTsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIEFTVAogCiB9CiAKIH0KIAorU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19XSExTTF9OQU1FRF9UWVBFKE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwg
aXNOYXRpdmVUeXBlRGVjbGFyYXRpb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOb2RlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOb2RlLmgKaW5kZXggZjZjNGYwMDYw
YzAuLmMxNzkwYjVlMWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMTm9kZS5oCkBAIC00MiwxMCArNDIsMTMgQEAgcHVibGljOgogICAg
IGV4cGxpY2l0IE5vZGUoY29uc3QgTm9kZSYpID0gZGVmYXVsdDsKICAgICBOb2RlKE5vZGUmJikg
PSBkZWZhdWx0OwogCisgICAgTm9kZSYgb3BlcmF0b3I9KGNvbnN0IE5vZGUmKSA9IGRlZmF1bHQ7
CisgICAgTm9kZSYgb3BlcmF0b3I9KE5vZGUmJikgPSBkZWZhdWx0OworCiBwcml2YXRlOgogfTsK
IAotfQorfSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWwuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgKaW5kZXgg
ZWU2NDdjZjlkMzkuLjA1MDI3MmZlNjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmgKQEAgLTI5LDYg
KzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNM
TGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFsVHlwZS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTQ1LDE1ICs0NiwyOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5O
dWxsTGl0ZXJhbCgpID0gZGVmYXVsdDsKIAotICAgIGV4cGxpY2l0IE51bGxMaXRlcmFsKGNvbnN0
IE51bGxMaXRlcmFsJikgPSBkZWZhdWx0OworICAgIE51bGxMaXRlcmFsKGNvbnN0IE51bGxMaXRl
cmFsJikgPSBkZWxldGU7CiAgICAgTnVsbExpdGVyYWwoTnVsbExpdGVyYWwmJikgPSBkZWZhdWx0
OwogCisgICAgTnVsbExpdGVyYWwmIG9wZXJhdG9yPShjb25zdCBOdWxsTGl0ZXJhbCYpID0gZGVs
ZXRlOworICAgIE51bGxMaXRlcmFsJiBvcGVyYXRvcj0oTnVsbExpdGVyYWwmJikgPSBkZWZhdWx0
OworCisgICAgTnVsbExpdGVyYWxUeXBlJiB0eXBlKCkgeyByZXR1cm4gbV90eXBlOyB9CisKICAg
ICBib29sIGlzTnVsbExpdGVyYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAK
KyAgICBOdWxsTGl0ZXJhbCBjbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICBhdXRvIHJlc3Vs
dCA9IE51bGxMaXRlcmFsKExleGVyOjpUb2tlbihvcmlnaW4oKSkpOworICAgICAgICBpZiAocmVz
dWx0Lm1fdHlwZS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUucmVz
b2x2ZShyZXN1bHQubV90eXBlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKIHByaXZhdGU6CisgICAgTnVsbExpdGVyYWxUeXBlIG1fdHlw
ZTsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIEFTVAogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0
ZXJhbFR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zOWMx
MWZkNTRlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5jcHAKQEAgLTAsMCArMSw2MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCIKKworI2luY2x1ZGUgIldITFNMUmVmZXJlbmNl
VHlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25h
bWVzcGFjZSBBU1QgeworCitib29sIE51bGxMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShjb25zdCBU
eXBlJiB0eXBlKSBjb25zdAoreworICAgIGlmICghaXM8VW5uYW1lZFR5cGU+KHR5cGUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxVbm5h
bWVkVHlwZT4odHlwZSk7CisgICAgaWYgKCFpczxSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordW5zaWduZWQg
TnVsbExpdGVyYWxUeXBlOjpjb252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0
Cit7CisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi42NjBhNzc2OTBkZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsVHlwZS5oCkBA
IC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJXSExTTFJlc29sdmFibGVUeXBlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNz
IE51bGxMaXRlcmFsVHlwZSA6IHB1YmxpYyBSZXNvbHZhYmxlVHlwZSB7CitwdWJsaWM6CisgICAg
TnVsbExpdGVyYWxUeXBlKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCB+TnVsbExpdGVyYWxU
eXBlKCkgPSBkZWZhdWx0OworCisgICAgTnVsbExpdGVyYWxUeXBlKGNvbnN0IE51bGxMaXRlcmFs
VHlwZSYpID0gZGVsZXRlOworICAgIE51bGxMaXRlcmFsVHlwZShOdWxsTGl0ZXJhbFR5cGUmJikg
PSBkZWZhdWx0OworCisgICAgTnVsbExpdGVyYWxUeXBlJiBvcGVyYXRvcj0oY29uc3QgTnVsbExp
dGVyYWxUeXBlJikgPSBkZWxldGU7CisgICAgTnVsbExpdGVyYWxUeXBlJiBvcGVyYXRvcj0oTnVs
bExpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNOdWxsTGl0ZXJhbFR5cGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIGNhblJlc29sdmUo
Y29uc3QgVHlwZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0
KGNvbnN0IFVubmFtZWRUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cit9OworCit9
IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hM
U0xfUkVTT0xWQUJMRV9UWVBFKE51bGxMaXRlcmFsVHlwZSwgaXNOdWxsTGl0ZXJhbFR5cGUoKSkK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0
ZS5oCmluZGV4IDgzN2U4NjY4ZTJjLi44Yzg4ZjJkNzc0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0
cmlidXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgKQEAgLTYwLDcgKzYwLDcgQEAgcHJpdmF0
ZToKICAgICB1bnNpZ25lZCBtX2RlcHRoOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgQVNUCiAK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUG9pbnRlclR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKaW5kZXggMTUyOTQyNmEyZWQuLjA1ZTNiZTY1NjlhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQ
b2ludGVyVHlwZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFBvaW50ZXJUeXBlLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNM
TGV4ZXIuaCIKICNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlIDx3dGYv
VW5pcXVlUmVmLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTM5LDggKzQwLDggQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFBv
aW50ZXJUeXBlIDogcHVibGljIFJlZmVyZW5jZVR5cGUgewogcHVibGljOgotICAgIFBvaW50ZXJU
eXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgYWRkcmVzc1NwYWNlLCBzdGQ6OnVu
aXF1ZV9wdHI8VHlwZT4gZWxlbWVudFR5cGUpCi0gICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZN
b3ZlKG9yaWdpbiksIFdURk1vdmUoYWRkcmVzc1NwYWNlKSwgV1RGTW92ZShlbGVtZW50VHlwZSkp
CisgICAgUG9pbnRlclR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBBZGRyZXNzU3BhY2UgYWRk
cmVzc1NwYWNlLCBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IGVsZW1lbnRUeXBlKQorICAgICAgICA6
IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUoZWxl
bWVudFR5cGUpKQogICAgIHsKICAgICB9CiAKQEAgLTQ5LDIyICs1MCwyMiBAQCBwdWJsaWM6CiAg
ICAgUG9pbnRlclR5cGUoY29uc3QgUG9pbnRlclR5cGUmKSA9IGRlbGV0ZTsKICAgICBQb2ludGVy
VHlwZShQb2ludGVyVHlwZSYmKSA9IGRlZmF1bHQ7CiAKLSAgICBib29sIGlzUG9pbnRlclR5cGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNQb2ludGVyVHlw
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0
cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgVW5pcXVlUmVmPFVubmFtZWRUeXBl
PiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgU3RyaW5nKGFkZHJl
c3NTcGFjZSgpKSwgZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmlxdWVSZWY8UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIGFkZHJlc3NTcGFj
ZSgpLCBlbGVtZW50VHlwZSgpLmNsb25lKCkpOwogICAgIH0KIAogcHJpdmF0ZToKIH07CiAKLX0K
K30gLy8gbmFtZXNwYWNlIEFTVAogCiB9CiAKIH0KIAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19X
SExTTF9UWVBFKFBvaW50ZXJUeXBlLCBpc1BvaW50ZXJUeXBlKCkpCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShQb2ludGVyVHlwZSwgaXNQb2ludGVyVHlwZSgpKQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgKaW5k
ZXggYmEzOGE1YzAxZWEuLmVmNzQ1YzRmZGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24uaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiV0hMU0xF
eHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCw3ICszOSw3IEBAIG5hbWVz
cGFjZSBBU1QgewogCiBjbGFzcyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24gOiBwdWJsaWMgRXhw
cmVzc2lvbiB7CiBwdWJsaWM6Ci0gICAgUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKExleGVyOjpU
b2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgYmFzZSkKKyAgICBQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8
RXhwcmVzc2lvbj4mJiBiYXNlKQogICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4p
KQogICAgICAgICAsIG1fYmFzZShXVEZNb3ZlKGJhc2UpKQogICAgIHsKQEAgLTUxLDEzICs1Miwz
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVzc2lvbiYgYmFzZSgpIHsg
cmV0dXJuICptX2Jhc2U7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgc2V0RnVuY3Rpb25OYW1lKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgU3RyaW5nIGFuZEZ1bmN0aW9uTmFtZSgpIGNvbnN0ID0gMDsKKworICAg
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYg
cG9zc2libGVHZXRPdmVybG9hZHMoKSB7IHJldHVybiBtX3Bvc3NpYmxlR2V0T3ZlcmxvYWRzOyB9
CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4s
IDE+JiBwb3NzaWJsZVNldE92ZXJsb2FkcygpIHsgcmV0dXJuIG1fcG9zc2libGVTZXRPdmVybG9h
ZHM7IH0KKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0
aW9uPiwgMT4mIHBvc3NpYmxlQW5kT3ZlcmxvYWRzKCkgeyByZXR1cm4gbV9wb3NzaWJsZUFuZE92
ZXJsb2FkczsgfQorCisgICAgdm9pZCBzZXRQb3NzaWJsZUdldE92ZXJsb2Fkcyhjb25zdCBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJs
b2FkcykKKyAgICB7CisgICAgICAgIG1fcG9zc2libGVHZXRPdmVybG9hZHMgPSBvdmVybG9hZHM7
CisgICAgfQorICAgIHZvaWQgc2V0UG9zc2libGVTZXRPdmVybG9hZHMoY29uc3QgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9hZHMp
CisgICAgeworICAgICAgICBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzID0gb3ZlcmxvYWRzOworICAg
IH0KKyAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRzKQorICAg
IHsKKyAgICAgICAgbV9wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKKyAgICB9CisK
KyAgICBFeHByZXNzaW9uJiBiYXNlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RXhwcmVzc2lvbiY+
KG1fYmFzZSk7IH0KIAogcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4g
bV9iYXNlOworICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2Jhc2U7CisgICAgVmVjdG9yPHN0
ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVH
ZXRPdmVybG9hZHM7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25E
ZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVTZXRPdmVybG9hZHM7CisgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+IG1fcG9zc2libGVBbmRP
dmVybG9hZHM7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xRdWFsaWZpZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFF1YWxpZmll
ci5oCmluZGV4IDMzM2YwNTIyNDQxLi5mZjY1Y2QwZjkzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUXVhbGlmaWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUXVhbGlmaWVyLmgKQEAg
LTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWVu
dW0gY2xhc3MgUXVhbGlmaWVyIHsKK2VudW0gY2xhc3MgUXVhbGlmaWVyIDogdWludDhfdCB7CiAg
ICAgTm9pbnRlcnBvbGF0aW9uLAogICAgIE5vcGVyc3BlY3RpdmUsCiAgICAgVW5pZm9ybSwKQEAg
LTQ2LDkgKzQ2LDkgQEAgZW51bSBjbGFzcyBRdWFsaWZpZXIgewogICAgIFNhbXBsZQogfTsKIAot
dHlwZWRlZiBWZWN0b3I8UXVhbGlmaWVyPiBRdWFsaWZpZXJzOwordXNpbmcgUXVhbGlmaWVycyA9
IFZlY3RvcjxRdWFsaWZpZXI+OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKaW5kZXggYTRjMTRjZTFj
ZjMuLmJlMjEyNjUzZjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5oCkBAIC0yNywxMCArMjcsMTIgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNp
bmNsdWRlICJXSExTTEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJX
SExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIK
ICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDksMTIgKzUxLDkgQEAgbmFtZXNwYWNlIEFTVCB7CiAg
Ki8KIGNsYXNzIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24gOiBwdWJsaWMgRXhwcmVzc2lvbiB7
CiBwdWJsaWM6Ci0gICAgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBv
cmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBsVmFsdWUpCi0gICAgICAgIDogRXhw
cmVzc2lvbihMZXhlcjo6VG9rZW4ob3JpZ2luKSkKLSAgICAgICAgLCBtX2xWYWx1ZShXVEZNb3Zl
KGxWYWx1ZSkpCi0gICAgICAgICwgbV9vbGRWYWx1ZShMZXhlcjo6VG9rZW4ob3JpZ2luKSkKLSAg
ICAgICAgLCBtX25ld1ZhbHVlKFdURk1vdmUob3JpZ2luKSkKKyAgICBzdGF0aWMgVW5pcXVlUmVm
PFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24+IGNyZWF0ZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4s
IFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBsVmFsdWUpCiAgICAgeworICAgICAgICByZXR1cm4gbWFr
ZVVuaXF1ZVJlZjxSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPihXVEZNb3ZlKG9yaWdpbiksIFdU
Rk1vdmUobFZhbHVlKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB+UmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbigpID0gZGVmYXVsdDsKQEAgLTYyLDQ1ICs2MSw1NSBAQCBwdWJsaWM6CiAgICAgUmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihjb25zdCBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJikg
PSBkZWxldGU7CiAgICAgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uJiYpID0gZGVmYXVsdDsKIAotICAgIHZvaWQgc2V0TmV3VmFsdWVFeHByZXNzaW9u
KHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIG5ld1ZhbHVlRXhwcmVzc2lvbikKKyAgICB2
b2lkIHNldE5ld1ZhbHVlRXhwcmVzc2lvbihVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBuZXdWYWx1
ZUV4cHJlc3Npb24pCiAgICAgewotICAgICAgICBtX25ld1ZhbHVlRXhwcmVzc2lvbiA9IFdURk1v
dmUobmV3VmFsdWVFeHByZXNzaW9uKTsKKyAgICAgICAgbV9uZXdWYWx1ZUV4cHJlc3Npb24gPSBu
ZXdWYWx1ZUV4cHJlc3Npb24udGFrZVVuaXF1ZVB0cigpOwogICAgIH0KIAotICAgIHZvaWQgc2V0
UmVzdWx0RXhwcmVzc2lvbihzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4mJiByZXN1bHRFeHBy
ZXNzaW9uKQorICAgIHZvaWQgc2V0UmVzdWx0RXhwcmVzc2lvbihVbmlxdWVSZWY8RXhwcmVzc2lv
bj4mJiByZXN1bHRFeHByZXNzaW9uKQogICAgIHsKLSAgICAgICAgbV9yZXN1bHRFeHByZXNzaW9u
ID0gV1RGTW92ZShyZXN1bHRFeHByZXNzaW9uKTsKKyAgICAgICAgbV9yZXN1bHRFeHByZXNzaW9u
ID0gcmVzdWx0RXhwcmVzc2lvbi50YWtlVW5pcXVlUHRyKCk7CiAgICAgfQogCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFZhcmlhYmxlUmVmZXJlbmNlPiBvbGRWYXJpYWJsZVJlZmVyZW5jZSgpCisgICAg
VW5pcXVlUmVmPFZhcmlhYmxlUmVmZXJlbmNlPiBvbGRWYXJpYWJsZVJlZmVyZW5jZSgpCiAgICAg
ewogICAgICAgICAvLyBUaGUgb25seSByZWFzb24gd2UgZG9uJ3QgZ2V0IHVzZS1hZnRlci1mcmVl
cyBpcyB0aGUgZmFjdCB0aGF0IGV2ZXJ5IGluc3RhbmNlIG9mIFJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24gaXMgYWxsb2NhdGVkIG9uIHRoZSBoZWFwLgotICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3VuaXF1ZTxWYXJpYWJsZVJlZmVyZW5jZT4oVmFyaWFibGVSZWZlcmVuY2U6OndyYXAobV9vbGRW
YWx1ZSkpOworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxWYXJpYWJsZVJlZmVyZW5jZT4o
VmFyaWFibGVSZWZlcmVuY2U6OndyYXAobV9vbGRWYWx1ZSkpOwogICAgIH0KIAotICAgIHN0ZDo6
dW5pcXVlX3B0cjxWYXJpYWJsZVJlZmVyZW5jZT4gbmV3VmFyaWFibGVSZWZlcmVuY2UoKQorICAg
IFVuaXF1ZVJlZjxWYXJpYWJsZVJlZmVyZW5jZT4gbmV3VmFyaWFibGVSZWZlcmVuY2UoKQogICAg
IHsKICAgICAgICAgLy8gVGhlIG9ubHkgcmVhc29uIHdlIGRvbid0IGdldCB1c2UtYWZ0ZXItZnJl
ZXMgaXMgdGhlIGZhY3QgdGhhdCBldmVyeSBpbnN0YW5jZSBvZiBSZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uIGlzIGFsbG9jYXRlZCBvbiB0aGUgaGVhcC4KLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8VmFyaWFibGVSZWZlcmVuY2U+KFZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKG1fbmV3
VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8VmFyaWFibGVSZWZlcmVuY2U+
KFZhcmlhYmxlUmVmZXJlbmNlOjp3cmFwKG1fbmV3VmFsdWUpKTsKICAgICB9CiAKICAgICBib29s
IGlzUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KIAotICAgIEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJuICptX2xWYWx1ZTsgfQot
ICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9v
bGRWYWx1ZTsgfQotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24mIG5ld1ZhbHVlKCkg
eyByZXR1cm4gbV9uZXdWYWx1ZTsgfQorICAgIEV4cHJlc3Npb24mIGxWYWx1ZSgpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PEV4cHJlc3Npb24mPihtX2xWYWx1ZSk7IH0KKyAgICBWYXJpYWJsZURlY2xh
cmF0aW9uJiBvbGRWYWx1ZSgpIHsgcmV0dXJuIG1fb2xkVmFsdWU7IH0KKyAgICBWYXJpYWJsZURl
Y2xhcmF0aW9uJiBuZXdWYWx1ZSgpIHsgcmV0dXJuIG1fbmV3VmFsdWU7IH0KICAgICBFeHByZXNz
aW9uJiBuZXdWYWx1ZUV4cHJlc3Npb24oKSB7IHJldHVybiAqbV9uZXdWYWx1ZUV4cHJlc3Npb247
IH0KICAgICBFeHByZXNzaW9uJiByZXN1bHRFeHByZXNzaW9uKCkgeyByZXR1cm4gKm1fcmVzdWx0
RXhwcmVzc2lvbjsgfQogCiBwcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9u
PiBtX2xWYWx1ZTsKLSAgICBBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uIG1fb2xkVmFsdWU7
Ci0gICAgQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiBtX25ld1ZhbHVlOworICAgIHRlbXBs
YXRlPGNsYXNzIFUsIGNsYXNzLi4uIEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gV1RGOjptYWtl
VW5pcXVlUmVmKEFyZ3MmJi4uLik7CisKKyAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKExl
eGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+IGxWYWx1ZSkKKyAgICAg
ICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmlnaW4pKQorICAgICAgICAsIG1fbFZhbHVl
KFdURk1vdmUobFZhbHVlKSkKKyAgICAgICAgLCBtX29sZFZhbHVlKExleGVyOjpUb2tlbihvcmln
aW4pLCBRdWFsaWZpZXJzKCksIG51bGxwdHIsIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxw
dHIpCisgICAgICAgICwgbV9uZXdWYWx1ZShXVEZNb3ZlKG9yaWdpbiksIFF1YWxpZmllcnMoKSwg
bnVsbHB0ciwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cikKKyAgICB7CisgICAgfQor
CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fbFZhbHVlOworICAgIFZhcmlhYmxlRGVjbGFy
YXRpb24gbV9vbGRWYWx1ZTsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG1fbmV3VmFsdWU7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fbmV3VmFsdWVFeHByZXNzaW9uOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX3Jlc3VsdEV4cHJlc3Npb247CiB9OwogCi19
Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgKaW5kZXgg
MjI1N2Y5YmUyNDAuLmYyYmExNzQ3YzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oCkBAIC0y
OCw3ICsyOCw4IEBACiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKLSNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgi
CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNywxMSArMzgsMTggQEAgbmFtZXNwYWNl
IFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFJlZmVyZW5jZVR5cGUgOiBwdWJs
aWMgVHlwZSB7CitjbGFzcyBSZWZlcmVuY2VUeXBlIDogcHVibGljIFVubmFtZWRUeXBlIHsKIHB1
YmxpYzoKLSAgICBSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYg
YWRkcmVzc1NwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4mJiBlbGVtZW50VHlwZSkKLSAgICAg
ICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCi0gICAgICAgICwgbV9hZGRyZXNzU3BhY2Uo
V1RGTW92ZShhZGRyZXNzU3BhY2UpKQorICAgIGVudW0gY2xhc3MgQWRkcmVzc1NwYWNlIDogdWlu
dDhfdCB7CisgICAgICAgIENvbnN0YW50LAorICAgICAgICBEZXZpY2UsCisgICAgICAgIFRocmVh
ZGdyb3VwLAorICAgICAgICBUaHJlYWQKKyAgICB9OworCisgICAgUmVmZXJlbmNlVHlwZShMZXhl
cjo6VG9rZW4mJiBvcmlnaW4sIEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UsIFVuaXF1ZVJlZjxV
bm5hbWVkVHlwZT4mJiBlbGVtZW50VHlwZSkKKyAgICAgICAgOiBVbm5hbWVkVHlwZShXVEZNb3Zl
KG9yaWdpbikpCisgICAgICAgICwgbV9hZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKQogICAgICAg
ICAsIG1fZWxlbWVudFR5cGUoV1RGTW92ZShlbGVtZW50VHlwZSkpCiAgICAgewogICAgIH0KQEAg
LTUwLDI0ICs1OCwyNCBAQCBwdWJsaWM6CiAKICAgICBSZWZlcmVuY2VUeXBlKGNvbnN0IFJlZmVy
ZW5jZVR5cGUmKSA9IGRlbGV0ZTsKICAgICBSZWZlcmVuY2VUeXBlKFJlZmVyZW5jZVR5cGUmJikg
PSBkZWZhdWx0OwotICAgIAotICAgIFR5cGUmIGVsZW1lbnRUeXBlKCkgeyByZXR1cm4gKm1fZWxl
bWVudFR5cGU7IH0KIAotcHJvdGVjdGVkOgotICAgIGNvbnN0IExleGVyOjpUb2tlbiYgb3JpZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KLSAgICBjb25zdCBTdHJpbmcmIGFkZHJlc3NT
cGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9Ci0gICAgY29uc3QgVHlwZSYg
ZWxlbWVudFR5cGUoKSBjb25zdCB7IHJldHVybiAqbV9lbGVtZW50VHlwZTsgfQorICAgIGJvb2wg
aXNSZWZlcmVuY2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKworICAg
IEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2FkZHJlc3NTcGFj
ZTsgfQorICAgIGNvbnN0IFVubmFtZWRUeXBlJiBlbGVtZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IFVubmFtZWRUeXBlJj4obV9lbGVtZW50VHlwZSk7IH0KKyAgICBV
bm5hbWVkVHlwZSYgZWxlbWVudFR5cGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxVbm5hbWVkVHlw
ZSY+KG1fZWxlbWVudFR5cGUpOyB9CiAKIHByaXZhdGU6Ci0gICAgTGV4ZXI6OlRva2VuIG1fb3Jp
Z2luOwotICAgIFN0cmluZyBtX2FkZHJlc3NTcGFjZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZT4gbV9lbGVtZW50VHlwZTsKKyAgICBBZGRyZXNzU3BhY2UgbV9hZGRyZXNzU3BhY2U7CisgICAg
VW5pcXVlUmVmPFVubmFtZWRUeXBlPiBtX2VsZW1lbnRUeXBlOwogfTsKIAotfQorfSAvLyBuYW1l
c3BhY2UgQVNUCiAKIH0KIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFN
RURfVFlQRShSZWZlcmVuY2VUeXBlLCBpc1JlZmVyZW5jZVR5cGUoKSkKKwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNv
bHZhYmxlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMUmVzb2x2YWJsZVR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uZWNiY2ZjNTE5NjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvbHZhYmxlVHlwZS5oCkBAIC0wLDAgKzEsODYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCisjaW5jbHVk
ZSA8bWVtb3J5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBSZXNvbHZhYmxlVHlwZSA6IHB1YmxpYyBUeXBlIHsK
K3B1YmxpYzoKKyAgICBSZXNvbHZhYmxlVHlwZSgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwg
flJlc29sdmFibGVUeXBlKCkgPSBkZWZhdWx0OworCisgICAgUmVzb2x2YWJsZVR5cGUoY29uc3Qg
UmVzb2x2YWJsZVR5cGUmKSA9IGRlbGV0ZTsKKyAgICBSZXNvbHZhYmxlVHlwZShSZXNvbHZhYmxl
VHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBSZXNvbHZhYmxlVHlwZSYgb3BlcmF0b3I9KGNvbnN0
IFJlc29sdmFibGVUeXBlJikgPSBkZWxldGU7CisgICAgUmVzb2x2YWJsZVR5cGUmIG9wZXJhdG9y
PShSZXNvbHZhYmxlVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzUmVzb2x2YWJsZVR5
cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlz
RmxvYXRMaXRlcmFsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGlzSW50ZWdlckxpdGVyYWxUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNOdWxsTGl0ZXJhbFR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
ICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCBjYW5SZXNvbHZlKGNvbnN0IFR5cGUm
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdChjb25zdCBV
bm5hbWVkVHlwZSYpIGNvbnN0ID0gMDsKKworICAgIFVubmFtZWRUeXBlKiByZXNvbHZlZFR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkVHlwZS5nZXQoKTsgfQorICAgIFVubmFtZWRUeXBl
KiByZXNvbHZlZFR5cGUoKSB7IHJldHVybiBtX3Jlc29sdmVkVHlwZS5nZXQoKTsgfQorCisgICAg
dm9pZCByZXNvbHZlKFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4mJiB0eXBlKQorICAgIHsKKyAgICAg
ICAgbV9yZXNvbHZlZFR5cGUgPSB0eXBlLnRha2VVbmlxdWVQdHIoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFVubmFtZWRUeXBlPiBtX3Jlc29sdmVkVHlwZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dITFNMX1JFU09MVkFCTEVfVFlQRShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0
ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXSExTTDo6QVNUOjpU
b1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6
V0hMU0w6OkFTVDo6UmVzb2x2YWJsZVR5cGUmIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGljYXRl
OyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19XSExTTF9UWVBFKFJlc29sdmFibGVUeXBlLCBpc1Jlc29sdmFibGVUeXBlKCkpCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uYWRkYTViZjc1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGlj
LmNwcApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIK
KworI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVz
LmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVu
Y2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2Jvb2wg
UmVzb3VyY2VTZW1hbnRpYzo6aXNBY2NlcHRhYmxlVHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBl
JiB1bm5hbWVkVHlwZSwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG1fbW9kZSkgeworICAgIGNhc2UgTW9kZTo6VW5vcmRlcmVkQWNjZXNzVmlldzoK
KyAgICAgICAgaWYgKGlzPFJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkgeworICAgICAgICAg
ICAgYXV0byYgcmVmZXJlbmNlVHlwZSA9IGRvd25jYXN0PFJlZmVyZW5jZVR5cGU+KHVubmFtZWRU
eXBlKTsKKyAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VUeXBlLmFkZHJlc3NTcGFjZSgpID09
IFJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQgfHwgcmVmZXJlbmNlVHlwZS5h
ZGRyZXNzU3BhY2UoKSA9PSBSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmljZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoaXM8QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGlzPFR5cGVSZWZlcmVuY2U+KHVubmFtZWRU
eXBlKSkgeworICAgICAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PFR5cGVS
ZWZlcmVuY2U+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNl
LnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAgIGlmIChpczxOYXRpdmVUeXBlRGVjbGFyYXRp
b24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZl
ZFR5cGUoKSkuaXNUZXh0dXJlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGNhc2UgTW9kZTo6VGV4dHVyZToKKyAgICAgICAgaWYgKGlzPFJlZmVyZW5jZVR5cGU+KHVu
bmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZWZlcmVuY2VUeXBlPih1
bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gUmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNl
OjpDb25zdGFudDsKKyAgICAgICAgaWYgKGlzPEFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChpczxUeXBlUmVmZXJlbmNlPih1bm5h
bWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxU
eXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICBBU1NFUlQodHlwZVJlZmVy
ZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8TmF0aXZlVHlwZURlY2xh
cmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVz
b2x2ZWRUeXBlKCkpLmlzVGV4dHVyZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBjYXNlIE1vZGU6OkJ1ZmZlcjoKKyAgICAgICAgaWYgKGlzPFJlZmVyZW5jZVR5cGU+
KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxSZWZlcmVuY2VUeXBl
Pih1bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gUmVmZXJlbmNlVHlwZTo6QWRkcmVzc1Nw
YWNlOjpDb25zdGFudDsKKyAgICAgICAgcmV0dXJuIGlzPEFycmF5VHlwZT4odW5uYW1lZFR5cGUp
OworICAgIGNhc2UgTW9kZTo6U2FtcGxlcjoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1l
ZFR5cGUsIGludHJpbnNpY3Muc2FtcGxlclR5cGUoKSk7CisgICAgfQorfQorCitib29sIFJlc291
cmNlU2VtYW50aWM6OmlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRl
bURpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBTaGFkZXJJdGVtRGlyZWN0aW9uOjpJbnB1dDsKK30K
KworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50
aWMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291
cmNlU2VtYW50aWMuaAppbmRleCBhYjNiNDMwZjQ0Mi4uODk2MDIzMGVhNDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNlU2Vt
YW50aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xSZXNvdXJjZVNlbWFudGljLmgKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIEFTVCB7CiAK
IGNsYXNzIFJlc291cmNlU2VtYW50aWMgOiBwdWJsaWMgQmFzZVNlbWFudGljIHsKIHB1YmxpYzoK
LSAgICBlbnVtIGNsYXNzIE1vZGUgeworICAgIGVudW0gY2xhc3MgTW9kZSA6IHVpbnQ4X3Qgewog
ICAgICAgICBVbm9yZGVyZWRBY2Nlc3NWaWV3LAogICAgICAgICBUZXh0dXJlLAogICAgICAgICBC
dWZmZXIsCkBAIC02MiwxMyArNjIsMjYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIHVuc2lnbmVkIHNwYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zcGFjZTsgfQogCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlc291cmNlU2Vt
YW50aWMmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbW9kZSA9PSBvdGhl
ci5tX21vZGUgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4ICYmIG1fc3BhY2UgPT0gb3RoZXIu
bV9zcGFjZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgUmVzb3VyY2VTZW1h
bnRpYyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgfQorCisgICAgYm9vbCBpc0FjY2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1l
ZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNzJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc0Fj
Y2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKFNoYWRlckl0ZW1EaXJlY3Rpb24sIGNvbnN0
IEZ1bmN0aW9uRGVmaW5pdGlvbiYpIGNvbnN0IG92ZXJyaWRlOworCiBwcml2YXRlOgogICAgIE1v
ZGUgbV9tb2RlOwogICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgdW5zaWduZWQgbV9zcGFjZTsK
IH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIEFTVAogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJldHVybi5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKaW5kZXggYzViZmM5
ZTQyODYuLmRhNzliYTQ3ODA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXR1cm4uaApAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1
ZGUgIldITFNMRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKICNpbmNsdWRl
ICJXSExTTFN0YXRlbWVudC5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvVW5p
cXVlUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTQsMTEgKzU2LDE1IEBAIHB1
YmxpYzoKIAogICAgIEV4cHJlc3Npb24qIHZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsg
fQogCisgICAgRnVuY3Rpb25EZWZpbml0aW9uKiBmdW5jdGlvbigpIHsgcmV0dXJuIG1fZnVuY3Rp
b247IH0KKyAgICB2b2lkIHNldEZ1bmN0aW9uKEZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25E
ZWZpbml0aW9uKSB7IG1fZnVuY3Rpb24gPSBmdW5jdGlvbkRlZmluaXRpb247IH0KKwogcHJpdmF0
ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV92YWx1ZTsgLy8gbnVsbGFibGUK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV92YWx1ZTsKKyAgICBGdW5jdGlvbkRl
ZmluaXRpb24qIG1fZnVuY3Rpb247CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMU2VtYW50aWMuaAppbmRleCBiMDUyYjkyZWEyNi4uNjA1NjRjOTE2YTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNlbWFudGljLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU2VtYW50
aWMuaApAQCAtMzksOSArMzksOSBAQCBuYW1lc3BhY2UgV0hMU0wgewogCiBuYW1lc3BhY2UgQVNU
IHsKIAotdHlwZWRlZiBWYXJpYW50PEJ1aWx0SW5TZW1hbnRpYywgUmVzb3VyY2VTZW1hbnRpYywg
U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLCBTdGFnZUluT3V0U2VtYW50aWM+IFNlbWFu
dGljOwordXNpbmcgU2VtYW50aWMgPSBWYXJpYW50PEJ1aWx0SW5TZW1hbnRpYywgUmVzb3VyY2VT
ZW1hbnRpYywgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLCBTdGFnZUluT3V0U2VtYW50
aWM+OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0
YW50U2VtYW50aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzJiNDU0OGE4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWMuY3BwCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYg
RU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMU3Bl
Y2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgiCisKKyNpbmNsdWRlICJXSExTTEluZmVyVHlw
ZXMuaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVS
ZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CituYW1lc3BhY2UgQVNUIHsKKworYm9vbCBTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWM6
OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIGNv
bnN0IEludHJpbnNpY3MmKSBjb25zdAoreworICAgIGlmICghaXM8VHlwZVJlZmVyZW5jZT4odW5u
YW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgdHlwZVJlZmVyZW5j
ZSA9IGRvd25jYXN0PFR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKTsKKyAgICBBU1NFUlQodHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVjbGFy
YXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVm
ZXJlbmNlLnJlc29sdmVkVHlwZSgpKS5pc051bWJlcigpOworfQorCitib29sIFNwZWNpYWxpemF0
aW9uQ29uc3RhbnRTZW1hbnRpYzo6aXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihT
aGFkZXJJdGVtRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRnVuY3Rpb25EZWZpbml0aW9uJikg
Y29uc3QKK3sKKyAgICByZXR1cm4gZGlyZWN0aW9uID09IFNoYWRlckl0ZW1EaXJlY3Rpb246Oklu
cHV0OworfQorCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lh
bGl6YXRpb25Db25zdGFudFNlbWFudGljLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuaAppbmRleCA5
YTdjNTNmZDRiNi4uOTA2OWI4MmNmOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNp
YWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oCkBAIC00OCwxMCArNDgsMjMgQEAgcHVibGljOgog
ICAgIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyhjb25zdCBTcGVjaWFsaXphdGlvbkNv
bnN0YW50U2VtYW50aWMmKSA9IGRlbGV0ZTsKICAgICBTcGVjaWFsaXphdGlvbkNvbnN0YW50U2Vt
YW50aWMoU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJiYpID0gZGVmYXVsdDsKIAorICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc0FjY2VwdGFibGVU
eXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmLCBjb25zdCBJbnRyaW5zaWNzJikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgYm9vbCBpc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKFNoYWRl
ckl0ZW1EaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9uRGVmaW5pdGlvbiYpIGNvbnN0IG92ZXJyaWRl
OworCiBwcml2YXRlOgogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJ
bk91dFNlbWFudGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjA2NWJmNGIwMGI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcApA
QCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oIgorCisj
aW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVm
aW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5j
bHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2Jvb2wgU3RhZ2VJbk91dFNlbWFu
dGljOjppc0FjY2VwdGFibGVUeXBlKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBl
LCBjb25zdCBJbnRyaW5zaWNzJikgY29uc3QKK3sKKyAgICBpZiAoaXM8QXJyYXlUeXBlPih1bm5h
bWVkVHlwZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghaXM8VHlwZVJlZmVyZW5j
ZT4odW5uYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgdHlwZVJl
ZmVyZW5jZSA9IGRvd25jYXN0PFR5cGVSZWZlcmVuY2U+KHVubmFtZWRUeXBlKTsKKyAgICBBU1NF
UlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byYgcmVzb2x2ZWRUeXBl
ID0gKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCk7CisgICAgaWYgKGlzPEVudW1lcmF0aW9u
RGVmaW5pdGlvbj4ocmVzb2x2ZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHJlc29sdmVkVHlwZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxOYXRp
dmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBy
ZXR1cm4gbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzTnVtYmVyKCkKKyAgICAgICAgfHwgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLmlzVmVjdG9yKCkKKyAgICAgICAgfHwgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLmlzTWF0cml4KCk7Cit9CisKK2Jvb2wgU3RhZ2VJbk91dFNlbWFudGljOjppc0FjY2VwdGFi
bGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKFNoYWRlckl0ZW1EaXJlY3Rpb24gZGlyZWN0aW9uLCBj
b25zdCBGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKCpmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSkgeworICAgIGNh
c2UgRnVuY3Rpb25EZWNsYXJhdGlvbjo6RW50cnlQb2ludFR5cGU6OlZlcnRleDoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlw
ZTo6RnJhZ21lbnQ6CisgICAgICAgIHJldHVybiBkaXJlY3Rpb24gPT0gU2hhZGVySXRlbURpcmVj
dGlvbjo6SW5wdXQ7CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlw
ZTo6Q29tcHV0ZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgQVNUCisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFu
dGljLmgKaW5kZXggYTM5OTI3ODFlM2EuLjBjOWU3MjUyMTMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFn
ZUluT3V0U2VtYW50aWMuaApAQCAtNTEsMTEgKzUxLDI0IEBAIHB1YmxpYzoKIAogICAgIHVuc2ln
bmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFN0YWdlSW5PdXRTZW1hbnRpYyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBTdGFnZUluT3V0U2VtYW50aWMmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJvb2wgaXNBY2Nl
cHRhYmxlVHlwZShjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgSW50cmluc2ljcyYpIGNv
bnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlv
bihTaGFkZXJJdGVtRGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mKSBjb25zdCBv
dmVycmlkZTsKKwogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2luZGV4OwogfTsKIAotfQorfSAv
LyBuYW1lc3BhY2UgQVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1lbnQuaAppbmRleCA0MzRkMjFhMDQzMi4u
YzVlNjU5MThkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFN0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5oCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNs
dWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgorI2luY2x1ZGUgPHd0
Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Nyw5ICs2OCw5IEBA
IHByaXZhdGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogfTsKIAotdHlwZWRlZiBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPFN0YXRlbWVudD4+IFN0YXRlbWVudHM7Cit1c2luZyBTdGF0ZW1l
bnRzID0gVmVjdG9yPFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+PjsKIAotfQorfSAvLyBuYW1lc3BhY2Ug
QVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCmluZGV4IDg3Y2M2
MmYyMzU2Li42YmIxNDg3YTYwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZURlZmluaXRpb24u
aApAQCAtMjksNyArMjksNyBAQAogCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUg
IldITFNMU3RydWN0dXJlRWxlbWVudC5oIgotI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1
ZGUgIldITFNMTmFtZWRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0zOSwxMSArMzksMTAgQEAgbmFtZXNwYWNlIFdI
TFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFN0cnVjdHVyZURlZmluaXRpb24gOiBw
dWJsaWMgVHlwZSB7CitjbGFzcyBTdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHVibGljIE5hbWVkVHlw
ZSB7CiBwdWJsaWM6CiAgICAgU3RydWN0dXJlRGVmaW5pdGlvbihMZXhlcjo6VG9rZW4mJiBvcmln
aW4sIFN0cmluZyYmIG5hbWUsIFN0cnVjdHVyZUVsZW1lbnRzJiYgc3RydWN0dXJlRWxlbWVudHMp
Ci0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShX
VEZNb3ZlKG5hbWUpKQorICAgICAgICA6IE5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbiksIFdURk1v
dmUobmFtZSkpCiAgICAgICAgICwgbV9zdHJ1Y3R1cmVFbGVtZW50cyhXVEZNb3ZlKHN0cnVjdHVy
ZUVsZW1lbnRzKSkKICAgICB7CiAgICAgfQpAQCAtNTMsMjQgKzUyLDIwIEBAIHB1YmxpYzoKICAg
ICBTdHJ1Y3R1cmVEZWZpbml0aW9uKGNvbnN0IFN0cnVjdHVyZURlZmluaXRpb24mKSA9IGRlbGV0
ZTsKICAgICBTdHJ1Y3R1cmVEZWZpbml0aW9uKFN0cnVjdHVyZURlZmluaXRpb24mJikgPSBkZWZh
dWx0OwogCi0gICAgU3RydWN0dXJlRWxlbWVudHMmIHN0cnVjdHVyZUVsZW1lbnRzKCkgeyByZXR1
cm4gbV9zdHJ1Y3R1cmVFbGVtZW50czsgfQorICAgIGJvb2wgaXNTdHJ1Y3R1cmVEZWZpbml0aW9u
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRy
PFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9CisgICAgU3RydWN0dXJl
RWxlbWVudHMmIHN0cnVjdHVyZUVsZW1lbnRzKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVFbGVtZW50
czsgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKLSAgICBTdHJpbmcg
bV9uYW1lOwogICAgIFN0cnVjdHVyZUVsZW1lbnRzIG1fc3RydWN0dXJlRWxlbWVudHM7CiB9Owog
Ci19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCiB9CiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfTkFNRURfVFlQRShTdHJ1Y3R1cmVEZWZpbml0aW9uLCBpc1N0cnVjdHVyZURlZmlu
aXRpb24oKSkKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgKaW5kZXggMTRi
ZTQxYzcyOTguLmU0YTc2NDYzY2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKICNpbmNsdWRlICJX
SExTTFNlbWFudGljLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDcgKzQyLDcgQEAgbmFt
ZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFN0cnVjdHVyZUVsZW1lbnQgOiBwdWJsaWMgTm9kZSB7CiBw
dWJsaWM6Ci0gICAgU3RydWN0dXJlRWxlbWVudChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFF1YWxp
ZmllcnMmJiBxdWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4mJiB0eXBlLCBTdHJpbmcm
JiBuYW1lLCBPcHRpb25hbDxTZW1hbnRpYz4gc2VtYW50aWMpCisgICAgU3RydWN0dXJlRWxlbWVu
dChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJzLCBVbmlxdWVS
ZWY8VW5uYW1lZFR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgT3B0aW9uYWw8U2VtYW50aWM+
IHNlbWFudGljKQogICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKICAgICAgICAg
LCBtX3F1YWxpZmllcnMoV1RGTW92ZShxdWFsaWZpZXJzKSkKICAgICAgICAgLCBtX3R5cGUoV1RG
TW92ZSh0eXBlKSkKQEAgLTU1LDIwICs1NiwyMiBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlRWxl
bWVudChjb25zdCBTdHJ1Y3R1cmVFbGVtZW50JikgPSBkZWxldGU7CiAgICAgU3RydWN0dXJlRWxl
bWVudChTdHJ1Y3R1cmVFbGVtZW50JiYpID0gZGVmYXVsdDsKIAotICAgIFR5cGUmIHR5cGUoKSB7
IHJldHVybiAqbV90eXBlOyB9CisgICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25z
dCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIFVubmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8VW5uYW1lZFR5cGUmPihtX3R5cGUpOyB9CisgICAgY29uc3QgU3RyaW5nJiBu
YW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgT3B0aW9uYWw8U2VtYW50aWM+JiBzZW1hbnRp
YygpIHsgcmV0dXJuIG1fc2VtYW50aWM7IH0KIAogcHJpdmF0ZToKICAgICBMZXhlcjo6VG9rZW4g
bV9vcmlnaW47CiAgICAgUXVhbGlmaWVycyBtX3F1YWxpZmllcnM7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFR5cGU+IG1fdHlwZTsKKyAgICBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IG1fdHlwZTsKICAg
ICBTdHJpbmcgbV9uYW1lOwogICAgIE9wdGlvbmFsPFNlbWFudGljPiBtX3NlbWFudGljOwogfTsK
IAotdHlwZWRlZiBWZWN0b3I8U3RydWN0dXJlRWxlbWVudD4gU3RydWN0dXJlRWxlbWVudHM7Cit1
c2luZyBTdHJ1Y3R1cmVFbGVtZW50cyA9IFZlY3RvcjxTdHJ1Y3R1cmVFbGVtZW50PjsKIAotfQor
fSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3dpdGNoQ2FzZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3dpdGNoQ2FzZS5oCmluZGV4IDE5OTA1YmQx
Nzg5Li4xNWYwOWMyNjY5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMU3dpdGNoQ2FzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN3aXRjaENhc2UuaApAQCAtNjMsNyArNjMsNyBAQCBw
cml2YXRlOgogICAgIEJsb2NrIG1fYmxvY2s7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QK
IAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xTd2l0Y2hTdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTFN3aXRjaFN0YXRlbWVudC5oCmluZGV4IDQ2ZTY3NjU1MGRjLi5kOWFm
NjlkNzczMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMU3dpdGNoU3RhdGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMU3dpdGNoU3RhdGVtZW50LmgKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKICNp
bmNsdWRlICJXSExTTFN3aXRjaENhc2UuaCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDAsNyArNDEsNyBAQCBuYW1lc3BhY2UgQVNUIHsK
IAogY2xhc3MgU3dpdGNoU3RhdGVtZW50IDogcHVibGljIFN0YXRlbWVudCB7CiBwdWJsaWM6Ci0g
ICAgU3dpdGNoU3RhdGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgc3RkOjp1bmlxdWVfcHRy
PEV4cHJlc3Npb24+JiYgdmFsdWUsIFZlY3RvcjxTd2l0Y2hDYXNlPiYmIHN3aXRjaENhc2VzKQor
ICAgIFN3aXRjaFN0YXRlbWVudChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHBy
ZXNzaW9uPiYmIHZhbHVlLCBWZWN0b3I8U3dpdGNoQ2FzZT4mJiBzd2l0Y2hDYXNlcykKICAgICAg
ICAgOiBTdGF0ZW1lbnQoV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fdmFsdWUoV1RGTW92
ZSh2YWx1ZSkpCiAgICAgICAgICwgbV9zd2l0Y2hDYXNlcyhXVEZNb3ZlKHN3aXRjaENhc2VzKSkK
QEAgLTU0LDE1ICs1NSwxNSBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1N3aXRjaFN0YXRl
bWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIEV4cHJlc3Npb24m
IHZhbHVlKCkgeyByZXR1cm4gKm1fdmFsdWU7IH0KKyAgICBFeHByZXNzaW9uJiB2YWx1ZSgpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PEV4cHJlc3Npb24mPihtX3ZhbHVlKTsgfQogICAgIFZlY3RvcjxT
d2l0Y2hDYXNlPiYgc3dpdGNoQ2FzZXMoKSB7IHJldHVybiBtX3N3aXRjaENhc2VzOyB9CiAKIHBy
aXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb24+IG1fdmFsdWU7CisgICAgVW5p
cXVlUmVmPEV4cHJlc3Npb24+IG1fdmFsdWU7CiAgICAgVmVjdG9yPFN3aXRjaENhc2U+IG1fc3dp
dGNoQ2FzZXM7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUZXJuYXJ5RXhw
cmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VGVybmFyeUV4cHJlc3Npb24uaAppbmRleCA5MDRjYzRjNDg5Yy4uNWQ4NjJlZTRlNWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFRlcm5h
cnlFeHByZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVGVybmFyeUV4cHJlc3Npb24uaApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVk
ZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCw3ICszOSw3
IEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBUZXJuYXJ5RXhwcmVzc2lvbiA6IHB1YmxpYyBF
eHByZXNzaW9uIHsKIHB1YmxpYzoKLSAgICBUZXJuYXJ5RXhwcmVzc2lvbihMZXhlcjo6VG9rZW4m
JiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiYmIHByZWRpY2F0ZSwgc3RkOjp1
bmlxdWVfcHRyPEV4cHJlc3Npb24+JiYgYm9keUV4cHJlc3Npb24sIHN0ZDo6dW5pcXVlX3B0cjxF
eHByZXNzaW9uPiYmIGVsc2VFeHByZXNzaW9uKQorICAgIFRlcm5hcnlFeHByZXNzaW9uKExleGVy
OjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgcHJlZGljYXRlLCBVbmlx
dWVSZWY8RXhwcmVzc2lvbj4mJiBib2R5RXhwcmVzc2lvbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+
JiYgZWxzZUV4cHJlc3Npb24pCiAgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikp
CiAgICAgICAgICwgbV9wcmVkaWNhdGUoV1RGTW92ZShwcmVkaWNhdGUpKQogICAgICAgICAsIG1f
Ym9keUV4cHJlc3Npb24oV1RGTW92ZShib2R5RXhwcmVzc2lvbikpCkBAIC01MywxNyArNTQsMTcg
QEAgcHVibGljOgogCiAgICAgYm9vbCBpc1Rlcm5hcnlFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgRXhwcmVzc2lvbiYgcHJlZGljYXRlKCkgeyByZXR1
cm4gKm1fcHJlZGljYXRlOyB9Ci0gICAgRXhwcmVzc2lvbiYgYm9keUV4cHJlc3Npb24oKSB7IHJl
dHVybiAqbV9ib2R5RXhwcmVzc2lvbjsgfQotICAgIEV4cHJlc3Npb24mIGVsc2VFeHByZXNzaW9u
KCkgeyByZXR1cm4gKm1fZWxzZUV4cHJlc3Npb247IH0KKyAgICBFeHByZXNzaW9uJiBwcmVkaWNh
dGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxFeHByZXNzaW9uJj4obV9wcmVkaWNhdGUpOyB9Cisg
ICAgRXhwcmVzc2lvbiYgYm9keUV4cHJlc3Npb24oKSB7IHJldHVybiBzdGF0aWNfY2FzdDxFeHBy
ZXNzaW9uJj4obV9ib2R5RXhwcmVzc2lvbik7IH0KKyAgICBFeHByZXNzaW9uJiBlbHNlRXhwcmVz
c2lvbigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEV4cHJlc3Npb24mPihtX2Vsc2VFeHByZXNzaW9u
KTsgfQogCiBwcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX3ByZWRp
Y2F0ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9ib2R5RXhwcmVzc2lvbjsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4gbV9lbHNlRXhwcmVzc2lvbjsKKyAgICBV
bmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9wcmVkaWNhdGU7CisgICAgVW5pcXVlUmVmPEV4cHJlc3Np
b24+IG1fYm9keUV4cHJlc3Npb247CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fZWxzZUV4
cHJlc3Npb247CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUcmFwLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUcmFwLmgKaW5kZXgg
ZGJhMmYxMmY4MTcuLjBhOTNiMzY4ZjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUcmFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHJhcC5oCkBAIC01Myw3ICs1Myw3IEBAIHB1Ymxp
YzoKIHByaXZhdGU6CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgKaW5k
ZXggY2Y0Y2JjODg3OTAuLmRiOTJmZjU0MjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZS5oCkBAIC00MiwyMCArNDIsMjAgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB+VHlwZSgpID0gZGVmYXVsdDsKIAotICAgIFR5cGUoY29u
c3QgVHlwZSYpID0gZGVsZXRlOworICAgIGV4cGxpY2l0IFR5cGUoY29uc3QgVHlwZSYpID0gZGVs
ZXRlOwogICAgIFR5cGUoVHlwZSYmKSA9IGRlZmF1bHQ7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNU
eXBlUmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wg
aXNQb2ludGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29s
IGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIFR5cGUm
IG9wZXJhdG9yPShjb25zdCBUeXBlJikgPSBkZWxldGU7CisgICAgVHlwZSYgb3BlcmF0b3I9KFR5
cGUmJikgPSBkZWZhdWx0OwogCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8VHlwZT4gY2xv
bmUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzTmFtZWRUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNVbm5hbWVkVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVzb2x2YWJsZVR5cGUoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogCiBwcml2YXRlOgogfTsKIAotfQorfSAvLyBuYW1lc3BhY2Ug
QVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKaW5kZXggN2U1ODAxZTNiNTYuLjg3
MzUwNjVhMWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKQEAgLTIzLDE0ICsyMywxNSBA
QAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNwcmFnbWEgb25j
ZQotCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgogCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVm
Lmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC00OSwxMyArNTAsMTMgQEAgVHlwZUFyZ3VtZW50cyBjbG9uZShjb25zdCBUeXBlQXJndW1lbnRz
JiB0eXBlQXJndW1lbnRzKQogVHlwZUFyZ3VtZW50IGNsb25lKGNvbnN0IFR5cGVBcmd1bWVudCYg
dHlwZUFyZ3VtZW50KQogewogICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
W10oY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pIC0+IFR5cGVB
cmd1bWVudCB7Ci0gICAgICAgIHJldHVybiBjb25zdGFudEV4cHJlc3Npb247Ci0gICAgfSwgW10o
Y29uc3Qgc3RkOjp1bmlxdWVfcHRyPFR5cGVSZWZlcmVuY2U+JiB0eXBlUmVmZXJlbmNlKSAtPiBU
eXBlQXJndW1lbnQgeworICAgICAgICByZXR1cm4gY29uc3RhbnRFeHByZXNzaW9uLmNsb25lKCk7
CisgICAgfSwgW10oY29uc3QgVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+JiB0eXBlUmVmZXJlbmNl
KSAtPiBUeXBlQXJndW1lbnQgewogICAgICAgICByZXR1cm4gdHlwZVJlZmVyZW5jZS0+Y2xvbmVU
eXBlUmVmZXJlbmNlKCk7CiAgICAgfSksIHR5cGVBcmd1bWVudCk7CiB9CiAKLX0KK30gLy8gbmFt
ZXNwYWNlIEFTVAogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmgKaW5kZXggZTM4NWQ1MGQ1ZWYu
LjY3MzgzYWExZGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaApAQCAtMjksNiArMjksNyBAQAog
CiAjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTExl
eGVyLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC00MCwxMyArNDEsMTMgQEAgbmFtZXNw
YWNlIEFTVCB7CiAKIGNsYXNzIFR5cGVSZWZlcmVuY2U7CiAKLXR5cGVkZWYgVmFyaWFudDxDb25z
dGFudEV4cHJlc3Npb24sIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUmVmZXJlbmNlPj4gVHlwZUFyZ3Vt
ZW50OwotdHlwZWRlZiBWZWN0b3I8VHlwZUFyZ3VtZW50PiBUeXBlQXJndW1lbnRzOwordXNpbmcg
VHlwZUFyZ3VtZW50ID0gVmFyaWFudDxDb25zdGFudEV4cHJlc3Npb24sIFVuaXF1ZVJlZjxUeXBl
UmVmZXJlbmNlPj47Cit1c2luZyBUeXBlQXJndW1lbnRzID0gVmVjdG9yPFR5cGVBcmd1bWVudD47
CiAKIFR5cGVBcmd1bWVudCBjbG9uZShjb25zdCBUeXBlQXJndW1lbnQmKTsKIFR5cGVBcmd1bWVu
dHMgY2xvbmUoY29uc3QgVHlwZUFyZ3VtZW50cyYpOwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QK
IAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaAppbmRleCBmNzM2MjllMjliMS4uODY2YTI3
NzI0NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFR5cGVEZWZpbml0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVHlwZURlZmluaXRpb24uaApAQCAtMjksNyArMjksOSBAQAogCiAj
aW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMTm9kZS5oIgotI2luY2x1ZGUg
IldITFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hM
U0xVbm5hbWVkVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzgsMTEgKzQw
LDEwIEBAIG5hbWVzcGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBUeXBl
RGVmaW5pdGlvbiA6IHB1YmxpYyBUeXBlIHsKK2NsYXNzIFR5cGVEZWZpbml0aW9uIDogcHVibGlj
IE5hbWVkVHlwZSB7CiBwdWJsaWM6Ci0gICAgVHlwZURlZmluaXRpb24oTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBTdHJpbmcmJiBuYW1lLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5cGUp
Ci0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbmFtZShX
VEZNb3ZlKG5hbWUpKQorICAgIFR5cGVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwg
U3RyaW5nJiYgbmFtZSwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlwZSkKKyAgICAg
ICAgOiBOYW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKG5hbWUpKQogICAgICAgICAs
IG1fdHlwZShXVEZNb3ZlKHR5cGUpKQogICAgIHsKICAgICB9CkBAIC01MiwyNCArNTMsMzAgQEAg
cHVibGljOgogICAgIFR5cGVEZWZpbml0aW9uKGNvbnN0IFR5cGVEZWZpbml0aW9uJikgPSBkZWxl
dGU7CiAgICAgVHlwZURlZmluaXRpb24oVHlwZURlZmluaXRpb24mJikgPSBkZWZhdWx0OwogCi0g
ICAgQVNUOjpUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsgfQorICAgIGJvb2wgaXNUeXBl
RGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHN0ZDo6
dW5pcXVlX3B0cjxUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgQVNUOjpVbm5hbWVk
VHlwZSYgdHlwZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPihtX3R5
cGUpOyB9CisKKyAgICBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZS0+dW5pZnlOb2RlKCk7CisgICAgfQorCisgICAgVHlw
ZSYgdW5pZnlOb2RlKCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fdHlwZS0+dW5p
ZnlOb2RlKCk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsK
LSAgICBTdHJpbmcgbV9uYW1lOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlw
ZTsKKyAgICBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4gbV90eXBlOwogfTsKIAotfQorfSAv
LyBuYW1lc3BhY2UgQVNUCiAKIH0KIAogfQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNM
X05BTUVEX1RZUEUoVHlwZURlZmluaXRpb24sIGlzVHlwZURlZmluaXRpb24oKSkKKwogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xUeXBlUmVmZXJlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5kMGM5OWYxMjc3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuY3BwCkBAIC0wLDAg
KzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCisjaW5jbHVkZSAiV0hM
U0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFT
VCB7CisKK1VuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPiBUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVy
OjpUb2tlbiYmIG9yaWdpbiwgTmFtZWRUeXBlJiByZXNvbHZlZFR5cGUpCit7CisgICAgVHlwZUFy
Z3VtZW50cyB0eXBlQXJndW1lbnRzOworICAgIGlmIChpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+
KHJlc29sdmVkVHlwZSkpCisgICAgICAgIHR5cGVBcmd1bWVudHMgPSBBU1Q6OmNsb25lKGRvd25j
YXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocmVzb2x2ZWRUeXBlKS50eXBlQXJndW1lbnRzKCkp
OworICAgIGF1dG8gcmVzdWx0ID0gbWFrZVVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPihXVEZNb3Zl
KG9yaWdpbiksIFN0cmluZyhyZXNvbHZlZFR5cGUubmFtZSgpKSwgV1RGTW92ZSh0eXBlQXJndW1l
bnRzKSk7CisgICAgcmVzdWx0LT5zZXRSZXNvbHZlZFR5cGUocmVzb2x2ZWRUeXBlKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVHlwZVJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCmluZGV4IDQ5NDQxZDhiNWM3Li5iOGU0YmY4NTBiNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VHlwZVJlZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaApAQCAtMjgsOCArMjgsOSBAQAogI2lmIEVOQUJMRShX
RUJHUFUpCiAKICNpbmNsdWRlICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgi
CiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRU
eXBlLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zOCwxMCArMzksMTIgQEAgbmFt
ZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNsYXNzIFR5cGVSZWZlcmVuY2Ug
OiBwdWJsaWMgVHlwZSB7CitjbGFzcyBOYW1lZFR5cGU7CisKK2NsYXNzIFR5cGVSZWZlcmVuY2Ug
OiBwdWJsaWMgVW5uYW1lZFR5cGUgewogcHVibGljOgogICAgIFR5cGVSZWZlcmVuY2UoTGV4ZXI6
OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1lLCBUeXBlQXJndW1lbnRzJiYgdHlwZUFyZ3Vt
ZW50cykKLSAgICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgIDogVW5u
YW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUp
KQogICAgICAgICAsIG1fdHlwZUFyZ3VtZW50cyhXVEZNb3ZlKHR5cGVBcmd1bWVudHMpKQogICAg
IHsKQEAgLTUyLDMyICs1NSw1MyBAQCBwdWJsaWM6CiAgICAgVHlwZVJlZmVyZW5jZShjb25zdCBU
eXBlUmVmZXJlbmNlJikgPSBkZWxldGU7CiAgICAgVHlwZVJlZmVyZW5jZShUeXBlUmVmZXJlbmNl
JiYpID0gZGVmYXVsdDsKIAorICAgIHN0YXRpYyBVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4gd3Jh
cChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIE5hbWVkVHlwZSYgcmVzb2x2ZWRUeXBlKTsKKwogICAg
IGJvb2wgaXNUeXBlUmVmZXJlbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQog
CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgVHlwZUFyZ3VtZW50
cyYgdHlwZUFyZ3VtZW50cygpIHsgcmV0dXJuIG1fdHlwZUFyZ3VtZW50czsgfQorICAgIE5hbWVk
VHlwZSogcmVzb2x2ZWRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlZFR5cGU7IH0KIAot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxUeXBlUmVmZXJlbmNlPiBjbG9uZVR5cGVSZWZlcmVuY2UoKSBj
b25zdAorICAgIGNvbnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewot
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxUeXBlUmVmZXJlbmNlPihMZXhlcjo6VG9r
ZW4obV9vcmlnaW4pLCBTdHJpbmcobV9uYW1lKSwgQVNUOjpjbG9uZShtX3R5cGVBcmd1bWVudHMp
KTsKKyAgICAgICAgQVNTRVJUKG1fcmVzb2x2ZWRUeXBlKTsKKyAgICAgICAgcmV0dXJuIG1fcmVz
b2x2ZWRUeXBlLT51bmlmeU5vZGUoKTsKICAgICB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VHlw
ZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQorICAgIFR5cGUmIHVuaWZ5Tm9kZSgpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBBU1NFUlQobV9yZXNvbHZlZFR5cGUpOworICAgICAgICByZXR1cm4g
bV9yZXNvbHZlZFR5cGUtPnVuaWZ5Tm9kZSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJl
c29sdmVkVHlwZShOYW1lZFR5cGUmIHJlc29sdmVkVHlwZSkKKyAgICB7CisgICAgICAgIG1fcmVz
b2x2ZWRUeXBlID0gJnJlc29sdmVkVHlwZTsKKyAgICB9CisKKyAgICBVbmlxdWVSZWY8VHlwZVJl
ZmVyZW5jZT4gY2xvbmVUeXBlUmVmZXJlbmNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtYWtlVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+KExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0
cmluZyhtX25hbWUpLCBBU1Q6OmNsb25lKG1fdHlwZUFyZ3VtZW50cykpOworICAgIH0KKworICAg
IFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gY2xvbmUoKSBjb25zdCBvdmVycmlkZQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGNsb25lVHlwZVJlZmVyZW5jZSgpOwogICAgIH0KIAogcHJpdmF0ZToKLSAg
ICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBUeXBlQXJn
dW1lbnRzIG1fdHlwZUFyZ3VtZW50czsKKyAgICBOYW1lZFR5cGUqIG1fcmVzb2x2ZWRUeXBlIHsg
bnVsbHB0ciB9OwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KIAogfQogCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1RZUEUoVHlwZVJlZmVyZW5jZSwgaXNUeXBlUmVmZXJl
bmNlKCkpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFNRURfVFlQRShUeXBlUmVm
ZXJlbmNlLCBpc1R5cGVSZWZlcmVuY2UoKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uODYyYTI2ZGNhZTUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xVbm5hbWVkVHlwZS5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5j
bHVkZSAiV0hMU0xOb2RlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSA8d3Rm
L1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitj
bGFzcyBVbm5hbWVkVHlwZSA6IHB1YmxpYyBUeXBlIHsKK3B1YmxpYzoKKyAgICBVbm5hbWVkVHlw
ZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4pCisgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmln
aW4pKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Vbm5hbWVkVHlwZSgpID0gZGVmYXVs
dDsKKworICAgIFVubmFtZWRUeXBlKGNvbnN0IFVubmFtZWRUeXBlJikgPSBkZWxldGU7CisgICAg
VW5uYW1lZFR5cGUoVW5uYW1lZFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc1VubmFt
ZWRUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1R5cGVSZWZlcmVuY2UoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc1BvaW50ZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc0FycmF5VHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCBib29sIGlzUmVmZXJlbmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisK
KyAgICB2aXJ0dWFsIGNvbnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlz
OyB9CisgICAgdmlydHVhbCBUeXBlJiB1bmlmeU5vZGUoKSB7IHJldHVybiAqdGhpczsgfQorCisg
ICAgdmlydHVhbCBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3QgPSAwOworCisg
ICAgY29uc3QgTGV4ZXI6OlRva2VuJiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsg
fQorCitwcml2YXRlOgorICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEFTVAorCit9CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dI
TFNMX1VOTkFNRURfVFlQRShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpXSExTTDo6QVNUOjpUb1ZhbHVlVHlwZU5hbWUp
IFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6V0hMU0w6OkFTVDo6VW5u
YW1lZFR5cGUmIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9UWVBFKFVu
bmFtZWRUeXBlLCBpc1VubmFtZWRUeXBlKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xV
bnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uMTQ2ZTNiNTlmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcApA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaCIK
KworI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdI
TFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2ludDY0X3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bDo6dmFsdWVGb3JTZWxlY3RlZFR5cGUoKSBjb25zdAoreworICAgIEFTU0VSVChtX3R5cGUucmVz
b2x2ZWRUeXBlKCkpOworICAgIGF1dG8mIHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxUeXBlUmVm
ZXJlbmNlPigqbV90eXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBBU1NFUlQodHlwZVJlZmVyZW5j
ZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93
bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUo
KSk7CisgICAgcmV0dXJuIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5mb3JtYXRWYWx1ZUZyb21VbnNp
Z25lZEludGVnZXIoKShtX3ZhbHVlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAppbmRl
eCA1OGQ2ZTIzMDc1ZS4uYjY0Yzk4NjhlM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZElu
dGVnZXJMaXRlcmFsLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIldITFNMRXhwcmVz
c2lvbi5oIgogI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTFVuc2lnbmVk
SW50ZWdlckxpdGVyYWxUeXBlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzksMjUg
KzQwLDQxIEBAIG5hbWVzcGFjZSBBU1QgewogY2xhc3MgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCA6
IHB1YmxpYyBFeHByZXNzaW9uIHsKIHB1YmxpYzoKICAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFs
KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgdW5zaWduZWQgdmFsdWUpCi0gICAgICAgIDogRXhwcmVz
c2lvbihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgIDogRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4o
b3JpZ2luKSkKKyAgICAgICAgLCBtX3R5cGUoV1RGTW92ZShvcmlnaW4pLCB2YWx1ZSkKICAgICAg
ICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9CiAKICAgICB2aXJ0dWFsIH5VbnNpZ25l
ZEludGVnZXJMaXRlcmFsKCkgPSBkZWZhdWx0OwogCi0gICAgZXhwbGljaXQgVW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbChjb25zdCBVbnNpZ25lZEludGVnZXJMaXRlcmFsJikgPSBkZWZhdWx0OworICAg
IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwoY29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpID0g
ZGVsZXRlOwogICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwoVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCYmKSA9IGRlZmF1bHQ7CiAKKyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsJiBvcGVyYXRvcj0o
Y29uc3QgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpID0gZGVsZXRlOworICAgIFVuc2lnbmVkSW50
ZWdlckxpdGVyYWwmIG9wZXJhdG9yPShVbnNpZ25lZEludGVnZXJMaXRlcmFsJiYpID0gZGVmYXVs
dDsKKworICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJiB0eXBlKCkgeyByZXR1cm4gbV90
eXBlOyB9CiAgICAgdW5zaWduZWQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CiAK
ICAgICBib29sIGlzVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KIAorICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwgY2xvbmUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCByZXN1bHQoTGV4ZXI6OlRva2Vu
KG9yaWdpbigpKSwgbV92YWx1ZSk7CisgICAgICAgIGlmIChyZXN1bHQubV90eXBlLnJlc29sdmVk
VHlwZSgpKQorICAgICAgICAgICAgcmVzdWx0Lm1fdHlwZS5yZXNvbHZlKHJlc3VsdC5tX3R5cGUu
cmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIGludDY0X3QgdmFsdWVGb3JTZWxlY3RlZFR5cGUoKSBjb25zdDsKKwogcHJpdmF0ZToK
KyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSBtX3R5cGU7CiAgICAgdW5zaWduZWQgbV92
YWx1ZTsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIEFTVAogCiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWxUeXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uMWRjNWFhMDYyZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJM
aXRlcmFsVHlwZS5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZS5oIgorCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7
CisKK1Vuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlw
ZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIHVuc2lnbmVkIHZhbHVlKQorICAgIDogbV92YWx1ZSh2
YWx1ZSkKKyAgICAsIG1fcHJlZmVycmVkVHlwZShzdGQ6Om1ha2VfdW5pcXVlPFR5cGVSZWZlcmVu
Y2U+KFdURk1vdmUob3JpZ2luKSwgU3RyaW5nKCJ1aW50IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCksIFR5cGVBcmd1bWVudHMoKSkpCit7Cit9CisKK1Vuc2lnbmVkSW50ZWdlckxpdGVy
YWxUeXBlOjp+VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKK2Jvb2wg
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNhblJlc29sdmUoY29uc3QgVHlwZSYgdHlwZSkg
Y29uc3QKK3sKKyAgICBpZiAoIWlzPE5hbWVkVHlwZT4odHlwZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxOYW1lZFR5cGU+KHR5cGUpOwor
ICAgIGlmICghaXM8TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8
TmF0aXZlVHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpOworICAgIGlmICghbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLmlzSW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5pc1NpZ25lZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uY2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKCko
bV92YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dW5zaWduZWQgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OmNvbnZlcnNpb25Db3N0KGNvbnN0
IFVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgY29uc3QKK3sKKyAgICBpZiAobWF0Y2hlcyh1bm5h
bWVkVHlwZSwgKm1fcHJlZmVycmVkVHlwZSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biAxOworfQorCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjExMzBkZjUwNTVkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGUuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlw
ZS5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitu
YW1lc3BhY2UgQVNUIHsKKworY2xhc3MgVHlwZVJlZmVyZW5jZTsKKworY2xhc3MgVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbFR5cGUgOiBwdWJsaWMgUmVzb2x2YWJsZVR5cGUgeworcHVibGljOgorICAg
IFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgdW5zaWdu
ZWQgdmFsdWUpOworCisgICAgdmlydHVhbCB+VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoKTsK
KworICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlJikgPSBkZWxldGU7CisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoVW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgVW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGUmIG9wZXJhdG9yPShjb25zdCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlw
ZSYpID0gZGVsZXRlOworICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJiBvcGVyYXRvcj0o
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc1Vu
c2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgVHlwZVJlZmVyZW5jZSYgcHJlZmVycmVkVHlwZSgpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PFR5cGVSZWZlcmVuY2UmPihtX3ByZWZlcnJlZFR5cGUpOyB9CisKKyAgICBib29sIGNhblJl
c29sdmUoY29uc3QgVHlwZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHVuc2lnbmVkIGNvbnZlcnNp
b25Db3N0KGNvbnN0IFVubmFtZWRUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgdW5zaWduZWQgbV92YWx1ZTsKKyAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNv
bHZlIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuCisgICAgLy8gQ29uc3RhbnRFeHByZXNz
aW9uIC0+IExpdGVyYWxUeXBlIC0+IFR5cGVSZWZlcmVuY2UgLT4gVHlwZUFyZ3VtZW50cyAtPiBD
b25zdGFudEV4cHJlc3Npb24KKyAgICBVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJy
ZWRUeXBlOworfTsKKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX1dITFNMX1JFU09MVkFCTEVfVFlQRShVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZSwgaXNVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhbHVlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYWx1ZS5oCmlu
ZGV4IDZlMGVhOTFmYzFkLi5iOTEyZDBlNDg1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYWx1ZS5oCkBAIC00NiwxMCArNDYsMTMg
QEAgcHVibGljOgogICAgIGV4cGxpY2l0IFZhbHVlKGNvbnN0IFZhbHVlJikgPSBkZWZhdWx0Owog
ICAgIFZhbHVlKFZhbHVlJiYpID0gZGVmYXVsdDsKIAorICAgIFZhbHVlJiBvcGVyYXRvcj0oY29u
c3QgVmFsdWUmKSA9IGRlZmF1bHQ7CisgICAgVmFsdWUmIG9wZXJhdG9yPShWYWx1ZSYmKSA9IGRl
ZmF1bHQ7CisKIHByaXZhdGU6CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xW
YXJpYWJsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKaW5kZXggZmYwMzY4MTkzYmQuLjYzOGNh
MzY3Y2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCkBAIC0zMyw2ICsz
Myw4IEBACiAjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgogI2luY2x1ZGUgIldITFNMVHlwZS5o
IgogI2luY2x1ZGUgIldITFNMVmFsdWUuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8
d3RmL1VuaXF1ZVJlZi5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDQsNyArNDYsNyBAQCBuYW1lc3BhY2UgQVNUIHsKIAog
Y2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbiA6IHB1YmxpYyBWYWx1ZSB7CiBwdWJsaWM6Ci0gICAg
VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFF1YWxpZmllcnMmJiBx
dWFsaWZpZXJzLCBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5h
bWUsIE9wdGlvbmFsPFNlbWFudGljPiYmIHNlbWFudGljLCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVz
c2lvbj4mJiBpbml0aWFsaXplcikKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tl
biYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlVubmFtZWRUeXBlPiYmIHR5cGUsIFN0cmluZyYmIG5hbWUsIE9wdGlvbmFsPFNlbWFudGljPiYm
IHNlbWFudGljLCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvbj4mJiBpbml0aWFsaXplcikKICAg
ICAgICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCiAgICAgICAgICwgbV9xdWFsaWZpZXJz
KFdURk1vdmUocXVhbGlmaWVycykpCiAgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCkBA
IC01OSwyMiArNjEsMjYgQEAgcHVibGljOgogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24oY29uc3Qg
VmFyaWFibGVEZWNsYXJhdGlvbiYpID0gZGVsZXRlOwogICAgIFZhcmlhYmxlRGVjbGFyYXRpb24o
VmFyaWFibGVEZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7CiAKLSAgICBMZXhlcjo6VG9rZW4gb3Jp
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBjb25zdCBMZXhlcjo6VG9rZW4m
IG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgU3RyaW5nJiBuYW1lKCkg
eyByZXR1cm4gbV9uYW1lOyB9CiAKLSAgICBUeXBlJiB0eXBlKCkgeyByZXR1cm4gKm1fdHlwZTsg
fQorICAgIGNvbnN0IFVubmFtZWRUeXBlKiB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlLmdl
dCgpOyB9IC8vIEFub255bW91cyB2YXJpYWJsZXMgaW5zaWRlIFJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb25zIGhhdmUgdGhlaXIgdHlwZSBzZXQgYnkgdGhlIHR5cGUgY2hlY2tlci4KKyAgICBVbm5h
bWVkVHlwZSogdHlwZSgpIHsgcmV0dXJuIG1fdHlwZS5nZXQoKTsgfQogICAgIE9wdGlvbmFsPFNl
bWFudGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9CiAgICAgRXhwcmVzc2lv
biogaW5pdGlhbGl6ZXIoKSB7IHJldHVybiBtX2luaXRpYWxpemVyLmdldCgpOyB9CiAKIHByaXZh
dGU6CiAgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOwogICAgIFF1YWxpZmllcnMgbV9xdWFsaWZp
ZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IG1fdHlwZTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gbV90eXBlOwogICAgIFN0cmluZyBtX25hbWU7CiAg
ICAgT3B0aW9uYWw8U2VtYW50aWM+IG1fc2VtYW50aWM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4
cHJlc3Npb24+IG1faW5pdGlhbGl6ZXI7CiB9OwogCi19Cit1c2luZyBWYXJpYWJsZURlY2xhcmF0
aW9ucyA9IFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9uPjsKKworfSAvLyBuYW1lc3BhY2UgQVNU
CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50LmgKaW5kZXggZjhkYWZjMjUxZmIuLjU1NDRiMTgzNjNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgKQEAgLTU5LDcgKzU5LDcgQEAg
cHJpdmF0ZToKICAgICBWZWN0b3I8VmFyaWFibGVEZWNsYXJhdGlvbj4gbV92YXJpYWJsZURlY2xh
cmF0aW9uczsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIEFTVAogCiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVm
ZXJlbmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xW
YXJpYWJsZVJlZmVyZW5jZS5oCmluZGV4IDJhZTgyOGQ1Mjk1Li5lZjRmYjU1ZDE5ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFi
bGVSZWZlcmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoV0VCR1BVKQogCi0jaW5jbHVkZSAiV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hM
U0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNM
VmFyaWFibGVEZWNsYXJhdGlvbi5oIgpAQCAtNTUsMTkgKzU1LDIxIEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgVmFyaWFibGVSZWZlcmVuY2Ugd3JhcChWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJs
ZURlY2xhcmF0aW9uKQogICAgIHsKICAgICAgICAgVmFyaWFibGVSZWZlcmVuY2UgcmVzdWx0KExl
eGVyOjpUb2tlbih2YXJpYWJsZURlY2xhcmF0aW9uLm9yaWdpbigpKSk7Ci0gICAgICAgIHJlc3Vs
dC5tX3ZhcmlhYmxlID0geyAmdmFyaWFibGVEZWNsYXJhdGlvbiB9OworICAgICAgICByZXN1bHQu
bV92YXJpYWJsZSA9ICZ2YXJpYWJsZURlY2xhcmF0aW9uOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAotICAgIHN0YXRpYyBWYXJpYWJsZVJlZmVyZW5jZSB3cmFwKEFub255bW91c1Zh
cmlhYmxlRGVjbGFyYXRpb24mIGFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24pCisgICAgYm9v
bCBpc1ZhcmlhYmxlUmVmZXJlbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQor
CisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICBWYXJpYWJsZURl
Y2xhcmF0aW9uKiB2YXJpYWJsZSgpIHsgcmV0dXJuIG1fdmFyaWFibGU7IH0KKworICAgIHZvaWQg
c2V0VmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKICAg
ICB7Ci0gICAgICAgIFZhcmlhYmxlUmVmZXJlbmNlIHJlc3VsdChMZXhlcjo6VG9rZW4oYW5vbnlt
b3VzVmFyaWFibGVEZWNsYXJhdGlvbi5vcmlnaW4oKSkpOwotICAgICAgICByZXN1bHQubV92YXJp
YWJsZSA9IHsgJmFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24gfTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgbV92YXJpYWJsZSA9ICZ2YXJpYWJsZURlY2xhcmF0aW9uOwogICAg
IH0KIAotICAgIGJvb2wgaXNWYXJpYWJsZVJlZmVyZW5jZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLQogcHJpdmF0ZToKICAgICBWYXJpYWJsZVJlZmVyZW5jZShMZXhlcjo6VG9r
ZW4mJiBvcmlnaW4pCiAgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCkBAIC03
NSwxMCArNzcsMTAgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBTdHJpbmcgbV9uYW1lOwotICAg
IE9wdGlvbmFsPFZhcmlhbnQ8VmFyaWFibGVEZWNsYXJhdGlvbiosIEFub255bW91c1ZhcmlhYmxl
RGVjbGFyYXRpb24qPj4gbV92YXJpYWJsZTsKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uKiBtX3Zh
cmlhYmxlOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgQVNUCiAKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMV2hpbGVMb29wLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xXaGlsZUxvb3Au
aAppbmRleCAxZDRhZTc1OTc3OS4uYWVjNjRjYWFjMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFdoaWxlTG9vcC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFdoaWxlTG9vcC5oCkBAIC0z
MCw2ICszMCw3IEBACiAjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiV0hM
U0xMZXhlci5oIgogI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDcgKzQwLDcgQEAgbmFt
ZXNwYWNlIEFTVCB7CiAKIGNsYXNzIFdoaWxlTG9vcCA6IHB1YmxpYyBTdGF0ZW1lbnQgewogcHVi
bGljOgotICAgIFdoaWxlTG9vcChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIHN0ZDo6dW5pcXVlX3B0
cjxFeHByZXNzaW9uPiYmIGNvbmRpdGlvbmFsLCBzdGQ6OnVuaXF1ZV9wdHI8U3RhdGVtZW50PiYm
IGJvZHkpCisgICAgV2hpbGVMb29wKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4
cHJlc3Npb24+JiYgY29uZGl0aW9uYWwsIFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+JiYgYm9keSkKICAg
ICAgICAgOiBTdGF0ZW1lbnQoV1RGTW92ZShvcmlnaW4pKQogICAgICAgICAsIG1fY29uZGl0aW9u
YWwoV1RGTW92ZShjb25kaXRpb25hbCkpCiAgICAgICAgICwgbV9ib2R5KFdURk1vdmUoYm9keSkp
CkBAIC01MywxNSArNTQsMTUgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNXaGlsZUxvb3Ao
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBFeHByZXNzaW9uJiBjb25k
aXRpb25hbCgpIHsgcmV0dXJuICptX2NvbmRpdGlvbmFsOyB9Ci0gICAgU3RhdGVtZW50JiBib2R5
KCkgeyByZXR1cm4gKm1fYm9keTsgfQorICAgIEV4cHJlc3Npb24mIGNvbmRpdGlvbmFsKCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RXhwcmVzc2lvbiY+KG1fY29uZGl0aW9uYWwpOyB9CisgICAgU3Rh
dGVtZW50JiBib2R5KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U3RhdGVtZW50Jj4obV9ib2R5KTsg
fQogCiBwcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxFeHByZXNzaW9uPiBtX2NvbmRpdGlv
bmFsOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGF0ZW1lbnQ+IG1fYm9keTsKKyAgICBVbmlxdWVS
ZWY8RXhwcmVzc2lvbj4gbV9jb25kaXRpb25hbDsKKyAgICBVbmlxdWVSZWY8U3RhdGVtZW50PiBt
X2JvZHk7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBBU1QKIAogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVu
Y3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hl
Y2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi4yYjY3YjNlMTQxNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCkBAIC0w
LDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgiCisK
KyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJy
YXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xU
eXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNM
IHsKKworYm9vbCBjaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucyhjb25zdCBQcm9ncmFtJiBwcm9ncmFt
KQoreworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbj4+IGZ1bmN0aW9uczsKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVmaW5pdGlvbiA6
IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQorICAgICAgICBmdW5jdGlvbnMuYXBwZW5k
KCpmdW5jdGlvbkRlZmluaXRpb24pOworICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkKKyAgICAgICAg
ZnVuY3Rpb25zLmFwcGVuZCgqbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7CisKKyAgICBzdGQ6
OnNvcnQoZnVuY3Rpb25zLmJlZ2luKCksIGZ1bmN0aW9ucy5lbmQoKSwgW10oY29uc3QgQVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uJiBhLCBjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGIp
IC0+IGJvb2wgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RkOjptaW4oYS5u
YW1lKCkubGVuZ3RoKCksIGIubmFtZSgpLmxlbmd0aCgpKTsgKytpKSB7CisgICAgICAgICAgICBp
ZiAoYS5uYW1lKClbaV0gPCBiLm5hbWUoKVtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIGlmIChhLm5hbWUoKVtpXSA+IGIubmFtZSgpW2ldKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYS5uYW1lKCku
bGVuZ3RoKCkgPCBiLm5hbWUoKS5sZW5ndGgoKTsKKyAgICB9KTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBmb3IgKHNpemVfdCBq
ID0gaSArIDE7IGogPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChm
dW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpICE9IGZ1bmN0aW9uc1tqXS5nZXQoKS5uYW1lKCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uPihmdW5jdGlvbnNbaV0uZ2V0KCkpICYmIGlzPEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbj4oZnVuY3Rpb25zW2pdLmdldCgpKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygp
LnNpemUoKSAhPSBmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUoKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCku
aXNDYXN0KCkpIHsKKyAgICAgICAgICAgICAgICBib29sIHNhbWUgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCkudHlwZSgpLCBmdW5jdGlvbnNb
al0uZ2V0KCkudHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgc2FtZSA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0g
MDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcygqZnVuY3Rpb25zW2ldLmdldCgpLnBh
cmFtZXRlcnMoKVtrXS50eXBlKCksICpmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVycygpW2td
LnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKHNhbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYm9vbCBzYW1lID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJh
bWV0ZXJzKCkuc2l6ZSgpOyArK2spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVz
KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSwgKmZ1bmN0aW9uc1tq
XS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgc2FtZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNh
bWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkg
PT0gIm9wZXJhdG9yJltdIiAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNpemUo
KSA9PSAyCisgICAgICAgICAgICAmJiBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oZnVuY3Rp
b25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKSB7CisgICAgICAgICAgICBhdXRv
JiB0eXBlID0gKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgpOworICAg
ICAgICAgICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odHlwZSkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYXV0byogcmVzb2x2ZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNl
Pih0eXBlKS5yZXNvbHZlZFR5cGUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXM8QVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCpyZXNvbHZlZFR5cGUpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnJlc29sdmVkVHlwZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidWludCIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGZ1
bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yLmxlbmd0aCIgJiYgZnVuY3Rpb25z
W2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMQorICAgICAgICAgICAgJiYgKGlzPEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPihmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBd
LnR5cGUoKSkKKyAgICAgICAgICAgIHx8IGlzPEFTVDo6QXJyYXlUeXBlPihmdW5jdGlvbnNbaV0u
Z2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBlbHNlIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpID09ICJvcGVyYXRv
cj09IgorICAgICAgICAgICAgJiYgZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKS5zaXpl
KCkgPT0gMgorICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihmdW5jdGlvbnNb
aV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkKKyAgICAgICAgICAgICYmIGlzPEFTVDo6
UmVmZXJlbmNlVHlwZT4oZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkp
CisgICAgICAgICAgICAmJiBtYXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygp
WzBdLnR5cGUoKSwgKmZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2VjZWU3ODJjNWYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNr
RHVwbGljYXRlRnVuY3Rpb25zLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2Jvb2wgY2hl
Y2tEdXBsaWNhdGVGdW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYpOworCit9CisKK30KKworCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENo
ZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iNGIxNDRm
Zjg3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMQ2hlY2tlci5jcHAKQEAgLTAsMCArMSwxNDg3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
IEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTENo
ZWNrZXIuaCIKKworI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVk
ZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29t
bWFFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xEb3RFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xHYXRoZXJF
bnRyeVBvaW50SXRlbXMuaCIKKyNpbmNsdWRlICJXSExTTElmU3RhdGVtZW50LmgiCisjaW5jbHVk
ZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE1ha2VQb2lu
dGVyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRl
ICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24uaCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmFibGVUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xS
ZXNvbHZlT3ZlcmxvYWRJbXBsLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZpbmdUeXBlLmgiCisj
aW5jbHVkZSAiV0hMU0xSZXR1cm4uaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaFN0YXRlbWVudC5o
IgorI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFZp
c2l0b3IuaCIKKyNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFBPRENo
ZWNrZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgUE9EQ2hlY2tlcigpID0gZGVm
YXVsdDsKKworICAgIHZpcnR1YWwgflBPRENoZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lk
IHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24p
IG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdChlbnVtZXJhdGlvbkRlZmlu
aXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICgh
bmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzTnVtYmVyKCkKKyAgICAgICAgICAgICYmICFuYXRpdmVU
eXBlRGVjbGFyYXRpb24uaXNWZWN0b3IoKQorICAgICAgICAgICAgJiYgIW5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5pc01hdHJpeCgpKQorICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlv
bikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHN0cnVjdHVyZURlZmlu
aXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlw
ZURlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdCh0eXBl
RGVmaW5pdGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJy
YXlUeXBlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoYXJyYXlUeXBl
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHNldEVycm9yKCk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVu
Y2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZl
ZFR5cGUoKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdHlwZVJlZmVyZW5jZS5yZXNv
bHZlZFR5cGUoKSk7CisgICAgfQorfTsKKworc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZVdpdGhPcGVyYXRvckFuZGVySW5kZXhlcihBU1Q6OkNh
bGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGZp
cnN0QXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7CisgICAgYm9vbCBp
c1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGF1
dG8gcmV0dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRv
a2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgZmlyc3RBcmd1bWVudC5hZGRyZXNzU3BhY2Uo
KSwgZmlyc3RBcmd1bWVudC5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgIEFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0QXJndW1lbnQuY2xvbmUoKS50YWtlVW5pcXVlUHRyKCks
IFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVu
ZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9y
aWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhl
cjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkp
LnRha2VVbmlxdWVQdHIoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cikpOworICAg
IHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QXR0cmli
dXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJpbmcoIm9w
ZXJhdG9yJltdIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1l
dGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7Cit9CisKK3N0
YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVXaXRo
T3BlcmF0b3JMZW5ndGgoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24sIEFTVDo6
VW5uYW1lZFR5cGUmIGZpcnN0QXJndW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3Mp
Cit7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAgICBib29sIGlzT3BlcmF0b3Ig
PSB0cnVlOworICAgIGF1dG8gcmV0dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChM
ZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLnVpbnRUeXBl
KCkpOworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICBwYXJh
bWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxF
eHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGZpcnN0QXJndW1lbnQuY2xv
bmUoKS50YWtlVW5pcXVlUHRyKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpKTsK
KyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0
dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5n
KCJvcGVyYXRvci5sZW5ndGgiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsK
K30KKworc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVz
b2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHBy
ZXNzaW9uLCBSZXNvbHZpbmdUeXBlJiBmaXJzdEFyZ3VtZW50LCBSZXNvbHZpbmdUeXBlJiBzZWNv
bmRBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3sKKyAgICBib29sIGlz
UmVzdHJpY3RlZCA9IGZhbHNlOworICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CisgICAgYXV0
byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihjYWxs
RXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MuYm9vbFR5cGUoKSk7CisgICAgYXV0byBh
cmd1bWVudFR5cGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+IHsKKyAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLT5jbG9uZSgpOworICAgIH0sIFsmXShS
ZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JikgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+IHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4geworICAgICAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLT5jbG9uZSgpOwor
ICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYpIC0+IFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgICAgICAvLyBXZSBlbmNvdW50ZXJlZCAibnVs
bCA9PSBudWxsIi4KKyAgICAgICAgICAgIC8vIFRoZSB0eXBlIGlzbid0IG9ic2VydmFibGUsIHNv
IHdlIGNhbiBwaWNrIHdoYXRldmVyIHdlIHdhbnQuCisgICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyBjYW4gcHJvYmFibHkgYmUgZ2VuZXJhbGl6ZWQsIHVzaW5nIHRoZSAicHJlZmVycmVkIHR5cGUi
IGluZnJhc3RydWN0dXJlIHVzZWQgYnkgZ2VuZXJpYyBsaXRlcmFscworICAgICAgICAgICAgcmV0
dXJuIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24u
b3JpZ2luKCkpLCBpbnRyaW5zaWNzLmludFR5cGUoKSk7CisgICAgICAgIH0pLCBzZWNvbmRBcmd1
bWVudCk7CisgICAgfSksIGZpcnN0QXJndW1lbnQpOworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbnMgcGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIGFyZ3VtZW50VHlwZS0+Y2xvbmUoKS50YWtlVW5pcXVlUHRyKCksIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIG51bGxwdHIpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwg
QVNUOjpRdWFsaWZpZXJzKCksIGFyZ3VtZW50VHlwZS50YWtlVW5pcXVlUHRyKCksIFN0cmluZygp
LCBXVEY6Om51bGxvcHQsIG51bGxwdHIpKTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4
cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwg
V1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVy
YXRvciksIGlzUmVzdHJpY3RlZCk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVCeUluc3RhbnRpYXRpb24oQVNUOjpDYWxsRXhwcmVz
c2lvbiYgY2FsbEV4cHJlc3Npb24sIGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PFJlc29sdmluZ1R5cGU+PiYgdHlwZXMsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7
CisgICAgaWYgKGNhbGxFeHByZXNzaW9uLm5hbWUoKSA9PSAib3BlcmF0b3ImW10iICYmIHR5cGVz
LnNpemUoKSA9PSAyKSB7CisgICAgICAgIGF1dG8qIGZpcnN0QXJndW1lbnRBcnJheVJlZiA9IFdU
Rjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4m
IHVubmFtZWRUeXBlKSAtPiBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSogeworICAgICAgICAgICAg
aWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRU
eXBlJj4odW5uYW1lZFR5cGUpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5u
YW1lZFR5cGUpKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9LCBbXShS
ZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JikgLT4gQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUq
IHsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9KSwgdHlwZXNbMF0uZ2V0
KCkpOworICAgICAgICBib29sIHNlY29uZEFyZ3VtZW50SXNVaW50ID0gV1RGOjp2aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBl
KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKHN0YXRpY19jYXN0PEFTVDo6
VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSksIGludHJpbnNpY3MudWludFR5cGUoKSk7CisgICAg
ICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gcmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY2FuUmVzb2x2ZShpbnRyaW5zaWNzLnVpbnRUeXBlKCkp
OworICAgICAgICB9KSwgdHlwZXNbMV0uZ2V0KCkpOworICAgICAgICBpZiAoZmlyc3RBcmd1bWVu
dEFycmF5UmVmICYmIHNlY29uZEFyZ3VtZW50SXNVaW50KQorICAgICAgICAgICAgcmV0dXJuIHJl
c29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIoY2FsbEV4cHJlc3Npb24sICpmaXJzdEFyZ3Vt
ZW50QXJyYXlSZWYsIGludHJpbnNpY3MpOworICAgIH0gZWxzZSBpZiAoY2FsbEV4cHJlc3Npb24u
bmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiICYmIHR5cGVzLnNpemUoKSA9PSAxKSB7CisgICAg
ICAgIGF1dG8qIGZpcnN0QXJndW1lbnRSZWZlcmVuY2UgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gQVNU
OjpVbm5hbWVkVHlwZSogeworICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPihzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5cGUpKSB8fCBpczxB
U1Q6OkFycmF5VHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFtZWRUeXBl
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBl
Jj4odW5uYW1lZFR5cGUpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0s
IFtdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfSksIHR5cGVzWzBdLmdldCgp
KTsKKyAgICAgICAgaWYgKGZpcnN0QXJndW1lbnRSZWZlcmVuY2UpCisgICAgICAgICAgICByZXR1
cm4gcmVzb2x2ZVdpdGhPcGVyYXRvckxlbmd0aChjYWxsRXhwcmVzc2lvbiwgKmZpcnN0QXJndW1l
bnRSZWZlcmVuY2UsIGludHJpbnNpY3MpOworICAgIH0gZWxzZSBpZiAoY2FsbEV4cHJlc3Npb24u
bmFtZSgpID09ICJvcGVyYXRvcj09IiAmJiB0eXBlcy5zaXplKCkgPT0gMikgeworICAgICAgICBh
dXRvIGlzQWNjZXB0YWJsZSA9IFtdKFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUpIC0+IGJv
b2wgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxBU1Q6
OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAgICAgIH0sIFtdKFJlZjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+KHJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAgICAgIH0pLCByZXNv
bHZpbmdUeXBlKTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKGlzQWNjZXB0YWJsZSh0eXBlc1sw
XS5nZXQoKSkgJiYgaXNBY2NlcHRhYmxlKHR5cGVzWzFdLmdldCgpKSkKKyAgICAgICAgICAgIHJl
dHVybiByZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3IoY2FsbEV4cHJlc3Npb24sIHR5cGVz
WzBdLmdldCgpLCB0eXBlc1sxXS5nZXQoKSwgaW50cmluc2ljcyk7CisgICAgfQorICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Cit9CisKK2NsYXNzIENoZWNrZXIgOiBwdWJsaWMgVmlzaXRvciB7Citw
dWJsaWM6CisgICAgQ2hlY2tlcihjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBQcm9ncmFt
JiBwcm9ncmFtKQorICAgICAgICA6IG1faW50cmluc2ljcyhpbnRyaW5zaWNzKQorICAgICAgICAs
IG1fcHJvZ3JhbShwcm9ncmFtKQorICAgIHsKKyAgICB9CisKKyAgICB+Q2hlY2tlcigpID0gZGVm
YXVsdDsKKworICAgIHZvaWQgdmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGZvciAoYXV0byYgdHlwZURlZmluaXRpb24gOiBwcm9ncmFtLnR5cGVEZWZpbml0
aW9ucygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlRGVmaW5pdGlvbik7
CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3RydWN0
dXJlRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqc3RydWN0
dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9u
IDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpCisgICAgICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoKmVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIGZvciAoYXV0byYg
bmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkp
CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKm5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7
CisKKyAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0
aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZnVuY3Rp
b25EZWZpbml0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKQorICAgICAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgYm9vbCBjaGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoKmZ1
bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CisgICAgICAgIGNhc2UgQVNUOjpG
dW5jdGlvbkRlZmluaXRpb246OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgICAgICBy
ZXR1cm4gIW1fdmVydGV4RW50cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkp
LmlzTmV3RW50cnk7CisgICAgICAgIGNhc2UgQVNUOjpGdW5jdGlvbkRlZmluaXRpb246OkVudHJ5
UG9pbnRUeXBlOjpGcmFnbWVudDoKKyAgICAgICAgICAgIHJldHVybiAhbV9mcmFnbWVudEVudHJ5
UG9pbnRzLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKS5pc05ld0VudHJ5OworICAgICAg
ICBjYXNlIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZToK
KyAgICAgICAgICAgIHJldHVybiAhbV9jb21wdXRlRW50cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkpLmlzTmV3RW50cnk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29s
IGNoZWNrU2VtYW50aWNzKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRp
b24pCisgICAgeworICAgICAgICBhdXRvIGVudHJ5UG9pbnRJdGVtcyA9IGdhdGhlckVudHJ5UG9p
bnRJdGVtcyhtX2ludHJpbnNpY3MsIGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIGlmICgh
ZW50cnlQb2ludEl0ZW1zKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRv
IGlucHV0SXRlbXMgPSBXVEZNb3ZlKGVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzKTsKKyAgICAgICAg
YXV0byBvdXRwdXRJdGVtcyA9IFdURk1vdmUoZW50cnlQb2ludEl0ZW1zLT5vdXRwdXRzKTsKKwor
ICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGNoZWNrRHVwbGljYXRlU2VtYW50aWNzID0gWyZd
KGNvbnN0IFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGl0ZW1zKSAtPiBib29sIHsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGZhc3RlciB0aGFuIE8obl4yKS4KKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGl0ZW1zLnNpemUoKTsg
KytqKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXNbaV0uc2VtYW50aWMgPT0g
aXRlbXNbal0uc2VtYW50aWMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICghY2hl
Y2tEdXBsaWNhdGVTZW1hbnRpY3MoaW5wdXRJdGVtcykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgaWYgKCFjaGVja0R1cGxpY2F0ZVNlbWFudGljcyhvdXRwdXRJ
dGVtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAgeworICAgICAgICAgICAgYXV0byBjaGVja1NlbWFudGljVHlwZXMgPSBbJl0oY29uc3QgVmVj
dG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGZv
ciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWNjZXB0
YWJsZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgQVNUOjpCYXNlU2Vt
YW50aWMmIHNlbWFudGljKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzZW1hbnRpYy5pc0FjY2VwdGFibGVUeXBlKGl0ZW0udW5uYW1lZFR5cGUsIG1faW50cmluc2lj
cyk7CisgICAgICAgICAgICAgICAgICAgIH0pLCBpdGVtLnNlbWFudGljKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFhY2NlcHRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNUeXBlcyhpbnB1
dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAo
IWNoZWNrU2VtYW50aWNUeXBlcyhvdXRwdXRJdGVtcykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBjaGVja1Nl
bWFudGljRm9yU2hhZGVyVHlwZSA9IFsmXShjb25zdCBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBp
dGVtcywgQVNUOjpCYXNlU2VtYW50aWM6OlNoYWRlckl0ZW1EaXJlY3Rpb24gZGlyZWN0aW9uKSAt
PiBib29sIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtcykgeworICAg
ICAgICAgICAgICAgICAgICBhdXRvIGFjY2VwdGFibGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKGNvbnN0IEFTVDo6QmFzZVNlbWFudGljJiBzZW1hbnRpYykgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VtYW50aWMuaXNBY2NlcHRhYmxlRm9yU2hh
ZGVySXRlbURpcmVjdGlvbihkaXJlY3Rpb24sIGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAg
ICAgICAgICAgICAgIH0pLCBpdGVtLnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFhY2NlcHRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IH07CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNGb3JTaGFkZXJUeXBlKGlucHV0SXRl
bXMsIEFTVDo6QmFzZVNlbWFudGljOjpTaGFkZXJJdGVtRGlyZWN0aW9uOjpJbnB1dCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFjaGVja1NlbWFudGlj
Rm9yU2hhZGVyVHlwZShvdXRwdXRJdGVtcywgQVNUOjpCYXNlU2VtYW50aWM6OlNoYWRlckl0ZW1E
aXJlY3Rpb246Ok91dHB1dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBjaGVja1BPRERhdGEgPSBbJl0oY29u
c3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgICAgICAgICAgICAgIFBPRENo
ZWNrZXIgcG9kQ2hlY2tlcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRl
clR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9kQ2hl
Y2tlci5jaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oaXRlbS51
bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihpdGVtLnVubmFtZWRUeXBlKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPihpdGVtLnVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KGl0ZW0udW5u
YW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVja0Vycm9y
QW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpLnR5cGUo
KSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAocG9kQ2hlY2tlci5lcnJvcigpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBp
ZiAoIWNoZWNrUE9ERGF0YShpbnB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBpZiAoIWNoZWNrUE9ERGF0YShvdXRwdXRJdGVtcykpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIGVudW0g
Y2xhc3MgQ2hlY2tLaW5kIHsKKyAgICAgICAgICAgIEluZGV4LAorICAgICAgICAgICAgRG90Cisg
ICAgICAgIH07CisKKyAgICAgICAgYXV0byBjaGVja0dldHRlciA9IFsmXShDaGVja0tpbmQga2lu
ZCkgLT4gYm9vbCB7CisgICAgICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0g
a2luZCA9PSBDaGVja0tpbmQ6OkluZGV4ID8gMiA6IDE7CisgICAgICAgICAgICBpZiAoZnVuY3Rp
b25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJz
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8mIHVuaWZ5
Tm9kZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLT51bmlmeU5v
ZGUoKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJU
eXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAg
ICAgIGF1dG8gY2hlY2tTZXR0ZXIgPSBbJl0oQ2hlY2tLaW5kIGtpbmQpIC0+IGJvb2wgeworICAg
ICAgICAgICAgc2l6ZV90IG51bUV4cGVjdGVkUGFyYW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5k
OjpJbmRleCA/IDMgOiAyOworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50VW5pZnlOb2Rl
ID0gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCktPnVuaWZ5Tm9kZSgp
OworICAgICAgICAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0QXJndW1lbnRVbmlm
eU5vZGUpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxB
U1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKTsKKyAgICAgICAgICAgICAg
ICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1hdGNo
ZXMoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSwgKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKClbMF0udHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBhdXRvJiB2YWx1ZVR5cGUgPSAqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtu
dW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxXS50eXBlKCk7CisgICAgICAgICAgICBhdXRvIGdldHRl
ck5hbWUgPSBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLnN1YnN0cmluZygwLCBmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpLmxlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICBhdXRvKiBnZXR0ZXJG
dW5jcyA9IG1fcHJvZ3JhbS5uYW1lQ29udGV4dCgpLmdldEZ1bmN0aW9ucyhnZXR0ZXJOYW1lKTsK
KyAgICAgICAgICAgIGlmICghZ2V0dGVyRnVuY3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgVmVjdG9yPFJlc29sdmluZ1R5cGU+IGFyZ3VtZW50VHlwZXM7Cisg
ICAgICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4g
YXJndW1lbnRUeXBlUmVmZXJlbmNlczsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMTsgKytpKQorICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50VHlwZXMuYXBwZW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbaV0udHlwZSgp
LT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgYXJndW1lbnRUeXBlIDogYXJndW1l
bnRUeXBlcykKKyAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLmFwcGVuZChh
cmd1bWVudFR5cGUpOworICAgICAgICAgICAgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6Ok5hbWVkVHlwZT4+IGNhc3RSZXR1cm5UeXBlID0gV1RGOjpudWxsb3B0OworICAgICAg
ICAgICAgYXV0byogb3ZlcmxvYWQgPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoKmdldHRl
ckZ1bmNzLCBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLCBjYXN0UmV0dXJuVHlwZSk7CisgICAgICAg
ICAgICBpZiAoIW92ZXJsb2FkKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGF1dG8mIHJlc3VsdFR5cGUgPSBvdmVybG9hZC0+dHlwZSgpOworICAgICAgICAgICAg
aWYgKCFtYXRjaGVzKHJlc3VsdFR5cGUsIHZhbHVlVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAg
ICAgYXV0byBjaGVja0FuZGVyID0gWyZdKENoZWNrS2luZCBraW5kKSAtPiBib29sIHsKKyAgICAg
ICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6
SW5kZXggPyAyIDogMTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpLnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8mIHVuaWZ5
Tm9kZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUg
PSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgICAg
IGlmICghaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KVswXS50eXBlKCktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghaXM8QVNUOjpV
bm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5h
bWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6UG9pbnRl
clR5cGU+KHVubmFtZWRUeXBlKSAmJiAhaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFt
ZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpZiAoIWZ1bmN0aW9uRGVmaW5pdGlvbi5pc09wZXJhdG9yKCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5pc0Nhc3QoKSkK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9u
Lm5hbWUoKSA9PSAib3BlcmF0b3IrKyIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlv
bi5uYW1lKCkgPT0gIm9wZXJhdG9yLS0iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZp
bml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMF0udHlwZSgpLCBmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IrIgor
ICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ItIikg
eworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgp
ICE9IDEKKyAgICAgICAgICAgICAgICAmJiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygp
LnNpemUoKSAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24u
bmFtZSgpID09ICJvcGVyYXRvcioiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24u
bmFtZSgpID09ICJvcGVyYXRvci8iCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24u
bmFtZSgpID09ICJvcGVyYXRvciUiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24u
bmFtZSgpID09ICJvcGVyYXRvciYiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24u
bmFtZSgpID09ICJvcGVyYXRvcnwiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24u
bmFtZSgpID09ICJvcGVyYXRvcl4iCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24u
bmFtZSgpID09ICJvcGVyYXRvcjw8IgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9u
Lm5hbWUoKSA9PSAib3ByZWF0b3I+PiIpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmlu
aXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChm
dW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcn4iKSB7CisgICAgICAgICAgICBp
ZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I9PSIK
KyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPCIK
KyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPD0i
CisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcj4i
CisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcj49
IikgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6
ZSgpICE9IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYg
KCFtYXRjaGVzKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCksIG1faW50cmluc2ljcy5ib29sVHlw
ZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9
PSAib3BlcmF0b3JbXSIpIHsKKyAgICAgICAgICAgIGlmICghY2hlY2tHZXR0ZXIoQ2hlY2tLaW5k
OjpJbmRleCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1l
KCkgPT0gIm9wZXJhdG9yW109IikgeworICAgICAgICAgICAgaWYgKCFjaGVja1NldHRlcihDaGVj
a0tpbmQ6OkluZGV4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9u
Lm5hbWUoKSA9PSAib3BlcmF0b3ImW10iKSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrQW5kZXIo
Q2hlY2tLaW5kOjpJbmRleCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgib3BlcmF0b3IuIikpIHsKKyAgICAgICAgICAgIGlmIChm
dW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNoZWNrU2V0dGVyKENoZWNrS2luZDo6RG90KSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAo
IWNoZWNrR2V0dGVyKENoZWNrS2luZDo6RG90KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgib3Bl
cmF0b3ImLiIpKSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrQW5kZXIoQ2hlY2tLaW5kOjpEb3Qp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkp
IHsKKyAgICAgICAgICAgIGlmICghY2hlY2tTaGFkZXJUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbikp
IHsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY3MoZnVuY3Rpb25E
ZWZpbml0aW9uKSkgeworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghY2hlY2tP
cGVyYXRvck92ZXJsb2FkKGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKKyAgICAgICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pIG92ZXJy
aWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZW51bWVyYXRpb25EZWZpbml0
aW9uLnR5cGUoKSk7CisKKyAgICAgICAgYXV0byYgYmFzZVR5cGUgPSBlbnVtZXJhdGlvbkRlZmlu
aXRpb24udHlwZSgpLnVuaWZ5Tm9kZSgpOworCisgICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVk
VHlwZT4oYmFzZVR5cGUpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8mIHVubmFtZWRCYXNlID0gZG93bmNhc3Q8
QVNUOjpVbm5hbWVkVHlwZT4oYmFzZVR5cGUpOworICAgICAgICBpZiAoIWlzPEFTVDo6VHlwZVJl
ZmVyZW5jZT4odW5uYW1lZEJhc2UpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8mIHR5cGVSZWZlcmVuY2VCYXNl
ID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkQmFzZSk7CisgICAgICAgIEFT
U0VSVCh0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGlmICghaXM8
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5
cGUoKSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5
cGUoKSk7CisgICAgICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzSW50KCkpIHsKKyAg
ICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBhdXRvIGVudW1lcmF0aW9uTWVtYmVycyA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5l
bnVtZXJhdGlvbk1lbWJlcnMoKTsKKworICAgICAgICBmb3IgKGF1dG8mIG1lbWJlciA6IGVudW1l
cmF0aW9uTWVtYmVycykgeworICAgICAgICAgICAgaWYgKCFtZW1iZXIuZ2V0KCkudmFsdWUoKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgYm9vbCBzdWNjZXNzOwor
ICAgICAgICAgICAgbWVtYmVyLmdldCgpLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKGF1dG8mIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZh
bHVlKTsKKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJnZh
bHVlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgp
KTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoKnVubmFtZWRUeXBlLCBl
bnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICAgICAgICAgIH0sIFsmXShSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZSYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoZW51
bWVyYXRpb25EZWZpbml0aW9uLCByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS5yZXNvbHZhYmxlVHlw
ZSgpKSk7CisgICAgICAgICAgICAgICAgfSksIGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgICAg
ICB9KSk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICBzZXRF
cnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGludDY0X3QgbmV4dFZhbHVlID0gMDsKKyAgICAgICAgZm9yIChhdXRvJiBt
ZW1iZXIgOiBlbnVtZXJhdGlvbk1lbWJlcnMpIHsKKyAgICAgICAgICAgIGlmIChtZW1iZXIuZ2V0
KCkudmFsdWUoKSkgeworICAgICAgICAgICAgICAgIGludDY0X3QgdmFsdWU7CisgICAgICAgICAg
ICAgICAgbWVtYmVyLmdldCgpLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFT
VDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gaW50ZWdlckxpdGVyYWwudmFsdWVGb3JTZWxlY3RlZFR5cGUoKTsKKyAgICAgICAg
ICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVn
ZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbC52YWx1ZUZvclNlbGVjdGVkVHlwZSgpOworICAgICAgICAgICAgICAgIH0sIFsmXShB
U1Q6OkZsb2F0TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0s
IFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAg
ICAgIG5leHRWYWx1ZSA9IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zdWNjZXNzb3IoKSh2YWx1ZSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1lbWJlci5nZXQoKS5zZXRW
YWx1ZShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbihBU1Q6OkludGVnZXJMaXRlcmFsKExleGVyOjpU
b2tlbihtZW1iZXIuZ2V0KCkub3JpZ2luKCkpLCBuZXh0VmFsdWUpKSk7CisgICAgICAgICAgICAg
ICAgbmV4dFZhbHVlID0gbmF0aXZlVHlwZURlY2xhcmF0aW9uLnN1Y2Nlc3NvcigpKG5leHRWYWx1
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGVudW1lcmF0aW9uTWVtYmVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0
byYgbWVtYmVyID0gZW51bWVyYXRpb25NZW1iZXJzW2ldLmdldCgpOworICAgICAgICAgICAgQVNT
RVJUKG1lbWJlci52YWx1ZSgpKTsKKyAgICAgICAgICAgIGludDY0X3QgdmFsdWU7CisgICAgICAg
ICAgICBtZW1iZXIudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRl
Z2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGlu
dGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAg
dmFsdWUgPSB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgICAgICB9LCBb
Jl0oQVNUOjpGbG9hdExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkJv
b2xlYW5MaXRlcmFsJikgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UmKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICB9KSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBl
bnVtZXJhdGlvbk1lbWJlcnMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBv
dGhlck1lbWJlciA9IGVudW1lcmF0aW9uTWVtYmVyc1tqXS5nZXQoKTsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQob3RoZXJNZW1iZXIudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBmYWls
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgb3RoZXJNZW1iZXIudmFsdWUoKS0+dmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsK
KyAgICAgICAgICAgICAgICAgICAgZmFpbCA9IHZhbHVlID09IGludGVnZXJMaXRlcmFsLnZhbHVl
KCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYg
dW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICBmYWlsID0gdmFs
dWUgPT0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICAgICAgICAgIH0s
IFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfSkpOworICAgICAg
ICAgICAgICAgIGlmIChmYWlsKSB7CisgICAgICAgICAgICAgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIGZvdW5kWmVybyA9IGZhbHNlOworICAgICAg
ICBmb3IgKGF1dG8mIG1lbWJlciA6IGVudW1lcmF0aW9uTWVtYmVycykgeworICAgICAgICAgICAg
QVNTRVJUKG1lbWJlci5nZXQoKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIG1lbWJlci5nZXQoKS52
YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBp
bnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIGlmIChpbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpID09IDApCisgICAgICAgICAgICAgICAgICAgIGZvdW5kWmVybyA9IHRydWU7CisgICAgICAg
ICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJM
aXRlcmFsKSB7CisgICAgICAgICAgICAgICAgaWYgKHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFs
dWUoKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICBmb3VuZFplcm8gPSB0cnVlOworICAgICAg
ICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9LCBb
Jl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1l
cmF0aW9uTWVtYmVyUmVmZXJlbmNlJikgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgfSkpOworICAgICAgICB9CisgICAgICAgIGlmICghZm91bmRa
ZXJvKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVS
ZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5y
ZXNvbHZlZFR5cGUoKSk7CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVSZWZlcmVu
Y2UpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2
YXJpYWJsZURlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7IC8vIEZJWE1FOiBNYWtlIHRoaXMg
d29yayB3aXRoIGFub255bW91cyB2YXJpYWJsZXMgd2hpY2ggZG9uJ3QgaGF2ZSB0eXBlcy4KKyAg
ICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSkgeworICAgICAgICAg
ICAgYXV0byYgbGhzVHlwZSA9ICp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKTsKKyAgICAgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigp
KTsKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCh2YXJpYWJsZURl
Y2xhcmF0aW9uLmluaXRpYWxpemVyKCkpOworICAgICAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9
IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgICAgICBhdXRvJiByaHMgPSBpdGVyYXRvci0+dmFs
dWU7CisgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKGxoc1R5cGUsIHN0YXRpY19jYXN0PEFT
VDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpOworICAgICAgICAgICAgfSwgWyZdKFJlZjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21t
aXQobGhzVHlwZSwgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkpKTsK
KyAgICAgICAgICAgIH0pLCByaHMpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAg
ICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXNzaWdubWVu
dEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7CisgICAg
ICAgIGF1dG8gbGVmdEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmFzc2lnbm1lbnRFeHByZXNz
aW9uLmxlZnQoKSk7CisgICAgICAgIEFTU0VSVChsZWZ0SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVu
ZCgpKTsKKyAgICAgICAgYXV0byYgbGhzVHlwZSA9IGxlZnRJdGVyYXRvci0+dmFsdWU7CisgICAg
ICAgIC8vIEZJWE1FOiBIb3cgdG8gZG8gbHZhbHVlIGFuZCBhZGRyZXNzIHNwYWNlIGFuYWx5c2lz
PworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQo
KSk7CisgICAgICAgIGF1dG8gcmlnaHRJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZhc3NpZ25t
ZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICAgICAgQVNTRVJUKHJpZ2h0SXRlcmF0b3IgIT0g
bV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgcmhzVHlwZSA9IHJpZ2h0SXRlcmF0b3It
PnZhbHVlOworICAgICAgICBhdXRvIHJlc3VsdFR5cGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgbGVmdCkgLT4gc3RkOjp1bmlx
dWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmlnaHQp
IC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgICAgICAgICAg
aWYgKG1hdGNoZXMoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KGxlZnQpLCBzdGF0aWNf
Y2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4ocmlnaHQpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGxlZnQtPmNsb25lKCkudGFrZVVuaXF1ZVB0cigpOworICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZT4mIHJpZ2h0KSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAg
ICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRU
eXBlJj4obGVmdCksIHJpZ2h0LT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAgICAgIH0pLCBy
aHNUeXBlKTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxl
ZnQpIC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4mIHJpZ2h0KSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gewor
ICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChzdGF0aWNfY2FzdDxBU1Q6OlVu
bmFtZWRUeXBlJj4ocmlnaHQpLCBsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAgICAg
IH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdodCkgLT4gc3RkOjp1bmlx
dWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hB
bmRDb21taXQobGVmdC0+cmVzb2x2YWJsZVR5cGUoKSwgcmlnaHQtPnJlc29sdmFibGVUeXBlKCkp
OworICAgICAgICAgICAgfSksIHJoc1R5cGUpOworICAgICAgICB9KSwgbGhzVHlwZSk7CisgICAg
ICAgIGlmICghcmVzdWx0VHlwZSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1h
cC5hZGQoJmFzc2lnbm1lbnRFeHByZXNzaW9uLCBXVEZNb3ZlKHJlc3VsdFR5cGUpKTsKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYgcmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICAgICAgYXV0
byBsVmFsdWVJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZyZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmxWYWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUKGxWYWx1ZUl0ZXJhdG9yICE9IG1fdHlwZU1h
cC5lbmQoKSk7CisgICAgICAgIGF1dG8mIGxoc1R5cGUgPSBsVmFsdWVJdGVyYXRvci0+dmFsdWU7
CisgICAgICAgIC8vIEZJWE1FOiBIb3cgdG8gZG8gbHZhbHVlIGFuZCBhZGRyZXNzIHNwYWNlIGFu
YWx5c2lzPworICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggdGhl
IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ncyBBbm9ueW1vdXNWYXJpYWJsZXMuCisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhw
cmVzc2lvbigpKTsKKyAgICAgICAgYXV0byBuZXdWYWx1ZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZp
bmQoJnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHByZXNzaW9uKCkpOworICAg
ICAgICBBU1NFUlQobmV3VmFsdWVJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAg
ICBhdXRvJiBuZXdWYWx1ZVR5cGUgPSBuZXdWYWx1ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAg
YXV0byBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
JiByaWdodCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoc3RhdGlj
X2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KGxlZnQpLCBzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRU
eXBlJj4ocmlnaHQpKTsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2U+JiByaWdodCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPihs
ZWZ0KSwgcmlnaHQtPnJlc29sdmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgIH0pLCBuZXdWYWx1
ZVR5cGUpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGVm
dCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJpZ2h0KSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoc3Rh
dGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHJpZ2h0KSwgbGVmdC0+cmVzb2x2YWJsZVR5cGUo
KSkpOworICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJp
Z2h0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4o
bWF0Y2hBbmRDb21taXQobGVmdC0+cmVzb2x2YWJsZVR5cGUoKSwgcmlnaHQtPnJlc29sdmFibGVU
eXBlKCkpKTsKKyAgICAgICAgICAgIH0pLCBuZXdWYWx1ZVR5cGUpOworICAgICAgICB9KSwgbGhz
VHlwZSk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHByZXNzaW9uKCkpOworICAgICAg
ICBhdXRvIHJlc3VsdEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJnJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24ucmVzdWx0RXhwcmVzc2lvbigpKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdEl0ZXJh
dG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIHJlc3VsdFR5cGUgPSByZXN1
bHRJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsKKyAgICAgICAgICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiwg
cmVzdWx0LT5jbG9uZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBh
ZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2U+JiByZXN1bHQpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBl
TWFwLmFkZCgmcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiwgcmVzdWx0LmNvcHlSZWYoKSk7Cisg
ICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkp
OworICAgICAgICB9KSwgcmVzdWx0VHlwZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5w
b2ludGVyKCkpOworICAgICAgICBhdXRvIHBvaW50ZXJJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5k
KCZkZXJlZmVyZW5jZUV4cHJlc3Npb24ucG9pbnRlcigpKTsKKyAgICAgICAgQVNTRVJUKHBvaW50
ZXJJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiB0eXBlID0gcG9p
bnRlckl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byogcG9pbnRlclR5cGUgPSBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB0eXBl
KSAtPiBBU1Q6OlBvaW50ZXJUeXBlKiB7CisgICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSB0
eXBlLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4o
dW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAg
IGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2Rl
KTsKKyAgICAgICAgICAgIGlmICghaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuICZkb3du
Y2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgIH0sIFtdKFJlZjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHR5cGUpIC0+IEFTVDo6UG9pbnRlclR5cGUqIHsKKyAg
ICAgICAgICAgIGF1dG8qIHJlc29sdmVkVHlwZSA9IHR5cGUtPnJlc29sdmFibGVUeXBlKCkucmVz
b2x2ZWRUeXBlKCk7CisgICAgICAgICAgICBpZiAoIXJlc29sdmVkVHlwZSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IHJlc29s
dmVkVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5
cGU+KHVuaWZ5Tm9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
ICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5
Tm9kZSk7CisgICAgICAgICAgICBpZiAoIWlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBl
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiAm
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICB9KSwgdHlw
ZSk7CisgICAgICAgIGlmICghcG9pbnRlclR5cGUpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IEhvdyB0
byBkbyBsdmFsdWUgYW5kIGFkZHJlc3Mgc3BhY2UgYW5hbHlzaXM/CisgICAgICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZGVyZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVyVHlw
ZS0+Y2xvbmUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhw
cmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KG1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAg
ICAgIGF1dG8gbFZhbHVlSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmbWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUKGxWYWx1ZUl0ZXJhdG9yICE9IG1fdHlw
ZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIGVsZW1lbnRUeXBlID0gbFZhbHVlSXRlcmF0b3It
PnZhbHVlOworICAgICAgICBhdXRvKiBsVmFsdWVUeXBlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VW
aXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdHlwZSkgLT4gQVNUOjpVbm5h
bWVkVHlwZSogeworICAgICAgICAgICAgcmV0dXJuICZzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRU
eXBlJj4odHlwZSk7CisgICAgICAgIH0sIFtdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4m
IHR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgICAgIHJldHVybiB0eXBlLT5y
ZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpOworICAgICAgICB9KSwgZWxlbWVudFR5cGUp
OworICAgICAgICBpZiAoIWxWYWx1ZVR5cGUpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IEhvdyB0byBk
byBsdmFsdWUgYW5kIGFkZHJlc3Mgc3BhY2UgYW5hbHlzaXM/CisgICAgICAgIEFTVDo6UmVmZXJl
bmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6
QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFw
LmFkZCgmbWFrZVBvaW50ZXJFeHByZXNzaW9uLCBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UG9pbnRl
clR5cGU+KExleGVyOjpUb2tlbihtYWtlUG9pbnRlckV4cHJlc3Npb24ub3JpZ2luKCkpLCBhZGRy
ZXNzU3BhY2UsIGxWYWx1ZVR5cGUtPmNsb25lKCkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChh
ZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChtYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBsVmFsdWVJ
dGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmxW
YWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUKGxWYWx1ZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQo
KSk7CisgICAgICAgIGF1dG8mIGVsZW1lbnRUeXBlID0gbFZhbHVlSXRlcmF0b3ItPnZhbHVlOwor
ICAgICAgICBhdXRvKiB1bm5hbWVkVHlwZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
XShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUq
IHsKKyAgICAgICAgICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHR5
cGUpOworICAgICAgICB9LCBbXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiB0eXBlKSAt
PiBBU1Q6OlVubmFtZWRUeXBlKiB7CisgICAgICAgICAgICByZXR1cm4gdHlwZS0+cmVzb2x2YWJs
ZVR5cGUoKS5yZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgfSksIGVsZW1lbnRUeXBlKTsKKyAgICAg
ICAgaWYgKCF1bm5hbWVkVHlwZSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSB1bm5hbWVk
VHlwZS0+dW5pZnlOb2RlKCk7CisgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlm
eU5vZGUpKSB7CisgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6
VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVy
VHlwZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgcG9pbnRlclR5cGUg
PSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IEJlY29tZSBhIENvbnZlcnRQb2ludGVyVG9BcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24KKyAgICAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJm1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVJl
ZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9y
aWdpbigpKSwgcG9pbnRlclR5cGUuYWRkcmVzc1NwYWNlKCksIHBvaW50ZXJUeXBlLmVsZW1lbnRU
eXBlKCkuY2xvbmUoKSkpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBGSVhNRTogSG93IHRvIGRvIGx2YWx1ZSBhbmQgYWRk
cmVzcyBzcGFjZSBhbmFseXNpcz8KKyAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4o
dW5uYW1lZFR5cGUpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNh
c3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogSG93IHRvIGRvIGx2YWx1ZSBhbmQgYWRkcmVzcyBzcGFjZSBhbmFseXNpcz8KKyAgICAgICAg
ICAgICAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UgPSBB
U1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBTYXZlIHRoZSBudW1iZXIgb2YgZWxlbWVudHMuCisgICAgICAgICAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uLCBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9r
ZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwg
YXJyYXlUeXBlLnR5cGUoKS5jbG9uZSgpKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogSG93IHRv
IGRvIGx2YWx1ZSBhbmQgYWRkcmVzcyBzcGFjZSBhbmFseXNpcz8KKyAgICAgICAgQVNUOjpSZWZl
cmVuY2VUeXBlOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBl
OjpBZGRyZXNzU3BhY2U6OkRldmljZTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVN
YXAuYWRkKCZtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBzdGQ6Om1ha2VfdW5pcXVlPEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbi5vcmlnaW4oKSksIGFkZHJlc3NTcGFjZSwgdW5uYW1lZFR5cGUtPmNsb25lKCkpKTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsK
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lv
bikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3RFeHByZXNz
aW9uLmJhc2UoKSk7CisgICAgICAgIGF1dG8gYmFzZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQo
JmRvdEV4cHJlc3Npb24uYmFzZSgpKTsKKyAgICAgICAgQVNTRVJUKGJhc2VJdGVyYXRvciAhPSBt
X3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBiYXNlVHlwZSA9IGJhc2VJdGVyYXRvci0+
dmFsdWU7CisgICAgICAgIGF1dG8qIGJhc2VVbmlmeU5vZGUgPSBXVEY6OnZpc2l0KFdURjo6bWFr
ZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgYmFzZVR5cGUpIC0+IEFT
VDo6VHlwZSogeworICAgICAgICAgICAgcmV0dXJuICZiYXNlVHlwZS0+dW5pZnlOb2RlKCk7Cisg
ICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBiYXNlVHlwZSkgLT4g
QVNUOjpUeXBlKiB7CisgICAgICAgICAgICBpZiAoIWJhc2VUeXBlLT5yZXNvbHZhYmxlVHlwZSgp
LnJlc29sdmVkVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxib29s
Pihjb21taXQoYmFzZVR5cGUtPnJlc29sdmFibGVUeXBlKCkpKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gJmJh
c2VUeXBlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpLT51bmlmeU5vZGUoKTsKKyAg
ICAgICAgfSksIGJhc2VUeXBlKTsKKyAgICAgICAgaWYgKCFiYXNlVW5pZnlOb2RlKSB7CisgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGF1dG8gd3JhcHBlZEJhc2VUeXBlID0gKFsmXSgpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4oKmJhc2VVbmlm
eU5vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBl
PigqYmFzZVVuaWZ5Tm9kZSkuY2xvbmUoKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIEFTU0VSVChpczxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGRv
dEV4cHJlc3Npb24ub3JpZ2luKCkpLCBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oKmJhc2VVbmlm
eU5vZGUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSkoKTsKKworICAgICAgICBPcHRpb25h
bDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4gY2FzdFJldHVyblR5cGU7
CisKKyAgICAgICAgUmVzb2x2aW5nVHlwZSBnZXRBcmd1bWVudFR5cGUod3JhcHBlZEJhc2VUeXBl
LT5jbG9uZSgpKTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2
aW5nVHlwZT4+IGdldEFyZ3VtZW50VHlwZXM7CisgICAgICAgIGdldEFyZ3VtZW50VHlwZXMuYXBw
ZW5kKFdURk1vdmUoZ2V0QXJndW1lbnRUeXBlKSk7CisgICAgICAgIGF1dG8qIGdldEZ1bmN0aW9u
ID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVHZXRP
dmVybG9hZHMoKSwgZ2V0QXJndW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUpOworICAgICAgICBB
U1Q6OlVubmFtZWRUeXBlKiBnZXRSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGdl
dEZ1bmN0aW9uKQorICAgICAgICAgICAgZ2V0UmV0dXJuVHlwZSA9ICZnZXRGdW5jdGlvbi0+dHlw
ZSgpOworCisgICAgICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb24gPSBu
dWxscHRyOworICAgICAgICBBU1Q6OlVubmFtZWRUeXBlKiBhbmRSZXR1cm5UeXBlID0gbnVsbHB0
cjsKKyAgICAgICAgYXV0byBjb21wdXRlQW5kQXJndW1lbnRUeXBlID0gWyZdKEFTVDo6VW5uYW1l
ZFR5cGUmIHVubmFtZWRUeXBlKSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7CisgICAgICAg
ICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4geyB1bm5hbWVkVHlwZS5jbG9uZSgpIH07CisgICAgICAgICAgICBp
ZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4o
ZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNl
OjpUaHJlYWQsIGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkudHlwZSgpLmNs
b25lKCkpIH07CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5
cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBy
ZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihkb3RF
eHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRo
cmVhZCwgZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBlKCkuY2xvbmUo
KSkgfTsKKyAgICAgICAgfTsKKyAgICAgICAgYXV0byBjb21wdXRlQW5kUmV0dXJuVHlwZSA9IFsm
XShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogewor
ICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBl
KS5lbGVtZW50VHlwZSgpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH07
CisgICAgICAgIGF1dG8gYW5kQXJndW1lbnRUeXBlID0gY29tcHV0ZUFuZEFyZ3VtZW50VHlwZShz
dGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4od3JhcHBlZEJhc2VUeXBlKSk7CisgICAgICAg
IGlmIChhbmRBcmd1bWVudFR5cGUpIHsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhbmRBcmd1bWVudFR5cGVzOworICAgICAgICAgICAg
YW5kQXJndW1lbnRUeXBlcy5hcHBlbmQoV1RGTW92ZSgqYW5kQXJndW1lbnRUeXBlKSk7CisgICAg
ICAgICAgICBhbmRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RFeHBy
ZXNzaW9uLnBvc3NpYmxlQW5kT3ZlcmxvYWRzKCksIGFuZEFyZ3VtZW50VHlwZXMsIGNhc3RSZXR1
cm5UeXBlKTsKKyAgICAgICAgICAgIGlmIChhbmRGdW5jdGlvbikKKyAgICAgICAgICAgICAgICBh
bmRSZXR1cm5UeXBlID0gY29tcHV0ZUFuZFJldHVyblR5cGUoYW5kRnVuY3Rpb24tPnR5cGUoKSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWdldFJldHVyblR5cGUgJiYgIWFuZFJldHVyblR5
cGUpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoZ2V0UmV0dXJuVHlwZSAmJiBhbmRSZXR1cm5UeXBlICYmICFt
YXRjaGVzKCpnZXRSZXR1cm5UeXBlLCAqYW5kUmV0dXJuVHlwZSkpIHsKKyAgICAgICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSZXNv
bHZpbmdUeXBlIHNldEFyZ3VtZW50MVR5cGUod3JhcHBlZEJhc2VUeXBlLT5jbG9uZSgpKTsKKyAg
ICAgICAgUmVzb2x2aW5nVHlwZSBzZXRBcmd1bWVudDJUeXBlKGdldFJldHVyblR5cGUgPyBnZXRS
ZXR1cm5UeXBlLT5jbG9uZSgpIDogYW5kUmV0dXJuVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIFZl
Y3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBzZXRBcmd1bWVudFR5
cGVzOworICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZChXVEZNb3ZlKHNldEFyZ3VtZW50
MVR5cGUpKTsKKyAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoV1RGTW92ZShzZXRBcmd1
bWVudDJUeXBlKSk7CisgICAgICAgIGF1dG8qIHNldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9u
T3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVTZXRPdmVybG9hZHMoKSwgc2V0QXJn
dW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUpOworICAgICAgICBpZiAoc2V0RnVuY3Rpb24pIHsK
KyAgICAgICAgICAgIGlmICghbWF0Y2hlcyhzZXRGdW5jdGlvbi0+dHlwZSgpLCBzdGF0aWNfY2Fz
dDxBU1Q6OlVubmFtZWRUeXBlJj4od3JhcHBlZEJhc2VUeXBlKSkpIHsKKyAgICAgICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIb3cgdG8gZG8gbHZhbHVlIGFuZCBhZGRyZXNz
IHNwYWNlIGFuYWx5c2lzPworCisgICAgICAgIC8vIEZJWE1FOiBHZW5lcmF0ZSB0aGUgY2FsbCBl
eHByZXNzaW9ucworICAgICAgICAvKlZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNz
aW9uPj4gZ2V0QXJndW1lbnRzOworICAgICAgICBnZXRBcmd1bWVudHMuYXBwZW5kKGRvdEV4cHJl
c3Npb24uYmFzZSgpKTsgLy8gRklYTUU6IFRoaXMgaGFzIHRvIGJlIHRoZSBzYW1lIGJhc2UgYXMg
ZG90RXhwcmVzc2lvbi5iYXNlKCkuCisgICAgICAgIGF1dG8gY2FsbEZvckdldCA9IHN0ZDo6bWFr
ZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRvdEV4cHJlc3Npb24u
b3JpZ2luKCkpLCBkb3RFeHByZXNzaW9uLmdldEZ1bmN0aW9uTmFtZSgpLCBXVEZNb3ZlKGdldEFy
Z3VtZW50cykpOworICAgICAgICBjYWxsRm9yR2V0LT5zZXRGdW5jdGlvbigqZ2V0RnVuY3Rpb24p
OworICAgICAgICBhdXRvIGdldFJlc3VsdFR5cGUgPSBnZXRGdW5jdGlvbi0+dHlwZSgpLmNsb25l
KCk7Ki8KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJikgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVmZXJlbmNlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxl
KCkpOworICAgICAgICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlwZSgp
KTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZ2YXJpYWJsZVJlZmVy
ZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlwZSgpLT5jbG9uZSgpKTsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAg
ICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBBU1NFUlQocmV0dXJuU3RhdGVtZW50LmZ1bmN0aW9uKCkpOwor
ICAgICAgICBpZiAocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCgqcmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOworICAgICAgICAgICAgYXV0
byB2YWx1ZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkp
OworICAgICAgICAgICAgQVNTRVJUKHZhbHVlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsK
KyAgICAgICAgICAgIGF1dG8mIHJlc3VsdFR5cGUgPSB2YWx1ZUl0ZXJhdG9yLT52YWx1ZTsKKyAg
ICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1bHRUeXBlKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhyZXR1cm5TdGF0ZW1lbnQuZnVuY3Rpb24oKS0+dHlw
ZSgpLCBzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4ocmVzdWx0VHlwZSkpOworICAgICAg
ICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc3VsdFR5cGUpIC0+
IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFu
ZENvbW1pdChyZXR1cm5TdGF0ZW1lbnQuZnVuY3Rpb24oKS0+dHlwZSgpLCByZXN1bHRUeXBlLT5y
ZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgICAgICAgICB9KSwgcmVzdWx0VHlwZSk7CisgICAgICAg
ICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbWF0Y2hlcyhyZXR1cm5TdGF0
ZW1lbnQuZnVuY3Rpb24oKS0+dHlwZSgpLCBtX2ludHJpbnNpY3Mudm9pZFR5cGUoKSkpCisgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVy
VHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBGb2xsb3dpbmcgcG9pbnRlciB0eXBl
cyBjYW4gY2F1c2UgaW5maW5pdGUgbG9vcHMgYmVjYXVzZSBvZiBkYXRhIHN0cnVjdHVyZXMKKyAg
ICAgICAgLy8gbGlrZSBsaW5rZWQgbGlzdHMuCisgICAgICAgIC8vIEZJWE1FOiBNYWtlIHN1cmUg
dGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW1wdHkKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZvbGxv
d2luZyBhcnJheSByZWZlcmVuY2UgdHlwZXMgY2FuIGNhdXNlIGluZmluaXRlIGxvb3BzIGJlY2F1
c2Ugb2YgZGF0YQorICAgICAgICAvLyBzdHJ1Y3R1cmVzIGxpa2UgbGlua2VkIGxpc3RzLgorICAg
ICAgICAvLyBGSVhNRTogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGVtcHR5Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJh
bCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gcmVmID0gYWRvcHRSZWYoKm5ldyBSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZShpbnRlZ2VyTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgYXV0
byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZpbnRlZ2VyTGl0ZXJhbCwgV1RGTW92ZShyZWYp
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYg
dW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gcmVm
ID0gYWRvcHRSZWYoKm5ldyBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSh1bnNpZ25lZEludGVnZXJM
aXRlcmFsLnR5cGUoKSkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQo
JnVuc2lnbmVkSW50ZWdlckxpdGVyYWwsIFdURk1vdmUocmVmKSk7CisgICAgICAgIEFTU0VSVF9V
TlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9p
ZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgYXV0byByZWYgPSBhZG9wdFJlZigqbmV3IFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
KGZsb2F0TGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVN
YXAuYWRkKCZmbG9hdExpdGVyYWwsIFdURk1vdmUocmVmKSk7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2
aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGF1dG8gcmVmID0gYWRvcHRSZWYoKm5ldyBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShudWxs
TGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRk
KCZudWxsTGl0ZXJhbCwgV1RGTW92ZShyZWYpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRS
ZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFT
VDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZib29sZWFuTGl0ZXJhbCwgQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihib29sZWFuTGl0ZXJhbC5vcmlnaW4oKSks
IG1faW50cmluc2ljcy5ib29sVHlwZSgpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVz
dWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4
cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIEFTU0VSVChjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5l
bnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgIGF1dG8mIGVudW1lcmF0aW9uRGVmaW5p
dGlvbiA9ICpjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVt
ZXJhdGlvbkRlZmluaXRpb24oKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAu
YWRkKCZjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSwgQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihjb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZS5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbikpOwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwor
ICAgIH0KKworICAgIGJvb2wgaXNCb29sVHlwZShSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBsZWZ0KSAtPiBib29sIHsKKyAgICAgICAgICAg
IHJldHVybiBtYXRjaGVzKHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPihsZWZ0KSwgbV9p
bnRyaW5zaWNzLmJvb2xUeXBlKCkpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlPiYgbGVmdCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQobV9pbnRyaW5zaWNzLmJvb2xUeXBlKCksIGxlZnQtPnJl
c29sdmFibGVUeXBlKCkpKTsKKyAgICAgICAgfSksIHJlc29sdmluZ1R5cGUpOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJl
c3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNh
bE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKKyAgICAgICAgYXV0byBvcGVyYW5kSXRlcmF0b3Ig
PSBtX3R5cGVNYXAuZmluZCgmbG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKKyAgICAg
ICAgQVNTRVJUKG9wZXJhbmRJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBh
dXRvJiBvcGVyYW5kVHlwZSA9IG9wZXJhbmRJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGlmICgh
aXNCb29sVHlwZShvcGVyYW5kVHlwZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5
cGVNYXAuYWRkKCZsb2dpY2FsTm90RXhwcmVzc2lvbiwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KExleGVyOjpUb2tlbihsb2dpY2FsTm90RXhwcmVzc2lvbi5vcmlnaW4oKSksIG1faW50cmluc2lj
cy5ib29sVHlwZSgpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1
bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxFeHBy
ZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOworICAgICAgICBhdXRvIGxl
ZnRJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOwor
ICAgICAgICBBU1NFUlQobGVmdEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAg
IGF1dG8mIGxlZnRUeXBlID0gbGVmdEl0ZXJhdG9yLT52YWx1ZTsKKworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIGF1dG8gcmln
aHRJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZsb2dpY2FsRXhwcmVzc2lvbi5yaWdodCgpKTsK
KyAgICAgICAgQVNTRVJUKHJpZ2h0SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAg
ICAgYXV0byYgcmlnaHRUeXBlID0gcmlnaHRJdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAgaWYg
KCFpc0Jvb2xUeXBlKGxlZnRUeXBlKSB8fCAhaXNCb29sVHlwZShyaWdodFR5cGUpKSB7CisgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmbG9naWNhbEV4cHJlc3Npb24sIEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obG9naWNhbEV4cHJlc3Npb24ub3Jp
Z2luKCkpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7CisgICAgICAg
IGF1dG8gY29uZGl0aW9uYWxJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZpZlN0YXRlbWVudC5j
b25kaXRpb25hbCgpKTsKKyAgICAgICAgQVNTRVJUKGNvbmRpdGlvbmFsSXRlcmF0b3IgIT0gbV90
eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgY29uZGl0aW9uYWxUeXBlID0gY29uZGl0aW9u
YWxJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGlmICghaXNCb29sVHlwZShjb25kaXRpb25hbFR5
cGUpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5ib2R5KCkpOwor
ICAgICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkKKyAgICAgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7CisgICAgfQorCisgICAgdm9pZCB2
aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAgYXV0
byBjb25kaXRpb25hbEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJndoaWxlTG9vcC5jb25kaXRp
b25hbCgpKTsKKyAgICAgICAgQVNTRVJUKGNvbmRpdGlvbmFsSXRlcmF0b3IgIT0gbV90eXBlTWFw
LmVuZCgpKTsKKyAgICAgICAgYXV0byYgY29uZGl0aW9uYWxUeXBlID0gY29uZGl0aW9uYWxJdGVy
YXRvci0+dmFsdWU7CisgICAgICAgIGlmICghaXNCb29sVHlwZShjb25kaXRpb25hbFR5cGUpKSB7
CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKKyAgICB9CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAg
ICAgICAgYXV0byBjb25kaXRpb25hbEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmRvV2hpbGVM
b29wLmNvbmRpdGlvbmFsKCkpOworICAgICAgICBBU1NFUlQoY29uZGl0aW9uYWxJdGVyYXRvciAh
PSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBjb25kaXRpb25hbFR5cGUgPSBjb25k
aXRpb25hbEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKCFpc0Jvb2xUeXBlKGNvbmRpdGlv
bmFsVHlwZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9v
cCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURl
Y2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgICAgIH0sIFsmXShzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbikgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KCpleHByZXNzaW9uKTsKKyAgICAgICAgfSksIGZvckxvb3AuaW5pdGlhbGl6YXRpb24oKSk7
CisgICAgICAgIGlmIChmb3JMb29wLmNvbmRpdGlvbigpKSB7CisgICAgICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoKmZvckxvb3AuY29uZGl0aW9uKCkpOworICAgICAgICAgICAgYXV0byBjb25k
aXRpb25JdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKGZvckxvb3AuY29uZGl0aW9uKCkpOworICAg
ICAgICAgICAgQVNTRVJUKGNvbmRpdGlvbkl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7Cisg
ICAgICAgICAgICBhdXRvJiBjb25kaXRpb25UeXBlID0gY29uZGl0aW9uSXRlcmF0b3ItPnZhbHVl
OworICAgICAgICAgICAgaWYgKCFpc0Jvb2xUeXBlKGNvbmRpdGlvblR5cGUpKSB7CisgICAgICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvckxvb3AuaW5jcmVtZW50KCkpCisgICAgICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZvckxvb3AuaW5jcmVtZW50KCkpOworICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoZm9yTG9vcC5ib2R5KCkpOworICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7Cisg
ICAgICAgIGF1dG8gdmFsdWVJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZzd2l0Y2hTdGF0ZW1l
bnQudmFsdWUoKSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5l
bmQoKSk7CisgICAgICAgIGF1dG8mIHZhbHVlVHlwZSA9IHZhbHVlSXRlcmF0b3ItPnZhbHVlOwor
ICAgICAgICBhdXRvIHZhbHVlVW5pZnlOb2RlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IEFTVDo6VHlwZSogewor
ICAgICAgICAgICAgcmV0dXJuICZsZWZ0LT51bmlmeU5vZGUoKTsKKyAgICAgICAgfSwgWyZdKFJl
ZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxlZnQpIC0+IEFTVDo6VHlwZSogeworICAgICAg
ICAgICAgaWYgKCFsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxib29sPihjb21taXQobGVmdC0+cmVzb2x2YWJs
ZVR5cGUoKSkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiAmbGVmdC0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZl
ZFR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgIH0pLCB2YWx1ZVR5cGUpOworICAgICAgICBp
ZiAoIWlzPEFTVDo6TmFtZWRUeXBlPigqdmFsdWVVbmlmeU5vZGUpKSB7CisgICAgICAgICAgICBz
ZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8m
IHZhbHVlTmFtZWRVbmlmeU5vZGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oKnZhbHVlVW5p
ZnlOb2RlKTsKKyAgICAgICAgaWYgKCEoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHZh
bHVlTmFtZWRVbmlmeU5vZGUpICYmIGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
Pih2YWx1ZU5hbWVkVW5pZnlOb2RlKS5pc0ludCgpKQorICAgICAgICAgICAgJiYgIWlzPEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uPih2YWx1ZU5hbWVkVW5pZnlOb2RlKSkgeworICAgICAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgaGFzRGVmYXVsdCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8mIHN3aXRjaENhc2Ug
OiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkgeworICAgICAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7CisgICAgICAgICAgICBpZiAoIXN3aXRjaENh
c2UudmFsdWUoKSkgeworICAgICAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbCBzdWNj
ZXNzOworICAgICAgICAgICAgc3dpdGNoQ2FzZS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAg
ICAgICAgIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHN0YXRpY19jYXN0
PEFTVDo6VW5uYW1lZFR5cGUmPih2YWx1ZVR5cGUpLCBpbnRlZ2VyTGl0ZXJhbC50eXBlKCkpKTsK
KyAgICAgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdmFs
dWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHZhbHVlVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSwgaW50ZWdl
ckxpdGVyYWwudHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfSksIHZhbHVlVHlwZSk7CisgICAg
ICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVn
ZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFdURjo6dmlzaXQoV1RGOjpt
YWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB2YWx1ZVR5cGUpIC0+
IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0
Y2hBbmRDb21taXQoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHZhbHVlVHlwZSksIHVu
c2lnbmVkSW50ZWdlckxpdGVyYWwudHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfSwgWyZdKFJl
ZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHZhbHVlVHlwZSkgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdCh2YWx1
ZVR5cGUtPnJlc29sdmFibGVUeXBlKCksIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudHlwZSgpKSk7
CisgICAgICAgICAgICAgICAgfSksIHZhbHVlVHlwZSk7CisgICAgICAgICAgICB9LCBbJl0oQVNU
OjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3Mg
PSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5
cGUmPih2YWx1ZVR5cGUpLCBmbG9hdExpdGVyYWwudHlwZSgpKSk7CisgICAgICAgICAgICAgICAg
fSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHZhbHVlVHlwZSkgLT4gYm9vbCB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENv
bW1pdCh2YWx1ZVR5cGUtPnJlc29sdmFibGVUeXBlKCksIGZsb2F0TGl0ZXJhbC50eXBlKCkpKTsK
KyAgICAgICAgICAgICAgICB9KSwgdmFsdWVUeXBlKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6
Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBX
VEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUm
Pih2YWx1ZVR5cGUpLCBudWxsTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9LCBb
Jl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0
KHZhbHVlVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSwgbnVsbExpdGVyYWwudHlwZSgpKSk7CisgICAg
ICAgICAgICAgICAgfSksIHZhbHVlVHlwZSk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29s
ZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHZhbHVlVHlwZSkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKHN0YXRpY19jYXN0
PEFTVDo6VW5uYW1lZFR5cGUmPih2YWx1ZVR5cGUpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSk7
CisgICAgICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHZh
bHVlVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxib29sPihtYXRjaEFuZENvbW1pdChtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSwgdmFsdWVUeXBl
LT5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfSksIHZhbHVlVHlwZSk7Cisg
ICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Up
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25N
ZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAgICAgICAgICAgICAg
IHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG1hdGNoZXMoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHZhbHVlVHlwZSks
ICpjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlv
bkRlZmluaXRpb24oKSk7CisgICAgICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mIHZhbHVlVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdCgqY29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25EZWZpbml0aW9uKCksIHZhbHVl
VHlwZS0+cmVzb2x2YWJsZVR5cGUoKSkpOworICAgICAgICAgICAgICAgIH0pLCB2YWx1ZVR5cGUp
OworICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN3aXRjaFN0
YXRlbWVudC5zd2l0Y2hDYXNlcygpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvJiBm
aXJzdENhc2UgPSBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKVtpXTsKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygp
LnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2Vjb25kQ2FzZSA9IHN3aXRj
aFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpW2pdOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxib29sPihmaXJzdENhc2UudmFsdWUoKSkgIT0gc3RhdGlj
X2Nhc3Q8Ym9vbD4oc2Vjb25kQ2FzZS52YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KGZpcnN0Q2Fz
ZS52YWx1ZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
Ym9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmaXJzdENhc2UudmFsdWUoKS0+
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgZmlyc3RJbnRl
Z2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICBzZWNvbmRDYXNlLnZhbHVlKCktPnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIHNlY29uZEludGVn
ZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmlyc3RJbnRl
Z2VyTGl0ZXJhbC52YWx1ZSgpICE9IHNlY29uZEludGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHNlY29u
ZFVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nl
c3MgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihmaXJzdEludGVnZXJMaXRlcmFsLnZhbHVlKCkpICE9
IHN0YXRpY19jYXN0PGludDY0X3Q+KHNlY29uZFVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUo
KSk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYpIHsKKyAg
ICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAgICAg
ICAgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJikgeworICAgICAgICAgICAgICAg
ICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZSYpIHsKKyAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgIH0sIFsm
XShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIGZpcnN0VW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCkgeworICAgICAgICAgICAgICAgICAgICBzZWNvbmRDYXNlLnZhbHVlKCktPnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIHNlY29uZEludGVnZXJMaXRlcmFs
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gc3RhdGljX2Nhc3Q8aW50NjRf
dD4oZmlyc3RVbnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCkpICE9IHN0YXRpY19jYXN0PGlu
dDY0X3Q+KHNlY29uZEludGVnZXJMaXRlcmFsLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAg
ICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiBzZWNvbmRVbnNpZ25lZEludGVn
ZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmlyc3RVbnNp
Z25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCkgIT0gc2Vjb25kVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bC52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwm
KSB7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAg
ICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAg
ICAgICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UmKSB7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAg
ICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFT
VDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxp
dGVyYWwmKSB7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGZpcnN0Q29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kQ2FzZS52
YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJikg
eworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
JikgeworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmKSB7Cisg
ICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAg
ICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAg
ICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UmIHNlY29uZENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmlyc3RDb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbk1lbWJlcigpICE9IHNl
Y29uZENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmVudW1lcmF0
aW9uTWVtYmVyKCk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICB9
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWhhc0RlZmF1bHQp
IHsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4odmFsdWVO
YW1lZFVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAgICAgICBIYXNoU2V0PGludDY0X3Q+IHZhbHVl
czsKKyAgICAgICAgICAgICAgICBib29sIHplcm9WYWx1ZUV4aXN0czsKKyAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkg
eworICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2hDYXNlLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50
ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA9IGludGVnZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCk7CisgICAgICAgICAg
ICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50
ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbC52YWx1ZUZvclNlbGVjdGVkVHlwZSgpOworICAgICAgICAgICAgICAgICAg
ICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6TnVs
bExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJS
ZWZlcmVuY2UmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXZh
bHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgemVyb1ZhbHVlRXhpc3RzID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFk
ZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJvb2wgc3VjY2Vz
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24+KHZhbHVlTmFtZWRVbmlmeU5vZGUpLml0ZXJhdGVBbGxWYWx1ZXMoWyZdKGludDY0X3Qg
dmFsdWUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXplcm9WYWx1ZUV4aXN0cykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVzLmNvbnRhaW5zKHZhbHVlKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGlmICghc3VjY2Vzcykg
eworICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHZhbHVlTmFtZWRV
bmlmeU5vZGUpKTsKKyAgICAgICAgICAgICAgICBIYXNoU2V0PEFTVDo6RW51bWVyYXRpb25NZW1i
ZXIqPiB2YWx1ZXM7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNlIDogc3dp
dGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNo
Q2FzZS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRl
cmFsJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsm
XShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRl
cmFsJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0
aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJl
ZmVyZW5jZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50RXhwcmVz
c2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmVudW1lcmF0aW9uTWVtYmVyKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFkZChjb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbk1lbWJlcigpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8m
IGVudW1lcmF0aW9uTWVtYmVyIDogZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+
KHZhbHVlTmFtZWRVbmlmeU5vZGUpLmVudW1lcmF0aW9uTWVtYmVycygpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghdmFsdWVzLmNvbnRhaW5zKCZlbnVtZXJhdGlvbk1lbWJlci5nZXQoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBBU1NFUlQoY29tbWFFeHByZXNzaW9uLmxpc3QoKS5zaXplKCkgPiAwKTsKKyAgICAgICAgVmlz
aXRvcjo6dmlzaXQoY29tbWFFeHByZXNzaW9uKTsKKyAgICAgICAgYXV0byBsYXN0SXRlcmF0b3Ig
PSBtX3R5cGVNYXAuZmluZChzdGF0aWNfY2FzdDxFeHByZXNzaW9uJj4oY29tbWFFeHByZXNzaW9u
Lmxpc3QoKS5sYXN0KCkpKTsKKyAgICAgICAgQVNTRVJUKGxhc3RJdGVyYXRvciAhPSBtX3R5cGVN
YXAuZW5kKCkpOworICAgICAgICBhdXRvJiBsYXN0VHlwZSA9IGxhc3RJdGVyYXRvci0+dmFsdWU7
CisgICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oc3RkOjp1bmlxdWVfcHRy
PEFTVDo6VW5uYW1lZFR5cGU+JiBsYXN0VHlwZSkgeworICAgICAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3R5cGVNYXAuYWRkKCZjb21tYUV4cHJlc3Npb24sIGxhc3RUeXBlLT5jbG9uZSgpKTsK
KyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRy
eSk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsYXN0VHlw
ZSkgeworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZjb21tYUV4
cHJlc3Npb24sIGxhc3RUeXBlLmNvcHlSZWYoKSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICB9KSwgbGFzdFR5cGUp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYgdGVybmFy
eUV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
dGVybmFyeUV4cHJlc3Npb24ucHJlZGljYXRlKCkpOworICAgICAgICBhdXRvIHByZWRpY2F0ZUl0
ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJnRlcm5hcnlFeHByZXNzaW9uLnByZWRpY2F0ZSgpKTsK
KyAgICAgICAgQVNTRVJUKHByZWRpY2F0ZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7Cisg
ICAgICAgIGF1dG8mIHByZWRpY2F0ZVR5cGUgPSBwcmVkaWNhdGVJdGVyYXRvci0+dmFsdWU7Cisg
ICAgICAgIGlmICghaXNCb29sVHlwZShwcmVkaWNhdGVUeXBlKSkgeworICAgICAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKKyAgICAg
ICAgYXV0byBib2R5SXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmdGVybmFyeUV4cHJlc3Npb24u
Ym9keUV4cHJlc3Npb24oKSk7CisgICAgICAgIEFTU0VSVChib2R5SXRlcmF0b3IgIT0gbV90eXBl
TWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgYm9keVR5cGUgPSBib2R5SXRlcmF0b3ItPnZhbHVl
OworCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5lbHNlRXhw
cmVzc2lvbigpKTsKKyAgICAgICAgYXV0byBlbHNlSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgm
dGVybmFyeUV4cHJlc3Npb24uZWxzZUV4cHJlc3Npb24oKSk7CisgICAgICAgIEFTU0VSVChlbHNl
SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgZWxzZVR5cGUgPSBl
bHNlSXRlcmF0b3ItPnZhbHVlOworCisgICAgICAgIGF1dG8gcmVzdWx0VHlwZSA9IFdURjo6dmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBib2R5
VHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAg
ICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4mIGVsc2VUeXBlKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVk
VHlwZT4geworICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKHN0YXRpY19jYXN0PEFTVDo6VW5u
YW1lZFR5cGUmPihib2R5VHlwZSksIHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPihlbHNl
VHlwZSkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9keVR5cGUtPmNsb25lKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIH0sIFsmXShS
ZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBlbHNlVHlwZSkgLT4gc3RkOjp1bmlxdWVfcHRy
PEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21t
aXQoKmJvZHlUeXBlLCBlbHNlVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAgICAgICB9
KSwgZWxzZVR5cGUpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
PiYgYm9keVR5cGUpIC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mIGVsc2VUeXBlKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQoc3Rh
dGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KGVsc2VUeXBlKSwgYm9keVR5cGUtPnJlc29sdmFi
bGVUeXBlKCkpOworICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZT4mIGVsc2VUeXBlKSAtPiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4geworICAg
ICAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChib2R5VHlwZS0+cmVzb2x2YWJsZVR5
cGUoKSwgZWxzZVR5cGUtPnJlc29sdmFibGVUeXBlKCkpOworICAgICAgICAgICAgfSksIGVsc2VU
eXBlKTsKKyAgICAgICAgfSksIGJvZHlUeXBlKTsKKyAgICAgICAgaWYgKCFyZXN1bHRUeXBlKSB7
CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmdGVybmFyeUV4cHJlc3Np
b24sIFdURk1vdmUoKnJlc3VsdFR5cGUpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1
bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygpKQorICAgICAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEV4cHJlc3Npb24mPihhcmd1bWVu
dCkpOworICAgICAgICBpZiAoY2FsbEV4cHJlc3Npb24uY2FzdFJldHVyblR5cGUoKSkKKyAgICAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChjYWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgp
LT5nZXQoKSk7CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmlu
Z1R5cGU+PiB0eXBlczsKKyAgICAgICAgdHlwZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjYWxs
RXhwcmVzc2lvbi5hcmd1bWVudHMoKS5zaXplKCkpOworICAgICAgICBmb3IgKGF1dG8mIGFyZ3Vt
ZW50IDogY2FsbEV4cHJlc3Npb24uYXJndW1lbnRzKCkpIHsKKyAgICAgICAgICAgIGF1dG8gaXRl
cmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmc3RhdGljX2Nhc3Q8RXhwcmVzc2lvbiY+KGFyZ3VtZW50
KSk7CisgICAgICAgICAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAg
ICAgICAgICAgIHR5cGVzLnVuY2hlY2tlZEFwcGVuZChpdGVyYXRvci0+dmFsdWUpOworICAgICAg
ICB9CisKKyAgICAgICAgQVNTRVJUKGNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKTsKKyAg
ICAgICAgYXV0byogZnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoKmNhbGxF
eHByZXNzaW9uLm92ZXJsb2FkcygpLCB0eXBlcywgY2FsbEV4cHJlc3Npb24uY2FzdFJldHVyblR5
cGUoKSk7CisgICAgICAgIGlmICghZnVuY3Rpb24pIHsKKyAgICAgICAgICAgIGlmIChhdXRvIG5l
d0Z1bmN0aW9uID0gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihjYWxsRXhwcmVzc2lvbiwgdHlwZXMs
IG1faW50cmluc2ljcykpIHsKKyAgICAgICAgICAgICAgICBtX3Byb2dyYW0uYXBwZW5kKFdURk1v
dmUoKm5ld0Z1bmN0aW9uKSk7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBtX3Byb2dyYW0u
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5sYXN0KCkuZ2V0KCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZ1bmN0aW9uKSB7CisgICAgICAgICAgICBzZXRF
cnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbi0+cGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZd
KFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYpIC0+IGJvb2wgeworICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoKmZ1bmN0aW9uLT5wYXJh
bWV0ZXJzKClbaV0udHlwZSgpLCByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5
cGUoKSkpOworICAgICAgICAgICAgfSksIHR5cGVzW2ldLmdldCgpKTsKKyAgICAgICAgICAgIGlm
ICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY2FsbEV4cHJl
c3Npb24uc2V0RnVuY3Rpb24oKmZ1bmN0aW9uKTsKKworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fdHlwZU1hcC5hZGQoJmNhbGxFeHByZXNzaW9uLCBmdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkp
OworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkp
OworICAgIH0KKworcHJpdmF0ZToKKworICAgIC8qY2xhc3MgUmVzb2x2aW5nVHlwZUhhc2hUcmFp
dHMgOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFJlc29sdmluZ1R5cGU+CisgICAgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlc29sdmluZ1R5cGUmIGVtcHR5VmFsdWUoKQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXNvbHZpbmdUeXBlPiBlbXB0eVZhbHVlOworICAgICAg
ICAgICAgcmV0dXJuIGVtcHR5VmFsdWUuZ2V0KCk7CisgICAgICAgIH0KKworICAgICAgICB0eXBl
ZGVmIFJlc29sdmluZ1R5cGUmIFBlZWtUeXBlOworICAgICAgICBzdGF0aWMgUGVla1R5cGUgcGVl
ayhSZXNvbHZpbmdUeXBlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICAgICAgdHlwZWRl
ZiBSZXNvbHZpbmdUeXBlJiYgVGFrZVR5cGU7CisgICAgICAgIHN0YXRpYyBUYWtlVHlwZSB0YWtl
KFJlc29sdmluZ1R5cGUmJiB2YWx1ZSkgeyByZXR1cm4gV1RGTW92ZSh2YWx1ZSk7IH0KKyAgICB9
OyovCisKKyAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIFJlc29sdmluZ1R5cGUgLyosIFdU
Rjo6UHRySGFzaDxBU1Q6OkV4cHJlc3Npb24qPiwgV1RGOjpIYXNoVHJhaXRzPEFTVDo6RXhwcmVz
c2lvbio+LCBSZXNvbHZpbmdUeXBlSGFzaFRyYWl0cyovPiBtX3R5cGVNYXA7CisgICAgSGFzaFNl
dDxTdHJpbmc+IG1fdmVydGV4RW50cnlQb2ludHM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fZnJh
Z21lbnRFbnRyeVBvaW50czsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9jb21wdXRlRW50cnlQb2lu
dHM7CisgICAgY29uc3QgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOworICAgIFByb2dyYW0mIG1f
cHJvZ3JhbTsKK307CisKK2Jvb2wgY2hlY2soUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBDaGVj
a2VyIGNoZWNrZXIocHJvZ3JhbS5pbnRyaW5zaWNzKCksIHByb2dyYW0pOworICAgIGNoZWNrZXIu
Y2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0pOworICAgIHJldHVybiAhY2hlY2tlci5lcnJvcigp
OworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5lZDI2OGQ3MzQxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKworYm9v
bCBjaGVjayhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1z
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50
cnlQb2ludEl0ZW1zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
OGI1YjRiM2Y1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKQEAgLTAsMCArMSwxNzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgiCisKKyNpbmNsdWRlICJX
SExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNM
IHsKKworY2xhc3MgR2F0aGVyZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgR2F0
aGVyZXIoY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcywgQVNUOjpTZW1hbnRpYyogc2VtYW50
aWMgPSBudWxscHRyKQorICAgICAgICA6IG1faW50cmluc2ljcyhpbnRyaW5zaWNzKQorICAgICAg
ICAsIG1fY3VycmVudFNlbWFudGljKHNlbWFudGljKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIH5HYXRoZXJlcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgcmVzZXQoKQorICAgIHsKKyAg
ICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSBudWxscHRyOworICAgIH0KKworICAgIFZlY3RvcjxF
bnRyeVBvaW50SXRlbT4mJiB0YWtlRW50cnlQb2ludEl0ZW1zKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBXVEZNb3ZlKG1fZW50cnlQb2ludEl0ZW1zKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJikKKyAgICB7CisgICAgICAgIGlmICghbV9jdXJy
ZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9p
bnRJdGVtKG1fdHlwZVJlZmVyZW5jZXMubGFzdCgpLmdldCgpLCAqbV9jdXJyZW50U2VtYW50aWMp
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBu
YXRpdmVUeXBlRGVjbGFyYXRpb24pCisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFu
dGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGlmIChtYXRjaGVzKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgbV9pbnRy
aW5zaWNzLnZvaWRUeXBlKCkpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5k
KEVudHJ5UG9pbnRJdGVtKG1fdHlwZVJlZmVyZW5jZXMubGFzdCgpLmdldCgpLCAqbV9jdXJyZW50
U2VtYW50aWMpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5p
dGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIGlmIChtX2N1cnJlbnRT
ZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6IHN0cnVj
dHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgaWYgKHN0
cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSkKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRTZW1h
bnRpYyA9ICYqc3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygpOworICAgICAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHN0cnVjdHVyZUVsZW1lbnQpOworICAgICAgICB9CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCh0eXBlRGVmaW5pdGlvbi50eXBlKCkpOworICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKnR5cGVEZWZpbml0aW9uLnR5cGUoKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCisgICAgeworICAgICAgICBBU1NF
UlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIG1fdHlwZVJlZmVyZW5j
ZXMuYXBwZW5kKHR5cGVSZWZlcmVuY2UpOworICAgICAgICBhdXRvIGRlcHRoID0gbV90eXBlUmVm
ZXJlbmNlcy5zaXplKCk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdHlwZVJlZmVyZW5j
ZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoZGVwdGgsIG1fdHlwZVJl
ZmVyZW5jZXMuc2l6ZSgpID09IGRlcHRoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRT
ZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0
ZW0ocG9pbnRlclR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlwZSkKKyAgICB7
CisgICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRyeVBvaW50
SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5UmVmZXJlbmNlVHlwZSwgKm1fY3VycmVu
dFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJy
YXlUeXBlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRTZW1hbnRpYykgeworICAgICAg
ICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0oYXJyYXlUeXBlLCAqbV9j
dXJyZW50U2VtYW50aWMpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
bV9jdXJyZW50U2VtYW50aWMpOworICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5zZW1h
bnRpYygpKQorICAgICAgICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSAmKnZhcmlhYmxlRGVjbGFy
YXRpb24uc2VtYW50aWMoKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlhYmxlRGVj
bGFyYXRpb24udHlwZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgSW50cmluc2lj
cyYgbV9pbnRyaW5zaWNzOworICAgIEFTVDo6U2VtYW50aWMqIG1fY3VycmVudFNlbWFudGljIHsg
bnVsbHB0ciB9OworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6VHlwZVJl
ZmVyZW5jZT4+IG1fdHlwZVJlZmVyZW5jZXM7CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBt
X2VudHJ5UG9pbnRJdGVtczsKK307CisKK09wdGlvbmFsPEVudHJ5UG9pbnRJdGVtcz4gZ2F0aGVy
RW50cnlQb2ludEl0ZW1zKGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MsIEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7CisgICAgQVNTRVJUKGZ1bmN0aW9u
RGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKTsKKyAgICBHYXRoZXJlciBpbnB1dEdhdGhlcmVy
KGludHJpbnNpY3MpOworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKSkgeworICAgICAgICBpbnB1dEdhdGhlcmVyLnJlc2V0KCk7CisgICAg
ICAgIGlucHV0R2F0aGVyZXIuY2hlY2tFcnJvckFuZFZpc2l0KHBhcmFtZXRlcik7CisgICAgICAg
IGlmIChpbnB1dEdhdGhlcmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIH0KKyAgICBHYXRoZXJlciBvdXRwdXRHYXRoZXJlcihpbnRyaW5zaWNzLCBmdW5j
dGlvbkRlZmluaXRpb24uc2VtYW50aWMoKSA/ICYqZnVuY3Rpb25EZWZpbml0aW9uLnNlbWFudGlj
KCkgOiBudWxscHRyKTsKKyAgICBvdXRwdXRHYXRoZXJlci5jaGVja0Vycm9yQW5kVmlzaXQoZnVu
Y3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7CisgICAgaWYgKG91dHB1dEdhdGhlcmVyLmVycm9yKCkp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4ge3sgaW5wdXRHYXRo
ZXJlci50YWtlRW50cnlQb2ludEl0ZW1zKCksIG91dHB1dEdhdGhlcmVyLnRha2VFbnRyeVBvaW50
SXRlbXMoKSB9fTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUGFyYW1ldGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5o
CnNpbWlsYXJpdHkgaW5kZXggNjIlCnJlbmFtZSBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFBhcmFtZXRlci5oCnJlbmFtZSB0byBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oCmluZGV4
IDkyNTg2Zjg2OTFmLi5lMWViODI5MjFhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUGFyYW1ldGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaApAQCAt
MjcsMTMgKzI3LDkgQEAKIAogI2lmIEVOQUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTExl
eGVyLmgiCi0jaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKICNpbmNsdWRlICJXSExTTFNlbWFu
dGljLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCi0jaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
MSwzNiArMzcsMzAgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNlIEFTVCB7CiAKLWNs
YXNzIFBhcmFtZXRlciA6IHB1YmxpYyBWYWx1ZSB7Ci1wdWJsaWM6Ci0gICAgUGFyYW1ldGVyKExl
eGVyOjpUb2tlbiYmIG9yaWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+JiYgdHlwZSwgT3B0aW9uYWw8U3RyaW5nPiYmIG5hbWUsIE9wdGlvbmFs
PEFTVDo6U2VtYW50aWM+JiYgc2VtYW50aWMpCi0gICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShv
cmlnaW4pKQotICAgICAgICAsIG1fcXVhbGlmaWVycyhXVEZNb3ZlKHF1YWxpZmllcnMpKQotICAg
ICAgICAsIG1fdHlwZShXVEZNb3ZlKHR5cGUpKQotICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5h
bWUpKQotICAgICAgICAsIG1fc2VtYW50aWMoV1RGTW92ZShzZW1hbnRpYykpCi0gICAgewotICAg
IH0KK2NsYXNzIEZ1bmN0aW9uRGVmaW5pdGlvbjsKIAotICAgIHZpcnR1YWwgflBhcmFtZXRlcigp
ID0gZGVmYXVsdDsKK30KIAotICAgIFBhcmFtZXRlcihjb25zdCBQYXJhbWV0ZXImKSA9IGRlbGV0
ZTsKLSAgICBQYXJhbWV0ZXIoUGFyYW1ldGVyJiYpID0gZGVmYXVsdDsKK2NsYXNzIEludHJpbnNp
Y3M7CitjbGFzcyBVbm5hbWVkVHlwZTsKIAotICAgIFR5cGUmIHR5cGUoKSB7IHJldHVybiAqbV90
eXBlOyB9Ci0gICAgT3B0aW9uYWw8QVNUOjpTZW1hbnRpYz4mIHNlbWFudGljKCkgeyByZXR1cm4g
bV9zZW1hbnRpYzsgfQorc3RydWN0IEVudHJ5UG9pbnRJdGVtIHsKKyAgICBFbnRyeVBvaW50SXRl
bShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMp
CisgICAgICAgIDogdW5uYW1lZFR5cGUodW5uYW1lZFR5cGUpCisgICAgICAgICwgc2VtYW50aWMo
c2VtYW50aWMpCisgICAgeworICAgIH0KIAotcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9v
cmlnaW47Ci0gICAgUXVhbGlmaWVycyBtX3F1YWxpZmllcnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEFTVDo6VHlwZT4gbV90eXBlOwotICAgIE9wdGlvbmFsPFN0cmluZz4gbV9uYW1lOwotICAgIE9w
dGlvbmFsPEFTVDo6U2VtYW50aWM+IG1fc2VtYW50aWM7CisgICAgQVNUOjpVbm5hbWVkVHlwZSYg
dW5uYW1lZFR5cGU7CisgICAgQVNUOjpTZW1hbnRpYyYgc2VtYW50aWM7CiB9OwogCi10eXBlZGVm
IFZlY3RvcjxQYXJhbWV0ZXI+IFBhcmFtZXRlcnM7CitzdHJ1Y3QgRW50cnlQb2ludEl0ZW1zIHsK
KyAgICBWZWN0b3I8RW50cnlQb2ludEl0ZW0+IGlucHV0czsKKyAgICBWZWN0b3I8RW50cnlQb2lu
dEl0ZW0+IG91dHB1dHM7Cit9OwogCi19CitPcHRpb25hbDxFbnRyeVBvaW50SXRlbXM+IGdhdGhl
ckVudHJ5UG9pbnRJdGVtcyhjb25zdCBJbnRyaW5zaWNzJiwgQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mKTsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTEluZmVyVHlwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uOWZlMDc4MzM3OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCkBAIC0wLDAgKzEsMjM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKworI2luY2x1ZGUgIldITFNMQXJyYXlSZWZl
cmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExT
TEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hbWVkVHlwZS5oIgorI2lu
Y2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xQb2lu
dGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5cGUuaCIKKyNpbmNsdWRlICJX
SExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworc3RhdGljIGJvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6
OlR5cGUmIHVuaWZ5VGhpcywgY29uc3QgQVNUOjpUeXBlJiB1bmlmeU90aGVyKQoreworICAgIGlm
ICgmdW5pZnlUaGlzID09ICZ1bmlmeU90aGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlUaGlzKSAmJiBpczxBU1Q6Ok5hbWVkVHlwZT4o
dW5pZnlPdGhlcikpIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGF1dG8mIG5hbWVk
VGhpcyA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeVRoaXMpOworICAgICAgICBhdXRv
JiBuYW1lZE90aGVyID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5T3RoZXIpOworICAg
ICAgICBBU1NFUlQoIWlzPEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVGhpcykgJiYgIWlzPEFT
VDo6VHlwZURlZmluaXRpb24+KG5hbWVkT3RoZXIpKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfSBlbHNlIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeVRoaXMpICYm
IGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5T3RoZXIpKSB7CisgICAgICAgIGF1dG8mIHVubmFt
ZWRUaGlzID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlUaGlzKTsKKyAgICAgICAg
YXV0byYgdW5uYW1lZE90aGVyID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlPdGhl
cik7CisgICAgICAgIEFTU0VSVCghaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVGhpcykg
JiYgIWlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZE90aGVyKSk7CisgICAgICAgIGlmIChp
czxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZE90aGVyKSkgeworICAgICAgICAgICAgYXV0byYgcG9pbnRlclRoaXMgPSBkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVGhpcyk7CisgICAgICAgICAgICBhdXRvJiBwb2lu
dGVyT3RoZXIgPSBkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkT3RoZXIpOworICAg
ICAgICAgICAgaWYgKHBvaW50ZXJUaGlzLmFkZHJlc3NTcGFjZSgpICE9IHBvaW50ZXJPdGhlci5h
ZGRyZXNzU3BhY2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gbWF0Y2hlcyhwb2ludGVyVGhpcy5lbGVtZW50VHlwZSgpLCBwb2ludGVyT3RoZXIu
ZWxlbWVudFR5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlPih1bm5hbWVkVGhpcykgJiYgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVu
bmFtZWRPdGhlcikpeworICAgICAgICAgICAgYXV0byYgYXJyYXlSZWZlcmVuY2VUaGlzID0gZG93
bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUaGlzKTsKKyAgICAgICAgICAg
IGF1dG8mIGFycmF5UmVmZXJlbmNlT3RoZXIgPSBkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZT4odW5uYW1lZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChhcnJheVJlZmVyZW5jZVRoaXMu
YWRkcmVzc1NwYWNlKCkgIT0gYXJyYXlSZWZlcmVuY2VPdGhlci5hZGRyZXNzU3BhY2UoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhh
cnJheVJlZmVyZW5jZVRoaXMuZWxlbWVudFR5cGUoKSwgYXJyYXlSZWZlcmVuY2VPdGhlci5lbGVt
ZW50VHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVu
bmFtZWRUaGlzKSAmJiBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZE90aGVyKSkgeworICAgICAg
ICAgICAgYXV0byYgYXJyYXlUaGlzID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRU
aGlzKTsKKyAgICAgICAgICAgIGF1dG8mIGFycmF5T3RoZXIgPSBkb3duY2FzdDxBU1Q6OkFycmF5
VHlwZT4odW5uYW1lZE90aGVyKTsKKyAgICAgICAgICAgIGlmIChhcnJheVRoaXMubnVtRWxlbWVu
dHMoKSAhPSBhcnJheU90aGVyLm51bUVsZW1lbnRzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoYXJyYXlUaGlzLnR5cGUoKSwgYXJy
YXlPdGhlci50eXBlKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIG1hdGNoZXMoY29uc3QgQVNUOjpVbm5hbWVk
VHlwZSYgdW5uYW1lZFR5cGUsIGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIG90aGVyKQoreworICAg
IHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpLCBvdGhlci51bmlmeU5vZGUo
KSk7Cit9CisKK2Jvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlLCBj
b25zdCBBU1Q6Ok5hbWVkVHlwZSYgb3RoZXIpCit7CisgICAgcmV0dXJuIG1hdGNoZXMobmFtZWRU
eXBlLnVuaWZ5Tm9kZSgpLCBvdGhlci51bmlmeU5vZGUoKSk7Cit9CisKK2Jvb2wgbWF0Y2hlcyhj
b25zdCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgQVNUOjpOYW1lZFR5cGUm
IG90aGVyKQoreworICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLnVuaWZ5Tm9kZSgpLCBv
dGhlci51bmlmeU5vZGUoKSk7Cit9CisKK3N0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5h
bWVkVHlwZT4gbWF0Y2hBbmRDb21taXQoQVNUOjpUeXBlJiB1bmlmeU5vZGUsIEFTVDo6UmVzb2x2
YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKQoreworICAgIGlmICghcmVzb2x2YWJsZVR5cGUuY2Fu
UmVzb2x2ZSh1bmlmeU5vZGUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4gcmVzdWx0OworICAgIGlmIChpczxBU1Q6Ok5hbWVk
VHlwZT4odW5pZnlOb2RlKSkgeworICAgICAgICBhdXRvJiBuYW1lZFVuaWZ5Tm9kZSA9IGRvd25j
YXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICByZXN1bHQgPSBBU1Q6OlR5
cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVW5pZnlOb2RlLm9yaWdpbigpKSwg
bmFtZWRVbmlmeU5vZGUpLnRha2VVbmlxdWVQdHIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmVz
dWx0ID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKS5jbG9uZSgpLnRha2VV
bmlxdWVQdHIoKTsKKyAgICBBU1NFUlQoIXJlc29sdmFibGVUeXBlLnJlc29sdmVkVHlwZSgpKTsK
KyAgICByZXNvbHZhYmxlVHlwZS5yZXNvbHZlKHJlc3VsdC0+Y2xvbmUoKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5k
Q29tbWl0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBBU1Q6OlJlc29sdmFibGVUeXBl
JiByZXNvbHZhYmxlVHlwZSkKK3sKKyAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQodW5uYW1lZFR5
cGUudW5pZnlOb2RlKCksIHJlc29sdmFibGVUeXBlKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEFT
VDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUs
IEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKQoreworICAgIHJldHVybiBtYXRj
aEFuZENvbW1pdChuYW1lZFR5cGUudW5pZnlOb2RlKCksIHJlc29sdmFibGVUeXBlKTsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IG1hdGNoQW5kQ29tbWl0KEFTVDo6UmVz
b2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlMSwgQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2
YWJsZVR5cGUyKQoreworICAgIEFTU0VSVCghcmVzb2x2YWJsZVR5cGUxLnJlc29sdmVkVHlwZSgp
KTsKKyAgICBBU1NFUlQoIXJlc29sdmFibGVUeXBlMi5yZXNvbHZlZFR5cGUoKSk7CisgICAgaWYg
KGlzPEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKSAmJiBpczxBU1Q6OkZs
b2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMikpIHsKKyAgICAgICAgcmVzb2x2YWJsZVR5
cGUxLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlw
ZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUyLnJl
c29sdmUoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTIpLnBy
ZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6Rmxv
YXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKS50
YWtlVW5pcXVlUHRyKCk7CisgICAgfQorICAgIGlmIChpczxBU1Q6OkludGVnZXJMaXRlcmFsVHlw
ZT4ocmVzb2x2YWJsZVR5cGUxKSAmJiBpczxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2
YWJsZVR5cGUyKSkgeworICAgICAgICByZXNvbHZhYmxlVHlwZTEucmVzb2x2ZShkb3duY2FzdDxB
U1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCku
Y2xvbmUoKSk7CisgICAgICAgIHJlc29sdmFibGVUeXBlMi5yZXNvbHZlKGRvd25jYXN0PEFTVDo6
SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTIpLnByZWZlcnJlZFR5cGUoKS5jbG9u
ZSgpKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihy
ZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpLnRha2VVbmlxdWVQdHIoKTsK
KyAgICB9CisgICAgaWYgKGlzPEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29s
dmFibGVUeXBlMSkgJiYgaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2
YWJsZVR5cGUyKSkgeworICAgICAgICByZXNvbHZhYmxlVHlwZTEucmVzb2x2ZShkb3duY2FzdDxB
U1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJl
ZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUyLnJlc29sdmUoZG93bmNh
c3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKS5wcmVm
ZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUoKS5j
bG9uZSgpLnRha2VVbmlxdWVQdHIoKTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6TnVsbExpdGVy
YWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpICYmIGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihyZXNv
bHZhYmxlVHlwZTIpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUcnlpbmcgdG8gbWF0Y2ggbnVsbHB0
ciBhbmQgbnVsbHB0ciBmYWlscy4KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAg
IHJldHVybiBudWxscHRyOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4g
Y29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKQoreworICAgIEFTU0VS
VCghcmVzb2x2YWJsZVR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGlmIChpczxBU1Q6OkZsb2F0
TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKSkgeworICAgICAgICByZXNvbHZhYmxlVHlwZS5y
ZXNvbHZlKGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpLnBy
ZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6Rmxv
YXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpLnRh
a2VVbmlxdWVQdHIoKTsKKyAgICB9CisgICAgaWYgKGlzPEFTVDo6SW50ZWdlckxpdGVyYWxUeXBl
PihyZXNvbHZhYmxlVHlwZSkpIHsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUucmVzb2x2ZShkb3du
Y2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5
cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVy
YWxUeXBlPihyZXNvbHZhYmxlVHlwZSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkudGFrZVVuaXF1
ZVB0cigpOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlw
ZT4ocmVzb2x2YWJsZVR5cGUpKSB7CisgICAgICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUoZG93
bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpLnBy
ZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6VW5z
aWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKS5wcmVmZXJyZWRUeXBlKCku
Y2xvbmUoKS50YWtlVW5pcXVlUHRyKCk7CisgICAgfQorICAgIGlmIChpczxBU1Q6Ok51bGxMaXRl
cmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUcnlpbmcgdG8g
bWF0Y2ggbnVsbHB0ciBhbmQgbnVsbHB0ciBmYWlscy4KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIGluZmVyVHlwZXNGb3JUeXBl
QXJndW1lbnRzKEFTVDo6TmFtZWRUeXBlJiBwb3NzaWJsZVR5cGUsIEFTVDo6VHlwZUFyZ3VtZW50
cyYgdHlwZUFyZ3VtZW50cykKK3sKKyAgICBpZiAoaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4ocG9z
c2libGVUeXBlKQorICAgICAgICB8fCBpczxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KHBvc3Np
YmxlVHlwZSkKKyAgICAgICAgfHwgaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHBvc3Np
YmxlVHlwZSkpIHsKKyAgICAgICAgcmV0dXJuIHR5cGVBcmd1bWVudHMuaXNFbXB0eSgpOworICAg
IH0KKworICAgIEFTU0VSVChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4ocG9zc2libGVU
eXBlKSk7CisgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KHBvc3NpYmxlVHlwZSk7CisgICAgaWYgKG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpICE9IHR5cGVBcmd1bWVudHMuc2l6ZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYXRp
dmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKTsgKytpKSB7CisgICAgICAg
IEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKiB0eXBlQXJndW1lbnRFeHByZXNzaW9uID0gbnVsbHB0
cjsKKyAgICAgICAgQVNUOjpUeXBlUmVmZXJlbmNlKiB0eXBlQXJndW1lbnRUeXBlUmVmZXJlbmNl
ID0gbnVsbHB0cjsKKyAgICAgICAgQVNUOjpDb25zdGFudEV4cHJlc3Npb24qIG5hdGl2ZVR5cGVB
cmd1bWVudEV4cHJlc3Npb24gPSBudWxscHRyOworICAgICAgICBBU1Q6OlR5cGVSZWZlcmVuY2Uq
IG5hdGl2ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UgPSBudWxscHRyOworCisgICAgICAgIGF1
dG8gYXNzaWduID0gWyZdKEFTVDo6VHlwZUFyZ3VtZW50JiB0eXBlQXJndW1lbnQsIEFTVDo6Q29u
c3RhbnRFeHByZXNzaW9uKiYgZXhwcmVzc2lvbiwgQVNUOjpUeXBlUmVmZXJlbmNlKiYgdHlwZVJl
ZmVyZW5jZSkgeworICAgICAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShB
U1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKSB7CisgICAgICAgICAg
ICAgICAgZXhwcmVzc2lvbiA9ICZjb25zdGFudEV4cHJlc3Npb247CisgICAgICAgICAgICB9LCBb
Jl0oc3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZVJlZmVyZW5jZT4mIHRoZVR5cGVSZWZlcmVuY2Up
IHsKKyAgICAgICAgICAgICAgICB0eXBlUmVmZXJlbmNlID0gdGhlVHlwZVJlZmVyZW5jZS5nZXQo
KTsKKyAgICAgICAgICAgIH0pLCB0eXBlQXJndW1lbnQpOworICAgICAgICB9OworCisgICAgICAg
IGFzc2lnbih0eXBlQXJndW1lbnRzW2ldLCB0eXBlQXJndW1lbnRFeHByZXNzaW9uLCB0eXBlQXJn
dW1lbnRUeXBlUmVmZXJlbmNlKTsKKyAgICAgICAgYXNzaWduKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi50eXBlQXJndW1lbnRzKClbaV0sIG5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24sIG5hdGl2
ZVR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UpOworCisgICAgICAgIGlmICh0eXBlQXJndW1lbnRF
eHByZXNzaW9uICYmIG5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24pIHsKKyAgICAgICAgICAg
IGlmICghdHlwZUFyZ3VtZW50RXhwcmVzc2lvbi0+bWF0Y2hlcygqbmF0aXZlVHlwZUFyZ3VtZW50
RXhwcmVzc2lvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVs
c2UgaWYgKHR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UgJiYgbmF0aXZlVHlwZUFyZ3VtZW50VHlw
ZVJlZmVyZW5jZSkgeworICAgICAgICAgICAgaWYgKCFtYXRjaGVzKCp0eXBlQXJndW1lbnRUeXBl
UmVmZXJlbmNlLCAqbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBw
b3NzaWJsZUZ1bmN0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdU
eXBlPj4mIGFyZ3VtZW50VHlwZXMsIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNU
OjpOYW1lZFR5cGU+PiYgY2FzdFJldHVyblR5cGUpCit7CisgICAgaWYgKHBvc3NpYmxlRnVuY3Rp
b24ucGFyYW1ldGVycygpLnNpemUoKSAhPSBhcmd1bWVudFR5cGVzLnNpemUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9zc2libGVGdW5jdGlv
bi5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byBzdWNjZXNzID0gV1RG
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4m
IHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKCpwb3Nz
aWJsZUZ1bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCksIHN0YXRpY19jYXN0PEFTVDo6VW5u
YW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVU
eXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAgICAg
ICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNh
blJlc29sdmUoKnBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKSk7CisgICAg
ICAgIH0pLCBhcmd1bWVudFR5cGVzW2ldLmdldCgpKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoY2FzdFJldHVyblR5cGUg
JiYgIW1hdGNoZXMoY2FzdFJldHVyblR5cGUtPmdldCgpLCBwb3NzaWJsZUZ1bmN0aW9uLnR5cGUo
KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xJbmZlclR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEluZmVyVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uNjNiMDYxMGMzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuaApAQCAtMCwwICsxLDYyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hM
U0xSZXNvbHZpbmdUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNs
dWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsK
KworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBO
YW1lZFR5cGU7CitjbGFzcyBSZXNvbHZhYmxlVHlwZTsKK2NsYXNzIFVubmFtZWRUeXBlOworCit9
CisKK2Jvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgQVNUOjpVbm5h
bWVkVHlwZSYpOworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6TmFtZWRUeXBlJiwgY29uc3QgQVNU
OjpOYW1lZFR5cGUmKTsKK2Jvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29u
c3QgQVNUOjpOYW1lZFR5cGUmKTsKKy8vIEZJWE1FOiBJcyBhbnlvbmUgYWN0dWFsbHkgdXNpbmcg
dGhlIHJldHVybiB0eXBlIGhlcmU/CitzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpVbm5hbWVkVHlwZT4g
bWF0Y2hBbmRDb21taXQoQVNUOjpVbm5hbWVkVHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsK
K3N0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVubmFtZWRUeXBlPiBtYXRjaEFuZENvbW1pdChBU1Q6Ok5h
bWVkVHlwZSYsIEFTVDo6UmVzb2x2YWJsZVR5cGUmKTsKK3N0ZDo6dW5pcXVlX3B0cjxBU1Q6OlVu
bmFtZWRUeXBlPiBtYXRjaEFuZENvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJiwgQVNUOjpSZXNv
bHZhYmxlVHlwZSYpOworc3RkOjp1bmlxdWVfcHRyPEFTVDo6VW5uYW1lZFR5cGU+IGNvbW1pdChB
U1Q6OlJlc29sdmFibGVUeXBlJik7Citib29sIGluZmVyVHlwZXNGb3JUeXBlQXJndW1lbnRzKEFT
VDo6TmFtZWRUeXBlJiBwb3NzaWJsZVR5cGUsIEFTVDo6VHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3Vt
ZW50cyk7Citib29sIGluZmVyVHlwZXNGb3JDYWxsKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYg
cG9zc2libGVGdW5jdGlvbiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5n
VHlwZT4+JiBhcmd1bWVudFR5cGVzLCBPcHRpb25hbDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6TmFtZWRUeXBlPj4mIGNhc3RSZXR1cm5UeXBlKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbnRyaW5z
aWNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmlu
c2ljcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVlMDYyNzlm
ZmYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xJbnRyaW5zaWNzLmNwcApAQCAtMCwwICsxLDQ0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xJ
bnRyaW5zaWNzLmgiCisKKyNpbmNsdWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIgorI2lu
Y2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNl
LmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK0ludHJpbnNpY3M6OkludHJpbnNpY3MoKQorICAgIDogbV90ZXh0dXJl
VHlwZU5hbWVzIHsgU3RyaW5nKCJUZXh0dXJlMUQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiUldUZXh0dXJlMUQiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiVGV4dHVyZTFEQXJyYXkiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiUldUZXh0dXJl
MURBcnJheSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3Ry
aW5nKCJUZXh0dXJlMkQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAg
ICAgIFN0cmluZygiUldUZXh0dXJlMkQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwK
KyAgICAgICAgICAgIFN0cmluZygiVGV4dHVyZTJEQXJyYXkiLCBTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiUldUZXh0dXJlMkRBcnJheSIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJUZXh0dXJlM0Qi
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiUldU
ZXh0dXJlM0QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0
cmluZygiVGV4dHVyZUN1YmUiLCAgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgfQorICAg
ICwgbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMgeyBTdHJpbmcoInVjaGFyIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoInVzaG9ydCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJ1aW50IiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoImNoYXIiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygic2hvcnQiLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiaW50Iiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoImhhbGYi
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygiZmxv
YXQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSB9CisgICAgLCBtX2RlcHRoVGV4dHVy
ZUlubmVyVHlwZXMgeyBTdHJpbmcoImhhbGYiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwKKyAgICAgICAgICAgIFN0cmluZygiZmxvYXQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSB9Cit7CisgICAgQVNTRVJUKG1fdGV4dHVyZVR5cGVOYW1lcy5zaXplKCkgPT0gMTEpOyAv
LyBmdWxsVGV4dHVyZXMgaGFyZGNvZGVzIHRoZSBsZW5ndGggb2YgdGhpcyBhcnJheS4KKyAgICBB
U1NFUlQobV90ZXh0dXJlSW5uZXJUeXBlTmFtZXMuc2l6ZSgpID09IDgpOyAvLyBmdWxsVGV4dHVy
ZXMgaGFyZGNvZGVzIHRoZSBsZW5ndGggb2YgdGhpcyBhcnJheS4KKyAgICBBU1NFUlQobV9kZXB0
aFRleHR1cmVJbm5lclR5cGVzLnNpemUoKSA9PSAyKTsgLy8gdGV4dHVyZURlcHRoMkQgJiBmcmll
bmRzIGhhcmRjb2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkuCit9CisKK3ZvaWQgSW50cmlu
c2ljczo6YWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpCit7CisgICAgLy8gRklY
TUU6IFBvcHVsYXRlIHRoaXMuCit9CisKK2Jvb2wgSW50cmluc2ljczo6YWRkUHJpbWl0aXZlKEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAg
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpICE9IDApCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJ2b2lkIikKKyAgICAgICAgbV92b2lkVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRp
b247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiYm9vbCIp
CisgICAgICAgIG1fYm9vbFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2Ug
aWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVjaGFyIikgeworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRD
YW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA+PSAw
ICYmIHggPD0gMHhGRjsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5zZXRDYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAgICAg
ICAgICAgcmV0dXJuIHggPD0gMHhGRjsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHgpKSA9PSB4
OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldFN1Y2Nlc3Nv
cihbXShpbnQ2NF90IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHggKyAxKTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBpbnQ2NF90IHsK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50OF90Pih4KTsKKyAgICAgICAgfSk7
CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25l
ZEludGVnZXIoW10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDhfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0SXRlcmF0ZUFsbFZhbHVlcyhbXShjb25zdCBzdGQ6OmZ1bmN0aW9uPGJv
b2woaW50NjRfdCk+JiBjYWxsYmFjaykgeworICAgICAgICAgICAgZm9yIChpbnQ2NF90IGkgPSAw
OyBpIDwgMHgxMDA7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhpKSkKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAg
ICAgICBtX3VjaGFyVHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlm
IChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1c2hvcnQiKSB7CisgICAgICAgIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFy
YXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENh
blJlcHJlc2VudEludGVnZXIoW10oaW50IHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4ID49IDAg
JiYgeCA8PSAweEZGRkY7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB4IDw9IDB4RkZGRjsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PHVpbnQxNl90Pih4KSkg
PT0geDsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNj
ZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDx1aW50MTZfdD4oeCArIDEpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbUludGVnZXIoW10oaW50IHgpIC0+IGludDY0
X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90Pih4KTsKKyAgICAg
ICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21V
bnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldEl0ZXJhdGVBbGxWYWx1ZXMoW10oY29uc3Qgc3RkOjpmdW5j
dGlvbjxib29sKGludDY0X3QpPiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGZvciAoaW50NjRf
dCBpID0gMDsgaSA8IDB4MTAwMDA7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFj
ayhpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0pOworICAgICAgICBtX3VzaG9ydFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAg
IH0gZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidWludCIpIHsKKyAg
ICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzSW50KCk7CisgICAgICAgIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQgeCkgeworICAgICAgICAgICAgcmV0dXJu
IHggPj0gMDsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRD
YW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQpIHsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNl
dENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHgpKSA9PSB4OworICAgICAgICB9
KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldFN1Y2Nlc3NvcihbXShpbnQ2NF90
IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90
Pih4ICsgMSk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0
Rm9ybWF0VmFsdWVGcm9tSW50ZWdlcihbXShpbnQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAg
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcihb
XSh1bnNpZ25lZCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uc2V0SXRlcmF0ZUFsbFZhbHVlcyhbXShjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woaW50NjRf
dCk+JiBjYWxsYmFjaykgeworICAgICAgICAgICAgZm9yIChpbnQ2NF90IGkgPSAwOyBpIDwgMHgx
MDAwMDAwMDA7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhpKSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAg
ICBtX3VpbnRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImNoYXIiKSB7CisgICAgICAgIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24u
c2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzU2lnbmVk
KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2Vy
KFtdKGludCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA+PSAtMTI4ICYmIHggPD0gMTI3Owor
ICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2Vu
dFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA8
PSAxMjc7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2Fu
UmVwcmVzZW50RmxvYXQoW10oZmxvYXQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihzdGF0aWNfY2FzdDxpbnQ4X3Q+KHgpKSA9PSB4OworICAgICAgICB9KTsKKyAg
ICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldFN1Y2Nlc3NvcihbXShpbnQ2NF90IHgpIC0+
IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDhfdD4oeCArIDEp
OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZh
bHVlRnJvbUludGVnZXIoW10oaW50IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludDhfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVk
IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDhfdD4o
eCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXRlcmF0
ZUFsbFZhbHVlcyhbXShjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woaW50NjRfdCk+JiBjYWxsYmFj
aykgeworICAgICAgICAgICAgZm9yIChpbnQ2NF90IGkgPSAtMTI4OyBpIDwgMTI4OyArK2kpIHsK
KyAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soaSkpCisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgbV9jaGFyVHlwZSA9ICZu
YXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRp
b24ubmFtZSgpID09ICJzaG9ydCIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNl
dElzSW50KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOwor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNTaWduZWQoKTsKKyAgICAgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50IHgpIHsKKyAg
ICAgICAgICAgIHJldHVybiB4ID49IC0zMjc2OCAmJiB4IDw9IDMyNzY3OworICAgICAgICB9KTsK
KyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50
ZWdlcihbXSh1bnNpZ25lZCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA8PSAzMjc2NzsKKyAg
ICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRG
bG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHN0YXRpY19jYXN0PGludDE2X3Q+KHgpKSA9PSB4OworICAgICAgICB9KTsKKyAgICAgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldFN1Y2Nlc3NvcihbXShpbnQ2NF90IHgpIC0+IGludDY0X3Qg
eworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDE2X3Q+KHggKyAxKTsKKyAgICAg
ICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21J
bnRlZ2VyKFtdKGludCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQxNl90Pih4KTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgLT4g
aW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MTZfdD4oeCk7Cisg
ICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXRlcmF0ZUFsbFZh
bHVlcyhbXShjb25zdCBzdGQ6OmZ1bmN0aW9uPGJvb2woaW50NjRfdCk+JiBjYWxsYmFjaykgewor
ICAgICAgICAgICAgZm9yIChpbnQ2NF90IGkgPSAtMzI3Njg7IGkgPCAzMjc2ODsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGkpKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1fc2hvcnRUeXBlID0gJm5h
dGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlv
bi5uYW1lKCkgPT0gImludCIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElz
SW50KCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOworICAg
ICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNTaWduZWQoKTsKKyAgICAgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50KSB7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRDYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAg
ICAgICAgICAgcmV0dXJuIHggPD0gMjE0NzQ4MzY0NzsKKyAgICAgICAgfSk7CisgICAgICAgIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7Cisg
ICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PGludDMyX3Q+
KHgpKSA9PSB4OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNl
dFN1Y2Nlc3NvcihbXShpbnQ2NF90IHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludDMyX3Q+KHggKyAxKTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBp
bnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih4KTsKKyAg
ICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZy
b21VbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXRlcmF0ZUFsbFZhbHVlcyhbXShjb25zdCBzdGQ6OmZ1
bmN0aW9uPGJvb2woaW50NjRfdCk+JiBjYWxsYmFjaykgeworICAgICAgICAgICAgZm9yIChpbnQ2
NF90IGkgPSAtMjE0NzQ4MzY0NzsgaSA8IDIxNDc0ODM2NDg7ICsraSkgeworICAgICAgICAgICAg
ICAgIGlmIChjYWxsYmFjayhpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworICAgICAgICBtX2ludFR5cGUgPSAmbmF0aXZlVHlwZURlY2xh
cmF0aW9uOworICAgIH0gZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAi
aGFsZiIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzTnVtYmVyKCk7Cisg
ICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0Zsb2F0aW5nKCk7CisgICAgICAgIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCkgeworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVj
bGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkKSB7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCkgeworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBtX2hhbGZUeXBlID0gJm5hdGl2ZVR5
cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gImZsb2F0IikgeworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1i
ZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzRmxvYXRpbmcoKTsKKyAg
ICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50
KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWdu
ZWQpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0KSB7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG1fZmxvYXRUeXBlID0g
Jm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAiYXRvbWljX2ludCIpCisgICAgICAgIG1fYXRvbWljSW50VHlw
ZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xh
cmF0aW9uLm5hbWUoKSA9PSAiYXRvbWljX3VpbnQiKQorICAgICAgICBtX2F0b21pY1VpbnRUeXBl
ID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFy
YXRpb24ubmFtZSgpID09ICJzYW1wbGVyIikKKyAgICAgICAgbV9zYW1wbGVyVHlwZSA9ICZuYXRp
dmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRWZWN0b3IoQVNU
OjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBp
ZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSAhPSAidmVjdG9yIikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgQVNTRVJUKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKCkuc2l6ZSgpID09IDIpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVu
aXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFy
Z3VtZW50cygpWzBdKSk7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpD
b25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClb
MV0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGUgPSBzdGF0aWNfY2FzdDxBU1Q6OlR5cGVSZWZlcmVu
Y2UmPihXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIGF1dG8mIGxlbmd0aEV4cHJlc3Np
b24gPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0
aW9uLnR5cGVBcmd1bWVudHMoKVsxXSk7CisgICAgQVNTRVJUKGlubmVyVHlwZS50eXBlQXJndW1l
bnRzKCkuc2l6ZSgpID09IDApOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiogYXJy
YXk7CisgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gImJvb2wiKQorICAgICAgICBhcnJheSA9
IG1fdmVjdG9yQm9vbDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJ1Y2hhciIp
CisgICAgICAgIGFycmF5ID0gbV92ZWN0b3JVY2hhcjsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUu
bmFtZSgpID09ICJ1c2hvcnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yVXNob3J0OworICAg
IGVsc2UgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gInVpbnQiKQorICAgICAgICBhcnJheSA9IG1f
dmVjdG9yVWludDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJjaGFyIikKKyAg
ICAgICAgYXJyYXkgPSBtX3ZlY3RvckNoYXI7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUo
KSA9PSAic2hvcnQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yU2hvcnQ7CisgICAgZWxzZSBp
ZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiaW50IikKKyAgICAgICAgYXJyYXkgPSBtX3ZlY3Rvcklu
dDsKKyAgICBlbHNlIGlmIChpbm5lclR5cGUubmFtZSgpID09ICJoYWxmIikKKyAgICAgICAgYXJy
YXkgPSBtX3ZlY3RvckhhbGY7CisgICAgZWxzZSBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSAiZmxv
YXQiKQorICAgICAgICBhcnJheSA9IG1fdmVjdG9yRmxvYXQ7CisgICAgZWxzZQorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBpbnQgbGVuZ3RoID0gbGVuZ3RoRXhwcmVzc2lvbi5p
bnRlZ2VyTGl0ZXJhbCgpLnZhbHVlKCk7CisgICAgQVNTRVJUKGxlbmd0aCA+PSAyICYmIGxlbmd0
aCA8PSA0KTsKKyAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNWZWN0b3IoKTsKKyAgICBh
cnJheVtsZW5ndGggLSAyXSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgSW50cmluc2ljczo6YWRkTWF0cml4KEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5uYW1lKCkgIT0gIm1hdHJpeCIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAz
KTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBl
UmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOwor
ICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzFdKSk7CisgICAgQVNTRVJU
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMl0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGUg
PSBzdGF0aWNfY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2UmPihXVEY6OmdldDxVbmlxdWVSZWY8QVNU
OjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsw
XSkpOworICAgIGF1dG8mIHJvd0V4cHJlc3Npb24gPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhw
cmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSk7CisgICAg
YXV0byYgY29sdW1uRXhwcmVzc2lvbiA9IFdURjo6Z2V0PEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
PihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzJdKTsKKyAgICBBU1NFUlQo
aW5uZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMCk7CisgICAgQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24qICgqYXJyYXkpWzNdOworICAgIGlmIChpbm5lclR5cGUubmFtZSgpID09
ICJoYWxmIikKKyAgICAgICAgYXJyYXkgPSBtX21hdHJpeEhhbGY7CisgICAgaWYgKGlubmVyVHlw
ZS5uYW1lKCkgPT0gImZsb2F0IikKKyAgICAgICAgYXJyYXkgPSBtX21hdHJpeEZsb2F0OworICAg
IGludCByb3cgPSByb3dFeHByZXNzaW9uLmludGVnZXJMaXRlcmFsKCkudmFsdWUoKTsKKyAgICBB
U1NFUlQocm93ID49IDIgJiYgcm93IDw9IDQpOworICAgIGludCBjb2x1bW4gPSBjb2x1bW5FeHBy
ZXNzaW9uLmludGVnZXJMaXRlcmFsKCkudmFsdWUoKTsKKyAgICBBU1NFUlQoY29sdW1uID49IDIg
JiYgY29sdW1uIDw9IDQpOworICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc01hdHJpeCgp
OworICAgIGFycmF5W3JvdyAtIDJdW2NvbHVtbiAtIDJdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlv
bjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnRyaW5zaWNzOjphZGRGdWxsVGV4dHVy
ZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uLCBBU1Q6
OlR5cGVSZWZlcmVuY2UmIGlubmVyVHlwZSkKK3sKKyAgICB1bnNpZ25lZCB0ZXh0dXJlVHlwZUlu
ZGV4ID0gbV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChuYXRp
dmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09IG1fdGV4dHVyZVR5cGVOYW1lc1tpXSkKKyAgICAg
ICAgICAgIHRleHR1cmVUeXBlSW5kZXggPSBpOworICAgIH0KKyAgICBpZiAodGV4dHVyZVR5cGVJ
bmRleCA9PSBtX3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICB1bnNpZ25lZCBpbm5lclR5cGVJbmRleCA9IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVz
LnNpemUoKTsKKyAgICB1bnNpZ25lZCB2ZWN0b3JMZW5ndGg7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmIChpbm5lclR5cGUubmFtZSgpLnN0YXJ0c1dpdGgobV90ZXh0dXJlSW5uZXJUeXBlTmFtZXNb
aV0pKSB7CisgICAgICAgICAgICB0ZXh0dXJlVHlwZUluZGV4ID0gaTsKKyAgICAgICAgICAgIGlm
IChpbm5lclR5cGUubmFtZSgpID09IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzW2ldKQorICAgICAg
ICAgICAgICAgIHZlY3Rvckxlbmd0aCA9IDE7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoaW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSA9PSBtX3RleHR1cmVJbm5l
clR5cGVOYW1lc1tpXS5sZW5ndGgoKSArIDEpOworICAgICAgICAgICAgICAgIEFTU0VSVChpbm5l
clR5cGUubmFtZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSA9PSAnMicKKyAgICAg
ICAgICAgICAgICAgICAgfHwgaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0
aCgpIC0gMV0gPT0gJzMnCisgICAgICAgICAgICAgICAgICAgIHx8IGlubmVyVHlwZS5uYW1lKClb
aW5uZXJUeXBlLm5hbWUoKS5sZW5ndGgoKSAtIDFdID09ICc0Jyk7CisgICAgICAgICAgICAgICAg
dmVjdG9yTGVuZ3RoID0gaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgp
IC0gMV0gLSAnMCc7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJU
KGlubmVyVHlwZUluZGV4ICE9IG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKSk7CisgICAg
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzVGV4dHVyZSgpOworICAgIG1fZnVsbFRleHR1cmVz
W3RleHR1cmVUeXBlSW5kZXhdW2lubmVyVHlwZUluZGV4XVt2ZWN0b3JMZW5ndGggLSAxXSA9ICZu
YXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50cmlu
c2ljczo6YWRkRGVwdGhUZXh0dXJlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVU
eXBlRGVjbGFyYXRpb24sIEFTVDo6VHlwZVJlZmVyZW5jZSYgaW5uZXJUeXBlKQoreworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiogdGV4dHVyZTsKKyAgICBpZiAobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4dHVyZURlcHRoMkQiKQorICAgICAgICB0ZXh0dXJlID0g
bV90ZXh0dXJlRGVwdGgyRDsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFt
ZSgpID09ICJSV1RleHR1cmVEZXB0aDJEIikKKyAgICAgICAgdGV4dHVyZSA9IG1fcndUZXh0dXJl
RGVwdGgyRDsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJU
ZXh0dXJlRGVwdGgyREFycmF5IikKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZURlcHRoMkRB
cnJheTsKKyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJSV1Rl
eHR1cmVEZXB0aDJEQXJyYXkiKQorICAgICAgICB0ZXh0dXJlID0gbV9yd1RleHR1cmVEZXB0aDJE
QXJyYXk7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAiVGV4
dHVyZURlcHRoQ3ViZSIpCisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVEZXB0aEN1YmU7Cisg
ICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB1bnNpZ25lZCBpbm5l
clR5cGVJbmRleCA9IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcy5zaXplKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcy5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSBtX2RlcHRoVGV4dHVyZUlubmVyVHlw
ZXNbaV0pCisgICAgICAgICAgICBpbm5lclR5cGVJbmRleCA9IGk7CisgICAgfQorICAgIEFTU0VS
VChpbm5lclR5cGVJbmRleCAhPSBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpKTsKKyAg
ICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNUZXh0dXJlKCk7CisgICAgdGV4dHVyZVtpbm5l
clR5cGVJbmRleF0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEludHJpbnNpY3M6OmFkZFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBBU1NFUlQobmF0aXZlVHlwZURlY2xh
cmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMSk7CisgICAgQVNTRVJUKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBhdXRvJiBpbm5lclR5cGUgPSBz
dGF0aWNfY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2UmPihXVEY6OmdldDxVbmlxdWVSZWY8QVNUOjpU
eXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVswXSkp
OworICAgIEFTU0VSVChpbm5lclR5cGUudHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAwKTsKKyAg
ICBpZiAoYWRkRnVsbFRleHR1cmUobmF0aXZlVHlwZURlY2xhcmF0aW9uLCBpbm5lclR5cGUpKSB7
CisgICAgICAgIG1fdGV4dHVyZVNldC5hZGQoJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGFkZERlcHRoVGV4dHVyZShuYXRpdmVUeXBlRGVj
bGFyYXRpb24sIGlubmVyVHlwZSkpCisgICAgICAgIG1fdGV4dHVyZVNldC5hZGQoJm5hdGl2ZVR5
cGVEZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgSW50cmluc2ljczo6YWRkKEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKGFkZFByaW1p
dGl2ZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGFk
ZFZlY3RvcihuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KGFkZE1hdHJpeChuYXRpdmVUeXBlRGVjbGFyYXRpb24pKQorICAgICAgICByZXR1cm47CisgICAg
YWRkVGV4dHVyZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworfQorCit9CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTElu
dHJpbnNpY3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50
cmluc2ljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zMWE5OGFi
M2RiNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMSW50cmluc2ljcy5oCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRp
b24uaCIKKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgV0hMU0wgeworCitjbGFzcyBJbnRyaW5zaWNzIHsKK3B1YmxpYzoKKyAgICBJbnRyaW5z
aWNzKCk7CisKKyAgICB2b2lkIGFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKTsK
KyAgICB2b2lkIGFkZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworCisgICAgQVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24mIHZvaWRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX3ZvaWRUeXBlKTsKKyAgICAgICAgcmV0dXJuICptX3ZvaWRUeXBlOworICAgIH0KKwor
ICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBib29sVHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQobV9ib29sVHlwZSk7CisgICAgICAgIHJldHVybiAqbV9ib29sVHlwZTsK
KyAgICB9CisKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgaW50VHlwZSgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQobV9pbnRUeXBlKTsKKyAgICAgICAgcmV0dXJuICptX2lu
dFR5cGU7CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIHVpbnRUeXBl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3VpbnRUeXBlKTsKKyAgICAgICAgcmV0
dXJuICptX3VpbnRUeXBlOworICAgIH0KKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
JiBzYW1wbGVyVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9zYW1wbGVyVHlw
ZSk7CisgICAgICAgIHJldHVybiAqbV9zYW1wbGVyVHlwZTsKKyAgICB9CisKKyAgICBBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiYgZmxvYXRUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChtX2Zsb2F0VHlwZSk7CisgICAgICAgIHJldHVybiAqbV9mbG9hdFR5cGU7CisgICAgfQor
CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIGZsb2F0M1R5cGUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fdmVjdG9yRmxvYXRbMV0pOworICAgICAgICByZXR1cm4gKm1f
dmVjdG9yRmxvYXRbMV07CisgICAgfQorCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24m
IGZsb2F0NFR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fdmVjdG9yRmxvYXRb
Ml0pOworICAgICAgICByZXR1cm4gKm1fdmVjdG9yRmxvYXRbMl07CisgICAgfQorCitwcml2YXRl
OgorICAgIGJvb2wgYWRkUHJpbWl0aXZlKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7Cisg
ICAgYm9vbCBhZGRWZWN0b3IoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBib29s
IGFkZE1hdHJpeChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkRnVs
bFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mLCBBU1Q6OlR5cGVSZWZlcmVuY2Um
KTsKKyAgICBib29sIGFkZERlcHRoVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYs
IEFTVDo6VHlwZVJlZmVyZW5jZSYpOworICAgIHZvaWQgYWRkVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiYpOworCisgICAgSGFzaFNldDxjb25zdCBBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbio+IG1fdGV4dHVyZVNldDsKKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
KiBtX3ZvaWRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2Jvb2xUeXBl
OworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3VjaGFyVHlwZTsKKyAgICBBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV91c2hvcnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uKiBtX3VpbnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
KiBtX2NoYXJUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3Nob3J0VHlw
ZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9pbnRUeXBlOworICAgIEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2hhbGZUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURl
Y2xhcmF0aW9uKiBtX2Zsb2F0VHlwZTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiog
bV9hdG9taWNJbnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX2F0b21p
Y1VpbnRUeXBlOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3NhbXBsZXJUeXBl
OworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yQm9vbFszXTsKKyAg
ICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JVY2hhclszXTsKKyAgICBBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JVc2hvcnRbM107CisgICAgQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24qIG1fdmVjdG9yVWludFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiogbV92ZWN0b3JDaGFyWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uKiBtX3ZlY3RvclNob3J0WzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBt
X3ZlY3RvckludFszXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV92ZWN0b3JI
YWxmWzNdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3ZlY3RvckZsb2F0WzNd
OworCisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fbWF0cml4SGFsZlszXVszXTsK
KyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV9tYXRyaXhGbG9hdFszXVszXTsKKwor
ICAgIFZlY3RvcjxTdHJpbmc+IG1fdGV4dHVyZVR5cGVOYW1lczsKKyAgICBWZWN0b3I8U3RyaW5n
PiBtX3RleHR1cmVJbm5lclR5cGVOYW1lczsKKworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uKiBtX2Z1bGxUZXh0dXJlc1sxMV1bOF1bNF07CisKKyAgICBWZWN0b3I8U3RyaW5nPiBtX2Rl
cHRoVGV4dHVyZUlubmVyVHlwZXM7CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1f
dGV4dHVyZURlcHRoMkRbMl07CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIG1fcndU
ZXh0dXJlRGVwdGgyRFsyXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogbV90ZXh0
dXJlRGVwdGgyREFycmF5WzJdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiBtX3J3
VGV4dHVyZURlcHRoMkRBcnJheVsyXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiog
bV90ZXh0dXJlRGVwdGhDdWJlWzJdOworfTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcAppbmRleCAz
YjE5MzRlOTMxNi4uZTlhZWFlN2I1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCkBAIC0yMyw4ICsyMyw2IEBACiAgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI3ByYWdtYSBvbmNlCi0KICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXSExTTExleGVyLmgiCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRlODZiYjk4MDRhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xO
YW1lQ29udGV4dC5jcHAKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxF
KFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMTmFtZUNvbnRl
eHQuaCIKKworI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5o
IgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNM
VHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitOYW1lQ29udGV4
dDo6TmFtZUNvbnRleHQoTmFtZUNvbnRleHQqIHBhcmVudCkKKyAgICA6IG1fcGFyZW50KHBhcmVu
dCkKK3sKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6VHlwZURlZmluaXRpb24mIHR5
cGVEZWZpbml0aW9uKQoreworICAgIGlmIChleGlzdHModHlwZURlZmluaXRpb24ubmFtZSgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQodHlw
ZURlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5h
bWVkVHlwZT4sIDE+KCkpOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZCh0eXBlRGVmaW5p
dGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6
OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCit7CisgICAgaWYgKGV4
aXN0cyhzdHJ1Y3R1cmVEZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKHN0cnVjdHVyZURlZmluaXRpb24ubmFtZSgp
LCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KCkpOwor
ICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCit7CisgICAgaWYgKGV4aXN0cyhlbnVt
ZXJhdGlvbkRlZmluaXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1
dG8gcmVzdWx0ID0gbV90eXBlcy5hZGQoZW51bWVyYXRpb25EZWZpbml0aW9uLm5hbWUoKSwgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICBp
ZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7CisgICAgaWYgKG1fdHlwZXMuZmluZChmdW5jdGlv
bkRlZmluaXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAgIHx8IG1fdmFyaWFi
bGVzLmZpbmQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkgIT0gbV92YXJpYWJsZXMuZW5kKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fZnVuY3Rpb25zLmFk
ZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPigpKTsKKyAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlLmFwcGVuZChmdW5jdGlvbkRlZmluaXRpb24pOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIE5hbWVDb250ZXh0OjphZGQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIGlmIChtX3R5cGVzLmZpbmQobmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdHlwZXMuZW5kKCkKKyAgICAgICAgfHwg
bV92YXJpYWJsZXMuZmluZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSkgIT0gbV92
YXJpYWJsZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9
IG1fZnVuY3Rpb25zLmFkZChuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUoKSwgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4oKSk7
CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlm
IChtX2Z1bmN0aW9ucy5maW5kKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fZnVu
Y3Rpb25zLmVuZCgpCisgICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmF0aXZlVHlwZURlY2xh
cmF0aW9uLm5hbWUoKSkgIT0gbV92YXJpYWJsZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5u
YW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4o
KSk7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQobmF0aXZlVHlwZURlY2xhcmF0
aW9uKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoZXhp
c3RzKHZhcmlhYmxlRGVjbGFyYXRpb24ubmFtZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGF1dG8gcmVzdWx0ID0gbV92YXJpYWJsZXMuYWRkKFN0cmluZyh2YXJpYWJsZURlY2xhcmF0
aW9uLm5hbWUoKSksICZ2YXJpYWJsZURlY2xhcmF0aW9uKTsKKyAgICByZXR1cm4gcmVzdWx0Lmlz
TmV3RW50cnk7Cit9CisKK1ZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRU
eXBlPiwgMT4qIE5hbWVDb250ZXh0OjpnZXRUeXBlcyhjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgYXV0byBpdGVyYXRvciA9IG1fdHlwZXMuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlcmF0b3Ig
PT0gbV90eXBlcy5lbmQoKSkgeworICAgICAgICBpZiAobV9wYXJlbnQpCisgICAgICAgICAgICBy
ZXR1cm4gbV9wYXJlbnQtPmdldFR5cGVzKG5hbWUpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7Cit9CisKK1ZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+KiBOYW1lQ29udGV4
dDo6Z2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9mdW5jdGlvbnMuZmluZChuYW1lKTsKKyAgICBpZiAoaXRlcmF0b3IgPT0gbV9mdW5jdGlv
bnMuZW5kKCkpIHsKKyAgICAgICAgaWYgKG1fcGFyZW50KQorICAgICAgICAgICAgcmV0dXJuIG1f
cGFyZW50LT5nZXRGdW5jdGlvbnMobmFtZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKyAgICByZXR1cm4gJml0ZXJhdG9yLT52YWx1ZTsKK30KKworQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uKiBOYW1lQ29udGV4dDo6Z2V0VmFyaWFibGUoY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIGF1dG8gaXRlcmF0b3IgPSBtX3ZhcmlhYmxlcy5maW5kKG5hbWUpOworICAgIGlmIChpdGVy
YXRvciA9PSBtX3ZhcmlhYmxlcy5lbmQoKSkgeworICAgICAgICBpZiAobV9wYXJlbnQpCisgICAg
ICAgICAgICByZXR1cm4gbV9wYXJlbnQtPmdldFZhcmlhYmxlKG5hbWUpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIGl0ZXJhdG9yLT52YWx1ZTsKK30KKworYm9v
bCBOYW1lQ29udGV4dDo6ZXhpc3RzKFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gbV90eXBl
cy5maW5kKG5hbWUpICE9IG1fdHlwZXMuZW5kKCkKKyAgICAgICAgfHwgbV9mdW5jdGlvbnMuZmlu
ZChuYW1lKSAhPSBtX2Z1bmN0aW9ucy5lbmQoKQorICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5k
KG5hbWUpICE9IG1fdmFyaWFibGVzLmVuZCgpOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250
ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQzZGY4MDAxNGFl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xOYW1lQ29udGV4dC5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBOYW1lZFR5cGU7CitjbGFzcyBG
dW5jdGlvbkRlY2xhcmF0aW9uOworY2xhc3MgVHlwZURlZmluaXRpb247CitjbGFzcyBTdHJ1Y3R1
cmVEZWZpbml0aW9uOworY2xhc3MgRW51bWVyYXRpb25EZWZpbml0aW9uOworY2xhc3MgRnVuY3Rp
b25EZWZpbml0aW9uOworY2xhc3MgTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNzIE5h
dGl2ZVR5cGVEZWNsYXJhdGlvbjsKK2NsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb247CisKK30KKwor
Y2xhc3MgTmFtZUNvbnRleHQgeworcHVibGljOgorICAgIE5hbWVDb250ZXh0KE5hbWVDb250ZXh0
KiBwYXJlbnQgPSBudWxscHRyKTsKKworICAgIGJvb2wgYWRkKEFTVDo6VHlwZURlZmluaXRpb24m
KTsKKyAgICBib29sIGFkZChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mKTsKKyAgICBib29sIGFk
ZChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICBi
b29sIGFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKTsKKworICAgIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4qIGdldFR5cGVzKGNvbnN0IFN0cmlu
ZyYpOworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNs
YXJhdGlvbj4sIDE+KiBnZXRGdW5jdGlvbnMoY29uc3QgU3RyaW5nJik7CisgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uKiBnZXRWYXJpYWJsZShjb25zdCBTdHJpbmcmKTsKKworcHJpdmF0ZToK
KyAgICBib29sIGV4aXN0cyhTdHJpbmcmKTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+PiBtX3R5cGVzOworICAg
IEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24+LCAxPj4gbV9mdW5jdGlvbnM7CisgICAgSGFzaE1hcDxTdHJpbmcsIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbio+IG1fdmFyaWFibGVzOworICAgIE5hbWVDb250ZXh0KiBt
X3BhcmVudDsKK307CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAppbmRleCA3
ODBkNWM1NDI1YS4uZmJmNTA1ODU0NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKQEAgLTI4LDE5ICsy
OCwyNTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXSExTTE5hbWVSZXNvbHZl
ci5oIgogCi0jaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJh
dGlvbk1lbWJlckxpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisjaW5j
bHVkZSAiV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVm
ZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRl
ICJXSExTTElmU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKKyNpbmNs
dWRlICJXSExTTERvV2hpbGVMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCisjaW5j
bHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJs
ZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMUmV0dXJuLmgiCisjaW5jbHVkZSAiV0hMU0xQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTERvdEV4cHJlc3Npb24u
aCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldI
TFNMQ2FsbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewogCi1jbGFzcyBOYW1lUmVzb2x2ZXIg
OiBwdWJsaWMgVmlzaXRvciB7Ci0gICAgfk5hbWVSZXNvbHZlcigpID0gZGVmYXVsdDsKLX07CitO
YW1lUmVzb2x2ZXI6Ok5hbWVSZXNvbHZlcihOYW1lQ29udGV4dCYgbmFtZUNvbnRleHQpCisgICAg
OiBtX25hbWVDb250ZXh0KG5hbWVDb250ZXh0KQoreworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6
dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQoreworICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCh0eXBlUmVmZXJlbmNlKTsKKyAgICBpZiAodHlwZVJlZmVyZW5jZS5yZXNvbHZl
ZFR5cGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogY2FuZGlkYXRlcyA9IG1fbmFt
ZUNvbnRleHQuZ2V0VHlwZXModHlwZVJlZmVyZW5jZS5uYW1lKCkpOworICAgIGlmIChjYW5kaWRh
dGVzID09IG51bGxwdHIpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSByZXNvbHZlVHlwZU92ZXJsb2FkSW1wbCgqY2Fu
ZGlkYXRlcywgdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpKQorICAgICAgICB0eXBlUmVm
ZXJlbmNlLnNldFJlc29sdmVkVHlwZSgqcmVzdWx0KTsKKyAgICBlbHNlIHsKKyAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6
OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7Cisg
ICAgTmFtZUNvbnRleHQgbmV3TmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVS
ZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIobmV3TmFtZUNvbnRleHQpOworICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAgICBmb3IgKGF1dG8mIHBhcmFt
ZXRlciA6IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkpIHsKKyAgICAgICAgbmV3TmFt
ZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChwYXJhbWV0ZXIpOworICAgICAgICBhdXRvIHN1
Y2Nlc3MgPSBuZXdOYW1lQ29udGV4dC5hZGQocGFyYW1ldGVyKTsKKyAgICAgICAgaWYgKCFzdWNj
ZXNzKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorICAgIG5ld05hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoZnVu
Y3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQo
QVNUOjpCbG9jayYgYmxvY2spCit7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFt
ZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZp
c2l0KGJsb2NrKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6SWZTdGF0ZW1l
bnQmIGlmU3RhdGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5j
b25kaXRpb25hbCgpKTsKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4
dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVja0Vycm9yQW5kVmlzaXQoaWZT
dGF0ZW1lbnQuYm9keSgpKTsKKyAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkgeworICAg
ICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgICAgIE5h
bWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KCppZlN0YXRlbWVudC5l
bHNlQm9keSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6Oldo
aWxlTG9vcCYgd2hpbGVMb29wKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3Au
Y29uZGl0aW9uYWwoKSk7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRl
eHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KHdo
aWxlTG9vcC5ib2R5KCkpOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb1do
aWxlTG9vcCYgd2hpbGVMb29wKQoreworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25h
bWVDb250ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRW
aXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29w
LmNvbmRpdGlvbmFsKCkpOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpGb3JM
b29wJiBmb3JMb29wKQoreworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250
ZXh0KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdChm
b3JMb29wKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKK3sKKyAgICBtX25hbWVDb250ZXh0LmFkZCh2
YXJpYWJsZURlY2xhcmF0aW9uKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNs
YXJhdGlvbik7Cit9CiAKLXZvaWQgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJikKK3ZvaWQg
TmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVy
ZW5jZSkKIHsKKyAgICBpZiAodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKGF1dG8qIHZhcmlhYmxlID0gbV9uYW1lQ29udGV4dC5nZXRWYXJp
YWJsZSh2YXJpYWJsZVJlZmVyZW5jZS5uYW1lKCkpKQorICAgICAgICB2YXJpYWJsZVJlZmVyZW5j
ZS5zZXRWYXJpYWJsZSgqdmFyaWFibGUpOworICAgIGVsc2UgeworICAgICAgICBzZXRFcnJvcigp
OworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQo
QVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKK3sKKyAgICBBU1NFUlQobV9jdXJyZW50RnVu
Y3Rpb24pOworICAgIHJldHVyblN0YXRlbWVudC5zZXRGdW5jdGlvbihtX2N1cnJlbnRGdW5jdGlv
bik7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJldHVyblN0YXRlbWVudCk7Cit9CiAKK3ZvaWQg
TmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uKQoreworICAgIGlmIChhdXRvKiBnZXRGdW5jdGlvbnMgPSBtX25h
bWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uZ2V0RnVuY3Rp
b25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uc2V0UG9zc2libGVH
ZXRPdmVybG9hZHMoKmdldEZ1bmN0aW9ucyk7CisgICAgaWYgKGF1dG8qIHNldEZ1bmN0aW9ucyA9
IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRG
dW5jdGlvbk5hbWUoKSkpCisgICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5zZXRQb3Nz
aWJsZVNldE92ZXJsb2Fkcygqc2V0RnVuY3Rpb25zKTsKKyAgICBpZiAoYXV0byogYW5kRnVuY3Rp
b25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LmFuZEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnNl
dFBvc3NpYmxlQW5kT3ZlcmxvYWRzKCphbmRGdW5jdGlvbnMpOworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6
dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAgIGlmIChpczxB
U1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNzaW9uLmJhc2UoKSkpIHsKKyAgICAgICAg
aWYgKGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoZG93bmNh
c3Q8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5iYXNlKCkpLm5hbWUoKSkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvblR5cGVzLT5zaXplKCkgPT0gMSk7Cisg
ICAgICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9ICgqZW51bWVyYXRpb25UeXBlcylbMF07
CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHR5cGUpKSB7
CisgICAgICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9u
RGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPih0eXBlKTsK
KyAgICAgICAgICAgICAgICBpZiAoYXV0byogbWVtYmVyID0gZW51bWVyYXRpb25EZWZpbml0aW9u
Lm1lbWJlckJ5TmFtZShkb3RFeHByZXNzaW9uLmZpZWxkTmFtZSgpKSkgeworICAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bCkgPD0gc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVzc2lvbnMgbmVlZCB0
byBiZSBhYmxlIHRvIGJlY29tZSBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWxzIHdpdGhvdXQgdXBk
YXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgICAgICAgICAgICAgTGV4ZXI6OlRva2Vu
IG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7CisgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBQZXJoYXBzIGRvIHRoaXMgd2l0aCB2YXJpYW50cyBvciBhIFJld3JpdGVyIGluc3Rl
YWQuCisgICAgICAgICAgICAgICAgICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4cHJlc3Npb24oKTsK
KyAgICAgICAgICAgICAgICAgICAgbmV3ICgmZG90RXhwcmVzc2lvbikgQVNUOjpFbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwoV1RGTW92ZShvcmlnaW4pLCAqbWVtYmVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZG90RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChB
U1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWNhbGxFeHBy
ZXNzaW9uLmhhc092ZXJsb2FkcygpKSB7CisgICAgICAgIGlmIChhdXRvKiBmdW5jdGlvbnMgPSBt
X25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhjYWxsRXhwcmVzc2lvbi5uYW1lKCkpKQorICAgICAg
ICAgICAgY2FsbEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRzKCpmdW5jdGlvbnMpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiB0eXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlw
ZXMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkgeworICAgICAgICAgICAgICAgIGlmICh0eXBlcy0+
c2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGZ1bmN0aW9ucyA9
IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2Fs
bEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoKCp0eXBlcylbMF0uZ2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRzKCpmdW5jdGlvbnMpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGlmICghY2FsbEV4cHJlc3Npb24uaGFzT3ZlcmxvYWRzKCkpIHsK
KyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoY2FsbEV4cHJlc3Npb24pOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlz
aXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29u
c3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpCit7CisgICAgaWYgKGF1
dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoY29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UubGVmdCgpKSkgeworICAgICAgICBBU1NF
UlQoZW51bWVyYXRpb25UeXBlcy0+c2l6ZSgpID09IDEpOworICAgICAgICBBU1Q6Ok5hbWVkVHlw
ZSYgdHlwZSA9ICgqZW51bWVyYXRpb25UeXBlcylbMF07CisgICAgICAgIGlmIChpczxBU1Q6OkVu
dW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSkpIHsKKyAgICAgICAgICAgIEFTVDo6RW51bWVyYXRp
b25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2FzdDxBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbj4odHlwZSk7CisgICAgICAgICAgICBpZiAoYXV0byogbWVtYmVyID0g
ZW51bWVyYXRpb25EZWZpbml0aW9uLm1lbWJlckJ5TmFtZShjb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5yaWdodCgpKSkgeworICAgICAgICAgICAgICAgIGNvbnN0
YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLnNldEVudW1lcmF0aW9uTWVt
YmVyKGVudW1lcmF0aW9uRGVmaW5pdGlvbiwgKm1lbWJlcik7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHNldEVycm9y
KCk7Cit9CisKKy8vIEZJWE1FOiBNYWtlIHN1cmUgYWxsIHRoZSBuYW1lcyBoYXZlIGJlZW4gcmVz
b2x2ZWQuCisKK2Jvb2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBwcm9ncmFtLCBOYW1l
UmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9u
IDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hl
Y2tFcnJvckFuZFZpc2l0KCp0eXBlRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2
ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZm9yIChh
dXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygp
KSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoKnN0cnVjdHVyZURl
ZmluaXRpb24pOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0
aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgbmFtZVJl
c29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdCgqZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICAg
ICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0
aXZlVHlwZURlY2xhcmF0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9y
QW5kVmlzaXQoKm5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7CisgICAgICAgIGlmIChuYW1lUmVzb2x2
ZXIuZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgcmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMoUHJvZ3JhbSYgcHJvZ3Jh
bSwgTmFtZVJlc29sdmVyJiBuYW1lUmVzb2x2ZXIpCit7CisgICAgZm9yIChhdXRvJiBmdW5jdGlv
bkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBu
YW1lUmVzb2x2ZXIuc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihmdW5jdGlvbkRlZmluaXRp
b24uZ2V0KCkpOworICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KCpmdW5j
dGlvbkRlZmluaXRpb24pOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIG5hbWVSZXNvbHZlci5zZXRDdXJyZW50
RnVuY3Rpb25EZWZpbml0aW9uKG51bGxwdHIpOworICAgIGZvciAoYXV0byYgbmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSkgewor
ICAgICAgICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KCpuYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29s
dmVyLmgKaW5kZXggNDdkNGQ2YTU3OTMuLjE1YWZkZTNkMDNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKQEAg
LTI3LDEzICsyNyw0OSBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUgIldITFNM
UHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMTmFtZUNvbnRleHQuaCIKKyNpbmNsdWRlICJXSExT
TFZpc2l0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBuYW1lc3BhY2UgV0hMU0wgewog
Ci12b2lkIHJlc29sdmVOYW1lc0luVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSk7CitjbGFzcyBQcm9n
cmFtOworCitjbGFzcyBOYW1lUmVzb2x2ZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6Cisg
ICAgTmFtZVJlc29sdmVyKE5hbWVDb250ZXh0Jik7CisKKyAgICB2aXJ0dWFsIH5OYW1lUmVzb2x2
ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9u
JiBmdW5jdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlOworCisgICAgdm9pZCBzZXRDdXJyZW50RnVu
Y3Rpb25EZWZpbml0aW9uKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uKiBmdW5jdGlvbkRlZmluaXRp
b24pCisgICAgeworICAgICAgICBtX2N1cnJlbnRGdW5jdGlvbiA9IGZ1bmN0aW9uRGVmaW5pdGlv
bjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2Um
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6QmxvY2smKSBvdmVycmlkZTsKKyAgICB2
b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6V2hpbGVMb29wJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29w
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlz
aXQoQVNUOjpSZXR1cm4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJl
c3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mKSBv
dmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UmKSBvdmVycmlkZTsKKworICAgIE5hbWVDb250ZXh0IG1fbmFtZUNv
bnRleHQ7CisgICAgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIG1fY3VycmVudEZ1bmN0aW9uIHsg
bnVsbHB0ciB9OworfTsKKworYm9vbCByZXNvbHZlTmFtZXNJblR5cGVzKFByb2dyYW0mLCBOYW1l
UmVzb2x2ZXImKTsKK2Jvb2wgcmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMoUHJvZ3JhbSYsIE5hbWVS
ZXNvbHZlciYpOwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUGFyc2VyLmNwcAppbmRleCBiYzZlNzNlNmExZi4uNTllMGFjNzViNTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNl
ci5jcHAKQEAgLTM4LDcgKzM4LDggQEAgUGFyc2VyOjpQYXJzZXIoKQogewogfQogCi1hdXRvIFBh
cnNlcjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUg
bW9kZSkgLT4gT3B0aW9uYWw8RXJyb3I+CisvLyBGSVhNRTogUmV0dXJuIGEgYmV0dGVyIGVycm9y
IGNvZGUgZnJvbSB0aGlzLCBhbmQgcmVwb3J0IGl0IHRvIEphdmFTY3JpcHQuCithdXRvIFBhcnNl
cjo6cGFyc2UoUHJvZ3JhbSYgcHJvZ3JhbSwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1v
ZGUpIC0+IE9wdGlvbmFsPEVycm9yPgogewogICAgIG1fbGV4ZXIgPSBMZXhlcihzdHJpbmdWaWV3
KTsKICAgICBtX21vZGUgPSBtb2RlOwpAQCAtNTQsNyArNTUsMTEgQEAgYXV0byBQYXJzZXI6OnBh
cnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+
IE9wdGlvbmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUeXBlRGVmaW5pdGlvbigpOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAodHlwZURlZmluaXRpb24pIHsKLSAgICAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKnR5cGVEZWZpbml0aW9uKSk7CisgICAg
ICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqdHlwZURl
ZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAg
ICAgICAgICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIHR5cGVEZWZpbml0aW9uLT5u
YW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CkBAIC02NCw3ICs2OSwxMSBAQCBhdXRvIFBhcnNlcjo6cGFy
c2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4g
T3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVN0cnVjdHVyZURlZmluaXRpb24o
KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKHN0cnVjdHVyZURlZmluaXRpb24p
IHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKnN0cnVjdHVyZURlZmlu
aXRpb24pKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKCpzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNj
ZXNzKSB7CisgICAgICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEgJXMi
LCBzdHJ1Y3R1cmVEZWZpbml0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC03NCw3ICs4
MywxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2UoUHJvZ3JhbSYgcmVzdWx0LCBTdHJpbmdWaWV3IHN0
cmluZ1ZpZXcsIE1vZGUgbW9kZSkgLT4gT3B0aW9uYQogICAgICAgICAgICAgICAgIHJldHVybiBw
YXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAg
ICBpZiAoZW51bWVyYXRpb25EZWZpbml0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChXVEZNb3ZlKCplbnVtZXJhdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgICAgICAgICBh
dXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCplbnVtZXJhdGlvbkRlZmluaXRp
b24pKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAg
ICAgV1RGTG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
bmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtODUsNyArOTgsMTEgQEAgYXV0byBQYXJzZXI6OnBh
cnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+
IE9wdGlvbmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb24o
KTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbikg
ewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqZnVuY3Rpb25EZWZpbml0
aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RG
TW92ZSgqZnVuY3Rpb25EZWZpbml0aW9uKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNz
KSB7CisgICAgICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCBm
dW5jdGlvbkRlZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlcnJvciA9IGZ1bmN0
aW9uRGVmaW5pdGlvbi5lcnJvcigpOwpAQCAtOTYsNyArMTEzLDExIEBAIGF1dG8gUGFyc2VyOjpw
YXJzZShQcm9ncmFtJiByZXN1bHQsIFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAt
PiBPcHRpb25hCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlTmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbigpOwogICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBpZiAobmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbikgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2Vz
cyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsK
KyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RG
TG9nQWx3YXlzKCJOYW1lIEVycm9yISAlcyIsIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24tPm5h
bWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEwNiw3ICsxMjcsMTEgQEAgYXV0byBQYXJzZXI6OnBh
cnNlKFByb2dyYW0mIHJlc3VsdCwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+
IE9wdGlvbmEKICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VOYXRpdmVUeXBlRGVjbGFyYXRp
b24oKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbikgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlVHlw
ZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5h
cHBlbmQoV1RGTW92ZSgqbmF0aXZlVHlwZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAg
aWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiTmFtZSBF
cnJvciEgJXMiLCBuYXRpdmVUeXBlRGVjbGFyYXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
QEAgLTM4Myw3ICs0MDgsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlQXJndW1lbnQoKSAtPiBF
eHBlY3RlZDxBU1Q6OlR5cGVBcmd1bWVudCwgRXJyb3I+IHsKICAgICBhdXRvIHJlc3VsdCA9IGNv
bnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CiAgICAgaWYgKCFyZXN1
bHQpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyZXN1bHQuZXJyb3IoKSk7Ci0g
ICAgcmV0dXJuIEFTVDo6VHlwZUFyZ3VtZW50KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBlUmVm
ZXJlbmNlPihMZXhlcjo6VG9rZW4oKnJlc3VsdCksIHJlc3VsdC0+c3RyaW5nVmlldy50b1N0cmlu
ZygpLCBBU1Q6OlR5cGVBcmd1bWVudHMoKSkpOworICAgIHJldHVybiBBU1Q6OlR5cGVBcmd1bWVu
dChtYWtlVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4oTGV4ZXI6OlRva2VuKCpyZXN1bHQp
LCByZXN1bHQtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgQVNUOjpUeXBlQXJndW1lbnRzKCkpKTsK
IH0KIAogYXV0byBQYXJzZXI6OnBhcnNlVHlwZUFyZ3VtZW50cygpIC0+IEV4cGVjdGVkPEFTVDo6
VHlwZUFyZ3VtZW50cywgRXJyb3I+IHsKQEAgLTQ1NCwxNiArNDc5LDUyIEBAIGF1dG8gUGFyc2Vy
OjpwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCgpIC0+IEV4cGVjdGVkPFR5cGVTdWZmaXhO
b25BYmJyZXZpYXRlCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocmlnaHRT
cXVhcmVCcmFja2V0LmVycm9yKCkpOwogICAgICAgICByZXR1cm4ge3sgKnRva2VuLCBXVEY6Om51
bGxvcHQsICpudW1FbGVtZW50cyB9fTsKICAgICB9Ci0gICAgYXV0byBhZGRyZXNzU3BhY2UgPSBj
b25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0YW50LCBMZXhlcjo6VG9rZW46
OlR5cGU6OkRldmljZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cCwgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpUaHJlYWR9KTsKLSAgICBpZiAoIWFkZHJlc3NTcGFjZSkKLSAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZS5lcnJvcigpKTsKLSAgICByZXR1cm4g
e3sgKnRva2VuLCB7ICphZGRyZXNzU3BhY2UgfSwgV1RGOjpudWxsb3B0IH19OworICAgIGF1dG8g
YWRkcmVzc1NwYWNlVG9rZW4gPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OkNv
bnN0YW50LCBMZXhlcjo6VG9rZW46OlR5cGU6OkRldmljZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpU
aHJlYWRncm91cCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWR9KTsKKyAgICBpZiAoIWFkZHJl
c3NTcGFjZVRva2VuKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYWRkcmVzc1Nw
YWNlVG9rZW4uZXJyb3IoKSk7CisgICAgQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2Ug
YWRkcmVzc1NwYWNlOworICAgIHN3aXRjaCAoYWRkcmVzc1NwYWNlVG9rZW4tPnR5cGUpIHsKKyAg
ICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQ6CisgICAgICAgIGFkZHJlc3NTcGFj
ZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpDb25zdGFudDsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkRldmljZToKKyAgICAgICAgYWRk
cmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmljZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwOgor
ICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6
VGhyZWFkZ3JvdXA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBl
OjpUaHJlYWQ6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRk
cmVzc1NwYWNlOjpUaHJlYWQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
RXJyb3IoU3RyaW5nKCJTb21ldGhpbmcgcmVhbGx5IGJhZCBoYXBwZW5lZCIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpKSk7CisgICAgfQorICAgIHJldHVybiB7eyAqdG9rZW4sIHsgYWRk
cmVzc1NwYWNlIH0sIFdURjo6bnVsbG9wdCB9fTsKIH0KIAotYXV0byBQYXJzZXI6OnBhcnNlQWRk
cmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBF
cnJvcj4gewotICAgIGF1dG8gYWRkcmVzc1NwYWNlID0gY29uc3VtZVR5cGVzKHsgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2UsIExleGVyOjpU
b2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkfSk7Ci0g
ICAgaWYgKCFhZGRyZXNzU3BhY2UpCi0gICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihh
ZGRyZXNzU3BhY2UuZXJyb3IoKSk7CithdXRvIFBhcnNlcjo6cGFyc2VBZGRyZXNzU3BhY2VUeXBl
KCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4geworICAg
IGF1dG8gYWRkcmVzc1NwYWNlVG9rZW4gPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5
cGU6OkNvbnN0YW50LCBMZXhlcjo6VG9rZW46OlR5cGU6OkRldmljZSwgTGV4ZXI6OlRva2VuOjpU
eXBlOjpUaHJlYWRncm91cCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWR9KTsKKyAgICBpZiAo
IWFkZHJlc3NTcGFjZVRva2VuKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYWRk
cmVzc1NwYWNlVG9rZW4uZXJyb3IoKSk7CisgICAgQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNz
U3BhY2UgYWRkcmVzc1NwYWNlOworICAgIHN3aXRjaCAoYWRkcmVzc1NwYWNlVG9rZW4tPnR5cGUp
IHsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQ6CisgICAgICAgIGFkZHJl
c3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpDb25zdGFudDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkRldmljZToKKyAgICAg
ICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmlj
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZGdy
b3VwOgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NT
cGFjZTo6VGhyZWFkZ3JvdXA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpUaHJlYWQ6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlw
ZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxF
cnJvcj4oRXJyb3IoU3RyaW5nKCJTb21ldGhpbmcgcmVhbGx5IGJhZCBoYXBwZW5lZCIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKSk7CisgICAgfQogICAgIGF1dG8gbmFtZSA9IGNvbnN1
bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CiAgICAgaWYgKCFuYW1lKQog
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmFtZS5lcnJvcigpKTsKQEAgLTQ3MSwy
NCArNTMyLDIzIEBAIGF1dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAtPiBFeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyCiAgICAgaWYgKCF0eXBlQXJndW1l
bnRzKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odHlwZUFyZ3VtZW50cy5lcnJv
cigpKTsKIAotICAgIGF1dG8gY29uc3RydWN0VHlwZUZyb21TdWZmaXhBYmJyZXZpYXRlZCA9IFsm
XShjb25zdCBUeXBlU3VmZml4QWJicmV2aWF0ZWQmIHR5cGVTdWZmaXhBYmJyZXZpYXRlZCwgc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6VHlwZT4mJiBwcmV2aW91cykgLT4gc3RkOjp1bmlxdWVfcHRyPEFT
VDo6VHlwZT4geworICAgIGF1dG8gY29uc3RydWN0VHlwZUZyb21TdWZmaXhBYmJyZXZpYXRlZCA9
IFsmXShjb25zdCBUeXBlU3VmZml4QWJicmV2aWF0ZWQmIHR5cGVTdWZmaXhBYmJyZXZpYXRlZCwg
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgcHJldmlvdXMpIC0+IFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPiB7CiAgICAgICAgIHN3aXRjaCAodHlwZVN1ZmZpeEFiYnJldmlhdGVkLnRv
a2VuLnR5cGUpIHsKICAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlN0YXI6Ci0gICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6
VG9rZW4odHlwZVN1ZmZpeEFiYnJldmlhdGVkLnRva2VuKSwgYWRkcmVzc1NwYWNlLT5zdHJpbmdW
aWV3LnRvU3RyaW5nKCksIFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4QWJi
cmV2aWF0ZWQudG9rZW4pLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUocHJldmlvdXMpKTsKICAgICAg
ICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlNxdWFyZUJyYWNrZXRQYWlyOgotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVy
OjpUb2tlbih0eXBlU3VmZml4QWJicmV2aWF0ZWQudG9rZW4pLCBhZGRyZXNzU3BhY2UtPnN0cmlu
Z1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbih0eXBl
U3VmZml4QWJicmV2aWF0ZWQudG9rZW4pLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUocHJldmlvdXMp
KTsKICAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0Ogot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpBcnJheVR5cGU+KExleGVy
OjpUb2tlbih0eXBlU3VmZml4QWJicmV2aWF0ZWQudG9rZW4pLCBXVEZNb3ZlKHByZXZpb3VzKSwg
KnR5cGVTdWZmaXhBYmJyZXZpYXRlZC5udW1FbGVtZW50cyk7CisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJy
ZXZpYXRlZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeEFiYnJldmlhdGVk
Lm51bUVsZW1lbnRzKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0KICAgICB9
OwogCiAgICAgYXV0byBmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZCA9IHBhcnNlVHlwZVN1ZmZp
eEFiYnJldmlhdGVkKCk7CiAgICAgaWYgKCFmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZCkKICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0VHlwZVN1ZmZpeEFiYnJldmlhdGVk
LmVycm9yKCkpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IHJlc3VsdCA9IHN0ZDo6
bWFrZV91bmlxdWU8QVNUOjpUeXBlUmVmZXJlbmNlPihMZXhlcjo6VG9rZW4oKmFkZHJlc3NTcGFj
ZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykp
OworICAgIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiByZXN1bHQgPSBtYWtlVW5pcXVlUmVm
PEFTVDo6VHlwZVJlZmVyZW5jZT4oV1RGTW92ZSgqYWRkcmVzc1NwYWNlVG9rZW4pLCBuYW1lLT5z
dHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKICAgICByZXN1
bHQgPSBjb25zdHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkKCpmaXJzdFR5cGVTdWZmaXhB
YmJyZXZpYXRlZCwgV1RGTW92ZShyZXN1bHQpKTsKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAg
ICBhdXRvIHR5cGVTdWZmaXhBYmJyZXZpYXRlZCA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVk
PFR5cGVTdWZmaXhBYmJyZXZpYXRlZCwgRXJyb3I+PihbJl0oKSB7CkBAIC01MDMsNyArNTYzLDcg
QEAgYXV0byBQYXJzZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LCBFcnIKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwog
fQogCi1hdXRvIFBhcnNlcjo6cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VO
b25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+LCBFcnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygpOwogICAgIGlmICghb3JpZ2lu
KQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwpAQCAt
NTE0LDIxICs1NzQsMjAgQEAgYXV0byBQYXJzZXI6OnBhcnNlTm9uQWRkcmVzc1NwYWNlVHlwZSgp
IC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LAogICAgIGlmICghdHlwZUFy
Z3VtZW50cykKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGVBcmd1bWVudHMu
ZXJyb3IoKSk7CiAKLSAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4Tm9uQWJicmV2aWF0
ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkJiB0eXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQsIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYgcHJldmlvdXMpIC0+IHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OlR5cGU+IHsKKyAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4
Tm9uQWJicmV2aWF0ZWQgPSBbJl0oY29uc3QgVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkJiB0eXBl
U3VmZml4Tm9uQWJicmV2aWF0ZWQsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHByZXZp
b3VzKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4gewogICAgICAgICBzd2l0Y2ggKHR5
cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbi50eXBlKSB7CiAgICAgICAgIGNhc2UgTGV4ZXI6
OlRva2VuOjpUeXBlOjpTdGFyOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50
b2tlbiksIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5hZGRyZXNzU3BhY2UtPnN0cmluZ1ZpZXcu
dG9TdHJpbmcoKSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJy
ZXZpYXRlZC50b2tlbiksICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNlLCBX
VEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpTcXVh
cmVCcmFja2V0UGFpcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVk
LnRva2VuKSwgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NTcGFjZS0+c3RyaW5nVmll
dy50b1N0cmluZygpLCBXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZm
aXhOb25BYmJyZXZpYXRlZC50b2tlbiksICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVz
c1NwYWNlLCBXVEZNb3ZlKHByZXZpb3VzKSk7CiAgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpU
eXBlOjpMZWZ0U3F1YXJlQnJhY2tldDoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPEFTVDo6QXJyYXlUeXBlPihMZXhlcjo6VG9rZW4odHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVk
LnRva2VuKSwgV1RGTW92ZShwcmV2aW91cyksICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQubnVt
RWxlbWVudHMpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVR5
cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCBXVEZNb3Zl
KHByZXZpb3VzKSwgKnR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5udW1FbGVtZW50cyk7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9CiAgICAgfTsKIAotICAgIHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlR5cGU+IHJlc3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpUeXBlUmVmZXJl
bmNlPihXVEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1v
dmUoKnR5cGVBcmd1bWVudHMpKTsKKyAgICBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4gcmVz
dWx0ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+KFdURk1vdmUoKm9yaWdpbiks
IG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOwog
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIGF1dG8gdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVk
ID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBF
cnJvcj4+KFsmXSgpIHsKICAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVTdWZmaXhOb25BYmJy
ZXZpYXRlZCgpOwpAQCAtNTQyLDE0ICs2MDEsMTQgQEAgYXV0byBQYXJzZXI6OnBhcnNlTm9uQWRk
cmVzc1NwYWNlVHlwZSgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+LAog
ICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVR5cGUo
KSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+IHsKLSAgICBh
dXRvIHR5cGUgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpUeXBlPiwgRXJyb3I+PihbJl0oKSB7CithdXRvIFBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gRXhw
ZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4geworICAgIGF1dG8gdHlw
ZSA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PiwgRXJyb3I+PihbJl0oKSB7CiAgICAgICAgIHJldHVybiBwYXJzZUFkZHJlc3NTcGFjZVR5cGUo
KTsKICAgICB9KTsKICAgICBpZiAodHlwZSkKICAgICAgICAgcmV0dXJuIHR5cGU7CiAKLSAgICB0
eXBlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6VHlw
ZT4sIEVycm9yPj4oWyZdKCkgeworICAgIHR5cGUgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3Rl
ZDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPj4oWyZdKCkgewogICAgICAgICBy
ZXR1cm4gcGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCk7CiAgICAgfSk7CiAgICAgaWYgKHR5cGUp
CkBAIC04NDcsMTIgKzkwNiwxMiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmlu
aXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbgogICAgIGlmICgh
bmFtZSkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CiAK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiB0eXBlOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OlVubmFtZWRUeXBlPiB0eXBlOwogICAgIGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6
VHlwZTo6Q29sb24pKSB7CiAgICAgICAgIGF1dG8gcGFyc2VkVHlwZSA9IHBhcnNlVHlwZSgpOwog
ICAgICAgICBpZiAoIXBhcnNlZFR5cGUpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxF
cnJvcj4ocGFyc2VkVHlwZS5lcnJvcigpKTsKLSAgICAgICAgdHlwZSA9IFdURk1vdmUoKnBhcnNl
ZFR5cGUpOworICAgICAgICB0eXBlID0gcGFyc2VkVHlwZS0+dGFrZVVuaXF1ZVB0cigpOwogICAg
IH0KIAogICAgIGF1dG8gbGVmdEN1cmx5QnJhY2tldCA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tl
bjo6VHlwZTo6TGVmdEN1cmx5QnJhY2tldCk7CkBAIC04NjMsMjEgKzkyMiwyNSBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbgogICAgIGlmICghZmlyc3RFbnVtZXJhdGlvbk1lbWJlcikKICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0RW51bWVyYXRpb25NZW1iZXIuZXJyb3Io
KSk7CiAKLSAgICBBU1Q6OkVudW1lcmF0aW9uTWVtYmVycyBtZW1iZXJzOwotICAgIG1lbWJlcnMu
YXBwZW5kKFdURk1vdmUoKmZpcnN0RW51bWVyYXRpb25NZW1iZXIpKTsKKyAgICBBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbiByZXN1bHQoV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmll
dy50b1N0cmluZygpLCBXVEZNb3ZlKHR5cGUpKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSByZXN1bHQu
YWRkKFdURk1vdmUoKmZpcnN0RW51bWVyYXRpb25NZW1iZXIpKTsKKyAgICBpZiAoIXN1Y2Nlc3Mp
CisgICAgICAgIHJldHVybiBmYWlsKFN0cmluZygiQ2Fubm90IGFkZCBlbnVtZXJhdGlvbiBtZW1i
ZXIiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAKICAgICB3aGlsZSAodHJ5VHlw
ZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkgewogICAgICAgICBhdXRvIG1lbWJlciA9IHBh
cnNlRW51bWVyYXRpb25NZW1iZXIoKTsKICAgICAgICAgaWYgKCFtZW1iZXIpCiAgICAgICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obWVtYmVyLmVycm9yKCkpOwotICAgICAgICBtZW1i
ZXJzLmFwcGVuZChXVEZNb3ZlKCptZW1iZXIpKTsKKyAgICAgICAgc3VjY2VzcyA9IHJlc3VsdC5h
ZGQoV1RGTW92ZSgqbWVtYmVyKSk7CisgICAgICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgICAg
IHJldHVybiBmYWlsKFN0cmluZygiQ2Fubm90IGFkZCBlbnVtZXJhdGlvbiBtZW1iZXIiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7CiAgICAgfQogCiAgICAgYXV0byByaWdodEN1cmx5
QnJhY2tldCA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRDdXJseUJyYWNr
ZXQpOwogICAgIGlmICghcmlnaHRDdXJseUJyYWNrZXQpCiAgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihyaWdodEN1cmx5QnJhY2tldC5lcnJvcigpKTsKIAotICAgIHJldHVybiBBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3
LnRvU3RyaW5nKCksIFdURk1vdmUodHlwZSksIFdURk1vdmUobWVtYmVycykpOworICAgIHJldHVy
biBXVEZNb3ZlKHJlc3VsdCk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uTWVt
YmVyKCkgLT4gRXhwZWN0ZWQ8QVNUOjpFbnVtZXJhdGlvbk1lbWJlciwgRXJyb3I+IHsKQEAgLTk4
MSw3ICsxMDQ0LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlQXR0cmlidXRlQmxvY2soKSAtPiBFeHBl
Y3RlZDxBU1Q6OkF0dHJpYnV0ZUJsb2NrLCBFcnJvcj4gewogICAgIHJldHVybiBXVEZNb3ZlKHJl
c3VsdCk7CiB9CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+IEV4cGVjdGVkPEFT
VDo6UGFyYW1ldGVyLCBFcnJvcj4geworYXV0byBQYXJzZXI6OnBhcnNlUGFyYW1ldGVyKCkgLT4g
RXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4gewogICAgIGF1dG8gb3Jp
Z2luID0gcGVlaygpOwogICAgIGlmICghb3JpZ2luKQogICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwpAQCAtOTkyLDcgKzEwNTUsNyBAQCBhdXRvIFBhcnNl
cjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHsK
ICAgICBpZiAoIXR5cGUpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlLmVy
cm9yKCkpOwogCi0gICAgT3B0aW9uYWw8U3RyaW5nPiBuYW1lOworICAgIFN0cmluZyBuYW1lOwog
ICAgIGlmIChhdXRvIHRva2VuID0gdHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZp
ZXIpKQogICAgICAgICBuYW1lID0gdG9rZW4tPnN0cmluZ1ZpZXcudG9TdHJpbmcoKTsKIApAQCAt
MTAwMCwxOCArMTA2MywxOCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBl
Y3RlZDxBU1Q6OlBhcmFtZXRlciwgRXJyb3I+IHsKICAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBh
cnNlU2VtYW50aWMoKTsKICAgICAgICAgaWYgKCFzZW1hbnRpYykKICAgICAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5lcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIEFT
VDo6UGFyYW1ldGVyKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1v
dmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKCpzZW1hbnRpYykpOworICAgICAgICBy
ZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUo
cXVhbGlmaWVycyksIHR5cGUtPnRha2VVbmlxdWVQdHIoKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92
ZSgqc2VtYW50aWMpLCBudWxscHRyKTsKICAgICB9CiAKLSAgICByZXR1cm4gQVNUOjpQYXJhbWV0
ZXIoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSgqdHlwZSks
IFdURk1vdmUobmFtZSksIFdURjo6bnVsbG9wdCk7CisgICAgcmV0dXJuIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmllcnMpLCB0eXBlLT50
YWtlVW5pcXVlUHRyKCksIFdURk1vdmUobmFtZSksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CiB9
CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlBhcmFt
ZXRlcnMsIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VQYXJhbWV0ZXJzKCkgLT4gRXhwZWN0
ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucywgRXJyb3I+IHsKICAgICBhdXRvIGxlZnRQYXJl
bnRoZXNpcyA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFBhcmVudGhlc2lz
KTsKICAgICBpZiAoIWxlZnRQYXJlbnRoZXNpcykKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KGxlZnRQYXJlbnRoZXNpcy5lcnJvcigpKTsKIAotICAgIEFTVDo6UGFyYW1ldGVycyBw
YXJhbWV0ZXJzOworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKICAg
ICBpZiAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0UGFyZW50aGVzaXMpKQogICAg
ICAgICByZXR1cm4gV1RGTW92ZShwYXJhbWV0ZXJzKTsKIApAQCAtMTA5NSwxNCArMTE1OCwxNiBA
QCBhdXRvIFBhcnNlcjo6cGFyc2VFbnRyeVBvaW50RnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4
cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYQogICAgIGlmICghcGFyYW1ldGVycykKICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHBhcmFtZXRlcnMuZXJyb3IoKSk7CiAKKyAgICBib29s
IGlzT3BlcmF0b3IgPSBmYWxzZTsKKwogICAgIGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlw
ZTo6Q29sb24pKSB7CiAgICAgICAgIGF1dG8gc2VtYW50aWMgPSBwYXJzZVNlbWFudGljKCk7CiAg
ICAgICAgIGlmICghc2VtYW50aWMpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4oc2VtYW50aWMuZXJyb3IoKSk7Ci0gICAgICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShhdHRyaWJ1dGVCbG9jayksIGVudHJ5UG9p
bnRUeXBlLCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZN
b3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsKKyAgICAgICAgcmV0dXJuIEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKGF0dHJpYnV0
ZUJsb2NrKSwgZW50cnlQb2ludFR5cGUsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3
LnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlz
T3BlcmF0b3IpOwogICAgIH0KIAotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24o
V1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShhdHRyaWJ1dGVCbG9jayksIGVudHJ5UG9pbnRUeXBl
LCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCpw
YXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0KTsKKyAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoYXR0cmlidXRlQmxvY2spLCBlbnRyeVBv
aW50VHlwZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RG
TW92ZSgqcGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvcik7CiB9CiAKIGF1dG8g
UGFyc2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4gewpAQCAtMTExNyw2ICsxMTgyLDcgQEAgYXV0
byBQYXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxB
U1Q6OkZ1bmN0aW9uRGVjbGFyYXQKICAgICBhdXRvIG5hbWUgPSBjb25zdW1lVHlwZXMoeyBMZXhl
cjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIsIExleGVyOjpUb2tlbjo6VHlwZTo6T3BlcmF0b3JO
YW1lIH0pOwogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KG5hbWUuZXJyb3IoKSk7CisgICAgYXV0byBpc09wZXJhdG9yID0gbmFtZS0+dHlwZSA9PSBMZXhl
cjo6VG9rZW46OlR5cGU6Ok9wZXJhdG9yTmFtZTsKIAogICAgIGF1dG8gcGFyYW1ldGVycyA9IHBh
cnNlUGFyYW1ldGVycygpOwogICAgIGlmICghcGFyYW1ldGVycykKQEAgLTExMjYsMTAgKzExOTIs
MTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBF
eHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXQKICAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBh
cnNlU2VtYW50aWMoKTsKICAgICAgICAgaWYgKCFzZW1hbnRpYykKICAgICAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5lcnJvcigpKTsKLSAgICAgICAgcmV0dXJuIEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9w
dCwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgq
cGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSk7CisgICAgICAgIHJldHVybiBBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdU
Rk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFt
ZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3IpOwogICAgIH0KIAotICAgIHJl
dHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBXVEY6
Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdU
Rk1vdmUoKnBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQpOworICAgIHJldHVybiBBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1v
dmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRl
cnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpOwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VP
cGVyYXRvckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24sIEVycm9yPiB7CkBAIC0xMTQ1LDE0ICsxMjExLDE2IEBAIGF1dG8gUGFyc2VyOjpw
YXJzZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rp
b25EZWNsYXJhCiAgICAgaWYgKCFwYXJhbWV0ZXJzKQogICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4ocGFyYW1ldGVycy5lcnJvcigpKTsKIAorICAgIGJvb2wgaXNPcGVyYXRvciA9IHRy
dWU7CisKICAgICBpZiAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbG9uKSkgewogICAg
ICAgICBhdXRvIHNlbWFudGljID0gcGFyc2VTZW1hbnRpYygpOwogICAgICAgICBpZiAoIXNlbWFu
dGljKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNlbWFudGljLmVycm9y
KCkpOwotICAgICAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9y
aWdpbiksIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgU3RyaW5nKCJPcGVyYXRv
ciBDYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoKnBhcmFtZXRl
cnMpLCBXVEZNb3ZlKCpzZW1hbnRpYykpOworICAgICAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0
eXBlKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3Ip
OwogICAgIH0KIAotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgq
b3JpZ2luKSwgeyB9LCBXVEY6Om51bGxvcHQsIFdURk1vdmUoKnR5cGUpLCBTdHJpbmcoIk9wZXJh
dG9yIENhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZSgqcGFyYW1l
dGVycyksIFdURjo6bnVsbG9wdCk7CisgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIFN0
cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZN
b3ZlKCpwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKTsKIH0KIAogYXV0byBQ
YXJzZXI6OnBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbiwgRXJyb3I+IHsKQEAgLTEyMDAsNyArMTI2OCw3IEBAIGF1dG8gUGFyc2Vy
OjpwYXJzZU5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjCiAgICAgaWYgKCFzZW1pY29sb24pCiAgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihzZW1pY29sb24uZXJyb3IoKSk7CiAKLSAgICByZXR1cm4gQVNUOjpOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uKGZ1bmN0aW9uRGVjbGFyYXRpb24tPnRha2VPcmlnaW4oKSwgZnVu
Y3Rpb25EZWNsYXJhdGlvbi0+dGFrZUF0dHJpYnV0ZUJsb2NrKCksIGZ1bmN0aW9uRGVjbGFyYXRp
b24tPnRha2VFbnRyeVBvaW50VHlwZSgpLCBmdW5jdGlvbkRlY2xhcmF0aW9uLT50YWtlVHlwZSgp
LCBmdW5jdGlvbkRlY2xhcmF0aW9uLT50YWtlTmFtZSgpLCBmdW5jdGlvbkRlY2xhcmF0aW9uLT50
YWtlUGFyYW1ldGVycygpLCBmdW5jdGlvbkRlY2xhcmF0aW9uLT50YWtlU2VtYW50aWMoKSwgcmVz
dHJpY3RlZCk7CisgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihXVEZN
b3ZlKCpmdW5jdGlvbkRlY2xhcmF0aW9uKSwgcmVzdHJpY3RlZCk7CiB9CiAKIGF1dG8gUGFyc2Vy
OjpwYXJzZUJsb2NrKCkgLT4gRXhwZWN0ZWQ8QVNUOjpCbG9jaywgRXJyb3I+IHsKQEAgLTEyMjEs
NyArMTI4OSw3IEBAIEFTVDo6QmxvY2sgUGFyc2VyOjpwYXJzZUJsb2NrQm9keShMZXhlcjo6VG9r
ZW4mJiBvcmlnaW4pCiB7CiAgICAgQVNUOjpTdGF0ZW1lbnRzIHN0YXRlbWVudHM7CiAgICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBiYWNrdHJhY2tpbmdTY29wZTxF
eHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcj4+KFsmXSgpIHsK
KyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxVbmlx
dWVSZWY8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcj4+KFsmXSgpIHsKICAgICAgICAgICAgIHJldHVy
biBwYXJzZVN0YXRlbWVudCgpOwogICAgICAgICB9KTsKICAgICAgICAgaWYgKHN0YXRlbWVudCkK
QEAgLTEyNTgsMTAgKzEzMjYsMTMgQEAgYXV0byBQYXJzZXI6OnBhcnNlSWZTdGF0ZW1lbnQoKSAt
PiBFeHBlY3RlZDxBU1Q6OklmU3RhdGVtZW50LCBFcnJvcj4gewogICAgICAgICBhdXRvIHBhcnNl
ZEVsc2VCb2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsKICAgICAgICAgaWYgKCFwYXJzZWRFbHNlQm9k
eSkKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihwYXJzZWRFbHNlQm9keS5l
cnJvcigpKTsKLSAgICAgICAgZWxzZUJvZHkgPSBXVEZNb3ZlKCpwYXJzZWRFbHNlQm9keSk7Cisg
ICAgICAgIGVsc2VCb2R5ID0gcGFyc2VkRWxzZUJvZHktPnRha2VVbmlxdWVQdHIoKTsKICAgICB9
CiAKLSAgICByZXR1cm4gQVNUOjpJZlN0YXRlbWVudChXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3Zl
KCpjb25kaXRpb25hbCksIFdURk1vdmUoKmJvZHkpLCBXVEZNb3ZlKGVsc2VCb2R5KSk7CisgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+PiBjYXN0QXJndW1lbnRzOwor
ICAgIGNhc3RBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKmNvbmRpdGlvbmFsKSk7CisgICAgYXV0
byBib29sQ2FzdCA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRv
a2VuKCpvcmlnaW4pLCBTdHJpbmcoImJvb2wiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwgV1RGTW92ZShjYXN0QXJndW1lbnRzKSk7CisgICAgcmV0dXJuIEFTVDo6SWZTdGF0ZW1lbnQo
V1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShib29sQ2FzdCksIFdURk1vdmUoKmJvZHkpLCBXVEZN
b3ZlKGVsc2VCb2R5KSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZVN3aXRjaFN0YXRlbWVudCgp
IC0+IEV4cGVjdGVkPEFTVDo6U3dpdGNoU3RhdGVtZW50LCBFcnJvcj4gewpAQCAtMTM0MiwxNCAr
MTQxMywxNCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VGb3JMb29wKCkgLT4gRXhwZWN0ZWQ8QVNUOjpG
b3JMb29wLCBFcnJvcj4gewogICAgIGlmICghb3JpZ2luKQogICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwogCi0gICAgYXV0byBwYXJzZVJlbWFpbmRlciA9
IFsmXShWYXJpYW50PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQsIHN0ZDo6dW5p
cXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+PiYmIGluaXRpYWxpemF0aW9uKSAtPiBFeHBlY3RlZDxB
U1Q6OkZvckxvb3AsIEVycm9yPiB7CisgICAgYXV0byBwYXJzZVJlbWFpbmRlciA9IFsmXShWYXJp
YW50PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQsIFVuaXF1ZVJlZjxBU1Q6OkV4
cHJlc3Npb24+PiYmIGluaXRpYWxpemF0aW9uKSAtPiBFeHBlY3RlZDxBU1Q6OkZvckxvb3AsIEVy
cm9yPiB7CiAgICAgICAgIGF1dG8gc2VtaWNvbG9uID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2Vu
OjpUeXBlOjpTZW1pY29sb24pOwogICAgICAgICBpZiAoIXNlbWljb2xvbikKICAgICAgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1pY29sb24uZXJyb3IoKSk7CiAKICAgICAgICAg
YXV0byBjb25kaXRpb24gPSBiYWNrdHJhY2tpbmdTY29wZTxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpF
eHByZXNzaW9uPj4oWyZdKCkgLT4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4gewog
ICAgICAgICAgICAgaWYgKGF1dG8gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKCpleHByZXNzaW9uKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXhwcmVzc2lvbi0+dGFrZVVuaXF1ZVB0cigpOwogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIH0pOwogCkBAIC0xMzU5LDcgKzE0MzAsNyBAQCBhdXRvIFBhcnNl
cjo6cGFyc2VGb3JMb29wKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGb3JMb29wLCBFcnJvcj4gewogCiAg
ICAgICAgIGF1dG8gaW5jcmVtZW50ID0gYmFja3RyYWNraW5nU2NvcGU8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6RXhwcmVzc2lvbj4+KFsmXSgpIC0+IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Np
b24+IHsKICAgICAgICAgICAgIGlmIChhdXRvIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24o
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZSgqZXhwcmVzc2lvbik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24tPnRha2VVbmlxdWVQdHIoKTsKICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICB9KTsKIApAQCAtMTQ0Myw3ICsxNTE0LDcgQEAgYXV0
byBQYXJzZXI6OnBhcnNlRG9XaGlsZUxvb3AoKSAtPiBFeHBlY3RlZDxBU1Q6OkRvV2hpbGVMb29w
LCBFcnJvcj4gewogICAgIHJldHVybiBBU1Q6OkRvV2hpbGVMb29wKFdURk1vdmUoKm9yaWdpbiks
IFdURk1vdmUoKmJvZHkpLCBXVEZNb3ZlKCpjb25kaXRpb25hbCkpOwogfQogCi1hdXRvIFBhcnNl
cjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+JiYg
dHlwZSkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4geworYXV0
byBQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4mJiB0eXBlKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9y
PiB7CiAgICAgYXV0byBvcmlnaW4gPSBwZWVrKCk7CiAgICAgaWYgKCFvcmlnaW4pCiAgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CkBAIC0xNDYzLDIwICsx
NTM0LDIwIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oc3RkOjp1bmlx
dWVfcHRyPEFTVDo6VHlwZT4mJiB0eXBlKSAtPiBFeHBlCiAgICAgICAgICAgICBhdXRvIGluaXRp
YWxpemVyID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICBpZiAoIWluaXRpYWxpemVy
KQogICAgICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihpbml0aWFsaXplci5l
cnJvcigpKTsKLSAgICAgICAgICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oV1RG
TW92ZSgqb3JpZ2luKSwgV1RGTW92ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSh0eXBlKSwgbmFtZS0+
c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIFdURk1vdmUoKmluaXRp
YWxpemVyKSk7CisgICAgICAgICAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdU
Rk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIHR5cGUudGFrZVVuaXF1ZVB0cigp
LCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnNlbWFudGljKSwgaW5pdGlh
bGl6ZXItPnRha2VVbmlxdWVQdHIoKSk7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gQVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVy
cyksIFdURk1vdmUodHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgq
c2VtYW50aWMpLCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmllcnMpLCB0eXBlLnRha2VVbmlx
dWVQdHIoKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCpzZW1hbnRpYyks
IG51bGxwdHIpOwogICAgIH0KIAogICAgIGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6
RXF1YWxzU2lnbikpIHsKICAgICAgICAgYXV0byBpbml0aWFsaXplciA9IHBhcnNlRXhwcmVzc2lv
bigpOwogICAgICAgICBpZiAoIWluaXRpYWxpemVyKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KGluaXRpYWxpemVyLmVycm9yKCkpOwotICAgICAgICByZXR1cm4gQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyks
IFdURk1vdmUodHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGOjpudWxsb3B0
LCBXVEZNb3ZlKCppbml0aWFsaXplcikpOworICAgICAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIHR5cGUudGFr
ZVVuaXF1ZVB0cigpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURjo6bnVsbG9wdCwg
aW5pdGlhbGl6ZXItPnRha2VVbmlxdWVQdHIoKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmllcnMp
LCBXVEZNb3ZlKHR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgbnVsbHB0cik7CisgICAgcmV0dXJuIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihXVEZNb3Zl
KCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmllcnMpLCB0eXBlLnRha2VVbmlxdWVQdHIoKSwgbmFt
ZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOwogfQogCiBh
dXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpIC0+IEV4cGVjdGVkPEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQsIEVycm9yPiB7CkBAIC0xNDg4LDcgKzE1NTks
NyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpIC0+IEV4cGVjdGVk
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdAogICAgIGlmICghdHlwZSkKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7CiAKLSAgICBhdXRvIGZpcnN0VmFy
aWFibGVEZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpUeXBlPigoKnR5cGUpLT5jbG9uZSgpKSk7CisgICAgYXV0byBmaXJzdFZhcmlhYmxl
RGVjbGFyYXRpb24gPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKCp0eXBlKS0+Y2xvbmUoKSk7
CiAgICAgaWYgKCFmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pCiAgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAKQEAgLTE0
OTYsNyArMTU2Nyw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkg
LT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0CiAgICAgcmVzdWx0LmFwcGVu
ZChXVEZNb3ZlKCpmaXJzdFZhcmlhYmxlRGVjbGFyYXRpb24pKTsKIAogICAgIHdoaWxlICh0cnlU
eXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29tbWEpKSB7Ci0gICAgICAgIGF1dG8gdmFyaWFibGVE
ZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpUeXBlPigoKnR5cGUpLT5jbG9uZSgpKSk7CisgICAgICAgIGF1dG8gdmFyaWFibGVEZWNsYXJh
dGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKICAgICAg
ICAgaWYgKCF2YXJpYWJsZURlY2xhcmF0aW9uKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KHZhcmlhYmxlRGVjbGFyYXRpb24uZXJyb3IoKSk7CiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoV1RGTW92ZSgqdmFyaWFibGVEZWNsYXJhdGlvbikpOwpAQCAtMTUwNSwxMyArMTU3Niwx
MyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpIC0+IEV4cGVjdGVk
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdAogICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb25zU3RhdGVtZW50KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocmVzdWx0KSk7CiB9
CiAKLWF1dG8gUGFyc2VyOjpwYXJzZVN0YXRlbWVudCgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlN0YXRlbWVudD4sIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VTdGF0ZW1l
bnQoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcj4gewogICAg
IHsKICAgICAgICAgYXV0byBibG9jayA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPEFTVDo6
QmxvY2ssIEVycm9yPj4oWyZdKCkgewogICAgICAgICAgICAgcmV0dXJuIHBhcnNlQmxvY2soKTsK
ICAgICAgICAgfSk7CiAgICAgICAgIGlmIChibG9jaykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpCbG9jaz4o
V1RGTW92ZSgqYmxvY2spKSk7CisgICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFT
VDo6QmxvY2s+KFdURk1vdmUoKmJsb2NrKSkgfTsKICAgICB9CiAKICAgICB7CkBAIC0xNTE5LDcg
KzE1OTAsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQoKSAtPiBFeHBlY3RlZDxzdGQ6
OnVuaXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcgogICAgICAgICAgICAgcmV0dXJuIHBh
cnNlSWZTdGF0ZW1lbnQoKTsKICAgICAgICAgfSk7CiAgICAgICAgIGlmIChpZlN0YXRlbWVudCkK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+KHN0ZDo6
bWFrZV91bmlxdWU8QVNUOjpJZlN0YXRlbWVudD4oV1RGTW92ZSgqaWZTdGF0ZW1lbnQpKSk7Cisg
ICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6SWZTdGF0ZW1lbnQ+KFdURk1v
dmUoKmlmU3RhdGVtZW50KSkgfTsKICAgICB9CiAKICAgICB7CkBAIC0xNTI3LDcgKzE1OTgsNyBA
QCBhdXRvIFBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcgogICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3dpdGNo
U3RhdGVtZW50KCk7CiAgICAgICAgIH0pOwogICAgICAgICBpZiAoc3dpdGNoU3RhdGVtZW50KQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0YXRlbWVudD4oc3RkOjpt
YWtlX3VuaXF1ZTxBU1Q6OlN3aXRjaFN0YXRlbWVudD4oV1RGTW92ZSgqc3dpdGNoU3RhdGVtZW50
KSkpOworICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlN3aXRjaFN0YXRl
bWVudD4oV1RGTW92ZSgqc3dpdGNoU3RhdGVtZW50KSkgfTsKICAgICB9CiAKICAgICB7CkBAIC0x
NTM1LDcgKzE2MDYsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQoKSAtPiBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcgogICAgICAgICAgICAgcmV0
dXJuIHBhcnNlRm9yTG9vcCgpOwogICAgICAgICB9KTsKICAgICAgICAgaWYgKGZvckxvb3ApCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6U3RhdGVtZW50PihzdGQ6Om1h
a2VfdW5pcXVlPEFTVDo6Rm9yTG9vcD4oV1RGTW92ZSgqZm9yTG9vcCkpKTsKKyAgICAgICAgICAg
IHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpGb3JMb29wPihXVEZNb3ZlKCpmb3JMb29wKSkg
fTsKICAgICB9CiAKICAgICB7CkBAIC0xNTQzLDcgKzE2MTQsNyBAQCBhdXRvIFBhcnNlcjo6cGFy
c2VTdGF0ZW1lbnQoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+
LCBFcnJvcgogICAgICAgICAgICAgcmV0dXJuIHBhcnNlV2hpbGVMb29wKCk7CiAgICAgICAgIH0p
OwogICAgICAgICBpZiAod2hpbGVMb29wKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxBU1Q6OlN0YXRlbWVudD4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OldoaWxlTG9vcD4oV1RG
TW92ZSgqd2hpbGVMb29wKSkpOworICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxB
U1Q6OldoaWxlTG9vcD4oV1RGTW92ZSgqd2hpbGVMb29wKSkgfTsKICAgICB9CiAKICAgICB7CkBA
IC0xNTU5LDcgKzE2MzAsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQoKSAtPiBFeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcgogICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgfSk7CiAgICAgICAgIGlmIChkb1doaWxlTG9vcCkKLSAg
ICAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+KHN0ZDo6bWFr
ZV91bmlxdWU8QVNUOjpEb1doaWxlTG9vcD4oV1RGTW92ZSgqZG9XaGlsZUxvb3ApKSk7CisgICAg
ICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6RG9XaGlsZUxvb3A+KFdURk1vdmUo
KmRvV2hpbGVMb29wKSkgfTsKICAgICB9CiAKICAgICB7CkBAIC0xNTc1LDcgKzE2NDYsNyBAQCBh
dXRvIFBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcgogICAgICAgICAgICAgcmV0dXJuIEFTVDo6QnJlYWsoV1RG
TW92ZSgqb3JpZ2luKSk7CiAgICAgICAgIH0pOwogICAgICAgICBpZiAoYnJlYWtPYmplY3QpCi0g
ICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6U3RhdGVtZW50PihzdGQ6Om1h
a2VfdW5pcXVlPEFTVDo6QnJlYWs+KFdURk1vdmUoKmJyZWFrT2JqZWN0KSkpOworICAgICAgICAg
ICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkJyZWFrPihXVEZNb3ZlKCpicmVha09iamVj
dCkpIH07CiAgICAgfQogCiAgICAgewpAQCAtMTU5MSw3ICsxNjYyLDcgQEAgYXV0byBQYXJzZXI6
OnBhcnNlU3RhdGVtZW50KCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6U3RhdGVt
ZW50PiwgRXJyb3IKICAgICAgICAgICAgIHJldHVybiBBU1Q6OkNvbnRpbnVlKFdURk1vdmUoKm9y
aWdpbikpOwogICAgICAgICB9KTsKICAgICAgICAgaWYgKGNvbnRpbnVlT2JqZWN0KQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0YXRlbWVudD4oc3RkOjptYWtlX3Vu
aXF1ZTxBU1Q6OkNvbnRpbnVlPihXVEZNb3ZlKCpjb250aW51ZU9iamVjdCkpKTsKKyAgICAgICAg
ICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpDb250aW51ZT4oV1RGTW92ZSgqY29udGlu
dWVPYmplY3QpKSB9OwogICAgIH0KIAogICAgIHsKQEAgLTE2MDcsNyArMTY3OCw3IEBAIGF1dG8g
UGFyc2VyOjpwYXJzZVN0YXRlbWVudCgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlN0YXRlbWVudD4sIEVycm9yCiAgICAgICAgICAgICByZXR1cm4gQVNUOjpGYWxsdGhyb3VnaChX
VEZNb3ZlKCpvcmlnaW4pKTsKICAgICAgICAgfSk7CiAgICAgICAgIGlmIChmYWxsdGhyb3VnaE9i
amVjdCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+
KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpGYWxsdGhyb3VnaD4oV1RGTW92ZSgqZmFsbHRocm91Z2hP
YmplY3QpKSk7CisgICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6RmFsbHRo
cm91Z2g+KFdURk1vdmUoKmZhbGx0aHJvdWdoT2JqZWN0KSkgfTsKICAgICB9CiAKICAgICB7CkBA
IC0xNjIzLDcgKzE2OTQsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQoKSAtPiBFeHBl
Y3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcgogICAgICAgICAgICAg
cmV0dXJuIEFTVDo6VHJhcChXVEZNb3ZlKCpvcmlnaW4pKTsKICAgICAgICAgfSk7CiAgICAgICAg
IGlmICh0cmFwT2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlN0YXRlbWVudD4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlRyYXA+KFdURk1vdmUoKnRyYXBPYmpl
Y3QpKSk7CisgICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6VHJhcD4oV1RG
TW92ZSgqdHJhcE9iamVjdCkpIH07CiAgICAgfQogCiAgICAgewpAQCAtMTY0MywxMCArMTcxNCwx
MCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcgogICAgICAgICAgICAgaWYgKCFzZW1pY29sb24p
CiAgICAgICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNlbWljb2xvbi5lcnJv
cigpKTsKIAotICAgICAgICAgICAgcmV0dXJuIEFTVDo6UmV0dXJuKFdURk1vdmUoKm9yaWdpbiks
IFdURk1vdmUoKmV4cHJlc3Npb24pKTsKKyAgICAgICAgICAgIHJldHVybiBBU1Q6OlJldHVybihX
VEZNb3ZlKCpvcmlnaW4pLCBleHByZXNzaW9uLT50YWtlVW5pcXVlUHRyKCkpOwogICAgICAgICB9
KTsKICAgICAgICAgaWYgKHJldHVybk9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpSZXR1cm4+KFdU
Rk1vdmUoKnJldHVybk9iamVjdCkpKTsKKyAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVS
ZWY8QVNUOjpSZXR1cm4+KFdURk1vdmUoKnJldHVybk9iamVjdCkpIH07CiAgICAgfQogCiAgICAg
ewpAQCAtMTY2MiwxMCArMTczMywxMCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQoKSAt
PiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcgogICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfSk7CiAgICAgICAgIGlmICh2YXJpYWJsZURl
Y2xhcmF0aW9ucykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpTdGF0
ZW1lbnQ+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVu
dD4oV1RGTW92ZSgqdmFyaWFibGVEZWNsYXJhdGlvbnMpKSk7CisgICAgICAgICAgICByZXR1cm4g
eyBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KFdURk1v
dmUoKnZhcmlhYmxlRGVjbGFyYXRpb25zKSkgfTsKICAgICB9CiAKLSAgICBhdXRvIGVmZmVjdGZ1
bEV4cHJlc3Npb24gPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+PihbJl0oKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHsKKyAgICBhdXRvIGVmZmVjdGZ1bEV4cHJlc3Np
b24gPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHBy
ZXNzaW9uPiwgRXJyb3I+PihbJl0oKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNz
aW9uPiwgRXJyb3I+IHsKICAgICAgICAgYXV0byByZXN1bHQgPSBwYXJzZUVmZmVjdGZ1bEV4cHJl
c3Npb24oKTsKICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4ocmVzdWx0LmVycm9yKCkpOwpAQCAtMTY3NywxMiArMTc0OCwxMiBAQCBhdXRv
IFBhcnNlcjo6cGFyc2VTdGF0ZW1lbnQoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpTdGF0ZW1lbnQ+LCBFcnJvcgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0pOwogICAg
IGlmIChlZmZlY3RmdWxFeHByZXNzaW9uKQotICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PEFTVDo6U3RhdGVtZW50PihzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lv
blN0YXRlbWVudD4oV1RGTW92ZSgqZWZmZWN0ZnVsRXhwcmVzc2lvbikpKTsKKyAgICAgICAgcmV0
dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+KFdU
Rk1vdmUoKmVmZmVjdGZ1bEV4cHJlc3Npb24pKSB9OwogCiAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KGVmZmVjdGZ1bEV4cHJlc3Npb24uZXJyb3IoKSk7CiB9CiAKLWF1dG8gUGFyc2VyOjpw
YXJzZUVmZmVjdGZ1bEV4cHJlc3Npb24oKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNU
OjpFeHByZXNzaW9uPiwgRXJyb3I+IHsKK2F1dG8gUGFyc2VyOjpwYXJzZUVmZmVjdGZ1bEV4cHJl
c3Npb24oKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHsK
ICAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKICAgICBpZiAoIW9yaWdpbikKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKQEAgLTE2OTMsNyArMTc2NCw3
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVmZmVjdGZ1bEV4cHJlc3Npb24oKSAtPiBFeHBlY3RlZDxz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzCiAgICAgICAgIGF1dG8gZWZmZWN0ZnVsRXhwcmVz
c2lvbiA9IHBhcnNlRWZmZWN0ZnVsQXNzaWdubWVudCgpOwogICAgICAgICBpZiAoIWVmZmVjdGZ1
bEV4cHJlc3Npb24pCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJu
IFdURk1vdmUoKmVmZmVjdGZ1bEV4cHJlc3Npb24pOworICAgICAgICByZXR1cm4gZWZmZWN0ZnVs
RXhwcmVzc2lvbi0+dGFrZVVuaXF1ZVB0cigpOwogICAgIH0pOwogICAgIGlmICghZmlyc3QpCiAg
ICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1ha2Vf
dW5pcXVlPEFTVDo6Q29tbWFFeHByZXNzaW9uPihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKGV4
cHJlc3Npb25zKSkpOwpAQCAtMTcxMywxOSArMTc4NCwxOSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VF
ZmZlY3RmdWxFeHByZXNzaW9uKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhw
cmVzcwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VFZmZlY3RmdWxBc3NpZ25tZW50KCkgLT4gRXhw
ZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiB7Ci0gICAgYXV0
byBhc3NpZ25tZW50ID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPj4oWyZdKCkgeworICAgIGF1dG8gYXNzaWdubWVudCA9
IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBF
cnJvcj4+KFsmXSgpIHsKICAgICAgICAgcmV0dXJuIHBhcnNlQXNzaWdubWVudCgpOwogICAgIH0p
OwogICAgIGlmIChhc3NpZ25tZW50KQogICAgICAgICByZXR1cm4gYXNzaWdubWVudDsKIAotICAg
IGFzc2lnbm1lbnQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+PihbJl0oKSB7CisgICAgYXNzaWdubWVudCA9IGJhY2t0
cmFja2luZ1Njb3BlPEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4+
KFsmXSgpIHsKICAgICAgICAgcmV0dXJuIHBhcnNlRWZmZWN0ZnVsUHJlZml4KCk7CiAgICAgfSk7
CiAgICAgaWYgKGFzc2lnbm1lbnQpCiAgICAgICAgIHJldHVybiBhc3NpZ25tZW50OwogCi0gICAg
YXNzaWdubWVudCA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4+KFsmXSgpIHsKKyAgICBhc3NpZ25tZW50ID0gYmFja3Ry
YWNraW5nU2NvcGU8RXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPj4o
WyZdKCkgewogICAgICAgICByZXR1cm4gcGFyc2VDYWxsRXhwcmVzc2lvbigpOwogICAgIH0pOwog
ICAgIGlmIChhc3NpZ25tZW50KQpAQCAtMTczNCw3ICsxODA1LDcgQEAgYXV0byBQYXJzZXI6OnBh
cnNlRWZmZWN0ZnVsQXNzaWdubWVudCgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OkV4cHJlc3MKICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYXNzaWdubWVudC5lcnJvcigp
KTsKIH0KIAotYXV0byBQYXJzZXI6OnBhcnNlRWZmZWN0ZnVsUHJlZml4KCkgLT4gRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiB7CithdXRvIFBhcnNlcjo6
cGFyc2VFZmZlY3RmdWxQcmVmaXgoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNz
aW9uPiwgRXJyb3I+IHsKICAgICBhdXRvIHByZWZpeCA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpU
b2tlbjo6VHlwZTo6UGx1c1BsdXMsIExleGVyOjpUb2tlbjo6VHlwZTo6TWludXNNaW51cyB9KTsK
ICAgICBpZiAoIXByZWZpeCkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHByZWZp
eC5lcnJvcigpKTsKQEAgLTE3NDgsNyArMTgxOSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVmZmVj
dGZ1bFByZWZpeCgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+
CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwgV1RGTW92ZSgqcHJldmlvdXMp
KTsKICAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxs
QXJndW1lbnRzOwogICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChyZXN1bHQtPm9sZFZhcmlh
YmxlUmVmZXJlbmNlKCkpOwotICAgICAgICByZXN1bHQtPnNldE5ld1ZhbHVlRXhwcmVzc2lvbihz
dGQ6Om1ha2VfdW5pcXVlPEFTVDo6Q2FsbEV4cHJlc3Npb24+KFdURk1vdmUoKnByZWZpeCksIFN0
cmluZygib3BlcmF0b3IrKyIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3Zl
KGNhbGxBcmd1bWVudHMpKSk7CisgICAgICAgIHJlc3VsdC0+c2V0TmV3VmFsdWVFeHByZXNzaW9u
KG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oV1RGTW92ZSgqcHJlZml4KSwgU3Ry
aW5nKCJvcGVyYXRvcisrIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUo
Y2FsbEFyZ3VtZW50cykpKTsKICAgICAgICAgcmVzdWx0LT5zZXRSZXN1bHRFeHByZXNzaW9uKHJl
c3VsdC0+bmV3VmFyaWFibGVSZWZlcmVuY2UoKSk7CiAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpFeHByZXNzaW9uPihXVEZNb3ZlKHJlc3VsdCkpOwogICAgIH0KQEAgLTE3NTYs
NyArMTgyNyw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVmZmVjdGZ1bFByZWZpeCgpIC0+IEV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+CiAgICAgICAgIGF1dG8gcmVzdWx0
ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24+KExleGVy
OjpUb2tlbigqcHJlZml4KSwgV1RGTW92ZSgqcHJldmlvdXMpKTsKICAgICAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOwogICAgICAgICBj
YWxsQXJndW1lbnRzLmFwcGVuZChyZXN1bHQtPm9sZFZhcmlhYmxlUmVmZXJlbmNlKCkpOwotICAg
ICAgICByZXN1bHQtPnNldE5ld1ZhbHVlRXhwcmVzc2lvbihzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6
Q2FsbEV4cHJlc3Npb24+KFdURk1vdmUoKnByZWZpeCksIFN0cmluZygib3BlcmF0b3ItLSIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhbGxBcmd1bWVudHMpKSk7Cisg
ICAgICAgIHJlc3VsdC0+c2V0TmV3VmFsdWVFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNUOjpD
YWxsRXhwcmVzc2lvbj4oV1RGTW92ZSgqcHJlZml4KSwgU3RyaW5nKCJvcGVyYXRvci0tIiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpKTsKICAg
ICAgICAgcmVzdWx0LT5zZXRSZXN1bHRFeHByZXNzaW9uKHJlc3VsdC0+bmV3VmFyaWFibGVSZWZl
cmVuY2UoKSk7CiAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9u
PihXVEZNb3ZlKHJlc3VsdCkpOwogICAgIH0KQEAgLTE3NjYsNyArMTgzNyw3IEBAIGF1dG8gUGFy
c2VyOjpwYXJzZUVmZmVjdGZ1bFByZWZpeCgpIC0+IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OkV4cHJlc3Npb24+CiAgICAgfQogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VFZmZlY3RmdWxT
dWZmaXgoKSAtPiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPiwgRXJy
b3I+IHsKK2F1dG8gUGFyc2VyOjpwYXJzZUVmZmVjdGZ1bFN1ZmZpeCgpIC0+IEV4cGVjdGVkPFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gewogICAgIGF1dG8gZWZmZWN0ZnVsU3Vm
Zml4ID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhw
cmVzc2lvbj4sIEVycm9yPj4oWyZdKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6
RXhwcmVzc2lvbj4sIEVycm9yPiB7CiAgICAgICAgIGF1dG8gcHJldmlvdXMgPSBwYXJzZVBvc3Np
YmxlU3VmZml4KCk7CiAgICAgICAgIGlmICghcHJldmlvdXMpCkBAIC0xNzgxLDcgKzE4NTIsNyBA
QCBhdXRvIFBhcnNlcjo6cGFyc2VFZmZlY3RmdWxTdWZmaXgoKSAtPiBFeHBlY3RlZDxzdGQ6OnVu
aXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPgogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzdGQ6
Om1ha2VfdW5pcXVlPEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2Vu
KCpzdWZmaXgpLCBXVEZNb3ZlKCpwcmV2aW91cykpOwogICAgICAgICAgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOwogICAgICAgICAgICAg
Y2FsbEFyZ3VtZW50cy5hcHBlbmQocmVzdWx0LT5vbGRWYXJpYWJsZVJlZmVyZW5jZSgpKTsKLSAg
ICAgICAgICAgIHJlc3VsdC0+c2V0TmV3VmFsdWVFeHByZXNzaW9uKHN0ZDo6bWFrZV91bmlxdWU8
QVNUOjpDYWxsRXhwcmVzc2lvbj4oV1RGTW92ZSgqc3VmZml4KSwgU3RyaW5nKCJvcGVyYXRvcisr
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykp
KTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0TmV3VmFsdWVFeHByZXNzaW9uKG1ha2VVbmlxdWVS
ZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oV1RGTW92ZSgqc3VmZml4KSwgU3RyaW5nKCJvcGVyYXRv
cisrIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50
cykpKTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0UmVzdWx0RXhwcmVzc2lvbihyZXN1bHQtPm9s
ZFZhcmlhYmxlUmVmZXJlbmNlKCkpOwogICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OkV4cHJlc3Npb24+KFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgIH0KQEAgLTE3ODks
NyArMTg2MCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVmZmVjdGZ1bFN1ZmZpeCgpIC0+IEV4cGVj
dGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+CiAgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPihM
ZXhlcjo6VG9rZW4oKnN1ZmZpeCksIFdURk1vdmUoKnByZXZpb3VzKSk7CiAgICAgICAgICAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4+IGNhbGxBcmd1bWVudHM7CiAg
ICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChyZXN1bHQtPm9sZFZhcmlhYmxlUmVmZXJl
bmNlKCkpOwotICAgICAgICAgICAgcmVzdWx0LT5zZXROZXdWYWx1ZUV4cHJlc3Npb24oc3RkOjpt
YWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNzaW9uPihXVEZNb3ZlKCpzdWZmaXgpLCBTdHJpbmco
Im9wZXJhdG9yLS0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYWxs
QXJndW1lbnRzKSkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXROZXdWYWx1ZUV4cHJlc3Npb24o
bWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihXVEZNb3ZlKCpzdWZmaXgpLCBTdHJp
bmcoIm9wZXJhdG9yLS0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShj
YWxsQXJndW1lbnRzKSkpOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRSZXN1bHRFeHByZXNzaW9u
KHJlc3VsdC0+b2xkVmFyaWFibGVSZWZlcmVuY2UoKSk7CiAgICAgICAgICAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4oV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAg
fQpAQCAtMTgwMSw3ICsxODcyLDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRWZmZWN0ZnVsU3VmZml4
KCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4KICAgICBpZiAo
ZWZmZWN0ZnVsU3VmZml4KQogICAgICAgICByZXR1cm4gZWZmZWN0ZnVsU3VmZml4OwogCi0gICAg
ZWZmZWN0ZnVsU3VmZml4ID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPj4oWyZdKCkgeworICAgIGVmZmVjdGZ1bFN1ZmZp
eCA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
LCBFcnJvcj4+KFsmXSgpIHsKICAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbEV4cHJlc3Npb24oKTsK
ICAgICB9KTsKICAgICBpZiAoZWZmZWN0ZnVsU3VmZml4KQpAQCAtMTgyMCw3ICsxODkxLDcgQEAg
YXV0byBQYXJzZXI6OnBhcnNlRWZmZWN0ZnVsU3VmZml4KCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4KICAgICAgICAgaWYgKCFyaWdodFBhcmVudGhlc2lzKQog
ICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHJpZ2h0UGFyZW50aGVzaXMuZXJy
b3IoKSk7CiAKLSAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+
KFdURk1vdmUoKmV4cHJlc3Npb24pKTsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZSgqZXhwcmVz
c2lvbikgfTsKICAgICB9KTsKICAgICBpZiAoZWZmZWN0ZnVsU3VmZml4KQogICAgICAgICByZXR1
cm4gZWZmZWN0ZnVsU3VmZml4OwpAQCAtMTg5Miw3ICsxOTYzLDcgQEAgYXV0byBQYXJzZXI6OnBh
cnNlU3VmZml4T3BlcmF0b3Ioc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4mJiBwcmV2
aW91cykgLT4KICAgICAgICAgYXV0byByZXN1bHQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6UmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpzdWZmaXgpLCBXVEZNb3ZlKHBy
ZXZpb3VzKSk7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9u
Pj4gY2FsbEFyZ3VtZW50czsKICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQocmVzdWx0LT5v
bGRWYXJpYWJsZVJlZmVyZW5jZSgpKTsKLSAgICAgICAgcmVzdWx0LT5zZXROZXdWYWx1ZUV4cHJl
c3Npb24oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNzaW9uPihXVEZNb3ZlKCpzdWZm
aXgpLCBTdHJpbmcoIm9wZXJhdG9yKysiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwg
V1RGTW92ZShjYWxsQXJndW1lbnRzKSkpOworICAgICAgICByZXN1bHQtPnNldE5ld1ZhbHVlRXhw
cmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KFdURk1vdmUoKnN1ZmZp
eCksIFN0cmluZygib3BlcmF0b3IrKyIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBX
VEZNb3ZlKGNhbGxBcmd1bWVudHMpKSk7CiAgICAgICAgIHJlc3VsdC0+c2V0UmVzdWx0RXhwcmVz
c2lvbihyZXN1bHQtPm9sZFZhcmlhYmxlUmVmZXJlbmNlKCkpOwogICAgICAgICByZXR1cm4gU3Vm
Zml4RXhwcmVzc2lvbihXVEZNb3ZlKHJlc3VsdCksIHRydWUpOwogICAgIH0KQEAgLTE5MDAsNyAr
MTk3MSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVN1ZmZpeE9wZXJhdG9yKHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6OkV4cHJlc3Npb24+JiYgcHJldmlvdXMpIC0+CiAgICAgICAgIGF1dG8gcmVzdWx0ID0g
c3RkOjptYWtlX3VuaXF1ZTxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24+KExleGVyOjpU
b2tlbigqc3VmZml4KSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4+IGNhbGxBcmd1bWVudHM7CiAgICAgICAgIGNhbGxB
cmd1bWVudHMuYXBwZW5kKHJlc3VsdC0+b2xkVmFyaWFibGVSZWZlcmVuY2UoKSk7Ci0gICAgICAg
IHJlc3VsdC0+c2V0TmV3VmFsdWVFeHByZXNzaW9uKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxs
RXhwcmVzc2lvbj4oV1RGTW92ZSgqc3VmZml4KSwgU3RyaW5nKCJvcGVyYXRvci0tIiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXROZXdWYWx1ZUV4cHJlc3Npb24obWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxF
eHByZXNzaW9uPihXVEZNb3ZlKCpzdWZmaXgpLCBTdHJpbmcoIm9wZXJhdG9yLS0iLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYWxsQXJndW1lbnRzKSkpOwogICAgICAg
ICByZXN1bHQtPnNldFJlc3VsdEV4cHJlc3Npb24ocmVzdWx0LT5vbGRWYXJpYWJsZVJlZmVyZW5j
ZSgpKTsKICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24oV1RGTW92ZShyZXN1bHQpLCB0
cnVlKTsKICAgICB9CkBAIC0xOTEwLDcgKzE5ODEsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VTdWZm
aXhPcGVyYXRvcihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPiYmIHByZXZpb3VzKSAt
PgogICAgIH0KIH0KIAotYXV0byBQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbigpIC0+IEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4geworYXV0byBQYXJzZXI6
OnBhcnNlRXhwcmVzc2lvbigpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
LCBFcnJvcj4gewogICAgIGF1dG8gb3JpZ2luID0gcGVlaygpOwogICAgIGlmICghb3JpZ2luKQog
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwpAQCAtMTkz
NCw3ICsyMDA1LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbigpIC0+IEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+LCBFcnIKICAgICByZXR1cm4gc3RkOjp1
bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNvbW1hRXhw
cmVzc2lvbj4oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShleHByZXNzaW9ucykpKTsKIH0KIAot
YXV0byBQYXJzZXI6OnBhcnNlVGVybmFyeUNvbmRpdGlvbmFsKCkgLT4gRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiB7CithdXRvIFBhcnNlcjo6cGFyc2VU
ZXJuYXJ5Q29uZGl0aW9uYWwoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
PiwgRXJyb3I+IHsKICAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKICAgICBpZiAoIW9yaWdpbikK
ICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKQEAgLTE5
NTksOCArMjAzMCwxMCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUZXJuYXJ5Q29uZGl0aW9uYWwoKSAt
PiBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaQogICAgIGlmICghZWxzZUV4
cHJlc3Npb24pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihlbHNlRXhwcmVzc2lv
bi5lcnJvcigpKTsKIAotICAgIC8vIEZJWE1FOiBDYXN0IHRoZSBwcmVkaWNhdGUgdG8gYSBib29s
LgotICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1ha2Vf
dW5pcXVlPEFTVDo6VGVybmFyeUV4cHJlc3Npb24+KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUo
KnByZWRpY2F0ZSksIFdURk1vdmUoKmJvZHlFeHByZXNzaW9uKSwgV1RGTW92ZSgqZWxzZUV4cHJl
c3Npb24pKSk7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+PiBj
YXN0QXJndW1lbnRzOworICAgIGNhc3RBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKnByZWRpY2F0
ZSkpOworICAgIGF1dG8gYm9vbENhc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6Q2FsbEV4cHJl
c3Npb24+KExleGVyOjpUb2tlbigqb3JpZ2luKSwgU3RyaW5nKCJib29sIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FzdEFyZ3VtZW50cykpOworICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VGVy
bmFyeUV4cHJlc3Npb24+KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoYm9vbENhc3QpLCBXVEZN
b3ZlKCpib2R5RXhwcmVzc2lvbiksIFdURk1vdmUoKmVsc2VFeHByZXNzaW9uKSkpOwogfQogCiBh
dXRvIFBhcnNlcjo6cGFyc2VBc3NpZ25tZW50KCkgLT4gRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiB7CkBAIC0yMTc4LDcgKzIyNTEsNiBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VQb3NzaWJsZVJlbGF0aW9uYWxCaW5hcnlPcGVyYXRpb24oKSAtPiBFeHBlY3Rl
ZDxzdGQ6OnVuaXF1ZV9wdAogICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92
ZShwcmV2aW91cykpOwogICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSgq
bmV4dCkpOwogICAgICAgICAgICAgcHJldmlvdXMgPSBzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6Q2Fs
bEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbiksIFN0
cmluZygib3BlcmF0b3I9PSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3Zl
KGNhbGxBcmd1bWVudHMpKTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBDYXN0IHRoZSBhcmd1bWVu
dCB0byBhIGJvb2wKICAgICAgICAgICAgIHByZXZpb3VzID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6
OkxvZ2ljYWxOb3RFeHByZXNzaW9uPihXVEZNb3ZlKCpyZWxhdGlvbmFsQmluYXJ5T3BlcmF0aW9u
KSwgV1RGTW92ZShwcmV2aW91cykpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTIzNjQsOCArMjQzNiwxMiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQb3NzaWJsZVByZWZpeCgpIC0+
IEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+LAogICAgICAgICAgICAg
Y2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSgqbmV4dCkpOwogICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpD
YWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpwcmVmaXgpLCBTdHJpbmcoIm9wZXJhdG9yfiIs
IFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhbGxBcmd1bWVudHMpKSk7
CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkV4Y2xhbWF0aW9u
UG9pbnQ6Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lv
bj4oc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uPihMZXhlcjo6VG9r
ZW4oKnByZWZpeCksIFdURk1vdmUoKm5leHQpKSk7CisgICAgICAgIGNhc2UgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpFeGNsYW1hdGlvblBvaW50OiB7CisgICAgICAgICAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4+IGNhc3RBcmd1bWVudHM7CisgICAgICAgICAgICBjYXN0
QXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpuZXh0KSk7CisgICAgICAgICAgICBhdXRvIGJvb2xD
YXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4o
KnByZWZpeCksIFN0cmluZygiYm9vbCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBX
VEZNb3ZlKGNhc3RBcmd1bWVudHMpKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpFeHByZXNzaW9uPihzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6TG9naWNhbE5vdEV4cHJl
c3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwgV1RGTW92ZShib29sQ2FzdCkpKTsKKyAgICAg
ICAgfQogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6QW5kOgogICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+KHN0ZDo6bWFrZV91bmlxdWU8
QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwgV1RGTW92
ZSgqbmV4dCkpKTsKICAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkF0OgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgKaW5kZXgg
ZGEzZTA2YjAxZTQuLmUwNDgwZDE4ODM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2lmIEVO
QUJMRShXRUJHUFUpCiAKLSNpbmNsdWRlICJXSExTTEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRp
b24uaCIKICNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgogI2luY2x1ZGUgIldI
TFNMQXJyYXlUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIgpA
QCAtNjgsNyArNjcsNiBAQAogI2luY2x1ZGUgIldITFNMTm9kZS5oIgogI2luY2x1ZGUgIldITFNM
TnVsbExpdGVyYWwuaCIKICNpbmNsdWRlICJXSExTTE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0
ZS5oIgotI2luY2x1ZGUgIldITFNMUGFyYW1ldGVyLmgiCiAjaW5jbHVkZSAiV0hMU0xQb2ludGVy
VHlwZS5oIgogI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgogI2luY2x1ZGUgIldITFNMUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLmgiCkBAIC0xNTQsMTMgKzE1MiwxMyBAQCBwcml2YXRlOgogICAg
IEV4cGVjdGVkPFR5cGVTdWZmaXhBYmJyZXZpYXRlZCwgRXJyb3I+IHBhcnNlVHlwZVN1ZmZpeEFi
YnJldmlhdGVkKCk7CiAgICAgc3RydWN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCB7CiAgICAg
ICAgIExleGVyOjpUb2tlbiB0b2tlbjsKLSAgICAgICAgT3B0aW9uYWw8TGV4ZXI6OlRva2VuPiBh
ZGRyZXNzU3BhY2U7CisgICAgICAgIE9wdGlvbmFsPEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVz
c1NwYWNlPiBhZGRyZXNzU3BhY2U7CiAgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBudW1FbGVt
ZW50czsKICAgICB9OwogICAgIEV4cGVjdGVkPFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCwgRXJy
b3I+IHBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkKCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1
bmlxdWVfcHRyPEFTVDo6VHlwZT4sIEVycm9yPiBwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKTsKLSAg
ICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBlPiwgRXJyb3I+IHBhcnNlTm9uQWRk
cmVzc1NwYWNlVHlwZSgpOwotICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlR5cGU+
LCBFcnJvcj4gcGFyc2VUeXBlKCk7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+LCBFcnJvcj4gcGFyc2VBZGRyZXNzU3BhY2VUeXBlKCk7CisgICAgRXhwZWN0ZWQ8VW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4gcGFyc2VOb25BZGRyZXNzU3BhY2VUeXBl
KCk7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4gcGFy
c2VUeXBlKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpUeXBlRGVmaW5pdGlvbiwgRXJyb3I+IHBhcnNl
VHlwZURlZmluaXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYywgRXJy
b3I+IHBhcnNlQnVpbHRJblNlbWFudGljKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpSZXNvdXJjZVNl
bWFudGljLCBFcnJvcj4gcGFyc2VSZXNvdXJjZVNlbWFudGljKCk7CkBAIC0xNzUsOCArMTczLDgg
QEAgcHJpdmF0ZToKICAgICBFeHBlY3RlZDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgRXJy
b3I+IHBhcnNlTmF0aXZlVHlwZURlY2xhcmF0aW9uKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpOdW1U
aHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUsIEVycm9yPiBwYXJzZU51bVRocmVhZHNGdW5jdGlvbkF0
dHJpYnV0ZSgpOwogICAgIEV4cGVjdGVkPEFTVDo6QXR0cmlidXRlQmxvY2ssIEVycm9yPiBwYXJz
ZUF0dHJpYnV0ZUJsb2NrKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpQYXJhbWV0ZXIsIEVycm9yPiBw
YXJzZVBhcmFtZXRlcigpOwotICAgIEV4cGVjdGVkPEFTVDo6UGFyYW1ldGVycywgRXJyb3I+IHBh
cnNlUGFyYW1ldGVycygpOworICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwg
RXJyb3I+IHBhcnNlUGFyYW1ldGVyKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9ucywgRXJyb3I+IHBhcnNlUGFyYW1ldGVycygpOwogICAgIEV4cGVjdGVkPEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlRW50cnlQb2ludEZ1bmN0aW9uRGVjbGFyYXRp
b24oKTsKICAgICBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiBwYXJz
ZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VPcGVyYXRvckZ1bmN0aW9uRGVjbGFyYXRpb24oKTsK
QEAgLTE5MiwxNCArMTkwLDE0IEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNUOjpGb3JMb29w
LCBFcnJvcj4gcGFyc2VGb3JMb29wKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpXaGlsZUxvb3AsIEVy
cm9yPiBwYXJzZVdoaWxlTG9vcCgpOwogICAgIEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxvb3AsIEVy
cm9yPiBwYXJzZURvV2hpbGVMb29wKCk7Ci0gICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uLCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlR5cGU+JiYpOworICAgIEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJy
b3I+IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4m
Jik7CiAgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCwgRXJy
b3I+IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnMoKTsKLSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1
ZV9wdHI8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcj4gcGFyc2VTdGF0ZW1lbnQoKTsKKyAgICBFeHBl
Y3RlZDxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcj4gcGFyc2VTdGF0ZW1lbnQoKTsK
IAotICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4g
cGFyc2VFZmZlY3RmdWxFeHByZXNzaW9uKCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRy
PEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZUVmZmVjdGZ1bEFzc2lnbm1lbnQoKTsKLSAg
ICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHBhcnNl
RWZmZWN0ZnVsUHJlZml4KCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhw
cmVzc2lvbj4sIEVycm9yPiBwYXJzZUVmZmVjdGZ1bFN1ZmZpeCgpOworICAgIEV4cGVjdGVkPFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VFZmZlY3RmdWxFeHByZXNzaW9u
KCk7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJz
ZUVmZmVjdGZ1bEFzc2lnbm1lbnQoKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPiwgRXJyb3I+IHBhcnNlRWZmZWN0ZnVsUHJlZml4KCk7CisgICAgRXhwZWN0ZWQ8VW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZUVmZmVjdGZ1bFN1ZmZpeCgpOwog
ICAgIHN0cnVjdCBTdWZmaXhFeHByZXNzaW9uIHsKICAgICAgICAgU3VmZml4RXhwcmVzc2lvbihz
dGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPiYmIHJlc3VsdCwgYm9vbCBzdWNjZXNzKQog
ICAgICAgICAgICAgOiByZXN1bHQoV1RGTW92ZShyZXN1bHQpKQpAQCAtMjE0LDE5ICsyMTIsMTkg
QEAgcHJpdmF0ZToKICAgICBTdWZmaXhFeHByZXNzaW9uIHBhcnNlTGltaXRlZFN1ZmZpeE9wZXJh
dG9yKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+JiYpOwogICAgIFN1ZmZpeEV4cHJl
c3Npb24gcGFyc2VTdWZmaXhPcGVyYXRvcihzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9u
PiYmKTsKIAotICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+LCBF
cnJvcj4gcGFyc2VFeHByZXNzaW9uKCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFT
VDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZVRlcm5hcnlDb25kaXRpb25hbCgpOwotICAgIEV4
cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VBc3Np
Z25tZW50KCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4s
IEVycm9yPiBwYXJzZVBvc3NpYmxlVGVybmFyeUNvbmRpdGlvbmFsKCk7Ci0gICAgRXhwZWN0ZWQ8
c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZVBvc3NpYmxlTG9n
aWNhbEJpbmFyeU9wZXJhdGlvbigpOwotICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VQb3NzaWJsZVJlbGF0aW9uYWxCaW5hcnlPcGVyYXRp
b24oKTsKLSAgICBFeHBlY3RlZDxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpFeHByZXNzaW9uPiwgRXJy
b3I+IHBhcnNlUG9zc2libGVTaGlmdCgpOwotICAgIEV4cGVjdGVkPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VQb3NzaWJsZUFkZCgpOwotICAgIEV4cGVjdGVk
PHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VQb3NzaWJsZU11
bHRpcGx5KCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4s
IEVycm9yPiBwYXJzZVBvc3NpYmxlUHJlZml4KCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVf
cHRyPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZVBvc3NpYmxlU3VmZml4KCk7Ci0gICAg
RXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZUNh
bGxFeHByZXNzaW9uKCk7Ci0gICAgRXhwZWN0ZWQ8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RXhwcmVz
c2lvbj4sIEVycm9yPiBwYXJzZVRlcm0oKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPiwgRXJyb3I+IHBhcnNlRXhwcmVzc2lvbigpOworICAgIEV4cGVjdGVkPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VUZXJuYXJ5Q29uZGl0aW9uYWwoKTsK
KyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHBhcnNlQXNz
aWdubWVudCgpOworICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJv
cj4gcGFyc2VQb3NzaWJsZVRlcm5hcnlDb25kaXRpb25hbCgpOworICAgIEV4cGVjdGVkPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VQb3NzaWJsZUxvZ2ljYWxCaW5hcnlP
cGVyYXRpb24oKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJy
b3I+IHBhcnNlUG9zc2libGVSZWxhdGlvbmFsQmluYXJ5T3BlcmF0aW9uKCk7CisgICAgRXhwZWN0
ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZVBvc3NpYmxlU2hpZnQo
KTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHBhcnNl
UG9zc2libGVBZGQoKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwg
RXJyb3I+IHBhcnNlUG9zc2libGVNdWx0aXBseSgpOworICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VQb3NzaWJsZVByZWZpeCgpOworICAgIEV4cGVj
dGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VQb3NzaWJsZVN1ZmZp
eCgpOworICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFy
c2VDYWxsRXhwcmVzc2lvbigpOworICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+LCBFcnJvcj4gcGFyc2VUZXJtKCk7CiAKICAgICBMZXhlciBtX2xleGVyOwogICAgIE1vZGUg
bV9tb2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQcmVwYXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlcGFyZS5jcHAKaW5kZXggMGViNjRkZWNkNGQuLjQ2MGU5NDZmZGRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAK
QEAgLTI4LDEwICsyOCwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldITFNM
UHJlcGFyZS5oIgogCisjaW5jbHVkZSAiV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgor
I2luY2x1ZGUgIldITFNMQ2hlY2tlci5oIgogI2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgi
CiAjaW5jbHVkZSAiV0hMU0xQYXJzZXIuaCIKICNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNp
bmNsdWRlICJXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCiAjaW5jbHVkZSAiV0hMU0xTdGFu
ZGFyZExpYnJhcnkuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVu
Z3RoLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgiCisjaW5jbHVk
ZSAiV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJXSExT
TFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC01MCw4ICs1NywyMyBAQCBPcHRpb25hbDxQcmVwYXJhdGlvblJlc3VsdD4gcHJlcGFyZShT
dHJpbmdWaWV3IHNvdXJjZSkKICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICByZXNvbHZlTmFtZXNJblR5cGVzKHByb2dyYW0pOworICAgIE5hbWVS
ZXNvbHZlciBuYW1lUmVzb2x2ZXIocHJvZ3JhbS5uYW1lQ29udGV4dCgpKTsKKyAgICBpZiAoIXJl
c29sdmVOYW1lc0luVHlwZXMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICBpZiAoIWNoZWNrUmVjdXJzaXZlVHlwZXMocHJvZ3JhbSkpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgc3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vz
c29ycyhwcm9ncmFtKTsKKyAgICBzeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMocHJvZ3Jh
bSk7CisgICAgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgocHJvZ3JhbSk7CisgICAgc3lu
dGhlc2l6ZUNvbnN0cnVjdG9ycyhwcm9ncmFtKTsKKyAgICBpZiAoIWNoZWNrRHVwbGljYXRlRnVu
Y3Rpb25zKHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICgh
cmVzb2x2ZU5hbWVzSW5GdW5jdGlvbnMocHJvZ3JhbSwgbmFtZVJlc29sdmVyKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKwogCisgICAgaWYgKGNoZWNrKHByb2dyYW0pKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIHJldHVybiBQcmVwYXJhdGlvblJlc3VsdCgpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByb2dyYW0uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJv
Z3JhbS5oCmluZGV4IDU2MzBmZTY5ZWU0Li42MGVlNDc5MDE1YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKQEAgLTI5LDYgKzI5
LDggQEAKIAogI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCiAjaW5jbHVk
ZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3Mu
aCIKKyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCiAjaW5jbHVkZSAiV0hMU0xOYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRp
b24uaCIKICNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKQEAgLTQ0LDQ1ICs0
Niw2NCBAQCBwdWJsaWM6CiAgICAgUHJvZ3JhbSgpID0gZGVmYXVsdDsKICAgICBQcm9ncmFtKFBy
b2dyYW0mJikgPSBkZWZhdWx0OwogCi0gICAgdm9pZCBhcHBlbmQoQVNUOjpUeXBlRGVmaW5pdGlv
biYmIHR5cGVEZWZpbml0aW9uKQorICAgIGJvb2wgYXBwZW5kKEFTVDo6VHlwZURlZmluaXRpb24m
JiB0eXBlRGVmaW5pdGlvbikKICAgICB7Ci0gICAgICAgIG1fdHlwZURlZmluaXRpb25zLmFwcGVu
ZChXVEZNb3ZlKHR5cGVEZWZpbml0aW9uKSk7CisgICAgICAgIG1fdHlwZURlZmluaXRpb25zLmFw
cGVuZChzdGQ6Om1ha2VfdW5pcXVlPEFTVDo6VHlwZURlZmluaXRpb24+KFdURk1vdmUodHlwZURl
ZmluaXRpb24pKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV90eXBlRGVm
aW5pdGlvbnMubGFzdCgpKTsKICAgICB9Ci0gICAgdm9pZCBhcHBlbmQoQVNUOjpTdHJ1Y3R1cmVE
ZWZpbml0aW9uJiYgc3RydWN0dXJlRGVmaW5pdGlvbikKKworICAgIGJvb2wgYXBwZW5kKEFTVDo6
U3RydWN0dXJlRGVmaW5pdGlvbiYmIHN0cnVjdHVyZURlZmluaXRpb24pCiAgICAgewotICAgICAg
ICBtX3N0cnVjdHVyZURlZmluaXRpb25zLmFwcGVuZChXVEZNb3ZlKHN0cnVjdHVyZURlZmluaXRp
b24pKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmVEZWZpbml0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3Vu
aXF1ZTxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+KFdURk1vdmUoc3RydWN0dXJlRGVmaW5pdGlv
bikpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX3N0cnVjdHVyZURlZmlu
aXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uJiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQorCisgICAgYm9vbCBhcHBlbmQoQVNU
OjpFbnVtZXJhdGlvbkRlZmluaXRpb24mJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCiAgICAgewot
ICAgICAgICBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoZW51bWVyYXRp
b25EZWZpbml0aW9uKSk7CisgICAgICAgIG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5hcHBlbmQo
c3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShlbnVt
ZXJhdGlvbkRlZmluaXRpb24pKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgq
bV9lbnVtZXJhdGlvbkRlZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5k
KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiYgZnVuY3Rpb25EZWZpbml0aW9uKQorCisgICAgYm9v
bCBhcHBlbmQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mJiBmdW5jdGlvbkRlZmluaXRpb24pCiAg
ICAgewotICAgICAgICBtX2Z1bmN0aW9uRGVmaW5pdGlvbnMuYXBwZW5kKFdURk1vdmUoZnVuY3Rp
b25EZWZpbml0aW9uKSk7CisgICAgICAgIG1fZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBlbmQoc3Rk
OjptYWtlX3VuaXF1ZTxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShmdW5jdGlvbkRl
ZmluaXRpb24pKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZCgqbV9mdW5jdGlv
bkRlZmluaXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFTVDo6TmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbiYmIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pCisKKyAgICBi
b29sIGFwcGVuZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mJiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKQogICAgIHsKLSAgICAgICAgbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9u
cy5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgIG1f
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihXVEZNb3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24pKSk7CisgICAgICAgIG1faW50cmluc2ljcy5hZGQoKm1fbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbnMubGFzdCgpKTsKKyAgICAgICAgcmV0dXJuIG1fbmFtZUNvbnRleHQuYWRkKCptX25hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmxhc3QoKSk7CiAgICAgfQotICAgIHZvaWQgYXBwZW5kKEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQorCisgICAg
Ym9vbCBhcHBlbmQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mJiBuYXRpdmVUeXBlRGVjbGFy
YXRpb24pCiAgICAgewotICAgICAgICBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnMuYXBwZW5kKFdU
Rk1vdmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKSk7CisgICAgICAgIG1fbmF0aXZlVHlwZURlY2xh
cmF0aW9ucy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4oV1RGTW92ZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pKSk7CisgICAgICAgIG1faW50cmluc2lj
cy5hZGQoKm1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5sYXN0KCkpOworICAgICAgICByZXR1cm4g
bV9uYW1lQ29udGV4dC5hZGQoKm1fbmF0aXZlVHlwZURlY2xhcmF0aW9ucy5sYXN0KCkpOwogICAg
IH0KIAotICAgIFZlY3RvcjxBU1Q6OlR5cGVEZWZpbml0aW9uPiYgdHlwZURlZmluaXRpb25zKCkg
eyByZXR1cm4gbV90eXBlRGVmaW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpTdHJ1Y3R1cmVE
ZWZpbml0aW9uPiYgc3RydWN0dXJlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3N0cnVjdHVyZURl
ZmluaXRpb25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPiYgZW51
bWVyYXRpb25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uczsg
fQotICAgIFZlY3RvcjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4mIGZ1bmN0aW9uRGVmaW5pdGlv
bnMoKSB7IHJldHVybiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7IH0KLSAgICBWZWN0b3I8QVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7
IHJldHVybiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOyB9Ci0gICAgVmVjdG9yPEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uPiYgbmF0aXZlVHlwZURlY2xhcmF0aW9ucygpIHsgcmV0dXJu
IG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsgfQorICAgIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4
dCgpIHsgcmV0dXJuIG1fbmFtZUNvbnRleHQ7IH0KKyAgICBJbnRyaW5zaWNzJiBpbnRyaW5zaWNz
KCkgeyByZXR1cm4gbV9pbnRyaW5zaWNzOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OlR5cGVEZWZpbml0aW9uPj4mIHR5cGVEZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fdHlwZURl
ZmluaXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OlN0cnVjdHVyZURl
ZmluaXRpb24+PiYgc3RydWN0dXJlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3N0cnVjdHVyZURl
ZmluaXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkVudW1lcmF0aW9u
RGVmaW5pdGlvbj4+JiBlbnVtZXJhdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4gbV9lbnVtZXJh
dGlvbkRlZmluaXRpb25zOyB9CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbj4+JiBmdW5jdGlvbkRlZmluaXRpb25zKCkgY29uc3QgeyByZXR1
cm4gbV9mdW5jdGlvbkRlZmluaXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4+JiBmdW5jdGlvbkRlZmluaXRpb25zKCkgeyByZXR1cm4g
bV9mdW5jdGlvbkRlZmluaXRpb25zOyB9CisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbnMoKSBjb25zdCB7IHJldHVybiBtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zOyB9Cisg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+
PiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKSB7IHJldHVybiBtX25hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb25zOyB9CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbj4+JiBuYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRp
dmVUeXBlRGVjbGFyYXRpb25zOyB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPEFTVDo6VHlwZURl
ZmluaXRpb24+IG1fdHlwZURlZmluaXRpb25zOwotICAgIFZlY3RvcjxBU1Q6OlN0cnVjdHVyZURl
ZmluaXRpb24+IG1fc3RydWN0dXJlRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uPiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9yPEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uPiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7Ci0gICAgVmVjdG9y
PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gbV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uczsKLSAgICBWZWN0b3I8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+IG1fbmF0aXZlVHlw
ZURlY2xhcmF0aW9uczsKKyAgICBOYW1lQ29udGV4dCBtX25hbWVDb250ZXh0OworICAgIEludHJp
bnNpY3MgbV9pbnRyaW5zaWNzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpUeXBl
RGVmaW5pdGlvbj4+IG1fdHlwZURlZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPj4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsKKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPj4gbV9l
bnVtZXJhdGlvbkRlZmluaXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpG
dW5jdGlvbkRlZmluaXRpb24+PiBtX2Z1bmN0aW9uRGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+PiBtX25hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24+PiBtX25hdGl2ZVR5cGVEZWNsYXJhdGlvbnM7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vy
c2l2ZVR5cGVDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5kNmIxYjRhOTgzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCkBA
IC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCisK
KyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFJlY3Vyc2l2
ZVR5cGVDaGVja2VyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIH5SZWN1cnNpdmVU
eXBlQ2hlY2tlcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5p
dGlvbiYgdHlwZURlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fdHlwZXMuYWRkKCZ0eXBlRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChhZGRSZXN1
bHQuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlRGVmaW5p
dGlvbik7CisKKyAgICAgICAgYXV0byBzdWNjZXNzID0gbV90eXBlcy5yZW1vdmUoJnR5cGVEZWZp
bml0aW9uKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVm
aW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBl
cy5hZGQoJnN0cnVjdHVyZURlZmluaXRpb24pOworICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3
RW50cnkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRGVmaW5pdGlv
bik7CisKKyAgICAgICAgYXV0byBzdWNjZXNzID0gbV90eXBlcy5yZW1vdmUoJnN0cnVjdHVyZURl
ZmluaXRpb24pOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAg
IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVzLmFkZCgmdHlw
ZVJlZmVyZW5jZSk7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAg
ICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRz
KCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZUFyZ3VtZW50KTsKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKwor
ICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmdHlwZVJlZmVyZW5jZSk7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7CisgICAgfQorCisgICAgdm9p
ZCB2aXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgSGFzaFNldDxBU1Q6OlR5cGUqPiBtX3R5cGVzOworfTsKKworYm9vbCBjaGVj
a1JlY3Vyc2l2ZVR5cGVzKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgUmVjdXJzaXZlVHlwZUNo
ZWNrZXIgcmVjdXJzaXZlVHlwZUNoZWNrZXI7CisgICAgcmVjdXJzaXZlVHlwZUNoZWNrZXIuY2hl
Y2tFcnJvckFuZFZpc2l0KHByb2dyYW0pOworICAgIHJldHVybiByZWN1cnNpdmVUeXBlQ2hlY2tl
ci5lcnJvcigpOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVj
a2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlhM2ExOWRjZTIw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCitib29sIGNoZWNr
UmVjdXJzaXZlVHlwZXMoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9h
ZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNv
bHZlT3ZlcmxvYWRJbXBsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uZWUyNTFjNjdmMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCkBAIC0wLDAgKzEsMTE0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmVPdmVybG9hZEltcGwuaCIKKworI2luY2x1ZGUgIldI
TFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVkZSA8bGltaXRzPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK3N0YXRpYyB1bnNp
Z25lZCBjb252ZXJzaW9uQ29zdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mIGNhbmRpZGF0ZSwg
Y29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+JiBhcmd1
bWVudFR5cGVzKQoreworICAgIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0ID0gMDsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNhbmRpZGF0ZS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgY29udmVyc2lvbkNvc3QgKz0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mKSAtPiB1bnNpZ25lZCB7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4m
IHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiB1bnNpZ25lZCB7CisgICAgICAgICAgICByZXR1
cm4gcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY29udmVyc2lvbkNv
c3QoKmNhbmRpZGF0ZS5wYXJhbWV0ZXJzKClbaV0udHlwZSgpKTsKKyAgICAgICAgfSksIGFyZ3Vt
ZW50VHlwZXNbaV0uZ2V0KCkpOworICAgIH0KKyAgICAvLyBUaGUgcmV0dXJuIHR5cGUgY2FuIG5l
dmVyIGJlIGEgbGl0ZXJhbCB0eXBlLCBzbyBpdHMgY29udmVyc2lvbiBjb3N0IGlzIGFsd2F5cyAw
LgorICAgIHJldHVybiBjb252ZXJzaW9uQ29zdDsKK30KKworQVNUOjpGdW5jdGlvbkRlY2xhcmF0
aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlw
ZXMsIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiYgY2Fz
dFJldHVyblR5cGUpCit7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gY2FuZGlkYXRlczsKKyAgICBmb3IgKGF1dG8mIHBvc3Np
YmxlRnVuY3Rpb24gOiBwb3NzaWJsZUZ1bmN0aW9ucykgeworICAgICAgICBpZiAocG9zc2libGVG
dW5jdGlvbi5nZXQoKS5lbnRyeVBvaW50VHlwZSgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmIChpbmZlclR5cGVzRm9yQ2FsbChwb3NzaWJsZUZ1bmN0aW9uLmdldCgpLCBhcmd1
bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSkpCisgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVu
ZChwb3NzaWJsZUZ1bmN0aW9uLmdldCgpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtaW5pbXVt
Q29udmVyc2lvbkNvc3QgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Cisg
ICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVzKQorICAgICAgICBtaW5pbXVtQ29u
dmVyc2lvbkNvc3QgPSBzdGQ6Om1pbihtaW5pbXVtQ29udmVyc2lvbkNvc3QsIGNvbnZlcnNpb25D
b3N0KGNhbmRpZGF0ZS5nZXQoKSwgYXJndW1lbnRUeXBlcykpOworCisgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4gbWluaW11bUNv
c3RDYW5kaWRhdGVzOworICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogY2FuZGlkYXRlcykgewor
ICAgICAgICBpZiAoY29udmVyc2lvbkNvc3QoY2FuZGlkYXRlLmdldCgpLCBhcmd1bWVudFR5cGVz
KSA9PSBtaW5pbXVtQ29udmVyc2lvbkNvc3QpCisgICAgICAgICAgICBtaW5pbXVtQ29zdENhbmRp
ZGF0ZXMuYXBwZW5kKGNhbmRpZGF0ZSk7CisgICAgfQorCisgICAgYm9vbCByZXN0cmljdGVkQ2Fu
ZGlkYXRlRXhpc3RzID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBtaW5pbXVt
Q29zdENhbmRpZGF0ZXMpIHsKKyAgICAgICAgaWYgKGlzPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9u
PihjYW5kaWRhdGUuZ2V0KCkpICYmIGRvd25jYXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihj
YW5kaWRhdGUuZ2V0KCkpLnJlc3RyaWN0ZWQoKSkgeworICAgICAgICAgICAgcmVzdHJpY3RlZENh
bmRpZGF0ZUV4aXN0cyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGNhbmRpZGF0ZXMuY2xlYXIoKTsKKyAgICBpZiAocmVzdHJpY3RlZENhbmRpZGF0
ZUV4aXN0cykgeworICAgICAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IG1pbmltdW1Db3N0Q2Fu
ZGlkYXRlcykgeworICAgICAgICAgICAgaWYgKGlzPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihj
YW5kaWRhdGUuZ2V0KCkpICYmIGRvd25jYXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uPihjYW5k
aWRhdGUuZ2V0KCkpLnJlc3RyaWN0ZWQoKSkKKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFw
cGVuZChjYW5kaWRhdGUuZ2V0KCkpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIGNh
bmRpZGF0ZXMgPSBtaW5pbXVtQ29zdENhbmRpZGF0ZXM7CisKKyAgICBpZiAoY2FuZGlkYXRlcy5z
aXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuICZjYW5kaWRhdGVzWzBdLmdldCgpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCitBU1Q6Ok5hbWVkVHlwZSogcmVzb2x2ZVR5cGVPdmVybG9hZElt
cGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiYgcG9z
c2libGVUeXBlcywgQVNUOjpUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKQoreworICAgIEFT
VDo6TmFtZWRUeXBlKiByZXN1bHQgPSBudWxscHRyOworICAgIGZvciAoYXV0byYgcG9zc2libGVU
eXBlIDogcG9zc2libGVUeXBlcykgeworICAgICAgICBpZiAoaW5mZXJUeXBlc0ZvclR5cGVBcmd1
bWVudHMocG9zc2libGVUeXBlLCB0eXBlQXJndW1lbnRzKSkgeworICAgICAgICAgICAgaWYgKHJl
c3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJlc3Vs
dCA9ICZzdGF0aWNfY2FzdDxBU1Q6Ok5hbWVkVHlwZSY+KHBvc3NpYmxlVHlwZSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xB
bm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuaApzaW1pbGFyaXR5IGluZGV4IDcz
JQpyZW5hbWUgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oCmluZGV4IGVm
NjFlZDEyNjE5Li5hYzc5MDNiYWZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJs
b2FkSW1wbC5oCkBAIC0yNyw4ICsyNywxMCBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2lu
Y2x1ZGUgIldITFNMTGV4ZXIuaCIKLSNpbmNsdWRlICJXSExTTFZhbHVlLmgiCisjaW5jbHVkZSAi
V0hMU0xSZXNvbHZpbmdUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNp
bmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC0zNiwyNiArMzgsMTQgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFt
ZXNwYWNlIEFTVCB7CiAKLWNsYXNzIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24gOiBwdWJs
aWMgVmFsdWUgewotcHVibGljOgotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuJiYgb3JpZ2luKQotICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkK
LSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB+QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlv
bigpID0gZGVmYXVsdDsKLQotICAgIEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24oY29uc3Qg
QW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYpID0gZGVsZXRlOwotICAgIEFub255bW91c1Zh
cmlhYmxlRGVjbGFyYXRpb24oQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbiYmKSA9IGRlZmF1
bHQ7Ci0KLSAgICBMZXhlcjo6VG9rZW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47
IH0KLQotcHJpdmF0ZToKLSAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Ci19OworY2xhc3MgRnVu
Y3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNzIE5hbWVkVHlwZTsKIAogfQogCitBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5j
dGlvbnMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJn
dW1lbnRUeXBlcywgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlw
ZT4+JiBjYXN0UmV0dXJuVHlwZSk7CitBU1Q6Ok5hbWVkVHlwZSogcmVzb2x2ZVR5cGVPdmVybG9h
ZEltcGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPiYs
IEFTVDo6VHlwZUFyZ3VtZW50cyYpOworCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2aW5nVHlwZS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdUeXBlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk3YzBlYmFlODFmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZpbmdU
eXBlLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+
CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgUmVzb2x2YWJsZVR5cGU7
CitjbGFzcyBVbm5hbWVkVHlwZTsKKworfQorCitjbGFzcyBSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiB7CitwdWJsaWM6
CisgICAgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UoQVNUOjpSZXNvbHZhYmxlVHlwZSYgcmVzb2x2
YWJsZVR5cGUpCisgICAgICAgIDogbV9yZXNvbHZhYmxlVHlwZSgmcmVzb2x2YWJsZVR5cGUpCisg
ICAgeworICAgIH0KKworICAgIFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKGNvbnN0IFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlJikgPSBkZWxldGU7CisgICAgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Uo
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UmJikgPSBkZWxldGU7CisKKyAgICBBU1Q6OlJlc29sdmFi
bGVUeXBlJiByZXNvbHZhYmxlVHlwZSgpIHsgcmV0dXJuICptX3Jlc29sdmFibGVUeXBlOyB9CisK
K3ByaXZhdGU6CisgICAgQVNUOjpSZXNvbHZhYmxlVHlwZSogbV9yZXNvbHZhYmxlVHlwZTsKK307
CisKK3VzaW5nIFJlc29sdmluZ1R5cGUgPSBWYXJpYW50PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPiwgUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPj47CisKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjgxNTM4MGFlZThlCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVz
aXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hM
U0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oIgorCisjaW5jbHVkZSAiV0hMU0xBcnJh
eVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVS
ZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBGaW5kQXJyYXlUeXBlcyA6IHB1Ymxp
YyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICB+RmluZEFycmF5VHlwZXMoKSA9IGRlZmF1bHQ7CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBtX2FycmF5VHlwZXMuYXBwZW5kKGFycmF5VHlwZSk7CisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChhcnJheVR5cGUpOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6QXJyYXlUeXBlPj4mJiB0YWtlQXJyYXlUeXBlcygpCisgICAgewor
ICAgICAgICByZXR1cm4gV1RGTW92ZShtX2FycmF5VHlwZXMpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkFycmF5VHlwZT4+IG1fYXJy
YXlUeXBlczsKK307CisKK3ZvaWQgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3Jh
bSYgcHJvZ3JhbSkKK3sKKyAgICBGaW5kQXJyYXlUeXBlcyBmaW5kQXJyYXlUeXBlczsKKyAgICBm
aW5kQXJyYXlUeXBlcy5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAgYXV0byBhcnJh
eVR5cGVzID0gZmluZEFycmF5VHlwZXMudGFrZUFycmF5VHlwZXMoKTsKKworICAgIGJvb2wgaXNP
cGVyYXRvciA9IHRydWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKworICAgIGZv
ciAoYXV0byYgYXJyYXlUeXBlIDogYXJyYXlUeXBlcykgeworICAgICAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdl
dCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGFycmF5VHlwZS5nZXQoKS5jbG9uZSgp
LnRha2VVbmlxdWVQdHIoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgcGFyYW1l
dGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigp
KSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwgcHJvZ3JhbS5p
bnRyaW5zaWNzKCkudWludFR5cGUoKSksIFN0cmluZygib3BlcmF0b3IubGVuZ3RoIiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9w
dCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdU
Rk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgIH0KK30KKworfQorCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lOWE5YTExNGYyNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3lu
dGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhl
c2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRo
ZXNpemVDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uMDM2OGU4ZDc1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMu
Y3BwCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3Rv
cnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFz
cyBGaW5kQWxsVHlwZXMgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgfkZpbmRBbGxU
eXBlcygpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9p
bnRlclR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQo
cG9pbnRlclR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQocG9pbnRlclR5cGUpOwor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVm
ZXJlbmNlVHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fdW5uYW1lZFR5cGVzLmFwcGVu
ZChhcnJheVJlZmVyZW5jZVR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlS
ZWZlcmVuY2VUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBh
cnJheVR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3VubmFtZWRUeXBlcy5hcHBlbmQo
YXJyYXlUeXBlKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFycmF5VHlwZSk7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRp
b25EZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9uYW1lZFR5cGVzLmFwcGVu
ZChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZW51
bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIG1fbmFtZWRUeXBlcy5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lk
IHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24p
IG92ZXJyaWRlCisgICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChuYXRpdmVUeXBlRGVjbGFy
YXRpb24pOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6
VW5uYW1lZFR5cGU+PiYmIHRha2VVbm5hbWVkVHlwZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFdURk1vdmUobV91bm5hbWVkVHlwZXMpOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVy
ZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4mJiB0YWtlTmFtZWRUeXBlcygpCisgICAgewor
ICAgICAgICByZXR1cm4gV1RGTW92ZShtX25hbWVkVHlwZXMpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRUeXBlPj4gbV91
bm5hbWVkVHlwZXM7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1l
ZFR5cGU+PiBtX25hbWVkVHlwZXM7Cit9OworCit2b2lkIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMo
UHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBGaW5kQWxsVHlwZXMgZmluZEFsbFR5cGVzOworICAg
IGZpbmRBbGxUeXBlcy5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAgYXV0byBtX3Vu
bmFtZWRUeXBlcyA9IGZpbmRBbGxUeXBlcy50YWtlVW5uYW1lZFR5cGVzKCk7CisgICAgYXV0byBt
X25hbWVkVHlwZXMgPSBmaW5kQWxsVHlwZXMudGFrZU5hbWVkVHlwZXMoKTsKKworICAgIGJvb2wg
aXNPcGVyYXRvciA9IHRydWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKworICAg
IGZvciAoYXV0byYgdW5uYW1lZFR5cGUgOiBtX3VubmFtZWRUeXBlcykgeworICAgICAgICBBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5u
YW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgdW5uYW1lZFR5cGUu
Z2V0KCkuY2xvbmUoKS50YWtlVW5pcXVlUHRyKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51
bGxwdHIpOworICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7Cisg
ICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwor
ICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gY29weUNvbnN0cnVjdG9yKEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3Jp
Z2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgdW5uYW1lZFR5cGUu
Z2V0KCkuY2xvbmUoKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRv
ciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgIHByb2dyYW0uYXBwZW5kKFdURk1vdmUoY29weUNv
bnN0cnVjdG9yKSk7CisKKyAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGRl
ZmF1bHRDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHVu
bmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51
bGxvcHQsIHVubmFtZWRUeXBlLmdldCgpLmNsb25lKCksIFN0cmluZygib3BlcmF0b3IgY2FzdCIs
IFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
KCksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgIHBy
b2dyYW0uYXBwZW5kKFdURk1vdmUoZGVmYXVsdENvbnN0cnVjdG9yKSk7CisgICAgfQorCisgICAg
Zm9yIChhdXRvJiBuYW1lZFR5cGUgOiBtX25hbWVkVHlwZXMpIHsKKyAgICAgICAgQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKG5hbWVkVHlw
ZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVSZWZlcmVuY2U6
OndyYXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5n
ZXQoKSkudGFrZVVuaXF1ZVB0cigpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxscHRyKTsK
KyAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAg
QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIGNvcHlDb25zdHJ1Y3RvcihBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIEFT
VDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAoTGV4ZXI6OlRva2VuKG5hbWVkVHlwZS5nZXQoKS5vcmlnaW4oKSksIG5hbWVkVHlwZS5nZXQo
KSksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwp
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3Ry
aWN0ZWQpOworICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKGNvcHlDb25zdHJ1Y3Rvcikp
OworCisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWZhdWx0Q29uc3Ry
dWN0b3IoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0
KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkp
LCBuYW1lZFR5cGUuZ2V0KCkpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucygpLCBXVEY6Om51bGxv
cHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICBwcm9ncmFtLmFwcGVuZChX
VEZNb3ZlKGRlZmF1bHRDb25zdHJ1Y3RvcikpOworICAgIH0KK30KKworfQorCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xT
eW50aGVzaXplQ29uc3RydWN0b3JzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uODAwMjBkZDdjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMu
aApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K2NsYXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhlc2l6ZUNvbnN0cnVjdG9ycyhQcm9ncmFtJik7
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0
aW9uRnVuY3Rpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
MGZhZTA1NTVhMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAKQEAgLTAs
MCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMu
aCIKKworI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVy
ZW5jZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK3Zv
aWQgc3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zKFByb2dyYW0mIHByb2dyYW0pCit7Cisg
ICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKKyAgICBib29sIGlzUmVzdHJpY3RlZCA9IGZhbHNl
OworICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJh
dGlvbkRlZmluaXRpb25zKCkpIHsKKyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24xKExleGVyOjpUb2tlbihlbnVtZXJhdGlv
bkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFTVDo6VHlwZVJlZmVy
ZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSks
ICplbnVtZXJhdGlvbkRlZmluaXRpb24pLnRha2VVbmlxdWVQdHIoKSwgU3RyaW5nKCksIFdURjo6
bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24g
dmFyaWFibGVEZWNsYXJhdGlvbjIoTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+
b3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgKmVudW1lcmF0aW9u
RGVmaW5pdGlvbikudGFrZVVuaXF1ZVB0cigpLCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBudWxs
cHRyKTsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsK
KyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlv
bjEpKTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNs
YXJhdGlvbjIpKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxv
Y2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2Vu
KGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBwcm9ncmFtLmludHJpbnNpY3MoKS5i
b29sVHlwZSgpKSwgU3RyaW5nKCJvcGVyYXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlz
UmVzdHJpY3RlZCk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tl
bihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9u
LT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24pLnRha2VVbmlxdWVQdHIoKSwgU3Ry
aW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICBBU1Q6OlZhcmlhYmxl
RGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChX
VEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSks
IEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJhdGlvbkRlZmluaXRp
b24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoIm9wZXJhdG9yLnZhbHVlIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNP
cGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZN
b3ZlKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9u
KExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRp
b25EZWZpbml0aW9uLT5vcmlnaW4oKSksICplbnVtZXJhdGlvbkRlZmluaXRpb24pLnRha2VVbmlx
dWVQdHIoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgbnVsbHB0cik7CisgICAgICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9u
LT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBlbnVtZXJh
dGlvbkRlZmluaXRpb24tPnR5cGUoKS5jbG9uZSgpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpu
dWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgICAgIHByb2dyYW0u
YXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICB9CisK
KyAgICAgICAgeworICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxl
RGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkp
LCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkuY2xvbmUo
KS50YWtlVW5pcXVlUHRyKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAg
ICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9u
RGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9w
dCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmlu
aXRpb24tPm9yaWdpbigpKSwgKmVudW1lcmF0aW9uRGVmaW5pdGlvbiksIFN0cmluZygib3BlcmF0
b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAg
ICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9u
RnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5
bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5hYzEwNzg3MmVmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rp
b25zLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wg
eworCitjbGFzcyBQcm9ncmFtOworCit2b2lkIHN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9u
cyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29y
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi4xM2RmNDY3YjdlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAK
QEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNz
b3JzLmgiCisKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xQ
cm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwordm9pZCBzeW50
aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgYm9vbCBp
c09wZXJhdG9yID0gdHJ1ZTsKKyAgICBib29sIGlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgIGZv
ciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlv
bnMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVE
ZWZpbml0aW9uLT5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgLy8gVGhlIGdldHRlcjogb3BlcmF0b3IuZmllbGQKKyAgICAgICAgICAgICAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4o
c3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBBU1Q6OlR5cGVS
ZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCAq
c3RydWN0dXJlRGVmaW5pdGlvbikudGFrZVVuaXF1ZVB0cigpLCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
IHBhcmFtZXRlcnM7CisgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2
YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgQVNUOjpOYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRy
aWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpLmNsb25l
KCksIFN0cmluZzo6Zm9ybWF0KCJvcGVyYXRvci4lcyIsIHN0cnVjdHVyZUVsZW1lbnQubmFtZSgp
LnV0ZjgoKS5kYXRhKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3Bl
cmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKFdU
Rk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHNldHRlcjogb3BlcmF0b3IuZmllbGQ9
CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFy
YXRpb24xKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJl
RWxlbWVudC5vcmlnaW4oKSksICpzdHJ1Y3R1cmVEZWZpbml0aW9uKS50YWtlVW5pcXVlUHRyKCks
IFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAgICAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6VG9rZW4oc3Ry
dWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCBzdHJ1Y3R1cmVFbGVt
ZW50LnR5cGUoKS5jbG9uZSgpLnRha2VVbmlxdWVQdHIoKSwgU3RyaW5nKCksIFdURjo6bnVsbG9w
dCwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBw
YXJhbWV0ZXJzOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFy
aWFibGVEZWNsYXJhdGlvbjEpKTsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChX
VEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CisgICAgICAgICAgICAgICAgQVNUOjpOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwg
QVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJlZmVyZW5jZTo6
d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksICpzdHJ1Y3R1cmVE
ZWZpbml0aW9uKSwgU3RyaW5nOjpmb3JtYXQoIm9wZXJhdG9yLiVzPSIsIHN0cnVjdHVyZUVsZW1l
bnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxv
cHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAgICAgICAgIHByb2dyYW0u
YXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBUaGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAorICAgICAgICAg
ICAgYXV0byBjcmVhdGVBbmRlciA9IFsmXShBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFj
ZSBhZGRyZXNzU3BhY2UpIC0+IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiB7CisgICAg
ICAgICAgICAgICAgYXV0byBhcmd1bWVudFR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRl
clR5cGU+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgYWRkcmVzc1Nw
YWNlLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1l
bnQub3JpZ2luKCkpLCAqc3RydWN0dXJlRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIEFT
VDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihz
dHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIGFyZ3VtZW50VHlw
ZS50YWtlVW5pcXVlUHRyKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpOworICAg
ICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24p
KTsKKyAgICAgICAgICAgICAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6
UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgYWRk
cmVzc1NwYWNlLCBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgICAg
ICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1l
bnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92
ZShyZXR1cm5UeXBlKSwgU3RyaW5nOjpmb3JtYXQoIm9wZXJhdG9yJi4lcyIsIHN0cnVjdHVyZUVs
ZW1lbnQubmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51
bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAgICAgICAgIHJldHVy
biBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1Nw
YWNlOjpDb25zdGFudCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5kZXIo
QVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmljZSkpOworICAgICAgICAgICAg
cHJvZ3JhbS5hcHBlbmQoY3JlYXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3Bh
Y2U6OlRocmVhZGdyb3VwKSk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRl
cihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkKSk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3Ry
dWN0dXJlQWNjZXNzb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjRlOWI5ZmY3MGMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmgKQEAgLTAsMCAr
MSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
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
cmFtOworCit2b2lkIHN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMoUHJvZ3JhbSYpOworCit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFZpc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xWaXNpdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uZjczOWU1YTY4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCkBAIC0wLDAgKzEsMTAzMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV0hMU0xWaXNpdG9yLmgiCisKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNs
dWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlUeXBl
LmgiCisjaW5jbHVkZSAiV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMQmFzZUZ1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xCYXNlU2VtYW50aWMu
aCIKKyNpbmNsdWRlICJXSExTTEJsb2NrLmgiCisjaW5jbHVkZSAiV0hMU0xCb29sZWFuTGl0ZXJh
bC5oIgorI2luY2x1ZGUgIldITFNMQnJlYWsuaCIKKyNpbmNsdWRlICJXSExTTEJ1aWx0SW5TZW1h
bnRpYy5oIgorI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TENvbW1hRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZS5oIgorI2luY2x1ZGUgIldITFNMQ29udGludWUuaCIKKyNpbmNsdWRlICJXSExTTERlcmVm
ZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG9XaGlsZUxvb3AuaCIKKyNpbmNs
dWRlICJXSExTTERvdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEVmZmVjdGZ1bEV4cHJl
c3Npb25TdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5o
IgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKKyNpbmNsdWRlICJXSExTTEV4
cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEZhbGx0aHJvdWdoLmgiCisjaW5jbHVkZSAiV0hM
U0xGbG9hdExpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTEZvckxvb3AuaCIKKyNpbmNsdWRlICJX
SExTTEZ1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJX
SExTTElmU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xJbmRleEV4cHJlc3Npb24uaCIKKyNp
bmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dpY2FsRXhw
cmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCIKKyNpbmNs
dWRlICJXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xOb2RlLmgiCisjaW5jbHVkZSAiV0hMU0xOdWxsTGl0ZXJhbC5oIgorI2lu
Y2x1ZGUgIldITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmgiCisjaW5jbHVkZSAiV0hM
U0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIKKyNpbmNsdWRlICJXSExTTFJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUuaCIKKyNp
bmNsdWRlICJXSExTTFJlc291cmNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFJldHVybi5o
IgorI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFNwZWNpYWxpemF0
aW9uQ29uc3RhbnRTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RhZ2VJbk91dFNlbWFudGlj
LmgiCisjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVy
ZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJXSExTTFN3aXRjaENhc2UuaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaFN0YXRlbWVudC5o
IgorI2luY2x1ZGUgIldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFRy
YXAuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVu
dC5oIgorI2luY2x1ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5
cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaCIK
KyNpbmNsdWRlICJXSExTTFZhbHVlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oIgor
I2luY2x1ZGUgIldITFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFdoaWxl
TG9vcC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK3Zv
aWQgVmlzaXRvcjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICAvLyBUaGVzZSB2aXNp
dGluZyBmdW5jdGlvbnMgbWlnaHQgYWRkIG5ldyBnbG9iYWwgc3RhdGVtZW50cywgc28gZG9uJ3Qg
dXNlIGZvcmVhY2ggc3ludGF4LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS50
eXBlRGVmaW5pdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KCpwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpW2ldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KCpwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKClbaV0pOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25z
KCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcHJvZ3JhbS5lbnVt
ZXJhdGlvbkRlZmluaXRpb25zKClbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJv
Z3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKClbaV0pOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpLnNp
emUoKTsgKytpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnByb2dyYW0ubmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbnMoKVtpXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9n
cmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KCpwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKVtpXSk7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCit7Cisg
ICAgaWYgKGlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKQorICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkp
OworICAgIGVsc2UgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRU
eXBlKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRU
eXBlKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlPih1bm5hbWVkVHlwZSkpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoaXM8
QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICB9Cit9CisKK3Zv
aWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKK3sKKyAgICBpZiAo
aXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGRvd25jYXN0PEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAgIGVs
c2UgaWYgKGlzPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFt
ZWRUeXBlKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KG5h
bWVkVHlwZSkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbj4obmFtZWRUeXBlKSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VS
VChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSk7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFt
ZWRUeXBlKSk7CisgICAgfQorfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VHlwZURlZmlu
aXRpb24mIHR5cGVEZWZpbml0aW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlRGVm
aW5pdGlvbi50eXBlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3RydWN0dXJl
RGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICBmb3IgKGF1dG8mIHN0cnVj
dHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpCisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZp
bml0aW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24u
dHlwZSgpKTsKKyAgICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25E
ZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoZW51bWVyYXRpb25NZW1iZXIpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiY+KGZ1bmN0aW9uRGVm
aW5pdGlvbikpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24uYmxv
Y2soKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mPihuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBmb3IgKGF1dG8mIHR5
cGVBcmd1bWVudCA6IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlQXJndW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKK3sKKyAgICBmb3IgKGF1
dG8mIHR5cGVBcmd1bWVudCA6IHR5cGVSZWZlcmVuY2UudHlwZUFyZ3VtZW50cygpKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZUFyZ3VtZW50KTsKKyAgICBpZiAodHlwZVJlZmVyZW5j
ZS5yZXNvbHZlZFR5cGUoKSAmJiBpczxBU1Q6OlR5cGVEZWZpbml0aW9uPigqdHlwZVJlZmVyZW5j
ZS5yZXNvbHZlZFR5cGUoKSkpIHsKKyAgICAgICAgYXV0byYgdHlwZURlZmluaXRpb24gPSBkb3du
Y2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlRGVmaW5pdGlvbi50eXBlKCkpOworICAg
IH0KK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlw
ZSkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VU
eXBlJj4ocG9pbnRlclR5cGUpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkFycmF5
UmVmZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBlKQoreworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGUmPihhcnJheVJlZmVyZW5jZVR5cGUp
KTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQor
eworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhcnJheVR5cGUudHlwZSgpKTsKK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1lbnQpCit7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKTsKKyAgICBp
ZiAoc3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCit7CisgICAgaWYg
KGVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgq
ZW51bWVyYXRpb25NZW1iZXIudmFsdWUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQoreworICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlY2xhcmF0aW9uLmF0dHJpYnV0ZUJsb2NrKCkpOworICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgZm9y
IChhdXRvJiBwYXJhbWV0ZXIgOiBmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHBhcmFtZXRlcik7CisgICAgaWYgKGZ1bmN0aW9uRGVj
bGFyYXRpb24uc2VtYW50aWMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmdW5jdGlv
bkRlY2xhcmF0aW9uLnNlbWFudGljKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6
VHlwZUFyZ3VtZW50JiB0eXBlQXJndW1lbnQpCit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VW
aXNpdG9yKFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKSB7
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChjb25zdGFudEV4cHJlc3Npb24pOworICAgIH0s
IFsmXShVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPiYgdHlwZVJlZmVyZW5jZSkgeworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlJj4o
dHlwZVJlZmVyZW5jZSkpOworICAgIH0pLCB0eXBlQXJndW1lbnQpOworfQorCit2b2lkIFZpc2l0
b3I6OnZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYgcmVmZXJlbmNlVHlwZSkKK3sKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQocmVmZXJlbmNlVHlwZS5lbGVtZW50VHlwZSgpKTsKK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6OlNlbWFudGljJiBzZW1hbnRpYykKK3sKKyAgICBXVEY6OnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6QnVpbHRJblNlbWFudGljJiBidWlsdEluU2VtYW50
aWMpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGJ1aWx0SW5TZW1hbnRpYyk7CisgICAg
fSwgWyZdKEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYgcmVzb3VyY2VTZW1hbnRpYykgeworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQocmVzb3VyY2VTZW1hbnRpYyk7CisgICAgfSwgWyZdKEFTVDo6
U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJiBzcGVjaWFsaXphdGlvbkNvbnN0YW50U2Vt
YW50aWMpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHNwZWNpYWxpemF0aW9uQ29uc3Rh
bnRTZW1hbnRpYyk7CisgICAgfSwgWyZdKEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJiBzdGFnZUlu
T3V0U2VtYW50aWMpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YWdlSW5PdXRTZW1h
bnRpYyk7CisgICAgfSksIHNlbWFudGljKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKQoreworICAgIGNvbnN0YW50
RXhwcmVzc2lvbi52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFs
JiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoaW50ZWdlckxp
dGVyYWwpOworICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVk
SW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHVuc2lnbmVkSW50
ZWdlckxpdGVyYWwpOworICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFs
KSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmbG9hdExpdGVyYWwpOworICAgIH0sIFsm
XShBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgeworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQobnVsbExpdGVyYWwpOworICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJiBib29s
ZWFuTGl0ZXJhbCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYm9vbGVhbkxpdGVyYWwp
OworICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVm
ZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkgewor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25N
ZW1iZXJSZWZlcmVuY2UpOworICAgIH0pKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OkF0dHJpYnV0ZUJsb2NrJiBhdHRyaWJ1dGVCbG9jaykKK3sKKyAgICBmb3IgKGF1dG8mIGZ1bmN0
aW9uQXR0cmlidXRlIDogYXR0cmlidXRlQmxvY2spCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpCdWls
dEluU2VtYW50aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UmVzb3VyY2VT
ZW1hbnRpYyYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3Rh
Z2VJbk91dFNlbWFudGljJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkludGVn
ZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoaW50
ZWdlckxpdGVyYWwudHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpCit7CisgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudHlwZSgpKTsKK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKQoreworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChmbG9hdExpdGVyYWwudHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9y
Ojp2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkKK3sKKyAgICBjaGVja0Vycm9y
QW5kVmlzaXQobnVsbExpdGVyYWwudHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OkJvb2xlYW5MaXRlcmFsJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Oklu
dGVnZXJMaXRlcmFsVHlwZSYgaW50ZWdlckxpdGVyYWxUeXBlKQoreworICAgIGlmIChpbnRlZ2Vy
TGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgq
aW50ZWdlckxpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlz
aXQoaW50ZWdlckxpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYgdW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbFR5cGUpCit7CisgICAgaWYgKHVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLnJlc29s
dmVkVHlwZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnVuc2lnbmVkSW50ZWdlckxp
dGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQodW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgpKTsKK30KKwordm9pZCBWaXNpdG9y
Ojp2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbFR5cGUmIGZsb2F0TGl0ZXJhbFR5cGUpCit7CisgICAg
aWYgKGZsb2F0TGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqZmxvYXRMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGZsb2F0TGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgpKTsKK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6Ok51bGxMaXRlcmFsVHlwZSYgbnVsbExpdGVyYWxUeXBlKQorewor
ICAgIGlmIChudWxsTGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqbnVsbExpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKTsKK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVm
ZXJlbmNlJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkZ1bmN0aW9uQXR0cmli
dXRlJiBmdW5jdGlvbkF0dHJpYnV0ZSkKK3sKKyAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJiBudW1UaHJlYWRzRnVuY3Rp
b25BdHRyaWJ1dGUpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG51bVRocmVhZHNGdW5j
dGlvbkF0dHJpYnV0ZSk7CisgICAgfSksIGZ1bmN0aW9uQXR0cmlidXRlKTsKK30KKwordm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYpCit7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpCbG9jayYgYmxvY2spCit7CisgICAgZm9yIChhdXRv
JiBzdGF0ZW1lbnQgOiBibG9jay5zdGF0ZW1lbnRzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlN0YXRlbWVudCY+KHN0YXRlbWVudCkpOworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6U3RhdGVtZW50JiBzdGF0ZW1lbnQpCit7CisgICAgaWYgKGlz
PEFTVDo6QmxvY2s+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3du
Y2FzdDxBU1Q6OkJsb2NrPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkJyZWFr
PihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpC
cmVhaz4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpDb250aW51ZT4oc3RhdGVt
ZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Q29udGludWU+
KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RG9XaGlsZUxvb3A+KHN0YXRlbWVu
dCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkRvV2hpbGVMb29w
PihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25T
dGF0ZW1lbnQ+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2Fz
dDxBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOworICAgIGVs
c2UgaWYgKGlzPEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkZhbGx0aHJvdWdoPihzdGF0ZW1lbnQpKTsKKyAgICBl
bHNlIGlmIChpczxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChkb3duY2FzdDxBU1Q6OkZvckxvb3A+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYg
KGlzPEFTVDo6SWZTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChkb3duY2FzdDxBU1Q6OklmU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlm
IChpczxBU1Q6OlJldHVybj4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGRvd25jYXN0PEFTVDo6UmV0dXJuPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6
OlN3aXRjaENhc2U+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3du
Y2FzdDxBU1Q6OlN3aXRjaENhc2U+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6
U3dpdGNoU3RhdGVtZW50PihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZG93bmNhc3Q8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYg
KGlzPEFTVDo6VHJhcD4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRv
d25jYXN0PEFTVDo6VHJhcD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudD4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0
YXRlbWVudCkpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoaXM8QVNUOjpXaGlsZUxvb3A+
KHN0YXRlbWVudCkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpX
aGlsZUxvb3A+KHN0YXRlbWVudCkpOworICAgIH0KK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OkJyZWFrJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNvbnRpbnVlJikK
K3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9v
cCkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKKyAgICBj
aGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIGlmIChp
czxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24+KGV4cHJlc3Np
b24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkJvb2xlYW5MaXRlcmFsPihleHByZXNzaW9uKSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Qm9vbGVhbkxpdGVyYWw+
KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkNhbGxFeHByZXNzaW9uPihleHBy
ZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6Q2FsbEV4
cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkNvbW1hRXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxB
U1Q6OkNvbW1hRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6
RGVyZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGRvd25jYXN0PEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSk7
CisgICAgZWxzZSBpZiAoaXM8QVNUOjpGbG9hdExpdGVyYWw+KGV4cHJlc3Npb24pKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWw+KGV4cHJlc3Np
b24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSkK
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWw+
KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uPihl
eHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6TG9n
aWNhbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkxvZ2lj
YWxOb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGRvd25jYXN0PEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBl
bHNlIGlmIChpczxBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24p
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpNYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpNYWtl
UG9pbnRlckV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoZG93bmNhc3Q8QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAg
ICBlbHNlIGlmIChpczxBU1Q6Ok51bGxMaXRlcmFsPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKTsK
KyAgICBlbHNlIGlmIChpczxBU1Q6OkRvdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpEb3RFeHByZXNzaW9uPihleHByZXNz
aW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpJbmRleEV4cHJlc3Npb24+KGV4cHJlc3Npb24p
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpJbmRleEV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNh
c3Q8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxz
ZSBpZiAoaXM8QVNUOjpUZXJuYXJ5RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlRlcm5hcnlFeHByZXNzaW9uPihleHByZXNz
aW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihleHBy
ZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgeworICAgICAgICBBU1NF
UlQoaXM8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZXhwcmVzc2lvbikpOworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZXhwcmVzc2lv
bikpOworICAgIH0KK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24m
IGRvdEV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFT
VDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJj4oZG90RXhwcmVzc2lvbikpOworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24pCit7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGluZGV4RXhwcmVzc2lvbi5pbmRleEV4cHJlc3Npb24o
KSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6UHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uJj4oaW5kZXhFeHByZXNzaW9uKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIGV4cHJlc3Npb24pCit7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24uYmFzZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Np
b25TdGF0ZW1lbnQpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGVmZmVjdGZ1bEV4cHJlc3Np
b25TdGF0ZW1lbnQuZWZmZWN0ZnVsRXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OkZhbGx0aHJvdWdoJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OkZvckxvb3AmIGZvckxvb3ApCit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJh
dGlvbnNTdGF0ZW1lbnQpOworICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYg
ZXhwcmVzc2lvbikgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNU
OjpFeHByZXNzaW9uJj4oZXhwcmVzc2lvbikpOworICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0
aW9uKCkpOworICAgIGlmIChmb3JMb29wLmNvbmRpdGlvbigpKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKmZvckxvb3AuY29uZGl0aW9uKCkpOworICAgIGlmIChmb3JMb29wLmluY3JlbWVu
dCgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZvckxvb3AuaW5jcmVtZW50KCkpOwor
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wLmJvZHkoKSk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCit7CisgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChpZlN0YXRlbWVudC5ib2R5KCkpOworICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpOwor
fQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpCit7
CisgICAgaWYgKHJldHVyblN0YXRlbWVudC52YWx1ZSgpKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoKnJldHVyblN0YXRlbWVudC52YWx1ZSgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OlN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7CisgICAgaWYgKHN3aXRjaENhc2UudmFs
dWUoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpzd2l0Y2hDYXNlLnZhbHVlKCkpOwor
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hDYXNlLmJsb2NrKCkpOworfQorCit2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpCit7Cisg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaFN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICBmb3Ig
KGF1dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UpOworfQorCit2b2lkIFZpc2l0b3I6OnZp
c2l0KEFTVDo6VHJhcCYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpCit7
CisgICAgZm9yIChhdXRvJiB2YXJpYWJsZURlY2xhcmF0aW9uIDogdmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQudmFyaWFibGVEZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxl
TG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJv
ZHkoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
JiB2YXJpYWJsZURlY2xhcmF0aW9uKQoreworICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLnR5
cGUoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5
cGUoKSk7CisgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpOworICAg
IGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhw
cmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24u
bGVmdCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4cHJlc3Npb24ucmln
aHQoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2Fs
bEV4cHJlc3Npb24pCit7CisgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9u
LmFyZ3VtZW50cygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNU
OjpFeHByZXNzaW9uJj4oYXJndW1lbnQpKTsKKyAgICBpZiAoY2FsbEV4cHJlc3Npb24uY2FzdFJl
dHVyblR5cGUoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGNhbGxFeHByZXNzaW9uLmNh
c3RSZXR1cm5UeXBlKCktPmdldCgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkNv
bW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQoreworICAgIGZvciAoYXV0byYgZXhwcmVz
c2lvbiA6IGNvbW1hRXhwcmVzc2lvbi5saXN0KCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChzdGF0aWNfY2FzdDxBU1Q6OkV4cHJlc3Npb24mPihleHByZXNzaW9uKSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhw
cmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZGVyZWZlcmVuY2VFeHByZXNzaW9u
LnBvaW50ZXIoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVz
c2lvbiYgbG9naWNhbEV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2lj
YWxFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxFeHBy
ZXNzaW9uLnJpZ2h0KCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TG9naWNhbE5v
dEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChsb2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkpOworfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpN
YWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVyRXhwcmVzc2lvbikKK3sKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mIHJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChy
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlKCkpOworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKTsKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHBy
ZXNzaW9uKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Np
b24mIHRlcm5hcnlFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5
RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlF
eHByZXNzaW9uLmJvZHlFeHByZXNzaW9uKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJu
YXJ5RXhwcmVzc2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vy
cm9yQW5kVmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAg
ICAgIHZpc2l0KHByb2dyYW0pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisg
ICAgICAgIHZpc2l0KHVubmFtZWRUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkp
CisgICAgICAgIHZpc2l0KG5hbWVkVHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKQoreworICAgIGlm
ICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodHlwZURlZmluaXRpb24pOworfQorCit2b2lkIFZp
c2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVj
dHVyZURlZmluaXRpb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzdHJ1
Y3R1cmVEZWZpbml0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAg
ICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2
aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAg
ICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYg
dHlwZVJlZmVyZW5jZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHR5cGVS
ZWZlcmVuY2UpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlBv
aW50ZXJUeXBlJiBwb2ludGVyVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZp
c2l0KHBvaW50ZXJUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlwZSkKK3sKKyAgICBpZiAo
IWVycm9yKCkpCisgICAgICAgIHZpc2l0KGFycmF5UmVmZXJlbmNlVHlwZSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCit7
CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChhcnJheVR5cGUpOworfQorCit2b2lk
IFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmIHN0cnVj
dHVyZUVsZW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzdHJ1Y3R1
cmVFbGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpF
bnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdChlbnVtZXJhdGlvbk1lbWJlcik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNs
YXJhdGlvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVj
bGFyYXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5
cGVBcmd1bWVudCYgdHlwZUFyZ3VtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAg
dmlzaXQodHlwZUFyZ3VtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpSZWZlcmVuY2VUeXBlJiByZWZlcmVuY2VUeXBlKQoreworICAgIGlmICghZXJyb3Io
KSkKKyAgICAgICAgdmlzaXQocmVmZXJlbmNlVHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6U2VtYW50aWMmIHNlbWFudGljKQoreworICAgIGlmICghZXJy
b3IoKSkKKyAgICAgICAgdmlzaXQoc2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9u
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY29uc3RhbnRFeHByZXNzaW9u
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBdHRyaWJ1dGVC
bG9jayYgYXR0cmlidXRlQmxvY2spCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNp
dChhdHRyaWJ1dGVCbG9jayk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6QnVpbHRJblNlbWFudGljJiBidWlsdEluU2VtYW50aWMpCit7CisgICAgaWYgKCFlcnJv
cigpKQorICAgICAgICB2aXNpdChidWlsdEluU2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6
OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmIHJlc291cmNlU2VtYW50
aWMpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChyZXNvdXJjZVNlbWFudGlj
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMmIHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYykKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHNwZWNpYWxpemF0aW9uQ29uc3RhbnRT
ZW1hbnRpYyk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3Rh
Z2VJbk91dFNlbWFudGljJiBzdGFnZUluT3V0U2VtYW50aWMpCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdChzdGFnZUluT3V0U2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6
OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkK
K3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGludGVnZXJMaXRlcmFsKTsKK30K
Kwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJM
aXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKQoreworICAgIGlmICghZXJyb3IoKSkKKyAg
ICAgICAgdmlzaXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpCit7Cisg
ICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChmbG9hdExpdGVyYWwpOworfQorCit2b2lk
IFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJh
bCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KG51bGxMaXRlcmFsKTsKK30K
Kwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYg
Ym9vbGVhbkxpdGVyYWwpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChib29s
ZWFuTGl0ZXJhbCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
SW50ZWdlckxpdGVyYWxUeXBlJiBpbnRlZ2VyTGl0ZXJhbFR5cGUpCit7CisgICAgaWYgKCFlcnJv
cigpKQorICAgICAgICB2aXNpdChpbnRlZ2VyTGl0ZXJhbFR5cGUpOworfQorCit2b2lkIFZpc2l0
b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJiB1
bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAg
IHZpc2l0KHVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpj
aGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGbG9hdExpdGVyYWxUeXBlJiBmbG9hdExpdGVyYWxUeXBl
KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZmxvYXRMaXRlcmFsVHlwZSk7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TnVsbExpdGVyYWxU
eXBlJiBudWxsTGl0ZXJhbFR5cGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNp
dChudWxsTGl0ZXJhbFR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25z
dGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkKK3sKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHZpc2l0KGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVy
UmVmZXJlbmNlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpG
dW5jdGlvbkF0dHJpYnV0ZSYgZnVuY3Rpb25BdHRyaWJ1dGUpCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdChmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJiBudW1U
aHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2
aXNpdChudW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJsb2NrJiBibG9jaykKK3sKKyAgICBpZiAoIWVycm9yKCkp
CisgICAgICAgIHZpc2l0KGJsb2NrKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisg
ICAgICAgIHZpc2l0KHN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6QnJlYWsmIGJyZWFrU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkK
KyAgICAgICAgdmlzaXQoYnJlYWtTdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkNvbnRpbnVlJiBjb250aW51ZVN0YXRlbWVudCkKK3sKKyAgICBp
ZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGNvbnRpbnVlU3RhdGVtZW50KTsKK30KKwordm9p
ZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxv
b3ApCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChkb1doaWxlTG9vcCk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RXhwcmVzc2lvbiYgZXhw
cmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGV4cHJlc3Npb24p
OworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkRvdEV4cHJlc3Np
b24mIGRvdEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChk
b3RFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkp
CisgICAgICAgIHZpc2l0KGluZGV4RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFj
Y2Vzc0V4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Np
b25TdGF0ZW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChlZmZlY3Rm
dWxFeHByZXNzaW9uU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYgZmFsbHRocm91Z2hTdGF0ZW1lbnQpCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdChmYWxsdGhyb3VnaFN0YXRlbWVudCk7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZvckxvb3ApOworfQorCit2b2lkIFZp
c2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkK
K3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGlmU3RhdGVtZW50KTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRl
bWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHJldHVyblN0YXRlbWVu
dCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3dpdGNoQ2Fz
ZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHN3aXRj
aENhc2UpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN3aXRj
aFN0YXRlbWVudCYgc3dpdGNoU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAg
ICAgdmlzaXQoc3dpdGNoU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpUcmFwJiB0cmFwKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAg
dmlzaXQodHJhcCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodmFyaWFibGVEZWNsYXJh
dGlvbnNTdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAg
dmlzaXQod2hpbGVMb29wKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQoreworICAgIGlm
ICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24m
IGFzc2lnbm1lbnRFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQoYXNzaWdubWVudEV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKK3sKKyAgICBpZiAo
IWVycm9yKCkpCisgICAgICAgIHZpc2l0KGNhbGxFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNp
dG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVz
c2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGNvbW1hRXhwcmVzc2lv
bik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RGVyZWZlcmVu
Y2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdChkZXJlZmVyZW5jZUV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0
b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhw
cmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGxvZ2ljYWxFeHBy
ZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpMb2dp
Y2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJv
cigpKQorICAgICAgICB2aXNpdChsb2dpY2FsTm90RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
biYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisg
ICAgICAgIHZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOworfQorCit2b2lkIFZp
c2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFr
ZVBvaW50ZXJFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQo
bWFrZVBvaW50ZXJFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6VGVybmFyeUV4cHJlc3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKQoreworICAgIGlmICghZXJy
b3IoKSkKKyAgICAgICAgdmlzaXQodGVybmFyeUV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0
b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJl
ZmVyZW5jZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHZhcmlhYmxlUmVm
ZXJlbmNlKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaAppbmRleCA1MTY4NTZlNDFkMC4uODVl
NzhmZjU5OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMVmlzaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMVmlzaXRvci5oCkBAIC0yNyw1NDMgKzI3LDIzNCBAQAogCiAjaWYgRU5BQkxFKFdFQkdQ
VSkKIAotI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIldITFNMQW5vbnltb3Vz
VmFyaWFibGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBl
LmgiCi0jaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKLSNpbmNsdWRlICJXSExTTEFzc2lnbm1l
bnRFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaCIK
LSNpbmNsdWRlICJXSExTTEJhc2VTZW1hbnRpYy5oIgotI2luY2x1ZGUgIldITFNMQmxvY2suaCIK
LSNpbmNsdWRlICJXSExTTEJvb2xlYW5MaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xCcmVhay5o
IgotI2luY2x1ZGUgIldITFNMQnVpbHRJblNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xDYWxs
RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMQ29tbWFFeHByZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKLSNpbmNsdWRlICJXSExTTENvbnN0YW50RXhw
cmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiV0hMU0xDb250
aW51ZS5oIgotI2luY2x1ZGUgIldITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmgiCi0jaW5jbHVk
ZSAiV0hMU0xEb1doaWxlTG9vcC5oIgotI2luY2x1ZGUgIldITFNMRG90RXhwcmVzc2lvbi5oIgot
I2luY2x1ZGUgIldITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oIgotI2luY2x1ZGUg
IldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlv
bk1lbWJlci5oIgotI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNM
RmFsbHRocm91Z2guaCIKLSNpbmNsdWRlICJXSExTTEZsb2F0TGl0ZXJhbC5oIgotI2luY2x1ZGUg
IldITFNMRm9yTG9vcC5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCIKLSNp
bmNsdWRlICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTEZ1bmN0
aW9uRGVmaW5pdGlvbi5oIgotI2luY2x1ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKLSNpbmNsdWRl
ICJXSExTTEluZGV4RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWwu
aCIKLSNpbmNsdWRlICJXSExTTExvZ2ljYWxFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xM
b2dpY2FsTm90RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTWFrZUFycmF5UmVmZXJlbmNl
RXhwcmVzc2lvbi5oIgotI2luY2x1ZGUgIldITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgiCi0j
aW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiV0hM
U0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJXSExTTE5vZGUuaCIKLSNpbmNs
dWRlICJXSExTTE51bGxMaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xOdW1UaHJlYWRzRnVuY3Rp
b25BdHRyaWJ1dGUuaCIKLSNpbmNsdWRlICJXSExTTFBhcmFtZXRlci5oIgotI2luY2x1ZGUgIldI
TFNMUG9pbnRlclR5cGUuaCIKLSNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5oIgotI2luY2x1ZGUgIldITFNMUXVhbGlmaWVyLmgiCi0jaW5jbHVkZSAiV0hMU0xSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgiCi0j
aW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xSZXR1cm4u
aCIKICNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCi0jaW5jbHVkZSAiV0hMU0xTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMuaCIKLSNpbmNsdWRlICJXSExTTFN0YWdlSW5PdXRTZW1hbnRp
Yy5oIgotI2luY2x1ZGUgIldITFNMU3RhdGVtZW50LmgiCi0jaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1
cmVEZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgiCi0jaW5j
bHVkZSAiV0hMU0xTd2l0Y2hDYXNlLmgiCi0jaW5jbHVkZSAiV0hMU0xTd2l0Y2hTdGF0ZW1lbnQu
aCIKLSNpbmNsdWRlICJXSExTTFRlcm5hcnlFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xU
cmFwLmgiCi0jaW5jbHVkZSAiV0hMU0xUeXBlLmgiCiAjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1l
bnQuaCIKLSNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xU
eXBlUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgi
Ci0jaW5jbHVkZSAiV0hMU0xWYWx1ZS5oIgotI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJh
dGlvbi5oIgotI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCIK
LSNpbmNsdWRlICJXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmgiCi0jaW5jbHVkZSAiV0hMU0xXaGls
ZUxvb3AuaCIKLQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBXSExTTCB7CiAK
LWNsYXNzIFZpc2l0b3IgewotICAgIH5WaXNpdG9yKCkgPSBkZWZhdWx0OwotCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0KFByb2dyYW0mIHByb2dyYW0pCi0gICAgewotICAgICAgICBmb3IgKGF1dG8m
IHR5cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkKLSAgICAgICAgICAg
IHZpc2l0KHR5cGVEZWZpbml0aW9uKTsKLSAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZp
bml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpKQotICAgICAgICAgICAgdmlz
aXQoc3RydWN0dXJlRGVmaW5pdGlvbik7Ci0gICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25E
ZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpCi0gICAgICAgICAg
ICB2aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24pOwotICAgICAgICBmb3IgKGF1dG8mIGZ1bmN0
aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKQotICAgICAgICAg
ICAgdmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKLSAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygp
KQotICAgICAgICAgICAgdmlzaXQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbik7Ci0gICAgICAg
IGZvciAoYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVUeXBlRGVj
bGFyYXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdChuYXRpdmVUeXBlRGVjbGFyYXRpb24pOwot
ICAgIH0KLQotICAgIHZvaWQgdmlzaXRUeXBlKEFTVDo6VHlwZSYgdHlwZSkKLSAgICB7Ci0gICAg
ICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpKQotICAgICAgICAgICAgdmlzaXQo
ZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih0eXBlKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlz
PEFTVDo6UG9pbnRlclR5cGU+KHR5cGUpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNU
OjpQb2ludGVyVHlwZT4odHlwZSkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4odHlwZSkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkFycmF5
UmVmZXJlbmNlVHlwZT4odHlwZSkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VS
VChpczxBU1Q6OkFycmF5VHlwZT4odHlwZSkpOwotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8
QVNUOjpBcnJheVR5cGU+KHR5cGUpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5pdGlvbikKLSAgICB7Ci0g
ICAgICAgIHZpc2l0VHlwZSh0eXBlRGVmaW5pdGlvbi50eXBlKCkpOwotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmlu
aXRpb24pCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1lbnQgOiBzdHJ1
Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpCi0gICAgICAgICAgICB2aXNpdChz
dHJ1Y3R1cmVFbGVtZW50KTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpF
bnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKLSAgICB7Ci0gICAg
ICAgIHZpc2l0VHlwZShlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpKTsKLSAgICAgICAgZm9y
IChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJh
dGlvbk1lbWJlcnMoKSkKLSAgICAgICAgICAgIHZpc2l0KGVudW1lcmF0aW9uTWVtYmVyKTsKLSAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1
bmN0aW9uRGVmaW5pdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6
RnVuY3Rpb25EZWNsYXJhdGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlvbikpOwotICAgICAgICB2aXNp
dChmdW5jdGlvbkRlZmluaXRpb24uYmxvY2soKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKLSAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbikKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgdHlwZUFyZ3VtZW50IDogbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKSkKLSAgICAgICAgICAgIHZpc2l0KHR5
cGVBcmd1bWVudCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZVJl
ZmVyZW5jZSYgdHlwZVJlZmVyZW5jZSkKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgdHlwZUFy
Z3VtZW50IDogdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkpCi0gICAgICAgICAgICB2aXNp
dCh0eXBlQXJndW1lbnQpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlBv
aW50ZXJUeXBlJiBwb2ludGVyVHlwZSkKLSAgICB7Ci0gICAgICAgIHZpc2l0KHN0YXRpY19jYXN0
PEFTVDo6UmVmZXJlbmNlVHlwZSY+KHBvaW50ZXJUeXBlKSk7Ci0gICAgfQotCi0gICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUp
Ci0gICAgewotICAgICAgICB2aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlJlZmVyZW5jZVR5cGUmPihh
cnJheVJlZmVyZW5jZVR5cGUpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpBcnJheVR5cGUmIGFycmF5VHlwZSkKLSAgICB7Ci0gICAgICAgIHZpc2l0VHlwZShhcnJheVR5
cGUudHlwZSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1
cmVFbGVtZW50JiBzdHJ1Y3R1cmVFbGVtZW50KQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHN0
cnVjdHVyZUVsZW1lbnQudHlwZSgpKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZUVsZW1lbnQuc2Vt
YW50aWMoKSkKLSAgICAgICAgICAgIHZpc2l0KCpzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkp
OwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVy
JiBlbnVtZXJhdGlvbk1lbWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChlbnVtZXJhdGlvbk1lbWJl
ci52YWx1ZSgpKQotICAgICAgICAgICAgdmlzaXQoKmVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkp
OwotICAgIH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQoZnVuY3Rp
b25EZWNsYXJhdGlvbi5hdHRyaWJ1dGVCbG9jaygpKTsKLSAgICAgICAgdmlzaXRUeXBlKGZ1bmN0
aW9uRGVjbGFyYXRpb24udHlwZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBwYXJhbWV0ZXIgOiBm
dW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKSkKLSAgICAgICAgICAgIHZpc2l0KHBhcmFt
ZXRlcik7Ci0gICAgICAgIGlmIChmdW5jdGlvbkRlY2xhcmF0aW9uLnNlbWFudGljKCkpCi0gICAg
ICAgICAgICB2aXNpdCgqZnVuY3Rpb25EZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsKLSAgICB9Ci0K
LSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUeXBlQXJndW1lbnQmIHR5cGVBcmd1bWVudCkK
LSAgICB7Ci0gICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25z
dGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikgewotICAgICAgICAgICAgdmlzaXQo
Y29uc3RhbnRFeHByZXNzaW9uKTsKLSAgICAgICAgfSwgWyZdKHN0ZDo6dW5pcXVlX3B0cjxBU1Q6
OlR5cGVSZWZlcmVuY2U+JiB0eXBlUmVmZXJlbmNlKSB7Ci0gICAgICAgICAgICB2aXNpdCgqdHlw
ZVJlZmVyZW5jZSk7Ci0gICAgICAgIH0pLCB0eXBlQXJndW1lbnQpOwotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmIHJlZmVyZW5jZVR5cGUpCi0gICAg
ewotICAgICAgICB2aXNpdFR5cGUocmVmZXJlbmNlVHlwZS5lbGVtZW50VHlwZSgpKTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMpCi0gICAg
ewotICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6QnVpbHRJblNl
bWFudGljJiBidWlsdEluU2VtYW50aWMpIHsKLSAgICAgICAgICAgIHZpc2l0KGJ1aWx0SW5TZW1h
bnRpYyk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OlJlc291cmNlU2VtYW50aWMmIHJlc291cmNlU2Vt
YW50aWMpIHsKLSAgICAgICAgICAgIHZpc2l0KHJlc291cmNlU2VtYW50aWMpOwotICAgICAgICB9
LCBbJl0oQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmIHNwZWNpYWxpemF0aW9u
Q29uc3RhbnRTZW1hbnRpYykgewotICAgICAgICAgICAgdmlzaXQoc3BlY2lhbGl6YXRpb25Db25z
dGFudFNlbWFudGljKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJiBz
dGFnZUluT3V0U2VtYW50aWMpIHsKLSAgICAgICAgICAgIHZpc2l0KHN0YWdlSW5PdXRTZW1hbnRp
Yyk7Ci0gICAgICAgIH0pLCBzZW1hbnRpYyk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uJiBjb25zdGFudEV4cHJlc3Npb24pCi0gICAgewot
ICAgICAgICBjb25zdGFudEV4cHJlc3Npb24udmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNU
OjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KGlu
dGVnZXJMaXRlcmFsKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgewotICAgICAgICAgICAgdmlzaXQodW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbCk7Ci0gICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRM
aXRlcmFsKSB7Ci0gICAgICAgICAgICB2aXNpdChmbG9hdExpdGVyYWwpOwotICAgICAgICB9LCBb
Jl0oQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIHsKLSAgICAgICAgICAgIHZpc2l0KG51
bGxMaXRlcmFsKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5M
aXRlcmFsKSB7Ci0gICAgICAgICAgICB2aXNpdChib29sZWFuTGl0ZXJhbCk7Ci0gICAgICAgIH0s
IFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBj
b25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkgewotICAgICAgICAg
ICAgdmlzaXQoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpOwot
ICAgICAgICB9KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXR0cmli
dXRlQmxvY2smIGF0dHJpYnV0ZUJsb2NrKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBmdW5j
dGlvbkF0dHJpYnV0ZSA6IGF0dHJpYnV0ZUJsb2NrKQotICAgICAgICAgICAgdmlzaXQoZnVuY3Rp
b25BdHRyaWJ1dGUpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlBhcmFt
ZXRlciYgcGFyYW1ldGVyKQotICAgIHsKLSAgICAgICAgdmlzaXRUeXBlKHBhcmFtZXRlci50eXBl
KCkpOwotICAgICAgICBpZiAocGFyYW1ldGVyLnNlbWFudGljKCkpCi0gICAgICAgICAgICB2aXNp
dCgqcGFyYW1ldGVyLnNlbWFudGljKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKQotICAg
IHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdGFnZUluT3V0U2VtYW50
aWMmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2Vy
TGl0ZXJhbCYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlVu
c2lnbmVkSW50ZWdlckxpdGVyYWwmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFsJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJS
ZWZlcmVuY2UmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpG
dW5jdGlvbkF0dHJpYnV0ZSYgZnVuY3Rpb25BdHRyaWJ1dGUpCi0gICAgewotICAgICAgICBXVEY6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmli
dXRlJiBudW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUpIHsKLSAgICAgICAgICAgIHZpc2l0KG51
bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSk7Ci0gICAgICAgIH0pLCBmdW5jdGlvbkF0dHJpYnV0
ZSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0
aW9uQXR0cmlidXRlJikKLSAgICB7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6QmxvY2smIGJsb2NrKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBzdGF0ZW1lbnQgOiBi
bG9jay5zdGF0ZW1lbnRzKCkpCi0gICAgICAgICAgICB2aXNpdCgqc3RhdGVtZW50KTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkKLSAg
ICB7Ci0gICAgICAgIGlmIChpczxBU1Q6OkJsb2NrPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAg
dmlzaXQoZG93bmNhc3Q8QVNUOjpCbG9jaz4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYg
KGlzPEFTVDo6QnJlYWs+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxB
U1Q6OkJyZWFrPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpDb250aW51
ZT4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6Q29udGludWU+
KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkRvV2hpbGVMb29wPihzdGF0
ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpEb1doaWxlTG9vcD4oc3Rh
dGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0
YXRlbWVudD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6RWZm
ZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2UgaWYg
KGlzPEFTVDo6RmFsbHRocm91Z2g+KHN0YXRlbWVudCkpCi0gICAgICAgICAgICB2aXNpdChkb3du
Y2FzdDxBU1Q6OkZhbGx0aHJvdWdoPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8
QVNUOjpGb3JMb29wPihzdGF0ZW1lbnQpKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNU
OjpGb3JMb29wPihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpJZlN0YXRl
bWVudD4oc3RhdGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6SWZTdGF0
ZW1lbnQ+KHN0YXRlbWVudCkpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlJldHVybj4oc3Rh
dGVtZW50KSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6UmV0dXJuPihzdGF0ZW1l
bnQpKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1lbnQpKQot
ICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1lbnQpKTsK
LSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCi0g
ICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlN3aXRjaFN0YXRlbWVudD4oc3RhdGVtZW50
KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6VHJhcD4oc3RhdGVtZW50KSkKLSAgICAgICAg
ICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6VHJhcD4oc3RhdGVtZW50KSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGlzPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCi0g
ICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50PihzdGF0ZW1lbnQpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXM8
QVNUOjpXaGlsZUxvb3A+KHN0YXRlbWVudCkpOwotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8
QVNUOjpXaGlsZUxvb3A+KHN0YXRlbWVudCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6QnJlYWsmKQotICAgIHsKLSAgICB9Ci0KLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpDb250aW51ZSYpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkKLSAgICB7Ci0gICAgICAg
IHZpc2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7Ci0gICAgICAgIHZpc2l0KGRvV2hpbGVMb29wLmNv
bmRpdGlvbmFsKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkV4cHJl
c3Npb24mIGV4cHJlc3Npb24pCi0gICAgewotICAgICAgICBpZiAoaXM8QVNUOjpBc3NpZ25tZW50
RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6
OkFzc2lnbm1lbnRFeHByZXNzaW9uPihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlz
PEFTVDo6Qm9vbGVhbkxpdGVyYWw+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93
bmNhc3Q8QVNUOjpCb29sZWFuTGl0ZXJhbD4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlm
IChpczxBU1Q6OkNhbGxFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0
KGRvd25jYXN0PEFTVDo6Q2FsbEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxz
ZSBpZiAoaXM8QVNUOjpDb21tYUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAg
dmlzaXQoZG93bmNhc3Q8QVNUOjpDb21tYUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAg
ICAgZWxzZSBpZiAoaXM8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQot
ICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KGV4
cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpGbG9hdExpdGVyYWw+KGV4cHJl
c3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWw+KGV4
cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbD4oZXhw
cmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFs
PihleHByZXNzaW9uKSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6TG9naWNhbEV4cHJlc3Np
b24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlzaXQoZG93bmNhc3Q8QVNUOjpMb2dpY2Fs
RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkxvZ2lj
YWxOb3RFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0
PEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBp
ZiAoaXM8QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAg
ICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6Ok1ha2VQb2ludGVyRXhw
cmVzc2lvbj4oZXhwcmVzc2lvbikpCi0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6Ok1h
a2VQb2ludGVyRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxB
U1Q6Ok51bGxMaXRlcmFsPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0
PEFTVDo6TnVsbExpdGVyYWw+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8QVNU
OjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KGV4cHJlc3Npb24pKQotICAgICAgICAgICAgdmlz
aXQoZG93bmNhc3Q8QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsK
LSAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uPihleHBy
ZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFTVDo6UmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOwotICAgICAgICBlbHNlIGlmIChpczxBU1Q6OlRlcm5h
cnlFeHByZXNzaW9uPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZpc2l0KGRvd25jYXN0PEFT
VDo6VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8
QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSkKLSAgICAgICAgICAgIHZp
c2l0KGRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OlZhcmlhYmxlUmVmZXJl
bmNlPihleHByZXNzaW9uKSk7Ci0gICAgICAgICAgICB2aXNpdChkb3duY2FzdDxBU1Q6OlZhcmlh
YmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3Rm
dWxFeHByZXNzaW9uU3RhdGVtZW50KQotICAgIHsKLSAgICAgICAgdmlzaXQoZWZmZWN0ZnVsRXhw
cmVzc2lvblN0YXRlbWVudC5lZmZlY3RmdWxFeHByZXNzaW9uKCkpOwotICAgIH0KLQotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZhbGx0aHJvdWdoJikKLSAgICB7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKLSAgICB7Ci0gICAgICAg
IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
c1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpIHsKLSAgICAgICAgICAg
IHZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKLSAgICAgICAgfSwgWyZdKHN0
ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7Ci0gICAgICAgICAg
ICB2aXNpdCgqZXhwcmVzc2lvbik7Ci0gICAgICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9u
KCkpOwotICAgICAgICBpZiAoZm9yTG9vcC5jb25kaXRpb24oKSkKLSAgICAgICAgICAgIHZpc2l0
KCpmb3JMb29wLmNvbmRpdGlvbigpKTsKLSAgICAgICAgaWYgKGZvckxvb3AuaW5jcmVtZW50KCkp
Ci0gICAgICAgICAgICB2aXNpdCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7Ci0gICAgICAgIHZpc2l0
KGZvckxvb3AuYm9keSgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpJ
ZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpCi0gICAgewotICAgICAgICB2aXNpdChpZlN0YXRlbWVu
dC5jb25kaXRpb25hbCgpKTsKLSAgICAgICAgdmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKLSAg
ICAgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkpCi0gICAgICAgICAgICB2aXNpdCgqaWZT
dGF0ZW1lbnQuZWxzZUJvZHkoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6UmV0dXJuJiByZXR1cm5TdGF0ZW1lbnQpCi0gICAgewotICAgICAgICBpZiAocmV0dXJuU3Rh
dGVtZW50LnZhbHVlKCkpCi0gICAgICAgICAgICB2aXNpdCgqcmV0dXJuU3RhdGVtZW50LnZhbHVl
KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaENhc2UmIHN3
aXRjaENhc2UpCi0gICAgewotICAgICAgICBpZiAoc3dpdGNoQ2FzZS52YWx1ZSgpKQotICAgICAg
ICAgICAgdmlzaXQoKnN3aXRjaENhc2UudmFsdWUoKSk7Ci0gICAgICAgIHZpc2l0KHN3aXRjaENh
c2UuYmxvY2soKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3dpdGNo
U3RhdGVtZW50JiBzd2l0Y2hTdGF0ZW1lbnQpCi0gICAgewotICAgICAgICB2aXNpdChzd2l0Y2hT
dGF0ZW1lbnQudmFsdWUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRj
aFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKQotICAgICAgICAgICAgdmlzaXQoc3dpdGNoQ2FzZSk7
Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpCi0gICAgewotICAg
IH0KK2NsYXNzIFByb2dyYW07CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBUeXBlRGVmaW5p
dGlvbjsKK2NsYXNzIFN0cnVjdHVyZURlZmluaXRpb247CitjbGFzcyBFbnVtZXJhdGlvbkRlZmlu
aXRpb247CitjbGFzcyBGdW5jdGlvbkRlZmluaXRpb247CitjbGFzcyBOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uOworY2xhc3MgTmF0aXZlVHlwZURlY2xhcmF0aW9uOworY2xhc3MgVHlwZVJlZmVy
ZW5jZTsKK2NsYXNzIFBvaW50ZXJUeXBlOworY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlOworY2xh
c3MgQXJyYXlUeXBlOworY2xhc3MgU3RydWN0dXJlRWxlbWVudDsKK2NsYXNzIEVudW1lcmF0aW9u
TWVtYmVyOworY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNzIFJlZmVyZW5jZVR5cGU7
CitjbGFzcyBDb25zdGFudEV4cHJlc3Npb247CitjbGFzcyBCdWlsdEluU2VtYW50aWM7CitjbGFz
cyBSZXNvdXJjZVNlbWFudGljOworY2xhc3MgU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGlj
OworY2xhc3MgU3RhZ2VJbk91dFNlbWFudGljOworY2xhc3MgSW50ZWdlckxpdGVyYWw7CitjbGFz
cyBVbnNpZ25lZEludGVnZXJMaXRlcmFsOworY2xhc3MgRmxvYXRMaXRlcmFsOworY2xhc3MgTnVs
bExpdGVyYWw7CitjbGFzcyBCb29sZWFuTGl0ZXJhbDsKK2NsYXNzIENvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlOworY2xhc3MgTnVtVGhyZWFkc0Z1bmN0aW9uQXR0
cmlidXRlOworY2xhc3MgQmxvY2s7CitjbGFzcyBTdGF0ZW1lbnQ7CitjbGFzcyBCcmVhazsKK2Ns
YXNzIENvbnRpbnVlOworY2xhc3MgRG9XaGlsZUxvb3A7CitjbGFzcyBFeHByZXNzaW9uOworY2xh
c3MgRG90RXhwcmVzc2lvbjsKK2NsYXNzIEluZGV4RXhwcmVzc2lvbjsKK2NsYXNzIFByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbjsKK2NsYXNzIEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ7Citj
bGFzcyBGYWxsdGhyb3VnaDsKK2NsYXNzIEZvckxvb3A7CitjbGFzcyBJZlN0YXRlbWVudDsKK2Ns
YXNzIFJldHVybjsKK2NsYXNzIFN3aXRjaENhc2U7CitjbGFzcyBTd2l0Y2hTdGF0ZW1lbnQ7Citj
bGFzcyBUcmFwOworY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ7CitjbGFzcyBX
aGlsZUxvb3A7CitjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uOworY2xhc3MgQXNzaWdubWVudEV4
cHJlc3Npb247CitjbGFzcyBDYWxsRXhwcmVzc2lvbjsKK2NsYXNzIENvbW1hRXhwcmVzc2lvbjsK
K2NsYXNzIERlcmVmZXJlbmNlRXhwcmVzc2lvbjsKK2NsYXNzIExvZ2ljYWxFeHByZXNzaW9uOwor
Y2xhc3MgTG9naWNhbE5vdEV4cHJlc3Npb247CitjbGFzcyBNYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uOworY2xhc3MgTWFrZVBvaW50ZXJFeHByZXNzaW9uOworY2xhc3MgUmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbjsKK2NsYXNzIFRlcm5hcnlFeHByZXNzaW9uOworY2xhc3MgVmFyaWFibGVS
ZWZlcmVuY2U7CitjbGFzcyBVbm5hbWVkVHlwZTsKK2NsYXNzIE5hbWVkVHlwZTsKIAotICAgIHZp
cnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgdmFy
aWFibGVEZWNsYXJhdGlvbiA6IHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LnZhcmlhYmxl
RGVjbGFyYXRpb25zKCkpCi0gICAgICAgICAgICB2aXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uKTsK
LSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9v
cCkKLSAgICB7Ci0gICAgICAgIHZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKLSAgICAg
ICAgdmlzaXQod2hpbGVMb29wLmJvZHkoKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKLSAgICB7
Ci0gICAgICAgIHZpc2l0VHlwZSh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7Ci0gICAgICAg
IGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpCi0gICAgICAgICAgICB2aXNpdCgq
dmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsKLSAgICAgICAgaWYgKHZhcmlhYmxlRGVj
bGFyYXRpb24uaW5pdGlhbGl6ZXIoKSkKLSAgICAgICAgICAgIHZpc2l0KCp2YXJpYWJsZURlY2xh
cmF0aW9uLmluaXRpYWxpemVyKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKLSAgICB7Ci0g
ICAgICAgIHZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7Ci0gICAgICAgIHZpc2l0
KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKLSAgICB7Ci0gICAg
ICAgIGZvciAoYXV0byYgYXJndW1lbnQgOiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkKLSAg
ICAgICAgICAgIHZpc2l0KCphcmd1bWVudCk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCi0gICAgewotICAgICAg
ICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBjb21tYUV4cHJlc3Npb24ubGlzdCgpKQotICAgICAg
ICAgICAgdmlzaXQoKmV4cHJlc3Npb24pOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHByZXNzaW9uKQotICAg
IHsKLSAgICAgICAgdmlzaXQoZGVyZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50ZXIoKSk7Ci0gICAg
fQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2lj
YWxFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQobG9naWNhbEV4cHJlc3Npb24ubGVm
dCgpKTsKLSAgICAgICAgdmlzaXQobG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7Ci0gICAgfQot
Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2lj
YWxOb3RFeHByZXNzaW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQobG9naWNhbE5vdEV4cHJlc3Np
b24ub3BlcmFuZCgpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpNYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQot
ICAgIHsKLSAgICAgICAgdmlzaXQobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUo
KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHBy
ZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCi0gICAgewotICAgICAgICB2aXNpdChtYWtl
UG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOwotICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uKQotICAgIHsKLSAgICAgICAgdmlzaXQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmJhc2Uo
KSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZp
c2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCkpOwotICAgICAgICB2aXNpdChy
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm9sZFZhbHVlKCkpOwotICAgICAgICB2aXNpdChyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlKCkpOwotICAgICAgICB2aXNpdChyZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKTsKLSAgICAgICAgdmlzaXQo
cmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHByZXNzaW9uKCkpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0ZXJuYXJ5RXhw
cmVzc2lvbikKLSAgICB7Ci0gICAgICAgIHZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLnByZWRpY2F0
ZSgpKTsKLSAgICAgICAgdmlzaXQodGVybmFyeUV4cHJlc3Npb24uYm9keUV4cHJlc3Npb24oKSk7
Ci0gICAgICAgIHZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkpOwotICAg
IH0KLQotICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJikKLSAg
ICB7Ci0gICAgfQorfQogCi0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QW5vbnltb3VzVmFy
aWFibGVEZWNsYXJhdGlvbiYpCi0gICAgewotICAgIH0KK2NsYXNzIFZpc2l0b3IgeworcHVibGlj
OgorICAgIHZpcnR1YWwgflZpc2l0b3IoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBGSVhNRTogQWRk
IGEgd2F5IHRvIHZpc2l0IGEgY29uc3QgUHJvZ3JhbQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0
KFByb2dyYW0mKTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBl
KTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpOworICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZp
c2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVm
ZXJlbmNlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQo
QVNUOjpTdHJ1Y3R1cmVFbGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RW51
bWVyYXRpb25NZW1iZXImKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHlwZUFyZ3VtZW50Jik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYpOworICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OlNlbWFudGljJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6Q29uc3RhbnRFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QXR0
cmlidXRlQmxvY2smKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCdWlsdEluU2VtYW50
aWMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZXNvdXJjZVNlbWFudGljJik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGlj
Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJik7Cisg
ICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6TnVsbExpdGVyYWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCb29sZWFuTGl0
ZXJhbCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsVHlwZSYp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBl
Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsVHlwZSYpOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsVHlwZSYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25BdHRyaWJ1dGUmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OlN0YXRlbWVudCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJy
ZWFrJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29udGludWUmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OkV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHBy
ZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVu
dCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZhbGx0aHJvdWdoJik7CisgICAgdmly
dHVhbCB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChB
U1Q6OklmU3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OlRyYXAmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xh
cmF0aW9uc1N0YXRlbWVudCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9v
cCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYpOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6TG9naWNhbEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpMb2dp
Y2FsTm90RXhwcmVzc2lvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpNYWtl
UG9pbnRlckV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VGVybmFy
eUV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVy
ZW5jZSYpOworCisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoUHJvZ3JhbSYpOworICAgIHZv
aWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKTsKKyAg
ICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKTsKKyAg
ICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKTsKKyAgICB2
b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOworICAgIHZv
aWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiYpOwor
ICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJik7
CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJik7CisgICAg
dm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpOworICAgIHZvaWQgY2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJik7CisgICAgdm9pZCBjaGVj
a0Vycm9yQW5kVmlzaXQoQVNUOjpBcnJheVR5cGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpUeXBlQXJndW1lbnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJl
ZmVyZW5jZVR5cGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlNlbWFudGlj
Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24m
KTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkF0dHJpYnV0ZUJsb2NrJik7Cisg
ICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCdWlsdEluU2VtYW50aWMmKTsKKyAgICB2
b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmKTsKKyAgICB2b2lk
IGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYp
OworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RhZ2VJbk91dFNlbWFudGljJik7
CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpOworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpOwor
ICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYpOworICAgIHZvaWQgY2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkludGVnZXJMaXRlcmFsVHlwZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkZsb2F0TGl0ZXJhbFR5cGUmKTsKKyAgICB2b2lkIGNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6Ok51bGxMaXRlcmFsVHlwZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Um
KTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZ1bmN0aW9uQXR0cmlidXRlJik7
CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRy
aWJ1dGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkJsb2NrJik7CisgICAg
dm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTdGF0ZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkJyZWFrJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpDb250aW51ZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RG9XaGls
ZUxvb3AmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkV4cHJlc3Npb24mKTsK
KyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKTsKKyAgICB2
b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJik7CisgICAg
dm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50
Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpOworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Rm9yTG9vcCYpOworICAgIHZvaWQgY2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OlJldHVybiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3dp
dGNoQ2FzZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3dpdGNoU3RhdGVt
ZW50Jik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpUcmFwJik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYp
OworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6V2hpbGVMb29wJik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYpOworICAgIHZv
aWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVj
a0Vycm9yQW5kVmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mKTsKKyAgICB2
b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYpOworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYp
OworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mKTsK
KyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJik7CisK
KyAgICB2b2lkIHNldEVycm9yKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9lcnJvcik7Cisg
ICAgICAgIG1fZXJyb3IgPSB0cnVlOworICAgIH0KKworICAgIGJvb2wgZXJyb3IoKSBjb25zdCB7
IHJldHVybiBtX2Vycm9yOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2Vycm9yIHsgZmFsc2Ug
fTsgLy8gRklYTUU6IE1pZ3JhdGUgdGhpcyB0byBiZSBzb21lIHNvcnQgb2YgZGVzY3JpcHRpdmUg
c3RyaW5nLgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBjZGZhMWM2Zjc3Zi4uNzM0ZTQ1ZWQ1
MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0zMDksOCArMzA5LDMyIEBAIE1vZHVsZXMvd2ViZ3B1L0RP
TVdpbmRvd1dlYkdQVS5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUHJlcGFyZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5j
cHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKK01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFt
ZVJlc29sdmVyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lQ29udGV4dC5jcHAK
K01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCitNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAorTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcAorTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3Bw
CitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3Ro
LmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNw
cAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcAogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQnVpbHRJblNlbWFudGljLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
UmVzb3VyY2VTZW1hbnRpYy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFNwZWNp
YWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFN0YWdlSW5PdXRTZW1hbnRpYy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEZsb2F0TGl0ZXJhbFR5cGUuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRl
Z2VyTGl0ZXJhbFR5cGUuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0
ZXJhbFR5cGUuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVn
ZXJMaXRlcmFsVHlwZS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZl
cmVuY2UuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwu
Y3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAK
K01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmNwcAorTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAKIE1vZHVs
ZXMvd2ViZ3B1L1dlYkdQVS5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dlYkdQVUFkYXB0ZXIuY3BwCiBN
b2R1bGVzL3dlYmdwdS9XZWJHUFVCaW5kR3JvdXBMYXlvdXQuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODU0ODU1OGIzNzcu
Ljc3YWEzNjY3MWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC02NDA0LDkgKzY0MDQsMjAgQEAKIAkJMUMyNEVFQTcxQzcyQTdC
NDAwODBGOEZDIC8qIEpTRm9udEZhY2VTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSlNGb250RmFjZVNldC5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0Zv
bnRGYWNlU2V0Lmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFDMjY0
OTc5MEQ3RTI0OEEwMEJEMTBGMiAvKiBEb2N1bWVudExvYWRlck1hYy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudExvYWRlck1hYy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMzI0OTEwMUM2RDZBM0IwMDdFREIzMiAvKiBGb250VmFy
aWFudEJ1aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9u
dFZhcmlhbnRCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3
NkMyMUNFREE0MjAwMERDOUYyIC8qIFdITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzZFMjFDRUZGNzQwMDBEQzlGMiAvKiBXSExTTFJlc29s
dmVPdmVybG9hZEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBs
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzZGMjFDRjAxMzEwMDBEQzlG
MiAvKiBXSExTTEluZmVyVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJbmZlclR5cGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzcxMjFDRjBCRTEwMDBEQzlGMiAv
KiBXSExTTE5hbWVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE5hbWVkVHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3MjIxQ0YwRDJFMDAwREM5RjIgLyogV0hM
U0xVbm5hbWVkVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFVubmFtZWRUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc0MjFENUE3MDYwMDBEQzlGMiAvKiBXSExT
TFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUmVjdXJzaXZlVHlw
ZUNoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzUyMUQ1QjBG
ODAwMERDOUYyIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkxQzMzMjc3NjIxRDVDMDdFMDAwREM5RjIgLyogV0hMU0xTeW50aGVzaXplU3RydWN0
dXJlQWNjZXNzb3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFj
Y2Vzc29ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3NzIxRDVDQTgz
MDAwREM5RjIgLyogV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzgyMUQ1Q0VENDAwMERDOUYyIC8qIFdITFNMU3lu
dGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTeW50aGVz
aXplQXJyYXlPcGVyYXRvckxlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
QzM5NjlDRjFCNzQyMTFFMDAyQkNGQTcgLyogRm9udENhY2hlQ29yZVRleHQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udENhY2hlQ29yZVRleHQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzY2MjYwRTFDNkU3Q0E2MDBBQjUyN0MgLyogRm9u
dEZhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEZhY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzY2MjYwRjFDNkU3Q0E2MDBBQjUy
N0MgLyogRm9udEZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udEZh
Y2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM3Q0MyMUQyMUNERTE5ODAwQzFG
QTJDIC8qIFdITFNMTmFtZUNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1lQ29udGV4
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1NjBFOTczMzA4MDAyNjZF
MDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbnNwZWN0b3JDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDODFCOTU3MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1ODBFOTczMzA4MDAyNjZFMDcg
LyogSW5zcGVjdG9yQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
c3BlY3RvckNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjQxNiw2ICs2
NDI3LDE4IEBACiAJCTFDQUYzNDdFMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU2NyaXB0T2JqZWN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYzNDdGMEE2QzQwNTIwMEFCRTA2RSAvKiBX
ZWJTY3JpcHRPYmplY3QubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJTY3JpcHRPYmplY3QubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDQUYz
NDgwMEE2QzQwNTIwMEFCRTA2RSAvKiBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdFByaXZhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCMkMyMUREOTZFRjAwNkU4NDZBIC8qIFdITFNM
R2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMR2F0aGVy
RW50cnlQb2ludEl0ZW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlC
MkQyMUREOTZFRjAwNkU4NDZBIC8qIFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDQjY5QjMyMjFERUQ0MEIwMDZFODQ2QSAvKiBXSExTTFJlc29sdmFibGVU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUmVzb2x2YWJsZVR5cGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCMzQyMURFRDYzQTAwNkU4NDZBIC8qIFdITFNMRmxvYXRM
aXRlcmFsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCMzUyMURFRDY0OTAwNkU4NDZBIC8qIFdI
TFNMSW50ZWdlckxpdGVyYWxUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMSW50ZWdlckxpdGVy
YWxUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjM2MjFERUQ2NTcw
MDZFODQ2QSAvKiBXSExTTE51bGxMaXRlcmFsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE51
bGxMaXRlcmFsVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIzNzIx
REVENjZCMDA2RTg0NkEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjM4MjFERjAzRTEwMDZFODQ2QSAvKiBXSExTTEZsb2F0
TGl0ZXJhbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xGbG9hdExpdGVyYWxUeXBl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCMzkyMURGMDNGMzAwNkU4
NDZBIC8qIFdITFNMSW50ZWdlckxpdGVyYWxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMSW50ZWdlckxpdGVyYWxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUNCNjlCM0EyMURGMDQwMzAwNkU4NDZBIC8qIFdITFNMTnVsbExpdGVyYWxUeXBlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdITFNMTnVsbExpdGVyYWxUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUNCNjlCM0IyMURGMDQxRTAwNkU4NDZBIC8qIFdITFNMVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5
QjNFMjFFMDM1RjMwMDZFODQ2QSAvKiBXSExTTFJlc29sdmluZ1R5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0hMU0xSZXNvbHZpbmdUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFD
QjZCNEY4MjE3QjgzOTMwMDkzQjlDRCAvKiBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQ0I2QjRGQjIxN0I4Mzk0MDA5M0I5Q0QgLyogVGV4dFVuZGVybGluZU9mZnNl
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0VW5kZXJsaW5lT2Zmc2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDQ0RGNUJCMTk5MDMzMjQwMEJDRUJBRCAvKiBTVkdUb09URkZvbnRD
b252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1Rv
T1RGRm9udENvbnZlcnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMy
MjMsOSArMTMyNDYsMTkgQEAKIAkJQzExQTlFQ0QyMTQwM0E1QzAwQ0ZCMjBBIC8qIFN3aXRjaGlu
Z0dQVUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTd2l0Y2hpbmdHUFVDbGllbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzExQTlFRDIyMTQwNTc4QjAwQ0ZCMjBBIC8qIFN3aXRj
aGluZ0dQVUNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTd2l0Y2hpbmdHUFVDbGllbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMUUxRDIzNTIwM0RGMTU0MDA1ODQ2
NjUgLyogU2NyZWVuUHJvcGVydGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JlZW5Qcm9wZXJ0aWVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMDEzMzQ0MjFEQUMwOTUwMEI2MEMy
NyAvKiBXSExTTEludHJpbnNpY3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMDEzMzQ2MjFEQUVFNkUwMEI2MEMyNyAv
KiBXSExTTEludHJpbnNpY3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwMTMzNDcyMURCNDM2MzAwQjYw
QzI3IC8qIFdITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzIwMTVDMDkxQkU2RkUyQzAwODIyMzg5IC8qIEZvbnRWYXJpYW50QnVpbGRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBGb250VmFyaWFudEJ1aWxkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzIwRjRGNjQyMURGQkU1QzAwNzBDNDVBIC8qIFdITFNMVHlwZVJlZmVyZW5jZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXSExTTFR5cGVSZWZlcmVuY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMjBGNEY2NjIxREZGMjM2MDA3MEM0NUEgLyogV0hMU0xJbnRlZ2VyTGl0
ZXJhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEludGVnZXJMaXRlcmFsLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIwRjRGNjcyMURGRjNBNzAwNzBDNDVBIC8qIFdI
TFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFVu
c2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjEwRTkxMTIxQjRCRDEwMDBCN0Y4M0QgLyogV0hMU0xMZXhlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXSExTTExleGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxMEU5
MTIyMUI0QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xM
ZXhlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjEzOEExMzIxRERFQ0QzMDBG
NTE2QkEgLyogV0hMU0xCdWlsdEluU2VtYW50aWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hM
U0xCdWlsdEluU2VtYW50aWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjEz
OEExNTIxRERFQ0U5MDBGNTE2QkEgLyogV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyMTM4QTE2MjFEREVDRkIwMEY1MTZCQSAvKiBXSExTTFNwZWNpYWxpemF0
aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFNwZWNpYWxp
emF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMTM4QTE3MjFEREVEMEQwMEY1MTZCQSAvKiBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNkYzMjFDRDg5QUQwMDIyNzk3OSAvKiBXSExTTFRy
YXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xUcmFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMyMUJGNkY0MjFDRDg5QjMwMDIyNzk3OSAvKiBXSExTTEZ1bmN0aW9uRGVmaW5pdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjZGNTIxQ0Q4OUI1MDAyMjc5NzkgLyogV0hMU0xDb250
aW51ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTENvbnRpbnVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMzI1NCw3ICsxMzI4Nyw2IEBACiAJCUMyMUJGNzBDMjFDRDg5Q0MwMDIy
Nzk3OSAvKiBXSExTTEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xFeHByZXNzaW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzBEMjFDRDg5Q0QwMDIyNzk3
OSAvKiBXSExTTFJlZmVyZW5jZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZWZlcmVuY2VU
eXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzBFMjFDRDg5Q0UwMDIy
Nzk3OSAvKiBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN0
YWdlSW5PdXRTZW1hbnRpYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjFCRjcw
RjIxQ0Q4OUNGMDAyMjc5NzkgLyogV0hMU0xBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdITFNMQW5vbnltb3VzVmFyaWFibGVEZWNsYXJhdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxMDIxQ0Q4OUQwMDAyMjc5NzkgLyogV0hM
U0xWYXJpYWJsZURlY2xhcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVmFyaWFibGVEZWNs
YXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcxMTIxQ0Q4OUQx
MDAyMjc5NzkgLyogV0hMU0xUeXBlQXJndW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xUeXBl
QXJndW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MTIyMUNEODlE
MTAwMjI3OTc5IC8qIFdITFNMU3RhdGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3RhdGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzI2Miw3ICsxMzI5NCw2IEBA
CiAJCUMyMUJGNzE0MjFDRDg5RDMwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3MTUyMUNEODlENDAw
MjI3OTc5IC8qIFdITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFCRjcxNjIxQ0Q4OUQ1MDAyMjc5NzkgLyogV0hMU0xDYWxsRXhwcmVzc2lvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTENhbGxFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUMyMUJGNzE3MjFDRDg5RDYwMDIyNzk3OSAvKiBXSExTTFBhcmFtZXRlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTFBhcmFtZXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFCRjcxODIxQ0Q4OUQ3MDAyMjc5NzkgLyogV0hMU0xEb3RFeHByZXNzaW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMRG90RXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDMjFCRjcxOTIxQ0Q4OUQ3MDAyMjc5NzkgLyogV0hMU0xTd2l0Y2hDYXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFCRjcxQTIxQ0Q4OUQ4MDAyMjc5NzkgLyogV0hMU0xCcmVhay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
SExTTEJyZWFrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzMwOCwxNSArMTMz
MzksMjcgQEAKIAkJQzI4MDgzM0QxQzZEQzIyQzAwMTQ1MUI2IC8qIEpTRm9udEZhY2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSlNGb250RmFjZS5jcHA7IHBhdGgg
PSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9udEZhY2UuY3BwOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQlDMjgwODMzRTFDNkRDMjJDMDAxNDUxQjYgLyogSlNGb250
RmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0ZvbnRGYWNlLmg7IHBh
dGggPSBEZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTRm9udEZhY2UuaDsgc291cmNlVHJlZSA9IEJV
SUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJQzI4MEIzRkQxRUY0NjA4OTAwRDM1MTM1IC8qIEZvbnRG
YW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGb250RmFtaWx5U3BlY2lmaWNhdGlvbk51bGwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMjg2RUQ5RTIxREI1QUJBMDA3MTNDNDAgLyogV0hMU0xSZXNvbHZlT3Zl
cmxvYWRJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1w
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyODhDNzI3MjFDOEM2RUYwMDJE
RjVDQSAvKiBXSExTTFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xWaXNpdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyODhDNzI5MjFDOENBNTAwMDJERjVDQSAvKiBX
SExTTFByZXBhcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xQcmVwYXJlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MkEyMUM4Q0E1MDAwMkRGNUNBIC8qIFdI
TFNMUHJlcGFyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFByZXBhcmUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQzI4OEM3MkIyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFtZVJl
c29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMTmFtZVJlc29sdmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI4OEM3MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdI
TFNMTmFtZVJlc29sdmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTmFtZVJlc29sdmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyODhDNzJEMjFDOTkxREEwMDJERjVDQSAvKiBX
SExTTFR5cGVBcmd1bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFR5cGVBcmd1bWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQUIwQUY0MUU2QjNDNkMwMDEz
NDhDNSAvKiBGb250U2VsZWN0aW9uQWxnb3JpdGhtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEZvbnRTZWxlY3Rpb25BbGdvcml0aG0uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDMkFCMEFGNTFFNkIzQzZDMDAxMzQ4QzUgLyogRm9udFNlbGVjdGlv
bkFsZ29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250U2VsZWN0
aW9uQWxnb3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyQUIwQjAzMUU2
REU5MkMwMDEzNDhDNSAvKiBGb250U2VsZWN0aW9uVmFsdWVJbmxpbmVzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZvbnRTZWxlY3Rpb25WYWx1ZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQzJCNTUxNzAyMURCNEI0ODAwNEJFMjZFIC8qIFdITFNMQ2hlY2tlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXSExTTENoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMkI1NTE3MTIxREI0QjQ4MDA0QkUyNkUgLyogV0hMU0xDaGVja2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1
NTE3MzIxREI0QkJEMDA0QkUyNkUgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0hMU0xOYW1lUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMkI1NTE3NDIxREI1MTBGMDA0QkUyNkUgLyogV0hMU0xOYW1lQ29udGV4dC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXSExTTE5hbWVDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzJCNTUxNzUyMURCNTI2NjAwNEJFMjZFIC8qIFdITFNMSW5mZXJUeXBlcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEluZmVyVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMkI1NTE3NjIxREI1Mzk0MDA0QkUyNkUgLyogV0hMU0xSZWN1cnNp
dmVUeXBlQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFJlY3Vyc2l2ZVR5cGVD
aGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzcyMURCNTQw
RjAwNEJFMjZFIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyQjU1MTc4MjFEQjU1NzUwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNp
emVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVz
aXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzJCNTUxNzkyMURCNTU4RjAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVu
Y3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9u
RnVuY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxN0EyMURC
NTU5RTAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTdCMjFEQjU1QUYwMDRCRTI2RSAv
KiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hM
U0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzJCNTUxN0MyMURCNTdFRDAwNEJFMjZFIC8qIFdITFNMVmlzaXRvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXSExTTFZpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDMkMyQ0Y1NTFFRjM3NjFBMDA0MjgxQTggLyogRm9udEZhbWlseVNwZWNpZmljYXRpb25OdWxs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRGYW1pbHlTcGVjaWZpY2F0
aW9uTnVsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkUzOEVGQjFFODM5NkZE
MDBDQTNBREYgLyogQ1NTRm9udFN0eWxlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ1NTRm9udFN0eWxlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlDMkUzOEVGQzFFODM5NkZEMDBDQTNBREYgLyogQ1NTRm9udFN0eWxlVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRm9udFN0eWxlVmFsdWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MzUxLDExICsyNTM5NCwzNyBAQAogCQkJ
CUMyMUJGNzM3MjFDRDhBMDIwMDIyNzk3OSAvKiBXSExTTFBhcnNlci5jcHAgKi8sCiAJCQkJQzIx
QkY3MzgyMUNEOEEwMzAwMjI3OTc5IC8qIFdITFNMUGFyc2VyLmggKi8sCiAJCQkJQzIxQkY3M0Ey
MUNEOEQ3MDAwMjI3OTc5IC8qIFdITFNMUHJvZ3JhbS5oICovLAotIAkJCQlDMjg4QzcyNzIxQzhD
NkVGMDAyREY1Q0EgLyogV0hMU0xWaXNpdG9yLmggKi8sCi0gCQkJCUMyODhDNzI5MjFDOENBNTAw
MDJERjVDQSAvKiBXSExTTFByZXBhcmUuY3BwICovLAotIAkJCQlDMjg4QzcyQTIxQzhDQTUwMDAy
REY1Q0EgLyogV0hMU0xQcmVwYXJlLmggKi8sCi0gCQkJCUMyODhDNzJCMjFDOENDQzIwMDJERjVD
QSAvKiBXSExTTE5hbWVSZXNvbHZlci5jcHAgKi8sCi0gCQkJCUMyODhDNzJDMjFDOENDQzIwMDJE
RjVDQSAvKiBXSExTTE5hbWVSZXNvbHZlci5oICovLAorCQkJCUMyODhDNzI3MjFDOEM2RUYwMDJE
RjVDQSAvKiBXSExTTFZpc2l0b3IuaCAqLywKKwkJCQlDMkI1NTE3QzIxREI1N0VEMDA0QkUyNkUg
LyogV0hMU0xWaXNpdG9yLmNwcCAqLywKKwkJCQlDMjg4QzcyOTIxQzhDQTUwMDAyREY1Q0EgLyog
V0hMU0xQcmVwYXJlLmNwcCAqLywKKwkJCQlDMjg4QzcyQTIxQzhDQTUwMDAyREY1Q0EgLyogV0hM
U0xQcmVwYXJlLmggKi8sCisJCQkJQzI4OEM3MkMyMUM4Q0NDMjAwMkRGNUNBIC8qIFdITFNMTmFt
ZVJlc29sdmVyLmggKi8sCisJCQkJQzJCNTUxNzMyMURCNEJCRDAwNEJFMjZFIC8qIFdITFNMTmFt
ZVJlc29sdmVyLmNwcCAqLywKKwkJCQkxQzdDQzIxRDIxQ0RFMTk4MDBDMUZBMkMgLyogV0hMU0xO
YW1lQ29udGV4dC5oICovLAorCQkJCUMyQjU1MTc0MjFEQjUxMEYwMDRCRTI2RSAvKiBXSExTTE5h
bWVDb250ZXh0LmNwcCAqLywKKwkJCQkxQzMzMjc2RTIxQ0VGRjc0MDAwREM5RjIgLyogV0hMU0xS
ZXNvbHZlT3ZlcmxvYWRJbXBsLmggKi8sCisJCQkJQzI4NkVEOUUyMURCNUFCQTAwNzEzQzQwIC8q
IFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAgKi8sCisJCQkJMUMzMzI3NkYyMUNGMDEzMTAw
MERDOUYyIC8qIFdITFNMSW5mZXJUeXBlcy5oICovLAorCQkJCUMyQjU1MTc1MjFEQjUyNjYwMDRC
RTI2RSAvKiBXSExTTEluZmVyVHlwZXMuY3BwICovLAorCQkJCTFDMzMyNzc0MjFENUE3MDYwMDBE
QzlGMiAvKiBXSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmggKi8sCisJCQkJQzJCNTUxNzYyMURC
NTM5NDAwNEJFMjZFIC8qIFdITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwICovLAorCQkJCTFD
MzMyNzc1MjFENUIwRjgwMDBEQzlGMiAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgg
Ki8sCisJCQkJQzJCNTUxNzcyMURCNTQwRjAwNEJFMjZFIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMuY3BwICovLAorCQkJCTFDMzMyNzc2MjFENUMwN0UwMDBEQzlGMiAvKiBXSExTTFN5
bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCAqLywKKwkJCQlDMkI1NTE3ODIxREI1NTc1MDA0
QkUyNkUgLyogV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmNwcCAqLywKKwkJCQkx
QzMzMjc3NzIxRDVDQTgzMDAwREM5RjIgLyogV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5j
dGlvbnMuaCAqLywKKwkJCQlDMkI1NTE3OTIxREI1NThGMDA0QkUyNkUgLyogV0hMU0xTeW50aGVz
aXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwICovLAorCQkJCTFDMzMyNzc4MjFENUNFRDQwMDBE
QzlGMiAvKiBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmggKi8sCisJCQkJQzJC
NTUxN0EyMURCNTU5RTAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5n
dGguY3BwICovLAorCQkJCUMyMDEzMzQ3MjFEQjQzNjMwMEI2MEMyNyAvKiBXSExTTFN5bnRoZXNp
emVDb25zdHJ1Y3RvcnMuaCAqLywKKwkJCQlDMkI1NTE3QjIxREI1NUFGMDA0QkUyNkUgLyogV0hM
U0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcCAqLywKKwkJCQlDMjAxMzM0NDIxREFDMDk1MDBC
NjBDMjcgLyogV0hMU0xJbnRyaW5zaWNzLmggKi8sCisJCQkJQzIwMTMzNDYyMURBRUU2RTAwQjYw
QzI3IC8qIFdITFNMSW50cmluc2ljcy5jcHAgKi8sCisJCQkJQzJCNTUxNzAyMURCNEI0ODAwNEJF
MjZFIC8qIFdITFNMQ2hlY2tlci5jcHAgKi8sCisJCQkJQzJCNTUxNzEyMURCNEI0ODAwNEJFMjZF
IC8qIFdITFNMQ2hlY2tlci5oICovLAorCQkJCTFDQjY5QjJDMjFERDk2RUYwMDZFODQ2QSAvKiBX
SExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAgKi8sCisJCQkJMUNCNjlCMkQyMUREOTZFRjAw
NkU4NDZBIC8qIFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmggKi8sCisJCQkJMUNCNjlCM0Uy
MUUwMzVGMzAwNkU4NDZBIC8qIFdITFNMUmVzb2x2aW5nVHlwZS5oICovLAogCQkJKTsKIAkJCXBh
dGggPSBXSExTTDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNTM2Myw3ICsyNTQz
Miw2IEBACiAJCUMyMUJGNkYxMjFDRDg5OEQwMDIyNzk3OSAvKiBBU1QgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUMyMUJGNzBGMjFDRDg5Q0YwMDIyNzk3
OSAvKiBXSExTTEFub255bW91c1ZhcmlhYmxlRGVjbGFyYXRpb24uaCAqLywKIAkJCQlDMjFCRjcy
NTIxQ0Q4OUUyMDAyMjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCAqLywKIAkJCQlD
MjFCRjcwOTIxQ0Q4OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5cGUuaCAqLywKIAkJCQlDMjFC
RjczMDIxQ0Q4OUVEMDAyMjc5NzkgLyogV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oICovLApA
QCAtMjU0MDMsNyArMjU0NzEsNiBAQAogCQkJCUMyMUJGNzI0MjFDRDg5RTEwMDIyNzk3OSAvKiBX
SExTTE5vZGUuaCAqLywKIAkJCQlDMjFCRjcwNzIxQ0Q4OUM4MDAyMjc5NzkgLyogV0hMU0xOdWxs
TGl0ZXJhbC5oICovLAogCQkJCUMyMUJGNzIxMjFDRDg5REUwMDIyNzk3OSAvKiBXSExTTE51bVRo
cmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oICovLAotCQkJCUMyMUJGNzE3MjFDRDg5RDYwMDIyNzk3
OSAvKiBXSExTTFBhcmFtZXRlci5oICovLAogCQkJCUMyMUJGNzJGMjFDRDg5RUMwMDIyNzk3OSAv
KiBXSExTTFBvaW50ZXJUeXBlLmggKi8sCiAJCQkJQzIxQkY3MkUyMUNEODlFQTAwMjI3OTc5IC8q
IFdITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmggKi8sCiAJCQkJQzIxQkY3MEIyMUNEODlD
QzAwMjI3OTc5IC8qIFdITFNMUXVhbGlmaWVyLmggKi8sCkBAIC0yNTQzMSw3ICsyNTQ5OCwyNiBA
QAogCQkJCUMyMUJGNzE0MjFDRDg5RDMwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50LmggKi8sCiAJCQkJQzIxQkY3MTMyMUNEODlEMjAwMjI3OTc5IC8qIFdITFNM
VmFyaWFibGVSZWZlcmVuY2UuaCAqLywKIAkJCQlDMjFCRjcwNDIxQ0Q4OUM2MDAyMjc5NzkgLyog
V0hMU0xXaGlsZUxvb3AuaCAqLywKLSAJCQkJQzI4OEM3MkQyMUM5OTFEQTAwMkRGNUNBIC8qIFdI
TFNMVHlwZUFyZ3VtZW50LmNwcCAqLywKKwkJCQlDMjg4QzcyRDIxQzk5MURBMDAyREY1Q0EgLyog
V0hMU0xUeXBlQXJndW1lbnQuY3BwICovLAorCQkJCTFDMzMyNzZDMjFDRURBNDIwMDBEQzlGMiAv
KiBXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oICovLAorCQkJCTFDMzMyNzcxMjFDRjBC
RTEwMDBEQzlGMiAvKiBXSExTTE5hbWVkVHlwZS5oICovLAorCQkJCTFDMzMyNzcyMjFDRjBEMkUw
MDBEQzlGMiAvKiBXSExTTFVubmFtZWRUeXBlLmggKi8sCisJCQkJQzIxMzhBMTMyMURERUNEMzAw
RjUxNkJBIC8qIFdITFNMQnVpbHRJblNlbWFudGljLmNwcCAqLywKKwkJCQlDMjEzOEExNTIxRERF
Q0U5MDBGNTE2QkEgLyogV0hMU0xSZXNvdXJjZVNlbWFudGljLmNwcCAqLywKKwkJCQlDMjEzOEEx
NjIxRERFQ0ZCMDBGNTE2QkEgLyogV0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMu
Y3BwICovLAorCQkJCUMyMTM4QTE3MjFEREVEMEQwMEY1MTZCQSAvKiBXSExTTFN0YWdlSW5PdXRT
ZW1hbnRpYy5jcHAgKi8sCisJCQkJMUNCNjlCMzIyMURFRDQwQjAwNkU4NDZBIC8qIFdITFNMUmVz
b2x2YWJsZVR5cGUuaCAqLywKKwkJCQkxQ0I2OUIzNDIxREVENjNBMDA2RTg0NkEgLyogV0hMU0xG
bG9hdExpdGVyYWxUeXBlLmggKi8sCisJCQkJMUNCNjlCMzUyMURFRDY0OTAwNkU4NDZBIC8qIFdI
TFNMSW50ZWdlckxpdGVyYWxUeXBlLmggKi8sCisJCQkJMUNCNjlCMzYyMURFRDY1NzAwNkU4NDZB
IC8qIFdITFNMTnVsbExpdGVyYWxUeXBlLmggKi8sCisJCQkJMUNCNjlCMzcyMURFRDY2QjAwNkU4
NDZBIC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaCAqLywKKwkJCQkxQ0I2OUIz
ODIxREYwM0UxMDA2RTg0NkEgLyogV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcCAqLywKKwkJCQkx
Q0I2OUIzOTIxREYwM0YzMDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwICov
LAorCQkJCTFDQjY5QjNBMjFERjA0MDMwMDZFODQ2QSAvKiBXSExTTE51bGxMaXRlcmFsVHlwZS5j
cHAgKi8sCisJCQkJMUNCNjlCM0IyMURGMDQxRTAwNkU4NDZBIC8qIFdITFNMVW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGUuY3BwICovLAorCQkJCUMyMEY0RjY0MjFERkJFNUMwMDcwQzQ1QSAvKiBX
SExTTFR5cGVSZWZlcmVuY2UuY3BwICovLAorCQkJCUMyMEY0RjY2MjFERkYyMzYwMDcwQzQ1QSAv
KiBXSExTTEludGVnZXJMaXRlcmFsLmNwcCAqLywKKwkJCQlDMjBGNEY2NzIxREZGM0E3MDA3MEM0
NUEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gQVNUOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358719</attachid>
            <date>2019-01-09 11:44:06 -0800</date>
            <delta_ts>2019-01-11 13:37:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>721329</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiODMyNzBjMGUyYy4uNjg0NjNiMmRmM2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MDIgQEAKKzIwMTktMDEtMDIgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFw
cGxlLmNvbT4KKworICAgICAgICBbV0hMU0xdIEFkZCBhIFZpc2l0b3IgY2xhc3MKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MjgyNgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZXhwb3Nl
cyBhIGJ1bmNoIG9mIHRoZSBwcml2YXRlIG1lbWJlcnMgb2YgV0hMU0wncyBBU1Qgbm9kZXMgc28g
dGhhdCBWaXNpdG9yIGNhbiByZWN1cnNlIG9uIGNvbnN0aXR1ZW50IG5vZGVzLgorICAgICAgICBJ
dCBhbHNvIHdyaXRlcyB0aGUgcmVjdXJzaW9uIGluIFZpc2l0b3IuaC4gVGhpcyBpcyBhIHZpcnR1
YWwgYmFzZSBjbGFzcyB0aGF0IGdldHMgc3ViY2xhc3NlZCBmb3IgY29tcGlsZXIgcGFzc2VzLgor
CisgICAgICAgIEkndmUgc3BsaXQgdGhpcyBwYXJ0IGludG8gaXRzIG93biBwYXRjaCB0byBhaWQg
cmV2aWV3aW5nIG9mIHRoZSBjb21waWxlci4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVz
ZSBpdCdzIG5vdCBob29rZWQgdXAgeWV0LgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
QVNUOjpBcnJheVR5cGU6OnR5cGUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbjo6bGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbjo6cmlnaHQpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEJsb2NrLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
QVNUOjpCbG9jazo6QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6QmxvY2s6
OnN0YXRlbWVudHMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJv
b2xlYW5MaXRlcmFsLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QnJlYWsuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhw
cmVzc2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6Q2FsbEV4cHJlc3Npb246
OmFyZ3VtZW50cyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29t
bWFFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpDb21tYUV4cHJl
c3Npb246Omxpc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENv
bnN0YW50RXhwcmVzc2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6Q29uc3Rh
bnRFeHByZXNzaW9uOjpDb25zdGFudEV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkFTVDo6Q29uc3RhbnRFeHByZXNzaW9uOjp2aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29udGludWUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbjo6cG9pbnRlcik6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRG9XaGlsZUxvb3AuaDoKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpBU1Q6OkRvV2hpbGVMb29wOjpib2R5KToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpBU1Q6OkRvV2hpbGVMb29wOjpjb25kaXRpb25hbCk6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRl
bWVudDo6ZWZmZWN0ZnVsRXhwcmVzc2lvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb246OkVudW1lcmF0aW9uRGVmaW5pdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb246OnR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
OjplbnVtZXJhdGlvbk1lbWJlcnMpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RW51bWVyYXRpb25NZW1iZXI6OnZhbHVlKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFeHByZXNzaW9uLmg6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjppc0Fzc2lnbm1lbnRFeHByZXNzaW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246OmlzQm9v
bGVhbkxpdGVyYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVz
c2lvbjo6aXNDYWxsRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
QVNUOjpFeHByZXNzaW9uOjppc0NvbW1hRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjppc0RlcmVmZXJlbmNlRXhwcmVzc2lvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjppc0Zsb2F0TGl0
ZXJhbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpp
c0ludGVnZXJMaXRlcmFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4
cHJlc3Npb246OmlzTG9naWNhbEV4cHJlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6aXNMb2dpY2FsTm90RXhwcmVzc2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjppc01ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhw
cmVzc2lvbjo6aXNNYWtlUG9pbnRlckV4cHJlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6aXNOdWxsTGl0ZXJhbCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjppc1Byb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpp
c1JlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkFTVDo6RXhwcmVzc2lvbjo6aXNUZXJuYXJ5RXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjppc1Vuc2lnbmVkSW50ZWdlckxpdGVy
YWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RXhwcmVzc2lvbjo6aXNW
YXJpYWJsZVJlZmVyZW5jZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMRmFsbHRocm91Z2guaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGbG9hdExpdGVyYWwuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGb3JMb29wLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpGb3JMb29w
Ojppbml0aWFsaXphdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpGb3JMb29w
Ojpjb25kaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6Rm9yTG9vcDo6aW5j
cmVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZvckxvb3A6OmJvZHkpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVjbGFyYXRp
b24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb246
OmF0dHJpYnV0ZUJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb246OnR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbjo6cGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uOjpzZW1hbnRpYyk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWZpbml0aW9uLmg6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6QVNUOjpGdW5jdGlvbkRlZmluaXRpb246OmJsb2NrKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJZlN0YXRlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OkFTVDo6SWZTdGF0ZW1lbnQ6OmNvbmRpdGlvbmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpBU1Q6OklmU3RhdGVtZW50Ojpib2R5KToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpBU1Q6OklmU3RhdGVtZW50OjplbHNlQm9keSk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWwuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OkFTVDo6TG9naWNhbEV4cHJlc3Npb246OmxlZnQpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OkFTVDo6TG9naWNhbEV4cHJlc3Npb246OnJpZ2h0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb246Om9wZXJhbmQpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb246OmxWYWx1ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb246OmxWYWx1ZSk6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmg6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb246OnR5cGVBcmd1
bWVudHMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRl
cmFsLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUGFyYW1ldGVy
Lmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpQYXJhbWV0ZXI6OnR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6UGFyYW1ldGVyOjpzZW1hbnRpYyk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaDoKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
aDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bjo6YmFzZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6UmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6bFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246Om9sZFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246Om5ld1ZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246
Om5ld1ZhbHVlRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uOjpyZXN1bHRFeHByZXNzaW9uKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmg6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpSZWZlcmVuY2VUeXBlOjplbGVtZW50VHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpSZWZlcmVuY2VUeXBlOjplbGVtZW50VHlwZSBjb25zdCk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmg6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZXR1cm46OnZhbHVlKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpBU1Q6OlN0YXRlbWVudDo6aXNCbG9jayBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6QVNUOjpTdGF0ZW1lbnQ6OmlzQnJlYWsgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6U3RhdGVtZW50Ojppc0NvbnRpbnVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpBU1Q6OlN0YXRlbWVudDo6aXNEb1doaWxlTG9vcCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6QVNUOjpTdGF0ZW1lbnQ6OmlzRWZmZWN0ZnVsRXhwcmVzc2lvblN0
YXRlbWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpTdGF0ZW1lbnQ6
OmlzRmFsbHRocm91Z2ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6U3Rh
dGVtZW50Ojppc0Zvckxvb3AgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6
U3RhdGVtZW50Ojppc0lmU3RhdGVtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpBU1Q6OlN0YXRlbWVudDo6aXNSZXR1cm4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkFTVDo6U3RhdGVtZW50Ojppc1N3aXRjaENhc2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OkFTVDo6U3RhdGVtZW50Ojppc1N3aXRjaFN0YXRlbWVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpTdGF0ZW1lbnQ6OmlzVHJhcCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpTdGF0ZW1lbnQ6OmlzVmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6U3RhdGVt
ZW50Ojppc1doaWxlTG9vcCBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbjo6c3RydWN0dXJlRWxlbWVudHMpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlN0cnVjdHVyZUVsZW1lbnQ6OnR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6U3RydWN0dXJlRWxlbWVudDo6c2VtYW50aWMpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN3aXRjaENhc2UuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlN3aXRjaENhc2U6OnZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpBU1Q6OlN3aXRjaENhc2U6OmJsb2NrKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTd2l0Y2hTdGF0ZW1lbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpBU1Q6OlN3aXRjaFN0YXRlbWVudDo6dmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OkFTVDo6U3dpdGNoU3RhdGVtZW50Ojpzd2l0Y2hDYXNlcyk6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVGVybmFyeUV4cHJlc3Npb24uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlRlcm5hcnlFeHByZXNzaW9uOjpwcmVkaWNhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VGVybmFyeUV4cHJlc3Npb246OmJvZHlFeHBy
ZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlRlcm5hcnlFeHByZXNzaW9u
OjplbHNlRXhwcmVzc2lvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVHJhcC5oOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGUu
aDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlR5cGU6OmlzVHlwZVJlZmVyZW5jZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpUeXBlOjppc1BvaW50ZXJUeXBl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlR5cGU6OmlzQXJyYXlSZWZl
cmVuY2VUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlR5cGU6Omlz
QXJyYXlUeXBlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xUeXBlQXJndW1lbnQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xTd2l0Y2hDYXNlLmguCisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6QVNUOjpjbG9uZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VHlwZUFyZ3VtZW50Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VHlwZURlZmluaXRpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlR5cGVEZWZp
bml0aW9uOjp0eXBlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xU
eXBlUmVmZXJlbmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpUeXBlUmVmZXJl
bmNlOjp0eXBlQXJndW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlR5cGVS
ZWZlcmVuY2U6OmNsb25lVHlwZVJlZmVyZW5jZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb246OnR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbjo6c2VtYW50
aWMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbjo6
aW5pdGlhbGl6ZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZh
cmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudDo6dmFyaWFibGVEZWNsYXJhdGlvbnMp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlUmVmZXJl
bmNlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMV2hpbGVMb29w
Lmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpXaGlsZUxvb3A6OmNvbmRpdGlvbmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OldoaWxlTG9vcDo6Ym9keSk6CisgICAg
ICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgu
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZU5hbWVzSW5UeXBlcyk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZS5oLgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVHlwZUFyZ3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25EZWZpbml0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlQmxvY2tCb2R5KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCcmVhay5oLgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OnByZXBhcmUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlcGFyZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByb2dyYW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQcm9ncmFtOjp0
eXBlRGVmaW5pdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlByb2dyYW06OnN0cnVj
dHVyZURlZmluaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQcm9ncmFtOjplbnVt
ZXJhdGlvbkRlZmluaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQcm9ncmFtOjpm
dW5jdGlvbkRlZmluaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQcm9ncmFtOjpu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UHJv
Z3JhbTo6bmF0aXZlVHlwZURlY2xhcmF0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xWaXNpdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlZp
c2l0b3I6OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpWaXNpdG9yOjp2aXNpdFR5
cGUpOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKworMjAxOS0wMS0wMiAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4
ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gSW5jbHVkZSB0aGUgc3RhbmRhcmQg
bGlicmFyeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTkyOTk0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QSBzbWFsbCBzZWN0aW9uIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGlzIHByZXNlbnQgaW4gV0hM
U0xTdGFuZGFyZExpYnJhcnkudHh0LiBUaGlzIGdldHMgdHVybmVkIGludG8gYSBoZWFkZXIgZmls
ZSBjb250YWluaW5nCisgICAgICAgIGl0cyByYXcgZGF0YSBhdCBidWlsZCB0aW1lIGJ5IGludm9r
aW5nIG91ciB4eGQucGwgc2NyaXB0ICh3aGljaCBXZWJDb3JlIGFscmVhZHkgdXNlcyBmb3Igb3Ro
ZXIgcHVycG9zZXMpLiBUaGUgc3RhbmRhcmQKKyAgICAgICAgbGlicmFyeSBpcyBnZW5lcmF0ZWQg
YnkgcnVubmluZyBhIEphdmFTY3JpcHQgc2NyaXB0LCBidXQgY3VycmVudGx5IHRoZXJlIGlzIG5v
IHdheSB0byBpbnZva2UgSmF2YVNjcmlwdCBmcm9tIG91ciBidWlsZAorICAgICAgICBwcm9jZXNz
LCBzbyB0aGlzIHBhdGNoIGluY2x1ZGVzIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5J3MgcmF3IHRl
eHQgaW5zdGVhZC4gT25jZSB0aGUgcGFyc2VyIGlzIGZhc3Rlciwgd2UgY2FuIGluY2x1ZGUgdGhl
CisgICAgICAgIGVudGlyZSBzdGFuZGFyZCBsaWJyYXJ5LgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyBiZWNhdXNlIGl0IGlzbid0IGhvb2tlZCB1cCB5ZXQuCisKKyAgICAgICAgKiBEZXJpdmVkU291
cmNlcy5tYWtlOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRM
aWJyYXJ5LnR4dDogQWRkZWQuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorCisyMDE5LTAxLTAyICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBs
ZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBBZGQgYSBoYW5kd3JpdHRlbiBwYXJzZXIKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MjM1NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBwYXJzZXIgaXMg
YSBtZWNoYW5pY2FsIHJlcHJlc2VudGF0aW9uIG9mIFdITFNMJ3MgQU5UTFIgZ3JhbW1hciBhdAor
ICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vZ3B1d2ViL1dITFNML2Jsb2IvbWFzdGVyL1NwZWMv
V0hMU0wuZzQuIFRoZSBwYXJzZXIKKyAgICAgICAgdXNlcyBFeHBlY3RlZDw+IHRvIHJldHVybiBh
biBhcHByb3ByaWF0ZSBFcnJvciBzdHJpbmcgd2hlbiBwYXJzaW5nIGZhaWxzLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggZG9lc24ndCBpbmNsdWRlIHRoZSBBU1Qgbm9kZXMgdGhlbXNlbHZlcyAtIHRo
b3NlIGFyZSBpbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTkyOTkxLiBJIHNwbGl0IHVwIHRoZSBwYXRjaCB0bworICAgICAgICBhaWQgZWFzaWVyIHJl
dmlld2luZy4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGUgcGFyc2VyIGlzbid0
IGhvb2tlZCB1cCB5ZXQuCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBh
cnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpQYXJzZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2UpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OlBhcnNlcjo6ZmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpw
ZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnRyeVR5cGUpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6dHJ5VHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OlBhcnNlcjo6Y29uc3VtZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBh
cnNlcjo6Y29uc3VtZVR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpkaWdpdFZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjppbnRMaXRlcmFsVG9JbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OnVpbnRMaXRlcmFsVG9VaW50KToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpmbG9hdExpdGVyYWxUb0Zsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJz
ZXI6OmNvbnN1bWVJbnRlZ3JhbExpdGVyYWwpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBh
cnNlcjo6Y29uc3VtZU5vbk5lZ2F0aXZlSW50ZWdyYWxMaXRlcmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpyZWNvZ25pemVTaW1wbGVVbnNpZ25lZEludGVnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VDb25zdGFudEV4cHJlc3Npb24pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUeXBlQXJndW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUeXBlQXJndW1lbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeEFiYnJldmlhdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlQWRkcmVzc1NwYWNlVHlwZSk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZU5vbkFkZHJlc3NTcGFjZVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVHlwZURlZmluaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VCdWlsdEluU2VtYW50aWMpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VSZXNvdXJjZVNlbWFudGljKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlU3BlY2lhbGl6YXRpb25Db25zdGFudFNl
bWFudGljKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlU3RhZ2VJbk91
dFNlbWFudGljKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlU2VtYW50
aWMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VRdWFsaWZpZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlU3RydWN0dXJlRWxlbWVudCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVN0cnVjdHVyZURlZmluaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRl
ZmluaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VFbnVtZXJh
dGlvbk1lbWJlcik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZU5hdGl2
ZVR5cGVEZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJz
ZU51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
UGFyc2VyOjpwYXJzZUF0dHJpYnV0ZUJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQ
YXJzZXI6OnBhcnNlUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6
OnBhcnNlUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJz
ZUZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpw
YXJzZUVudHJ5UG9pbnRGdW5jdGlvbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpQYXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VPcGVyYXRvckZ1bmN0aW9uRGVjbGFyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlY2xhcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlTmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZUJs
b2NrKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlQmxvY2tCb2R5KToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlSWZTdGF0ZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VTd2l0Y2hTdGF0ZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VTd2l0Y2hDYXNlKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlRm9yTG9vcCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6UGFyc2VyOjpwYXJzZVdoaWxlTG9vcCk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6UGFyc2VyOjpwYXJzZURvV2hpbGVMb29wKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQ
YXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6UGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpQYXJzZXI6OnBhcnNlU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpQYXJzZXI6OnBhcnNlRWZmZWN0ZnVsRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6UGFyc2VyOjpwYXJzZUVmZmVjdGZ1bEFzc2lnbm1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VFZmZlY3RmdWxQcmVmaXgpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VFZmZlY3RmdWxTdWZmaXgpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VMaW1pdGVkU3VmZml4T3BlcmF0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VTdWZmaXhPcGVyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUZXJuYXJ5Q29uZGl0aW9uYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VBc3NpZ25tZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpQYXJzZXI6OnBhcnNlUG9zc2libGVUZXJuYXJ5Q29uZGl0aW9uYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VQb3NzaWJsZUxvZ2ljYWxCaW5hcnlPcGVy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VQb3NzaWJsZVJl
bGF0aW9uYWxCaW5hcnlPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNl
cjo6cGFyc2VQb3NzaWJsZVNoaWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6
OnBhcnNlUG9zc2libGVBZGQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFy
c2VQb3NzaWJsZU11bHRpcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBh
cnNlUG9zc2libGVQcmVmaXgpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFy
c2VQb3NzaWJsZVN1ZmZpeCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJz
ZUNhbGxFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNl
VGVybSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OkVycm9yOjpFcnJvcik6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpiYWNrdHJhY2tpbmdTY29wZSk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6UGFyc2VyOjpTdWZmaXhFeHByZXNzaW9uOjpTdWZmaXhFeHByZXNzaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OlN1ZmZpeEV4cHJlc3Npb246Om9wZXJh
dG9yIGJvb2wgY29uc3QpOgorCisyMDE5LTAxLTAyICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhm
aWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJbXBsZW1lbnQgcGFyc2VyIEFTVCBu
b2RlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTky
OTkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBjcmVhdGVzIGFsbCB0aGUgQVNUIG5vZGVzIHdoaWNoIHdpbGwgYmUgdGhlIHJlc3Vs
dCBvZiBydW5uaW5nIHRoZSBwYXJzZXIuCisgICAgICAgIFRoaXMgcGF0Y2ggdXNlZCB0byBiZSBh
IHBhcnQgb2YgdGhlICJjcmVhdGUgYSBXSExTTCBwYXJzZXIiIHBhdGNoIGJ1dCBJIHNwbGl0IHRo
ZW0KKyAgICAgICAgb3V0IGluIG9yZGVyIHRvIGFpZCByZXZpZXdpbmcuCisKKyAgICAgICAgVGhl
IGNsYXNzZXMgd2VyZSBtZWNoYW5pY2FsbHkgY3JlYXRlZCB0byBtYXRjaCB0aGUgcmVzdWx0IG9m
IHRoZSBwYXJzZXIuIFRoZXJlIGFyZQorICAgICAgICBub2RlcyBmb3IgdGhpbmdzIGxpa2UgRm9y
TG9vcHMsIExvZ2ljYWxOb3RFeHByZXNzaW9ucywgRGVyZWZlcmVuY2VFeHByZXNzaW9ucywKKyAg
ICAgICAgU3RydWN0dXJlRGVmaW5pdGlvbnMsIGFuZCB0aGluZ3MgbGlrZSB0aGF0LiBUaGUgY2xh
c3NlcyBkb24ndCBhY3R1YWxseSBoYXZlIGFueSBsb2dpYworICAgICAgICBpbiB0aGVtIC0gdGhl
eSBhcmUgY3VycmVudGx5IGp1c3QgY29udGFpbmVycyB0byBob2xkIHRoZSBzdHJ1Y3R1cmUgb2Yg
dGhlIHBhcnNlZAorICAgICAgICBwcm9ncmFtLiBTb21lIG9mIHRoZXNlIG5vZGVzIChsaWtlIGNv
bnN0ZXhwcnMpIGFyZSBqdXN0IFZhcmlhbnRzIG9mIHRoZSB2YXJpb3VzIHRoaW5ncworICAgICAg
ICB0aGV5IGNhbiBpbiB0aGUgZm9ybSBvZi4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVz
ZSB0aGUgcGFyc2VyIGRvZXNuJ3QgZXhpc3QgdG8gY3JlYXRlIHRoZSBuZXcgQVNUIG5vZGVzIHll
dC4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFub255bW91c1Zh
cmlhYmxlRGVjbGFyYXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNU
OjpBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0aW9uOjpBbm9ueW1vdXNWYXJpYWJsZURlY2xhcmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkFub255bW91c1ZhcmlhYmxlRGVj
bGFyYXRpb246Om9yaWdpbiBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlOjpBcnJheVJlZmVyZW5jZVR5cGUpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkFycmF5VHlwZTo6QXJyYXlUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkFycmF5VHlwZTo6bnVtRWxlbWVudHMgY29uc3Qp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFzc2lnbm1lbnRFeHBy
ZXNzaW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6QXNzaWdubWVu
dEV4cHJlc3Npb246OkFzc2lnbm1lbnRFeHByZXNzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpCYXNlRnVuY3Rpb25BdHRyaWJ1dGU6OkJhc2VGdW5j
dGlvbkF0dHJpYnV0ZSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
QmFzZVNlbWFudGljLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6QmFz
ZVNlbWFudGljOjpCYXNlU2VtYW50aWMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEJsb2NrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6
QmxvY2s6OkJsb2NrKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xC
b29sZWFuTGl0ZXJhbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkJv
b2xlYW5MaXRlcmFsOjpCb29sZWFuTGl0ZXJhbCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
QVNUOjpCb29sZWFuTGl0ZXJhbDo6dmFsdWUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEJyZWFrLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkFTVDo6QnJlYWs6OkJyZWFrKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6QVNUOjpCdWlsdEluU2VtYW50aWM6OkJ1aWx0SW5TZW1hbnRpYyk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpCdWlsdEluU2VtYW50aWM6OnZhcmlhYmxlIGNvbnN0KToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkNhbGxFeHByZXNzaW9uOjpDYWxsRXhw
cmVzc2lvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29tbWFF
eHByZXNzaW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6Q29tbWFF
eHByZXNzaW9uOjpDb21tYUV4cHJlc3Npb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbjo6Q29uc3RhbnRFeHByZXNzaW9uKToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
OjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSk6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29udGludWUuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpDb250aW51ZTo6Q29udGludWUpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lv
bjo6RGVyZWZlcmVuY2VFeHByZXNzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xEb1doaWxlTG9vcC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpBU1Q6OkRvV2hpbGVMb29wOjpEb1doaWxlTG9vcCk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRG90RXhwcmVzc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpBU1Q6OkRvdEV4cHJlc3Npb246OkRvdEV4cHJlc3Npb24pOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1l
bnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpFZmZlY3RmdWxFeHBy
ZXNzaW9uU3RhdGVtZW50OjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b246OkVudW1lcmF0aW9uRGVmaW5pdGlvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6QVNUOjpFbnVtZXJhdGlvbk1lbWJlcjo6RW51bWVyYXRpb25NZW1iZXIpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEV4cHJlc3Npb24uaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpFeHByZXNzaW9uOjpFeHByZXNzaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkV4cHJlc3Npb246Om9yaWdpbiBjb25zdCk6
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRmFsbHRocm91Z2guaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpGYWxsdGhyb3VnaDo6RmFsbHRo
cm91Z2gpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0
ZXJhbC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZsb2F0TGl0ZXJh
bDo6RmxvYXRMaXRlcmFsKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZsb2F0TGl0
ZXJhbDo6dmFsdWUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEZvckxvb3AuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpGb3JM
b29wOjpGb3JMb29wKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZvckxvb3A6On5G
b3JMb29wKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlv
bkF0dHJpYnV0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbjo6RnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uOjp0YWtlT3JpZ2lu
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb246OnRh
a2VBdHRyaWJ1dGVCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uOjp0YWtlRW50cnlQb2ludFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbjo6dGFrZVR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OkFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbjo6dGFrZU5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbjo6dGFrZVBhcmFtZXRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbjo6dGFr
ZVNlbWFudGljKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5j
dGlvbkRlZmluaXRpb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpG
dW5jdGlvbkRlZmluaXRpb246OkZ1bmN0aW9uRGVmaW5pdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6QVNUOjpGdW5jdGlvbkRlZmluaXRpb246OnJlc3RyaWN0ZWQgY29uc3QpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTElmU3RhdGVtZW50Lmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6SWZTdGF0ZW1lbnQ6OklmU3RhdGVtZW50
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJlc3Np
b24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpJbmRleEV4cHJlc3Np
b246OkluZGV4RXhwcmVzc2lvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMSW50ZWdlckxpdGVyYWwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
QVNUOjpJbnRlZ2VyTGl0ZXJhbDo6SW50ZWdlckxpdGVyYWwpOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkFTVDo6SW50ZWdlckxpdGVyYWw6OnZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uOjpMb2dpY2FsRXhw
cmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpMb2dpY2FsRXhwcmVzc2lv
bjo6dHlwZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
TG9naWNhbE5vdEV4cHJlc3Npb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbjo6TG9naWNhbE5vdEV4cHJlc3Npb24pOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24u
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpNYWtlUG9pbnRlckV4cHJl
c3Npb246Ok1ha2VQb2ludGVyRXhwcmVzc2lvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb246Ok5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjo6cmVzdHJpY3RlZCBjb25zdCk6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24pOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTE5vZGUuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTnVsbExpdGVyYWwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNU
OjpOdWxsTGl0ZXJhbDo6TnVsbExpdGVyYWwpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZTo6TnVt
VGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6
Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZTo6d2lkdGggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlOjpoZWlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0
cmlidXRlOjpkZXB0aCBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUGFyYW1ldGVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6
UGFyYW1ldGVyOjpQYXJhbWV0ZXIpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFBvaW50ZXJUeXBlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFT
VDo6UG9pbnRlclR5cGU6OlBvaW50ZXJUeXBlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb246OlByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMUXVhbGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uOjpSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlX
cml0ZUV4cHJlc3Npb246OnNldE5ld1ZhbHVlRXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uOjpzZXRSZXN1bHRFeHByZXNz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb246Om9sZFZhcmlhYmxlUmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246Om5ld1ZhcmlhYmxlUmVmZXJlbmNlKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6UmVmZXJlbmNlVHlwZTo6UmVmZXJl
bmNlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZWZlcmVuY2VUeXBlOjpv
cmlnaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6UmVmZXJlbmNlVHlw
ZTo6YWRkcmVzc1NwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJl
ZmVyZW5jZVR5cGU6OmVsZW1lbnRUeXBlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xSZXNvdXJjZVNlbWFudGljLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6UmVzb3VyY2VTZW1hbnRpYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZXNvdXJjZVNlbWFudGljOjptb2RlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlc291cmNlU2VtYW50aWM6OmluZGV4
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlJlc291cmNlU2VtYW50aWM6
OnNwYWNlIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xS
ZXR1cm4uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpSZXR1cm46OlJl
dHVybik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU2VtYW50aWMu
aDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lh
bGl6YXRpb25Db25zdGFudFNlbWFudGljLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljOjpTcGVjaWFsaXphdGlvbkNv
bnN0YW50U2VtYW50aWMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFN0YWdlSW5PdXRTZW1hbnRpYy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpB
U1Q6OlN0YWdlSW5PdXRTZW1hbnRpYzo6U3RhZ2VJbk91dFNlbWFudGljKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYzo6aW5kZXggY29uc3QpOgorICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlN0YXRlbWVudDo6U3RhdGVtZW50KToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9u
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6U3RydWN0dXJlRGVmaW5p
dGlvbjo6U3RydWN0dXJlRGVmaW5pdGlvbik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3RydWN0dXJlRWxlbWVudC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpBU1Q6OlN0cnVjdHVyZUVsZW1lbnQ6OlN0cnVjdHVyZUVsZW1lbnQpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN3aXRjaENhc2UuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpTd2l0Y2hDYXNlOjpTd2l0Y2hDYXNlKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTd2l0Y2hTdGF0ZW1lbnQuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpTd2l0Y2hTdGF0ZW1lbnQ6OlN3
aXRjaFN0YXRlbWVudCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
VGVybmFyeUV4cHJlc3Npb24uaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNU
OjpUZXJuYXJ5RXhwcmVzc2lvbjo6VGVybmFyeUV4cHJlc3Npb24pOgorICAgICAgICAqIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFRyYXAuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6QVNUOjpUcmFwOjpUcmFwKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xUeXBlLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFR5cGVBcmd1bWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpBU1Q6OlR5cGVEZWZpbml0aW9uOjpUeXBlRGVmaW5pdGlvbik6CisgICAgICAg
ICogTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlR5cGVSZWZlcmVuY2U6OlR5cGVSZWZlcmVu
Y2UpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50
ZWdlckxpdGVyYWwuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNUOjpVbnNp
Z25lZEludGVnZXJMaXRlcmFsOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWw6OnZhbHVlIGNvbnN0KToK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYWx1ZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlZhbHVlOjpWYWx1ZSk6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb246OlZh
cmlhYmxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VmFyaWFi
bGVEZWNsYXJhdGlvbjo6b3JpZ2luIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50
OjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk6CisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVuY2UuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpWYXJpYWJsZVJlZmVyZW5jZTo6VmFyaWFibGVSZWZlcmVuY2Up
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkFTVDo6VmFyaWFibGVSZWZlcmVuY2U6OndyYXAp
OgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFdoaWxlTG9vcC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpBU1Q6OldoaWxlTG9vcDo6V2hpbGVMb29w
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHA6IEFkZGVk
LgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmg6IEFkZGVkLgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKwogMjAxOS0wMS0wMiAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFw
cGxlLmNvbT4KIAogICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdXNpbmcgdGhlIGN1cnJlbnQgdGV4
dCBzZWxlY3Rpb24gYXMgdGhlIGZpbmQgc3RyaW5nIG9uIGlPUwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKaW5kZXggZTk0OGI3MDJmMzcuLmY1MTEzNzk0NzI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UKQEAgLTE1OTgsNiArMTU5OCwxNSBAQCAkKEdFTkVSQVRFX1NFVFRJTkdT
X1BBVFRFUk5TKSA6ICQoV2ViQ29yZSkvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzLnJiICQoR0VO
RVJBVAogCiAjIC0tLS0tLS0tCiAKKyMgV0hMU0wgU3RhbmRhcmQgTGlicmFyeQorCithbGwgOiBX
SExTTFN0YW5kYXJkTGlicmFyeS5jcHAKKworV0hMU0xTdGFuZGFyZExpYnJhcnkuY3BwIDogJChK
YXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUikveHhkLnBsICQoV2ViQ29yZSkvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0CisJJChQRVJMKSAkKEphdmFTY3JpcHRD
b3JlX1NDUklQVFNfRElSKS94eGQucGwgV0hMU0xTdGFuZGFyZExpYnJhcnkgJChXZWJDb3JlKS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQgV0hMU0xTdGFuZGFy
ZExpYnJhcnkuaAorCisjIC0tLS0tLS0tCisKICMgQ29tbW9uIGdlbmVyYXRvciB0aGluZ3MKIAog
Q09NTU9OX0JJTkRJTkdTX1NDUklQVFMgPSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5UmVmZXJlbmNlVHlw
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMWQ2OGYxMjc2ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTExl
eGVyLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFz
cyBBcnJheVJlZmVyZW5jZVR5cGUgOiBwdWJsaWMgUmVmZXJlbmNlVHlwZSB7CitwdWJsaWM6Cisg
ICAgQXJyYXlSZWZlcmVuY2VUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgQWRkcmVzc1NwYWNl
IGFkZHJlc3NTcGFjZSwgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRUeXBlKQorICAg
ICAgICA6IFJlZmVyZW5jZVR5cGUoV1RGTW92ZShvcmlnaW4pLCBhZGRyZXNzU3BhY2UsIFdURk1v
dmUoZWxlbWVudFR5cGUpKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5BcnJheVJlZmVy
ZW5jZVR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBBcnJheVJlZmVyZW5jZVR5cGUoY29uc3QgQXJy
YXlSZWZlcmVuY2VUeXBlJikgPSBkZWxldGU7CisgICAgQXJyYXlSZWZlcmVuY2VUeXBlKEFycmF5
UmVmZXJlbmNlVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzQXJyYXlSZWZlcmVuY2VU
eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgVW5pcXVlUmVmPFVu
bmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4g
bWFrZVVuaXF1ZVJlZjxBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihvcmlnaW4oKSks
IGFkZHJlc3NTcGFjZSgpLCBlbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgIH0KKworcHJpdmF0
ZToKK307CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoQXJyYXlSZWZlcmVuY2VUeXBlLCBpc0FycmF5UmVm
ZXJlbmNlVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5VHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjQyMmZkM2M3MTNhCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmgKQEAg
LTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkdQVSkKKworI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRU
eXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvVW5p
cXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNz
IEFycmF5VHlwZSA6IHB1YmxpYyBVbm5hbWVkVHlwZSB7CitwdWJsaWM6CisgICAgQXJyYXlUeXBl
KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiYmIGVsZW1lbnRU
eXBlLCB1bnNpZ25lZCBudW1FbGVtZW50cykKKyAgICAgICAgOiBVbm5hbWVkVHlwZShXVEZNb3Zl
KG9yaWdpbikpCisgICAgICAgICwgbV9lbGVtZW50VHlwZShXVEZNb3ZlKGVsZW1lbnRUeXBlKSkK
KyAgICAgICAgLCBtX251bUVsZW1lbnRzKG51bUVsZW1lbnRzKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIH5BcnJheVR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBBcnJheVR5cGUoY29uc3Qg
QXJyYXlUeXBlJikgPSBkZWxldGU7CisgICAgQXJyYXlUeXBlKEFycmF5VHlwZSYmKSA9IGRlZmF1
bHQ7CisKKyAgICBib29sIGlzQXJyYXlUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQorCisgICAgY29uc3QgVW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBVbm5hbWVkVHlwZSY+KG1fZWxlbWVudFR5cGUpOyB9CisgICAgVW5uYW1l
ZFR5cGUmIHR5cGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxVbm5hbWVkVHlwZSY+KG1fZWxlbWVu
dFR5cGUpOyB9CisgICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX251
bUVsZW1lbnRzOyB9CisKKyAgICBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEFycmF5VHlwZT4o
TGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgbV9lbGVtZW50VHlwZS0+Y2xvbmUoKSwgbV9udW1FbGVt
ZW50cyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gbV9l
bGVtZW50VHlwZTsKKyAgICB1bnNpZ25lZCBtX251bUVsZW1lbnRzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1VOTkFN
RURfVFlQRShBcnJheVR5cGUsIGlzQXJyYXlUeXBlKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4
cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TEFzc2lnbm1lbnRFeHByZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjlkZDA3ZjhjODI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaApAQCAtMCww
ICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BV
KQorCisjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xMZXhlci5o
IgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgQXNzaWdubWVudEV4
cHJlc3Npb24gOiBwdWJsaWMgRXhwcmVzc2lvbiB7CitwdWJsaWM6CisgICAgQXNzaWdubWVudEV4
cHJlc3Npb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBs
ZWZ0LCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiByaWdodCkKKyAgICAgICAgOiBFeHByZXNzaW9u
KFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgLCBtX2xlZnQoV1RGTW92ZShsZWZ0KSkKKyAgICAg
ICAgLCBtX3JpZ2h0KFdURk1vdmUocmlnaHQpKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IH5Bc3NpZ25tZW50RXhwcmVzc2lvbigpID0gZGVmYXVsdDsKKworICAgIEFzc2lnbm1lbnRFeHBy
ZXNzaW9uKGNvbnN0IEFzc2lnbm1lbnRFeHByZXNzaW9uJikgPSBkZWxldGU7CisgICAgQXNzaWdu
bWVudEV4cHJlc3Npb24oQXNzaWdubWVudEV4cHJlc3Npb24mJikgPSBkZWZhdWx0OworCisgICAg
Ym9vbCBpc0Fzc2lnbm1lbnRFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQorCisgICAgRXhwcmVzc2lvbiYgbGVmdCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEV4cHJl
c3Npb24mPihtX2xlZnQpOyB9CisgICAgRXhwcmVzc2lvbiYgcmlnaHQoKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxFeHByZXNzaW9uJj4obV9yaWdodCk7IH0KKworcHJpdmF0ZToKKyAgICBVbmlxdWVS
ZWY8RXhwcmVzc2lvbj4gbV9sZWZ0OworICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX3JpZ2h0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX1dITFNMX0VYUFJFU1NJT04oQXNzaWdubWVudEV4cHJlc3Npb24sIGlzQXNzaWdubWVu
dEV4cHJlc3Npb24oKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJhc2VGdW5jdGlvbkF0dHJp
YnV0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hNmEwNjEzYjJl
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEJhc2VGdW5jdGlvbkF0dHJpYnV0ZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJX
SExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEJhc2VG
dW5jdGlvbkF0dHJpYnV0ZSA6IHB1YmxpYyBOb2RlIHsKK3B1YmxpYzoKKyAgICBCYXNlRnVuY3Rp
b25BdHRyaWJ1dGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQorICAgICAgICA6IG1fb3JpZ2luKFdU
Rk1vdmUob3JpZ2luKSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+QmFzZUZ1bmN0aW9u
QXR0cmlidXRlKCkgPSBkZWZhdWx0OworCisgICAgQmFzZUZ1bmN0aW9uQXR0cmlidXRlKGNvbnN0
IEJhc2VGdW5jdGlvbkF0dHJpYnV0ZSYpID0gZGVsZXRlOworICAgIEJhc2VGdW5jdGlvbkF0dHJp
YnV0ZShCYXNlRnVuY3Rpb25BdHRyaWJ1dGUmJikgPSBkZWZhdWx0OworCitwcml2YXRlOgorICAg
IExleGVyOjpUb2tlbiBtX29yaWdpbjsKK307CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xCYXNlU2VtYW50aWMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEJhc2VTZW1hbnRpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5jYjQzNjUzNzM4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJhc2VTZW1hbnRpYy5oCkBAIC0w
LDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJH
UFUpCisKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgSW50cmlu
c2ljczsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEZ1bmN0aW9uRGVmaW5pdGlvbjsKK2Ns
YXNzIFVubmFtZWRUeXBlOworCitjbGFzcyBCYXNlU2VtYW50aWMgOiBwdWJsaWMgTm9kZSB7Citw
dWJsaWM6CisgICAgQmFzZVNlbWFudGljKExleGVyOjpUb2tlbiYmIG9yaWdpbikKKyAgICAgICAg
OiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
fkJhc2VTZW1hbnRpYygpID0gZGVmYXVsdDsKKworICAgIEJhc2VTZW1hbnRpYyhjb25zdCBCYXNl
U2VtYW50aWMmKSA9IGRlbGV0ZTsKKyAgICBCYXNlU2VtYW50aWMoQmFzZVNlbWFudGljJiYpID0g
ZGVmYXVsdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VwdGFibGVUeXBlKGNvbnN0IFVubmFt
ZWRUeXBlJiwgY29uc3QgSW50cmluc2ljcyYpIGNvbnN0ID0gMDsKKworICAgIGVudW0gY2xhc3Mg
U2hhZGVySXRlbURpcmVjdGlvbiA6IHVpbnQ4X3QgeworICAgICAgICBJbnB1dCwKKyAgICAgICAg
T3V0cHV0CisgICAgfTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRl
bURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24m
KSBjb25zdCA9IDA7CisKK3ByaXZhdGU6CisgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOworfTsK
KworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJsb2NrLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCbG9jay5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42YzQzNmNkMDc0YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJsb2Nr
LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTFN0
YXRlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgQmxvY2sg
OiBwdWJsaWMgU3RhdGVtZW50IHsKK3B1YmxpYzoKKyAgICBCbG9jayhMZXhlcjo6VG9rZW4mJiBv
cmlnaW4sIFN0YXRlbWVudHMmJiBzdGF0ZW1lbnRzKQorICAgICAgICA6IFN0YXRlbWVudChXVEZN
b3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9zdGF0ZW1lbnRzKFdURk1vdmUoc3RhdGVtZW50cykp
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkJsb2NrKCkgPSBkZWZhdWx0OworCisgICAg
QmxvY2soY29uc3QgQmxvY2smKSA9IGRlbGV0ZTsKKyAgICBCbG9jayhCbG9jayYmKSA9IGRlZmF1
bHQ7CisKKyAgICBTdGF0ZW1lbnRzJiBzdGF0ZW1lbnRzKCkgeyByZXR1cm4gbV9zdGF0ZW1lbnRz
OyB9CisgICAgCisgICAgYm9vbCBpc0Jsb2NrKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQorCitwcml2YXRlOgorICAgIFN0YXRlbWVudHMgbV9zdGF0ZW1lbnRzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNM
X1NUQVRFTUVOVChCbG9jaywgaXNCbG9jaygpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJvb2xlYW5MaXRlcmFsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCb29sZWFuTGl0
ZXJhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYjI1YzhiNWQ3
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEJvb2xlYW5MaXRlcmFsLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMRXhw
cmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgQm9vbGVh
bkxpdGVyYWwgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CitwdWJsaWM6CisgICAgQm9vbGVhbkxpdGVy
YWwoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBib29sIHZhbHVlKQorICAgICAgICA6IEV4cHJlc3Np
b24oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgfkJvb2xlYW5MaXRlcmFsKCkgPSBkZWZhdWx0OworCisgICAgQm9v
bGVhbkxpdGVyYWwoY29uc3QgQm9vbGVhbkxpdGVyYWwmKSA9IGRlbGV0ZTsKKyAgICBCb29sZWFu
TGl0ZXJhbChCb29sZWFuTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBCb29sZWFuTGl0ZXJh
bCYgb3BlcmF0b3I9KGNvbnN0IEJvb2xlYW5MaXRlcmFsJikgPSBkZWxldGU7CisgICAgQm9vbGVh
bkxpdGVyYWwmIG9wZXJhdG9yPShCb29sZWFuTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBi
b29sIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgYm9vbCBpc0Jvb2xl
YW5MaXRlcmFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgQm9vbGVh
bkxpdGVyYWwgY2xvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEJvb2xlYW5MaXRl
cmFsKExleGVyOjpUb2tlbihvcmlnaW4oKSksIG1fdmFsdWUpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBib29sIG1fdmFsdWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRVhQUkVTU0lPTihCb29sZWFuTGl0ZXJhbCwg
aXNCb29sZWFuTGl0ZXJhbCgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJyZWFrLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCcmVhay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi41ZmZmZTg2OThhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJyZWFrLmgKQEAgLTAsMCAr
MSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBB
U1QgeworCitjbGFzcyBCcmVhayA6IHB1YmxpYyBTdGF0ZW1lbnQgeworcHVibGljOgorICAgIEJy
ZWFrKExleGVyOjpUb2tlbiYmIG9yaWdpbikKKyAgICAgICAgOiBTdGF0ZW1lbnQoV1RGTW92ZShv
cmlnaW4pKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5CcmVhaygpID0gZGVmYXVsdDsK
KworICAgIEJyZWFrKGNvbnN0IEJyZWFrJikgPSBkZWxldGU7CisgICAgQnJlYWsoQnJlYWsmJikg
PSBkZWZhdWx0OworICAgIAorICAgIGJvb2wgaXNCcmVhaygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KKworcHJpdmF0ZToKK307CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisK
K30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9TVEFURU1FTlQoQnJlYWssIGlzQnJl
YWsoKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjdmNGRhNGY5NTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdElu
U2VtYW50aWMuY3BwCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEJ1aWx0SW5TZW1h
bnRpYy5oIgorCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRl
ICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKyNpbmNs
dWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworYm9vbCBCdWlsdEluU2VtYW50aWM6
OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgVW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBJ
bnRyaW5zaWNzJiBpbnRyaW5zaWNzKSBjb25zdAoreworICAgIHN3aXRjaCAobV92YXJpYWJsZSkg
eworICAgIGNhc2UgVmFyaWFibGU6OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgcmV0dXJuIG1hdGNo
ZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJs
ZTo6U1ZWZXJ0ZXhJRDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJp
bnNpY3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6UFNpemU6CisgICAgICAgIHJl
dHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0VHlwZSgpKTsKKyAgICBj
YXNlIFZhcmlhYmxlOjpTVlBvc2l0aW9uOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVk
VHlwZSwgaW50cmluc2ljcy5mbG9hdDRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWSXNG
cm9udEZhY2U6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNz
LmJvb2xUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWU2FtcGxlSW5kZXg6CisgICAgICAg
IHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAg
IGNhc2UgVmFyaWFibGU6OlNWSW5uZXJDb3ZlcmFnZToKKyAgICAgICAgcmV0dXJuIG1hdGNoZXMo
dW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWludFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6
U1ZUYXJnZXQ6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNz
LmZsb2F0NFR5cGUoKSk7CisgICAgY2FzZSBWYXJpYWJsZTo6U1ZEZXB0aDoKKyAgICAgICAgcmV0
dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MuZmxvYXRUeXBlKCkpOworICAgIGNh
c2UgVmFyaWFibGU6OlNWQ292ZXJhZ2U6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRU
eXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOworICAgIGNhc2UgVmFyaWFibGU6OlNWRGlzcGF0
Y2hUaHJlYWRJRDoKKyAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNp
Y3MuZmxvYXQzVHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpTVkdyb3VwSUQ6CisgICAgICAg
IHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLmZsb2F0M1R5cGUoKSk7Cisg
ICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cEluZGV4OgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1
bm5hbWVkVHlwZSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICBjYXNlIFZhcmlhYmxlOjpT
Vkdyb3VwVGhyZWFkSUQ6CisgICAgICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRy
aW5zaWNzLmZsb2F0M1R5cGUoKSk7CisgICAgfQorfQorCitib29sIEJ1aWx0SW5TZW1hbnRpYzo6
aXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0aW9uIGRp
cmVjdGlvbiwgY29uc3QgRnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIGNv
bnN0Cit7CisgICAgc3dpdGNoICgqZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkp
IHsKKyAgICBjYXNlIEZ1bmN0aW9uRGVjbGFyYXRpb246OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6
CisgICAgICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgICAgIGNhc2UgU2hhZGVySXRlbURp
cmVjdGlvbjo6SW5wdXQ6CisgICAgICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgVmFyaWFibGU6OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgICAgIGNhc2UgVmFy
aWFibGU6OlNWVmVydGV4SUQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgY2FzZSBTaGFkZXJJdGVtRGlyZWN0aW9uOjpPdXRwdXQ6CisgICAgICAgICAg
ICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6OlBTaXpl
OgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZQb3NpdGlvbjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgY2FzZSBGdW5jdGlvbkRl
Y2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6RnJhZ21lbnQ6CisgICAgICAgIHN3aXRjaCAoZGly
ZWN0aW9uKSB7CisgICAgICAgIGNhc2UgU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKG1fdmFyaWFibGUpIHsKKyAgICAgICAgICAgIGNhc2UgVmFyaWFibGU6
OlNWSXNGcm9udEZhY2U6CisgICAgICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVlBvc2l0aW9uOgor
ICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZTYW1wbGVJbmRleDoKKyAgICAgICAgICAgIGNh
c2UgVmFyaWFibGU6OlNWSW5uZXJDb3ZlcmFnZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICBjYXNlIFNoYWRlckl0ZW1EaXJlY3Rpb246Ok91dHB1dDoK
KyAgICAgICAgICAgIHN3aXRjaCAobV92YXJpYWJsZSkgeworICAgICAgICAgICAgY2FzZSBWYXJp
YWJsZTo6U1ZUYXJnZXQ6CisgICAgICAgICAgICBjYXNlIFZhcmlhYmxlOjpTVkRlcHRoOgorICAg
ICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZDb3ZlcmFnZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgY2FzZSBGdW5jdGlvbkRlY2xhcmF0
aW9uOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZToKKyAgICAgICAgc3dpdGNoIChkaXJlY3Rpb24p
IHsKKyAgICAgICAgY2FzZSBTaGFkZXJJdGVtRGlyZWN0aW9uOjpJbnB1dDoKKyAgICAgICAgICAg
IHN3aXRjaCAobV92YXJpYWJsZSkgeworICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZEaXNw
YXRjaFRocmVhZElEOgorICAgICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cElEOgorICAg
ICAgICAgICAgY2FzZSBWYXJpYWJsZTo6U1ZHcm91cEluZGV4OgorICAgICAgICAgICAgY2FzZSBW
YXJpYWJsZTo6U1ZHcm91cFRocmVhZElEOgorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIGNhc2UgU2hhZGVySXRlbURpcmVjdGlvbjo6T3V0cHV0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vIG5hbWVz
cGFjZSBBU1QKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQnVpbHRJblNlbWFudGljLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xCdWlsdEluU2VtYW50aWMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTNlZTEzOWViMTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xCdWlsdEluU2VtYW50aWMuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xCYXNlU2VtYW50
aWMuaCIKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNl
IEFTVCB7CisKK2NsYXNzIEJ1aWx0SW5TZW1hbnRpYyA6IHB1YmxpYyBCYXNlU2VtYW50aWMgewor
cHVibGljOgorICAgIGVudW0gY2xhc3MgVmFyaWFibGUgOiB1aW50OF90IHsKKyAgICAgICAgU1ZJ
bnN0YW5jZUlELAorICAgICAgICBTVlZlcnRleElELAorICAgICAgICBQU2l6ZSwKKyAgICAgICAg
U1ZQb3NpdGlvbiwKKyAgICAgICAgU1ZJc0Zyb250RmFjZSwKKyAgICAgICAgU1ZTYW1wbGVJbmRl
eCwKKyAgICAgICAgU1ZJbm5lckNvdmVyYWdlLAorICAgICAgICBTVlRhcmdldCwKKyAgICAgICAg
U1ZEZXB0aCwKKyAgICAgICAgU1ZDb3ZlcmFnZSwKKyAgICAgICAgU1ZEaXNwYXRjaFRocmVhZElE
LAorICAgICAgICBTVkdyb3VwSUQsCisgICAgICAgIFNWR3JvdXBJbmRleCwKKyAgICAgICAgU1ZH
cm91cFRocmVhZElECisgICAgfTsKKworICAgIEJ1aWx0SW5TZW1hbnRpYyhMZXhlcjo6VG9rZW4m
JiBvcmlnaW4sIFZhcmlhYmxlIHZhcmlhYmxlLCBPcHRpb25hbDx1bnNpZ25lZD4mJiB0YXJnZXRJ
bmRleCA9IFdURjo6bnVsbG9wdCkKKyAgICAgICAgOiBCYXNlU2VtYW50aWMoV1RGTW92ZShvcmln
aW4pKQorICAgICAgICAsIG1fdmFyaWFibGUodmFyaWFibGUpCisgICAgICAgICwgbV90YXJnZXRJ
bmRleChXVEZNb3ZlKHRhcmdldEluZGV4KSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+
QnVpbHRJblNlbWFudGljKCkgPSBkZWZhdWx0OworCisgICAgQnVpbHRJblNlbWFudGljKGNvbnN0
IEJ1aWx0SW5TZW1hbnRpYyYpID0gZGVsZXRlOworICAgIEJ1aWx0SW5TZW1hbnRpYyhCdWlsdElu
U2VtYW50aWMmJikgPSBkZWZhdWx0OworCisgICAgVmFyaWFibGUgdmFyaWFibGUoKSBjb25zdCB7
IHJldHVybiBtX3ZhcmlhYmxlOyB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQnVpbHRJ
blNlbWFudGljJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhcmlhYmxl
ID09IG90aGVyLm1fdmFyaWFibGUgJiYgbV90YXJnZXRJbmRleCA9PSBvdGhlci5tX3RhcmdldElu
ZGV4OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBCdWlsdEluU2VtYW50aWMm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgIH0KKworICAgIGJvb2wgaXNBY2NlcHRhYmxlVHlwZShjb25zdCBVbm5hbWVkVHlwZSYsIGNv
bnN0IEludHJpbnNpY3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQWNjZXB0YWJsZUZv
clNoYWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29uc3QgRnVuY3Rpb25E
ZWZpbml0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgVmFyaWFibGUgbV92
YXJpYWJsZTsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV90YXJnZXRJbmRleDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ2FsbEV4cHJlc3Np
b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjM1YmVkNzA4MTcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xDYWxsRXhwcmVzc2lvbi5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xFeHBy
ZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xh
c3MgTmFtZWRUeXBlOworCitjbGFzcyBDYWxsRXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9u
IHsKK3B1YmxpYzoKKyAgICBDYWxsRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0
cmluZyYmIG5hbWUsIFZlY3RvcjxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+JiYgYXJndW1lbnRzKQor
ICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fbmFtZShX
VEZNb3ZlKG5hbWUpKQorICAgICAgICAsIG1fYXJndW1lbnRzKFdURk1vdmUoYXJndW1lbnRzKSkK
KyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+Q2FsbEV4cHJlc3Npb24oKSA9IGRlZmF1bHQ7
CisKKyAgICBDYWxsRXhwcmVzc2lvbihjb25zdCBDYWxsRXhwcmVzc2lvbiYpID0gZGVsZXRlOwor
ICAgIENhbGxFeHByZXNzaW9uKENhbGxFeHByZXNzaW9uJiYpID0gZGVmYXVsdDsKKworICAgIGJv
b2wgaXNDYWxsRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIFZlY3RvcjxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+JiBhcmd1bWVudHMoKSB7IHJldHVybiBt
X2FyZ3VtZW50czsgfQorCisgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisK
KyAgICB2b2lkIHNldENhc3REYXRhKE5hbWVkVHlwZSYgbmFtZWRUeXBlKQorICAgIHsKKyAgICAg
ICAgbV9jYXN0UmV0dXJuVHlwZSA9IHsgbmFtZWRUeXBlIH07CisgICAgfQorCisgICAgYm9vbCBp
c0Nhc3QoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtX2Nhc3RSZXR1cm5UeXBlKTsgfQor
ICAgIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8TmFtZWRUeXBlPj4mIGNhc3RSZXR1
cm5UeXBlKCkgeyByZXR1cm4gbV9jYXN0UmV0dXJuVHlwZTsgfQorICAgIGJvb2wgaGFzT3Zlcmxv
YWRzKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obV9vdmVybG9hZHMpOyB9Cisg
ICAgT3B0aW9uYWw8VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJh
dGlvbj4sIDE+PiYgb3ZlcmxvYWRzKCkgeyByZXR1cm4gbV9vdmVybG9hZHM7IH0KKyAgICB2b2lk
IHNldE92ZXJsb2Fkcyhjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlv
bkRlY2xhcmF0aW9uPiwgMT4mIG92ZXJsb2FkcykKKyAgICB7CisgICAgICAgIGFzc2VydCghaGFz
T3ZlcmxvYWRzKCkpOworICAgICAgICBtX292ZXJsb2FkcyA9IG92ZXJsb2FkczsKKyAgICB9CisK
KyAgICB2b2lkIHNldEZ1bmN0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24mIGZ1bmN0aW9uRGVjbGFy
YXRpb24pCisgICAgeworICAgICAgICBhc3NlcnQoIW1fZnVuY3Rpb24pOworICAgICAgICBtX2Z1
bmN0aW9uID0gJmZ1bmN0aW9uRGVjbGFyYXRpb247CisgICAgfQorCitwcml2YXRlOgorICAgIFN0
cmluZyBtX25hbWU7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9hcmd1bWVu
dHM7CisgICAgT3B0aW9uYWw8VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25E
ZWNsYXJhdGlvbj4sIDE+PiBtX292ZXJsb2FkczsKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKiBt
X2Z1bmN0aW9uIHsgbnVsbHB0ciB9OworICAgIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8TmFtZWRUeXBlPj4gbV9jYXN0UmV0dXJuVHlwZSB7IFdURjo6bnVsbG9wdCB9OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dI
TFNMX0VYUFJFU1NJT04oQ2FsbEV4cHJlc3Npb24sIGlzQ2FsbEV4cHJlc3Npb24oKSkKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xDb21tYUV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTENvbW1hRXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwLi5lMzIyZjUzZTczNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbW1hRXhwcmVzc2lvbi5oCkBAIC0w
LDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJH
UFUpCisKKyNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExleGVy
LmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2Ug
QVNUIHsKKworY2xhc3MgQ29tbWFFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24geworcHVi
bGljOgorICAgIENvbW1hRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFZlY3RvcjxV
bmlxdWVSZWY8RXhwcmVzc2lvbj4+JiYgbGlzdCkKKyAgICAgICAgOiBFeHByZXNzaW9uKFdURk1v
dmUob3JpZ2luKSkKKyAgICAgICAgLCBtX2xpc3QoV1RGTW92ZShsaXN0KSkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB+Q29tbWFFeHByZXNzaW9uKCkgPSBkZWZhdWx0OworCisgICAgQ29t
bWFFeHByZXNzaW9uKGNvbnN0IENvbW1hRXhwcmVzc2lvbiYpID0gZGVsZXRlOworICAgIENvbW1h
RXhwcmVzc2lvbihDb21tYUV4cHJlc3Npb24mJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc0Nv
bW1hRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFZl
Y3RvcjxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+JiBsaXN0KCkgeyByZXR1cm4gbV9saXN0OyB9CisK
K3ByaXZhdGU6CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9saXN0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X1dITFNMX0VYUFJFU1NJT04oQ29tbWFFeHByZXNzaW9uLCBpc0NvbW1hRXhwcmVzc2lvbigpKQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTENvbnN0YW50RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFkNGZhN2Q5ZmUxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHBy
ZXNzaW9uLmgKQEAgLTAsMCArMSwxODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEJvb2xlYW5MaXRlcmFsLmgiCisj
aW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIldITFNMRmxvYXRMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRl
Z2VyTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWwuaCIKKyNpbmNsdWRlICJX
SExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaCIKKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBB
U1QgeworCisvLyBGSVhNRTogbWFjT1MgU2llcnJhIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHB1
dHRpbmcgVmFyaWFudHMgaW5zaWRlIFZhcmlhbnRzLAorLy8gc28gdGhpcyBpcyBhIHdyYXBwZXIg
Y2xhc3MgdG8gbWFrZSBzdXJlIHRoYXQgZG9lc24ndCBoYXBwZW4uIEFzIHNvb24gYXMgd2UgZG9u
J3QKKy8vIGhhdmUgdG8gc3VwcG9ydCBTaWVycmEsIHRoaXMgY2FuIGJlIG1pZ3JhdGVkIHRvIGEg
VmFyaWFudCBwcm9wZXIuCitjbGFzcyBDb25zdGFudEV4cHJlc3Npb24geworcHVibGljOgorICAg
IENvbnN0YW50RXhwcmVzc2lvbihJbnRlZ2VyTGl0ZXJhbCYmIGludGVnZXJMaXRlcmFsKQorICAg
ICAgICA6IG1fdmFyaWFudChXVEZNb3ZlKGludGVnZXJMaXRlcmFsKSkKKyAgICB7CisgICAgfQor
CisgICAgQ29uc3RhbnRFeHByZXNzaW9uKFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmJiB1bnNpZ25l
ZEludGVnZXJMaXRlcmFsKQorICAgICAgICA6IG1fdmFyaWFudChXVEZNb3ZlKHVuc2lnbmVkSW50
ZWdlckxpdGVyYWwpKQorICAgIHsKKyAgICB9CisKKyAgICBDb25zdGFudEV4cHJlc3Npb24oRmxv
YXRMaXRlcmFsJiYgZmxvYXRMaXRlcmFsKQorICAgICAgICA6IG1fdmFyaWFudChXVEZNb3ZlKGZs
b2F0TGl0ZXJhbCkpCisgICAgeworICAgIH0KKworICAgIENvbnN0YW50RXhwcmVzc2lvbihOdWxs
TGl0ZXJhbCYmIG51bGxMaXRlcmFsKQorICAgICAgICA6IG1fdmFyaWFudChXVEZNb3ZlKG51bGxM
aXRlcmFsKSkKKyAgICB7CisgICAgfQorCisgICAgQ29uc3RhbnRFeHByZXNzaW9uKEJvb2xlYW5M
aXRlcmFsJiYgYm9vbGVhbkxpdGVyYWwpCisgICAgICAgIDogbV92YXJpYW50KFdURk1vdmUoYm9v
bGVhbkxpdGVyYWwpKQorICAgIHsKKyAgICB9CisKKyAgICBDb25zdGFudEV4cHJlc3Npb24oQ29u
c3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmJiBjb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkKKyAgICAgICAgOiBtX3ZhcmlhbnQoV1RG
TW92ZShjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkpCisgICAg
eworICAgIH0KKworICAgIENvbnN0YW50RXhwcmVzc2lvbihjb25zdCBDb25zdGFudEV4cHJlc3Np
b24mKSA9IGRlbGV0ZTsKKyAgICBDb25zdGFudEV4cHJlc3Npb24oQ29uc3RhbnRFeHByZXNzaW9u
JiYpID0gZGVmYXVsdDsKKworICAgIENvbnN0YW50RXhwcmVzc2lvbiYgb3BlcmF0b3I9KGNvbnN0
IENvbnN0YW50RXhwcmVzc2lvbiYpID0gZGVsZXRlOworICAgIENvbnN0YW50RXhwcmVzc2lvbiYg
b3BlcmF0b3I9KENvbnN0YW50RXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CisKKyAgICBJbnRlZ2Vy
TGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8SW50ZWdlckxpdGVyYWw+KG1fdmFyaWFudCkpOworICAgICAgICByZXR1
cm4gV1RGOjpnZXQ8SW50ZWdlckxpdGVyYWw+KG1fdmFyaWFudCk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gdm9pZCB2aXNpdChUJiYgdCkKKyAgICB7CisgICAgICAgIFdURjo6
dmlzaXQoV1RGTW92ZSh0KSwgbV92YXJpYW50KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB2b2lkIHZpc2l0KFQmJiB0KSBjb25zdAorICAgIHsKKyAgICAgICAgV1RGOjp2aXNp
dChXVEZNb3ZlKHQpLCBtX3ZhcmlhbnQpOworICAgIH0KKworICAgIENvbnN0YW50RXhwcmVzc2lv
biBjbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFsmXShjb25zdCBJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIC0+IENv
bnN0YW50RXhwcmVzc2lvbiB7CisgICAgICAgICAgICByZXR1cm4gaW50ZWdlckxpdGVyYWwuY2xv
bmUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwpIC0+IENvbnN0YW50RXhwcmVzc2lvbiB7CisgICAgICAgICAgICBy
ZXR1cm4gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jbG9uZSgpOworICAgICAgICB9LCBbJl0oY29u
c3QgRmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpIC0+IENvbnN0YW50RXhwcmVzc2lvbiB7Cisg
ICAgICAgICAgICByZXR1cm4gZmxvYXRMaXRlcmFsLmNsb25lKCk7CisgICAgICAgIH0sIFsmXShj
b25zdCBOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIC0+IENvbnN0YW50RXhwcmVzc2lvbiB7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbExpdGVyYWwuY2xvbmUoKTsKKyAgICAgICAgfSwgWyZdKGNv
bnN0IEJvb2xlYW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkgLT4gQ29uc3RhbnRFeHByZXNzaW9u
IHsKKyAgICAgICAgICAgIHJldHVybiBib29sZWFuTGl0ZXJhbC5jbG9uZSgpOworICAgICAgICB9
LCBbJl0oY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Um
IGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSAtPiBDb25zdGFu
dEV4cHJlc3Npb24geworICAgICAgICAgICAgcmV0dXJuIGNvbnN0YW50RXhwcmVzc2lvbkVudW1l
cmF0aW9uTWVtYmVyUmVmZXJlbmNlLmNsb25lKCk7CisgICAgICAgIH0pLCBtX3ZhcmlhbnQpOwor
ICAgIH0KKworICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBDb25zdGFudEV4cHJlc3Npb24mIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgT3B0aW9uYWw8Ym9vbD4gcmVzdWx0OworICAgICAgICBk
b3VibGUgdmFsdWU7CisgICAgICAgIHZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IElu
dGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgdmFsdWUgPSBpbnRl
Z2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oY29uc3QgVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgdmFsdWUgPSB1
bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0sIFsmXShjb25zdCBGbG9h
dExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgeworICAgICAgICAgICAgdmFsdWUgPSBmbG9hdExpdGVy
YWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IE51bGxMaXRlcmFsJikgeworICAgICAg
ICAgICAgcmVzdWx0ID0gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxOdWxsTGl0ZXJhbD4ob3RoZXIu
bV92YXJpYW50KTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IEJvb2xlYW5MaXRlcmFsJiBib29sZWFu
TGl0ZXJhbCkgeworICAgICAgICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Qm9vbGVh
bkxpdGVyYWw+KG90aGVyLm1fdmFyaWFudCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBhdXRv
JiBvdGhlckJvb2xlYW5MaXRlcmFsID0gV1RGOjpnZXQ8Qm9vbGVhbkxpdGVyYWw+KG90aGVyLm1f
dmFyaWFudCk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gYm9vbGVhbkxpdGVyYWwudmFsdWUo
KSA9PSBvdGhlckJvb2xlYW5MaXRlcmFsLnZhbHVlKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IENvbnN0
YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Np
b25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkgeworICAgICAgICAgICAgaWYgKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2U+KG90aGVyLm1fdmFyaWFudCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBvdGhl
ck1lbWJlclJlZmVyZW5jZSA9IFdURjo6Z2V0PENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9u
TWVtYmVyUmVmZXJlbmNlPihvdGhlci5tX3ZhcmlhbnQpOworICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmVudW1lcmF0
aW9uTWVtYmVyKCkgPT0gb3RoZXJNZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKTsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAg
ICAgICB9KSk7CisKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAqcmVz
dWx0OworCisgICAgICAgIG90aGVyLnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IElu
dGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gdmFs
dWUgPT0gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKGNvbnN0IFVuc2ln
bmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHZhbHVlID09IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAg
ICAgfSwgWyZdKGNvbnN0IEZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAg
ICByZXN1bHQgPSB2YWx1ZSA9PSBmbG9hdExpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZd
KGNvbnN0IE51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CisgICAg
ICAgIH0sIFsmXShjb25zdCBCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9
IGZhbHNlOworICAgICAgICB9LCBbJl0oY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UmKSB7CisgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAg
ICAgfSkpOworCisgICAgICAgIEFTU0VSVChyZXN1bHQpOworICAgICAgICByZXR1cm4gKnJlc3Vs
dDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmFyaWFudDwKKyAgICAgICAgSW50ZWdlckxpdGVy
YWwsCisgICAgICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwsCisgICAgICAgIEZsb2F0TGl0ZXJh
bCwKKyAgICAgICAgTnVsbExpdGVyYWwsCisgICAgICAgIEJvb2xlYW5MaXRlcmFsLAorICAgICAg
ICBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZQorICAgICAgICA+
IG1fdmFyaWFudDsKK307CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uN2EyMGMzMGQ1YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZS5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xMZXhlci5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBFbnVtZXJh
dGlvbkRlZmluaXRpb247CitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlcjsKKworY2xhc3MgQ29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UgOiBwdWJsaWMgRXhwcmVzc2lv
biB7CitwdWJsaWM6CisgICAgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBsZWZ0LCBTdHJpbmcmJiByaWdo
dCkKKyAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgLCBtX2xl
ZnQoV1RGTW92ZShsZWZ0KSkKKyAgICAgICAgLCBtX3JpZ2h0KFdURk1vdmUocmlnaHQpKQorICAg
IHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Db25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZSgpID0gZGVmYXVsdDsKKworICAgIGV4cGxpY2l0IENvbnN0YW50RXhwcmVz
c2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKGNvbnN0IENvbnN0YW50RXhwcmVzc2lvbkVu
dW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikgPSBkZWZhdWx0OworICAgIENvbnN0YW50RXhwcmVz
c2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0
aW9uTWVtYmVyUmVmZXJlbmNlJiYpID0gZGVmYXVsdDsKKworICAgIENvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBvcGVyYXRvcj0oY29uc3QgQ29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSA9IGRlbGV0ZTsKKyAgICBDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgb3BlcmF0b3I9KENvbnN0YW50
RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiYpID0gZGVmYXVsdDsKKworICAg
IGNvbnN0IFN0cmluZyYgbGVmdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVmdDsgfQorICAgIGNvbnN0
IFN0cmluZyYgcmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JpZ2h0OyB9CisKKyAgICBDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSBjbG9uZSgpIGNvbnN0CisgICAg
eworICAgICAgICBhdXRvIHJlc3VsdCA9IENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVt
YmVyUmVmZXJlbmNlKExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhtX2xlZnQpLCBTdHJp
bmcobV9yaWdodCkpOworICAgICAgICByZXN1bHQubV9lbnVtZXJhdGlvbk1lbWJlciA9IG1fZW51
bWVyYXRpb25NZW1iZXI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgRW51
bWVyYXRpb25EZWZpbml0aW9uKiBlbnVtZXJhdGlvbkRlZmluaXRpb24oKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uOworICAgIH0KKworICAgIEVudW1lcmF0
aW9uRGVmaW5pdGlvbiogZW51bWVyYXRpb25EZWZpbml0aW9uKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbjsKKyAgICB9CisKKyAgICBFbnVtZXJh
dGlvbk1lbWJlciogZW51bWVyYXRpb25NZW1iZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
ZW51bWVyYXRpb25NZW1iZXI7CisgICAgfQorCisgICAgRW51bWVyYXRpb25NZW1iZXIqIGVudW1l
cmF0aW9uTWVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2VudW1lcmF0aW9u
TWVtYmVyOworICAgIH0KKworICAgIHZvaWQgc2V0RW51bWVyYXRpb25NZW1iZXIoRW51bWVyYXRp
b25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24sIEVudW1lcmF0aW9uTWVtYmVyJiBl
bnVtZXJhdGlvbk1lbWJlcikKKyAgICB7CisgICAgICAgIG1fZW51bWVyYXRpb25EZWZpbml0aW9u
ID0gJmVudW1lcmF0aW9uRGVmaW5pdGlvbjsKKyAgICAgICAgbV9lbnVtZXJhdGlvbk1lbWJlciA9
ICZlbnVtZXJhdGlvbk1lbWJlcjsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fbGVm
dDsKKyAgICBTdHJpbmcgbV9yaWdodDsKKyAgICBFbnVtZXJhdGlvbkRlZmluaXRpb24qIG1fZW51
bWVyYXRpb25EZWZpbml0aW9uIHsgbnVsbHB0ciB9OworICAgIEVudW1lcmF0aW9uTWVtYmVyKiBt
X2VudW1lcmF0aW9uTWVtYmVyIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgQVNU
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnRpbnVlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb250aW51ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi41MzRhZTIyMDYzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTENvbnRpbnVlLmgKQEAgLTAsMCAr
MSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBB
U1QgeworCitjbGFzcyBDb250aW51ZSA6IHB1YmxpYyBTdGF0ZW1lbnQgeworcHVibGljOgorICAg
IENvbnRpbnVlKExleGVyOjpUb2tlbiYmIG9yaWdpbikKKyAgICAgICAgOiBTdGF0ZW1lbnQoV1RG
TW92ZShvcmlnaW4pKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Db250aW51ZSgpID0g
ZGVmYXVsdDsKKworICAgIENvbnRpbnVlKGNvbnN0IENvbnRpbnVlJikgPSBkZWxldGU7CisgICAg
Q29udGludWUoQ29udGludWUmJikgPSBkZWZhdWx0OworICAgIAorICAgIGJvb2wgaXNDb250aW51
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworcHJpdmF0ZToKK307CisKK30g
Ly8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExT
TF9TVEFURU1FTlQoQ29udGludWUsIGlzQ29udGludWUoKSkKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xEZXJlZmVyZW5j
ZUV4cHJlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5hZmMzMTAzMTg4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExl
eGVyLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBEZXJlZmVy
ZW5jZUV4cHJlc3Npb24gOiBwdWJsaWMgRXhwcmVzc2lvbiB7CitwdWJsaWM6CisgICAgRGVyZWZl
cmVuY2VFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Np
b24+JiYgcG9pbnRlcikKKyAgICAgICAgOiBFeHByZXNzaW9uKFdURk1vdmUob3JpZ2luKSkKKyAg
ICAgICAgLCBtX3BvaW50ZXIoV1RGTW92ZShwb2ludGVyKSkKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB+RGVyZWZlcmVuY2VFeHByZXNzaW9uKCkgPSBkZWZhdWx0OworCisgICAgRGVyZWZl
cmVuY2VFeHByZXNzaW9uKGNvbnN0IERlcmVmZXJlbmNlRXhwcmVzc2lvbiYpID0gZGVsZXRlOwor
ICAgIERlcmVmZXJlbmNlRXhwcmVzc2lvbihEZXJlZmVyZW5jZUV4cHJlc3Npb24mJikgPSBkZWZh
dWx0OworCisgICAgYm9vbCBpc0RlcmVmZXJlbmNlRXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIEV4cHJlc3Npb24mIHBvaW50ZXIoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxFeHByZXNzaW9uJj4obV9wb2ludGVyKTsgfQorCitwcml2YXRlOgorICAgIFVu
aXF1ZVJlZjxFeHByZXNzaW9uPiBtX3BvaW50ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBBU1QK
KworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRVhQUkVTU0lPTihEZXJl
ZmVyZW5jZUV4cHJlc3Npb24sIGlzRGVyZWZlcmVuY2VFeHByZXNzaW9uKCkpCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RG9XaGlsZUxvb3AuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTERvV2hpbGVMb29wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmZiZjQ0ODcyZGUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMRG9XaGlsZUxvb3AuaApAQCAtMCwwICsxLDczIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAi
V0hMU0xFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldI
TFNMU3RhdGVtZW50LmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFz
cyBEb1doaWxlTG9vcCA6IHB1YmxpYyBTdGF0ZW1lbnQgeworcHVibGljOgorICAgIERvV2hpbGVM
b29wKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPFN0YXRlbWVudD4mJiBib2R5LCBV
bmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBjb25kaXRpb25hbCkKKyAgICAgICAgOiBTdGF0ZW1lbnQo
V1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fYm9keShXVEZNb3ZlKGJvZHkpKQorICAgICAg
ICAsIG1fY29uZGl0aW9uYWwoV1RGTW92ZShjb25kaXRpb25hbCkpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgfkRvV2hpbGVMb29wKCkgPSBkZWZhdWx0OworCisgICAgRG9XaGlsZUxvb3Ao
Y29uc3QgRG9XaGlsZUxvb3AmKSA9IGRlbGV0ZTsKKyAgICBEb1doaWxlTG9vcChEb1doaWxlTG9v
cCYmKSA9IGRlZmF1bHQ7CisgICAgCisgICAgYm9vbCBpc0RvV2hpbGVMb29wKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgU3RhdGVtZW50JiBib2R5KCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8U3RhdGVtZW50Jj4obV9ib2R5KTsgfQorICAgIEV4cHJlc3Npb24mIGNvbmRp
dGlvbmFsKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RXhwcmVzc2lvbiY+KG1fY29uZGl0aW9uYWwp
OyB9CisKK3ByaXZhdGU6CisgICAgVW5pcXVlUmVmPFN0YXRlbWVudD4gbV9ib2R5OworICAgIFVu
aXF1ZVJlZjxFeHByZXNzaW9uPiBtX2NvbmRpdGlvbmFsOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
QVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1NUQVRFTUVOVChE
b1doaWxlTG9vcCwgaXNEb1doaWxlTG9vcCgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Npb24uaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTERvdEV4cHJlc3Np
b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYzFjZjUwZTU2MjcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xEb3RFeHByZXNzaW9uLmgKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKKyNpbmNsdWRlICJXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hM
U0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRG90RXhwcmVzc2lvbiA6IHB1YmxpYyBQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24geworcHVibGljOgorICAgIERvdEV4cHJlc3Npb24oTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBiYXNlLCBTdHJpbmcm
JiBmaWVsZE5hbWUpCisgICAgICAgIDogUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKFdURk1vdmUo
b3JpZ2luKSwgV1RGTW92ZShiYXNlKSkKKyAgICAgICAgLCBtX2ZpZWxkTmFtZShXVEZNb3ZlKGZp
ZWxkTmFtZSkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkRvdEV4cHJlc3Npb24oKSA9
IGRlZmF1bHQ7CisKKyAgICBEb3RFeHByZXNzaW9uKGNvbnN0IERvdEV4cHJlc3Npb24mKSA9IGRl
bGV0ZTsKKyAgICBEb3RFeHByZXNzaW9uKERvdEV4cHJlc3Npb24mJikgPSBkZWZhdWx0OworCisg
ICAgYm9vbCBpc0RvdEV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CisKKyAgICBTdHJpbmcgZ2V0RnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgib3BlcmF0b3IuJXMiLCBtX2ZpZWxkTmFtZS51
dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBTdHJpbmcgc2V0RnVuY3Rpb25OYW1lKCkgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgib3BlcmF0
b3IuJXM9IiwgbV9maWVsZE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorCisgICAgU3RyaW5n
IGFuZEZ1bmN0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4g
U3RyaW5nOjpmb3JtYXQoIm9wZXJhdG9yJi4lcyIsIG1fZmllbGROYW1lLnV0ZjgoKS5kYXRhKCkp
OworICAgIH0KKworICAgIFN0cmluZyYgZmllbGROYW1lKCkgeyByZXR1cm4gbV9maWVsZE5hbWU7
IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9maWVsZE5hbWU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBBU1QKKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRVhQUkVT
U0lPTihEb3RFeHByZXNzaW9uLCBpc0RvdEV4cHJlc3Npb24oKSkKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFZmZlY3Rm
dWxFeHByZXNzaW9uU3RhdGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjMzMzI1ZjE3ODI0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRWZmZWN0ZnVs
RXhwcmVzc2lvblN0YXRlbWVudC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEV4cHJlc3Np
b24uaCIKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQu
aCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEVmZmVjdGZ1bEV4
cHJlc3Npb25TdGF0ZW1lbnQgOiBwdWJsaWMgU3RhdGVtZW50IHsKK3B1YmxpYzoKKyAgICBFZmZl
Y3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGVmZmVjdGZ1
bEV4cHJlc3Npb24pCisgICAgICAgIDogU3RhdGVtZW50KExleGVyOjpUb2tlbihlZmZlY3RmdWxF
eHByZXNzaW9uLT5vcmlnaW4oKSkpCisgICAgICAgICwgbV9lZmZlY3RmdWxFeHByZXNzaW9uKFdU
Rk1vdmUoZWZmZWN0ZnVsRXhwcmVzc2lvbikpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
fkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQoKSA9IGRlZmF1bHQ7CisKKyAgICBFZmZlY3Rm
dWxFeHByZXNzaW9uU3RhdGVtZW50KGNvbnN0IEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQm
KSA9IGRlbGV0ZTsKKyAgICBFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50KEVmZmVjdGZ1bEV4
cHJlc3Npb25TdGF0ZW1lbnQmJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc0VmZmVjdGZ1bEV4
cHJlc3Npb25TdGF0ZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICBFeHByZXNzaW9uJiBlZmZlY3RmdWxFeHByZXNzaW9uKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RXhwcmVzc2lvbiY+KG1fZWZmZWN0ZnVsRXhwcmVzc2lvbik7IH0KKworcHJpdmF0ZToKKyAgICBV
bmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9lZmZlY3RmdWxFeHByZXNzaW9uOworfTsKKworfSAvLyBu
YW1lc3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1NU
QVRFTUVOVChFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50LCBpc0VmZmVjdGZ1bEV4cHJlc3Np
b25TdGF0ZW1lbnQoKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbkRlZmluaXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5p
dGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMzg1N2YzNDY0
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJX
SExTTEVudW1lcmF0aW9uTWVtYmVyLmgiCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1
ZGUgIldITFNMTmFtZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgorI2lu
Y2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9V
bmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSGFzaC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitj
bGFzcyBFbnVtZXJhdGlvbkRlZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsKK3B1YmxpYzoK
KyAgICBFbnVtZXJhdGlvbkRlZmluaXRpb24oTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcm
JiBuYW1lLCBPcHRpb25hbDxVbmlxdWVSZWY8VW5uYW1lZFR5cGU+PiYmIHR5cGUpCisgICAgICAg
IDogTmFtZWRUeXBlKFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKKyAgICAgICAgLCBt
X3R5cGUoV1RGTW92ZSh0eXBlKSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RW51bWVy
YXRpb25EZWZpbml0aW9uKCkgPSBkZWZhdWx0OworCisgICAgRW51bWVyYXRpb25EZWZpbml0aW9u
KGNvbnN0IEVudW1lcmF0aW9uRGVmaW5pdGlvbiYpID0gZGVsZXRlOworICAgIEVudW1lcmF0aW9u
RGVmaW5pdGlvbihFbnVtZXJhdGlvbkRlZmluaXRpb24mJikgPSBkZWZhdWx0OworCisgICAgYm9v
bCBpc0VudW1lcmF0aW9uRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KKworICAgIFVubmFtZWRUeXBlKiB0eXBlKCkgeyByZXR1cm4gbV90eXBlID8gJnN0YXRpY19j
YXN0PFVubmFtZWRUeXBlJj4oKm1fdHlwZSkgOiBudWxscHRyOyB9CisKKyAgICBib29sIGFkZChF
bnVtZXJhdGlvbk1lbWJlciYmIG1lbWJlcikKKyAgICB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
bV9tZW1iZXJzLmFkZChtZW1iZXIubmFtZSgpLCBzdGQ6Om1ha2VfdW5pcXVlPEVudW1lcmF0aW9u
TWVtYmVyPihXVEZNb3ZlKG1lbWJlcikpKTsKKyAgICAgICAgcmV0dXJuICFyZXN1bHQuaXNOZXdF
bnRyeTsKKyAgICB9CisKKyAgICBFbnVtZXJhdGlvbk1lbWJlciogbWVtYmVyQnlOYW1lKGNvbnN0
IFN0cmluZyYgbmFtZSkKKyAgICB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX21lbWJlcnMu
ZmluZChuYW1lKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1fbWVtYmVycy5lbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gaXRlcmF0b3ItPnZhbHVl
LmdldCgpOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEVudW1l
cmF0aW9uTWVtYmVyPj4gZW51bWVyYXRpb25NZW1iZXJzKCkKKyAgICB7CisgICAgICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEVudW1lcmF0aW9uTWVtYmVyPj4gcmVzdWx0OworICAg
ICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX21lbWJlcnMpCisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCpwYWlyLnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgT3B0aW9uYWw8VW5pcXVlUmVmPFVubmFtZWRUeXBlPj4gbV90eXBlOworICAgIEhh
c2hNYXA8U3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8RW51bWVyYXRpb25NZW1iZXI+PiBtX21lbWJl
cnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShFbnVtZXJhdGlvbkRlZmluaXRpb24sIGlzRW51bWVy
YXRpb25EZWZpbml0aW9uKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmFmZWIxODYwMGU5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMRW51bWVyYXRpb25NZW1iZXIuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xDb25z
dGFudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hM
U0xOb2RlLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBFbnVt
ZXJhdGlvbk1lbWJlciA6IHB1YmxpYyBOb2RlIHsKK3B1YmxpYzoKKyAgICBFbnVtZXJhdGlvbk1l
bWJlcihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUsIE9wdGlvbmFsPENvbnN0
YW50RXhwcmVzc2lvbj4mJiB2YWx1ZSA9IFdURjo6bnVsbG9wdCkKKyAgICAgICAgOiBtX29yaWdp
bihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAg
ICAgICwgbV92YWx1ZShXVEZNb3ZlKHZhbHVlKSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB+RW51bWVyYXRpb25NZW1iZXIoKSA9IGRlZmF1bHQ7CisKKyAgICBFbnVtZXJhdGlvbk1lbWJl
cihjb25zdCBFbnVtZXJhdGlvbk1lbWJlciYpID0gZGVsZXRlOworICAgIEVudW1lcmF0aW9uTWVt
YmVyKEVudW1lcmF0aW9uTWVtYmVyJiYpID0gZGVmYXVsdDsKKworICAgIGNvbnN0IExleGVyOjpU
b2tlbiYgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBTdHJpbmcmIG5h
bWUoKSB7IHJldHVybiBtX25hbWU7IH0KKyAgICBPcHRpb25hbDxDb25zdGFudEV4cHJlc3Npb24+
JiB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIHZvaWQgc2V0VmFsdWUoQ29uc3Rh
bnRFeHByZXNzaW9uJiYgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fdmFsdWUpOwor
ICAgICAgICBtX3ZhbHVlID0gV1RGTW92ZSh2YWx1ZSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IExleGVyOjpUb2tlbiBtX29yaWdpbjsKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIE9wdGlvbmFs
PENvbnN0YW50RXhwcmVzc2lvbj4gbV92YWx1ZTsKK307CisKK3VzaW5nIEVudW1lcmF0aW9uTWVt
YmVycyA9IFZlY3RvcjxFbnVtZXJhdGlvbk1lbWJlcj47CisKK30gLy8gbmFtZXNwYWNlIEFTVAor
Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40MDk1YWYzM2Yy
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJXSExTTEVudW1lcmF0aW9uTWVtYmVyLmgiCisjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBFbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwgOiBwdWJsaWMgRXhwcmVzc2lvbiB7CitwdWJsaWM6CisgICAgRW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgRW51bWVyYXRpb25NZW1iZXImIGVu
dW1lcmF0aW9uTWVtYmVyKQorICAgICAgICA6IEV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQor
ICAgICAgICAsIG1fZW51bWVyYXRpb25NZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpCisgICAgewor
ICAgIH0KKworICAgIHZpcnR1YWwgfkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCgpID0gZGVmYXVs
dDsKKworICAgIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChjb25zdCBFbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwmKSA9IGRlbGV0ZTsKKyAgICBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoRW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNFbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBF
bnVtZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIoKSB7IHJldHVybiBtX2VudW1lcmF0
aW9uTWVtYmVyOyB9CisKK3ByaXZhdGU6CisgICAgRW51bWVyYXRpb25NZW1iZXImIG1fZW51bWVy
YXRpb25NZW1iZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRVhQUkVTU0lPTihFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwsIGlzRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lvbi5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRXhwcmVzc2lv
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ZmFmYTI5ZmU2Nwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEV4cHJlc3Npb24uaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgor
I2luY2x1ZGUgIldITFNMVmFsdWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRXhwcmVzc2lvbiA6IHB1Ymxp
YyBWYWx1ZSB7CitwdWJsaWM6CisgICAgRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4p
CisgICAgICAgIDogbV9vcmlnaW4oV1RGTW92ZShvcmlnaW4pKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIH5FeHByZXNzaW9uKCkgPSBkZWZhdWx0OworCisgICAgZXhwbGljaXQgRXhwcmVz
c2lvbihjb25zdCBFeHByZXNzaW9uJikgPSBkZWZhdWx0OworICAgIEV4cHJlc3Npb24oRXhwcmVz
c2lvbiYmKSA9IGRlZmF1bHQ7CisKKyAgICBFeHByZXNzaW9uJiBvcGVyYXRvcj0oY29uc3QgRXhw
cmVzc2lvbiYpID0gZGVmYXVsdDsKKyAgICBFeHByZXNzaW9uJiBvcGVyYXRvcj0oRXhwcmVzc2lv
biYmKSA9IGRlZmF1bHQ7CisKKyAgICBjb25zdCBMZXhlcjo6VG9rZW4mIG9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNBc3NpZ25tZW50RXhw
cmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQm9v
bGVhbkxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c0NhbGxFeHByZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgaXNDb21tYUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc0RlcmVmZXJlbmNlRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBib29sIGlzRG90RXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIGlzRmxvYXRMaXRlcmFsKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJbmRleEV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0ludGVnZXJMaXRlcmFsKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNMb2dpY2FsRXhwcmVzc2lvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzTG9naWNhbE5vdEV4cHJl
c3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc01ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpc01ha2VQb2ludGVyRXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisgICAgdmlydHVhbCBib29sIGlzTnVsbExpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzVGVy
bmFyeUV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1Vuc2lnbmVkSW50ZWdlckxpdGVyYWwoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxlUmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIExleGVyOjpUb2tlbiBtX29yaWdpbjsK
K307CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJT04oVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUp
IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9W
YWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldI
TFNMOjpBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pIHsgcmV0dXJuIGV4cHJlc3Npb24ucHJl
ZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGYWxs
dGhyb3VnaC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNM
RmFsbHRocm91Z2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGU2
NmM5YTRmNTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xGYWxsdGhyb3VnaC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExT
TExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRmFs
bHRocm91Z2ggOiBwdWJsaWMgU3RhdGVtZW50IHsKK3B1YmxpYzoKKyAgICBGYWxsdGhyb3VnaChM
ZXhlcjo6VG9rZW4mJiBvcmlnaW4pCisgICAgICAgIDogU3RhdGVtZW50KFdURk1vdmUob3JpZ2lu
KSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RmFsbHRocm91Z2goKSA9IGRlZmF1bHQ7
CisKKyAgICBGYWxsdGhyb3VnaChjb25zdCBGYWxsdGhyb3VnaCYpID0gZGVsZXRlOworICAgIEZh
bGx0aHJvdWdoKEZhbGx0aHJvdWdoJiYpID0gZGVmYXVsdDsKKyAgICAKKyAgICBib29sIGlzRmFs
bHRocm91Z2goKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKK3ByaXZhdGU6Cit9
OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfU1RBVEVNRU5UKEZhbGx0aHJvdWdoLCBpc0ZhbGx0aHJvdWdoKCkpCisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRmxvYXRMaXRlcmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xGbG9hdExpdGVyYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uMjI2M2I0YTIwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWwuaApAQCAtMCwwICsxLDgzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5j
bHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGbG9hdExpdGVyYWxUeXBl
LmgiCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBGbG9hdExpdGVyYWwg
OiBwdWJsaWMgRXhwcmVzc2lvbiB7CitwdWJsaWM6CisgICAgRmxvYXRMaXRlcmFsKExleGVyOjpU
b2tlbiYmIG9yaWdpbiwgZmxvYXQgdmFsdWUpCisgICAgICAgIDogRXhwcmVzc2lvbihMZXhlcjo6
VG9rZW4ob3JpZ2luKSkKKyAgICAgICAgLCBtX3R5cGUoV1RGTW92ZShvcmlnaW4pLCB2YWx1ZSkK
KyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5G
bG9hdExpdGVyYWwoKSA9IGRlZmF1bHQ7CisKKyAgICBGbG9hdExpdGVyYWwoY29uc3QgRmxvYXRM
aXRlcmFsJikgPSBkZWxldGU7CisgICAgRmxvYXRMaXRlcmFsKEZsb2F0TGl0ZXJhbCYmKSA9IGRl
ZmF1bHQ7CisKKyAgICBGbG9hdExpdGVyYWwmIG9wZXJhdG9yPShjb25zdCBGbG9hdExpdGVyYWwm
KSA9IGRlbGV0ZTsKKyAgICBGbG9hdExpdGVyYWwmIG9wZXJhdG9yPShGbG9hdExpdGVyYWwmJikg
PSBkZWZhdWx0OworCisgICAgRmxvYXRMaXRlcmFsVHlwZSYgdHlwZSgpIHsgcmV0dXJuIG1fdHlw
ZTsgfQorICAgIGZsb2F0IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAg
Ym9vbCBpc0Zsb2F0TGl0ZXJhbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIEZsb2F0TGl0ZXJhbCBjbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICBGbG9hdExpdGVy
YWwgcmVzdWx0KExleGVyOjpUb2tlbihvcmlnaW4oKSksIG1fdmFsdWUpOworICAgICAgICBpZiAo
cmVzdWx0Lm1fdHlwZS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUu
cmVzb2x2ZShyZXN1bHQubV90eXBlLnJlc29sdmVkVHlwZSgpLT5jbG9uZSgpKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRmxvYXRMaXRlcmFsVHlwZSBt
X3R5cGU7CisgICAgZmxvYXQgbV92YWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9
CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9FWFBSRVNTSU9OKEZsb2F0TGl0
ZXJhbCwgaXNGbG9hdExpdGVyYWwoKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVyYWxUeXBlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZsb2F0TGl0ZXJh
bFR5cGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jODI2NmI4
YjRhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldITFNMRmxvYXRMaXRlcmFsVHlwZS5oIgorCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVz
LmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK0Zsb2F0TGl0ZXJh
bFR5cGU6OkZsb2F0TGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBmbG9hdCB2YWx1
ZSkKKyAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgLCBtX3ByZWZlcnJlZFR5cGUobWFrZVVuaXF1
ZVJlZjxUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKG9yaWdpbiksIFN0cmluZygiZmxvYXQiLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgVHlwZUFyZ3VtZW50cygpKSkKK3sKK30KKworRmxv
YXRMaXRlcmFsVHlwZTo6fkZsb2F0TGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgRmxv
YXRMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShjb25zdCBUeXBlJiB0eXBlKSBjb25zdAoreworICAg
IGlmICghaXM8TmFtZWRUeXBlPih0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1
dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PE5hbWVkVHlwZT4odHlwZSk7CisgICAgaWYgKCFpczxO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNG
bG9hdGluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVj
bGFyYXRpb24uY2FuUmVwcmVzZW50RmxvYXQoKShtX3ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBGbG9hdExpdGVyYWxUeXBlOjpj
b252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIGNvbnN0Cit7Cisg
ICAgaWYgKG1hdGNoZXModW5uYW1lZFR5cGUsIHN0YXRpY19jYXN0PGNvbnN0IFR5cGVSZWZlcmVu
Y2UmPihtX3ByZWZlcnJlZFR5cGUpKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGbG9hdExpdGVy
YWxUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
bG9hdExpdGVyYWxUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LjFhYWQyZjQ3YzY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMRmxvYXRMaXRlcmFsVHlwZS5oCkBAIC0wLDAgKzEsNzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNs
dWRlICJXSExTTFJlc29sdmFibGVUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBUeXBlUmVmZXJl
bmNlOworCitjbGFzcyBGbG9hdExpdGVyYWxUeXBlIDogcHVibGljIFJlc29sdmFibGVUeXBlIHsK
K3B1YmxpYzoKKyAgICBGbG9hdExpdGVyYWxUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgZmxv
YXQgdmFsdWUpOworCisgICAgdmlydHVhbCB+RmxvYXRMaXRlcmFsVHlwZSgpOworCisgICAgRmxv
YXRMaXRlcmFsVHlwZShjb25zdCBGbG9hdExpdGVyYWxUeXBlJikgPSBkZWxldGU7CisgICAgRmxv
YXRMaXRlcmFsVHlwZShGbG9hdExpdGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIEZsb2F0
TGl0ZXJhbFR5cGUmIG9wZXJhdG9yPShjb25zdCBGbG9hdExpdGVyYWxUeXBlJikgPSBkZWxldGU7
CisgICAgRmxvYXRMaXRlcmFsVHlwZSYgb3BlcmF0b3I9KEZsb2F0TGl0ZXJhbFR5cGUmJikgPSBk
ZWZhdWx0OworCisgICAgYm9vbCBpc0Zsb2F0TGl0ZXJhbFR5cGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CisKKyAgICBUeXBlUmVmZXJlbmNlJiBwcmVmZXJyZWRUeXBlKCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VHlwZVJlZmVyZW5jZSY+KG1fcHJlZmVycmVkVHlwZSk7IH0KKwor
ICAgIGJvb2wgY2FuUmVzb2x2ZShjb25zdCBUeXBlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdW5z
aWduZWQgY29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBmbG9hdCBtX3ZhbHVlOworICAgIC8vIFRoaXMgaXMgYSB1bmlxdWVf
cHRyIHRvIHJlc29sdmUgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4KKyAgICAvLyBDb25z
dGFudEV4cHJlc3Npb24gLT4gTGl0ZXJhbFR5cGUgLT4gVHlwZVJlZmVyZW5jZSAtPiBUeXBlQXJn
dW1lbnRzIC0+IENvbnN0YW50RXhwcmVzc2lvbgorICAgIFVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNl
PiBtX3ByZWZlcnJlZFR5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfUkVTT0xWQUJMRV9UWVBFKEZsb2F0TGl0ZXJh
bFR5cGUsIGlzRmxvYXRMaXRlcmFsVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZvckxvb3AuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZvckxvb3AuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWViZTliOWE2NzYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGb3JM
b29wLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUg
IldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldI
TFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlIDxtZW1vcnk+Cisj
aW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBX
SExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBGb3JMb29wIDogcHVibGljIFN0YXRl
bWVudCB7CitwdWJsaWM6CisgICAgRm9yTG9vcChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFZhcmlh
bnQ8VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQsIFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4m
JiBpbml0aWFsaXphdGlvbiwgT3B0aW9uYWw8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiYmIGNvbmRp
dGlvbiwgT3B0aW9uYWw8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiYmIGluY3JlbWVudCwgVW5pcXVl
UmVmPFN0YXRlbWVudD4mJiBib2R5KQorICAgICAgICA6IFN0YXRlbWVudChXVEZNb3ZlKG9yaWdp
bikpCisgICAgICAgICwgbV9pbml0aWFsaXphdGlvbihXVEZNb3ZlKGluaXRpYWxpemF0aW9uKSkK
KyAgICAgICAgLCBtX2NvbmRpdGlvbihXVEZNb3ZlKGNvbmRpdGlvbikpCisgICAgICAgICwgbV9p
bmNyZW1lbnQoV1RGTW92ZShpbmNyZW1lbnQpKQorICAgICAgICAsIG1fYm9keShXVEZNb3ZlKGJv
ZHkpKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Gb3JMb29wKCkKKyAgICB7CisgICAg
fQorCisgICAgRm9yTG9vcChjb25zdCBGb3JMb29wJikgPSBkZWxldGU7CisgICAgRm9yTG9vcChG
b3JMb29wJiYpID0gZGVmYXVsdDsKKyAgICAKKyAgICBib29sIGlzRm9yTG9vcCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFZhcmlhbnQ8VmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQsIFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4mIGluaXRpYWxpemF0aW9uKCkgeyBy
ZXR1cm4gbV9pbml0aWFsaXphdGlvbjsgfQorICAgIEV4cHJlc3Npb24qIGNvbmRpdGlvbigpIHsg
cmV0dXJuIG1fY29uZGl0aW9uID8gJnN0YXRpY19jYXN0PEV4cHJlc3Npb24mPigqbV9jb25kaXRp
b24pIDogbnVsbHB0cjsgfQorICAgIEV4cHJlc3Npb24qIGluY3JlbWVudCgpIHsgcmV0dXJuIG1f
aW5jcmVtZW50ID8gJnN0YXRpY19jYXN0PEV4cHJlc3Npb24mPigqbV9pbmNyZW1lbnQpIDogbnVs
bHB0cjsgfQorICAgIFN0YXRlbWVudCYgYm9keSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFN0YXRl
bWVudCY+KG1fYm9keSk7IH0KKworcHJpdmF0ZToKKyAgICBWYXJpYW50PFZhcmlhYmxlRGVjbGFy
YXRpb25zU3RhdGVtZW50LCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4+IG1faW5pdGlhbGl6YXRpb247
CisgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEV4cHJlc3Npb24+PiBtX2NvbmRpdGlvbjsKKyAgICBP
cHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+IG1faW5jcmVtZW50OworICAgIFVuaXF1ZVJl
ZjxTdGF0ZW1lbnQ+IG1fYm9keTsKK307CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30K
KworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9TVEFURU1FTlQoRm9yTG9vcCwgaXNGb3JM
b29wKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uQXR0cmlidXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjc3NDliZTY1MjJmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rp
b25BdHRyaWJ1dGUuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xOdW1UaHJlYWRzRnVuY3Rp
b25BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitu
YW1lc3BhY2UgQVNUIHsKKwordXNpbmcgRnVuY3Rpb25BdHRyaWJ1dGUgPSBWYXJpYW50PE51bVRo
cmVhZHNGdW5jdGlvbkF0dHJpYnV0ZT47Cit1c2luZyBBdHRyaWJ1dGVCbG9jayA9IFZlY3RvcjxG
dW5jdGlvbkF0dHJpYnV0ZT47CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZhZjdiNTA5NTRlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRnVuY3Rpb25EZWNsYXJh
dGlvbi5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oIgor
I2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNpbmNsdWRl
ICJXSExTTFNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVkVHlwZS5oIgorI2luY2x1
ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRnVuY3Rp
b25EZWNsYXJhdGlvbiA6IHB1YmxpYyBOb2RlIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIEVu
dHJ5UG9pbnRUeXBlIDogdWludDhfdCB7CisgICAgICAgIFZlcnRleCwKKyAgICAgICAgRnJhZ21l
bnQsCisgICAgICAgIENvbXB1dGUsCisgICAgICAgIC8vIEZJWE1FOiBBZGQgYW4gZW50cnkgcG9p
bnQgdHlwZSBmb3IgdGVzdGluZworICAgIH07CisKKyAgICBGdW5jdGlvbkRlY2xhcmF0aW9uKExl
eGVyOjpUb2tlbiYmIG9yaWdpbiwgQXR0cmlidXRlQmxvY2smJiBhdHRyaWJ1dGVCbG9jaywgT3B0
aW9uYWw8RW50cnlQb2ludFR5cGU+IGVudHJ5UG9pbnRUeXBlLCBVbmlxdWVSZWY8VW5uYW1lZFR5
cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgVmFyaWFibGVEZWNsYXJhdGlvbnMmJiBwYXJhbWV0
ZXJzLCBPcHRpb25hbDxTZW1hbnRpYz4mJiBzZW1hbnRpYywgYm9vbCBpc09wZXJhdG9yKQorICAg
ICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgLCBtX2F0dHJpYnV0ZUJs
b2NrKFdURk1vdmUoYXR0cmlidXRlQmxvY2spKQorICAgICAgICAsIG1fZW50cnlQb2ludFR5cGUo
ZW50cnlQb2ludFR5cGUpCisgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCisgICAgICAg
ICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgICAgICwgbV9wYXJhbWV0ZXJzKFdURk1vdmUo
cGFyYW1ldGVycykpCisgICAgICAgICwgbV9zZW1hbnRpYyhXVEZNb3ZlKHNlbWFudGljKSkKKyAg
ICAgICAgLCBtX2lzT3BlcmF0b3IoV1RGTW92ZShpc09wZXJhdG9yKSkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB+RnVuY3Rpb25EZWNsYXJhdGlvbigpID0gZGVmYXVsdDsKKworICAgIEZ1
bmN0aW9uRGVjbGFyYXRpb24oY29uc3QgRnVuY3Rpb25EZWNsYXJhdGlvbiYpID0gZGVsZXRlOwor
ICAgIEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiYmKSA9IGRlZmF1bHQ7
CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNGdW5jdGlvbkRlZmluaXRpb24oKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgQXR0cmlidXRlQmxvY2smIGF0dHJpYnV0
ZUJsb2NrKCkgeyByZXR1cm4gbV9hdHRyaWJ1dGVCbG9jazsgfQorICAgIGNvbnN0IE9wdGlvbmFs
PEVudHJ5UG9pbnRUeXBlPiYgZW50cnlQb2ludFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2VudHJ5
UG9pbnRUeXBlOyB9CisgICAgY29uc3QgVW5uYW1lZFR5cGUmIHR5cGUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBVbm5hbWVkVHlwZSY+KG1fdHlwZSk7IH0KKyAgICBVbm5hbWVk
VHlwZSYgdHlwZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFVubmFtZWRUeXBlJj4obV90eXBlKTsg
fQorICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAg
IGJvb2wgaXNDYXN0KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lID09ICJvcGVyYXRvciBjYXN0Ijsg
fQorICAgIGNvbnN0IFZhcmlhYmxlRGVjbGFyYXRpb25zJiBwYXJhbWV0ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXJhbWV0ZXJzOyB9CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbnMmIHBhcmFtZXRl
cnMoKSB7IHJldHVybiBtX3BhcmFtZXRlcnM7IH0KKyAgICBPcHRpb25hbDxTZW1hbnRpYz4mIHNl
bWFudGljKCkgeyByZXR1cm4gbV9zZW1hbnRpYzsgfQorICAgIGJvb2wgaXNPcGVyYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1faXNPcGVyYXRvcjsgfQorCitwcml2YXRlOgorICAgIExleGVyOjpUb2tl
biBtX29yaWdpbjsKKyAgICBBdHRyaWJ1dGVCbG9jayBtX2F0dHJpYnV0ZUJsb2NrOworICAgIE9w
dGlvbmFsPEVudHJ5UG9pbnRUeXBlPiBtX2VudHJ5UG9pbnRUeXBlOworICAgIFVuaXF1ZVJlZjxV
bm5hbWVkVHlwZT4gbV90eXBlOworICAgIFN0cmluZyBtX25hbWU7CisgICAgVmFyaWFibGVEZWNs
YXJhdGlvbnMgbV9wYXJhbWV0ZXJzOworICAgIE9wdGlvbmFsPFNlbWFudGljPiBtX3NlbWFudGlj
OworICAgIGJvb2wgbV9pc09wZXJhdG9yOworfTsKKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30K
KworfQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRlVOQ1RJT05fREVD
TEFSQVRJT04oVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAg
c3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24mIHR5cGUpIHsgcmV0dXJuIHR5cGUucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlv
bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yYTRiOTgzNDc1MAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEJs
b2NrLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2Ns
YXNzIEZ1bmN0aW9uRGVmaW5pdGlvbiA6IHB1YmxpYyBGdW5jdGlvbkRlY2xhcmF0aW9uIHsKK3B1
YmxpYzoKKyAgICBGdW5jdGlvbkRlZmluaXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiYmIGZ1bmN0
aW9uRGVjbGFyYXRpb24sIEJsb2NrJiYgYmxvY2ssIGJvb2wgcmVzdHJpY3RlZCkKKyAgICAgICAg
OiBGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoZnVuY3Rpb25EZWNsYXJhdGlvbikpCisgICAg
ICAgICwgbV9ibG9jayhXVEZNb3ZlKGJsb2NrKSkKKyAgICAgICAgLCBtX3Jlc3RyaWN0ZWQocmVz
dHJpY3RlZCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+RnVuY3Rpb25EZWZpbml0aW9u
KCkgPSBkZWZhdWx0OworCisgICAgRnVuY3Rpb25EZWZpbml0aW9uKGNvbnN0IEZ1bmN0aW9uRGVm
aW5pdGlvbiYpID0gZGVsZXRlOworICAgIEZ1bmN0aW9uRGVmaW5pdGlvbihGdW5jdGlvbkRlZmlu
aXRpb24mJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc0Z1bmN0aW9uRGVmaW5pdGlvbigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIEJsb2NrJiBibG9jaygpIHsgcmV0
dXJuIG1fYmxvY2s7IH0KKyAgICBib29sIHJlc3RyaWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX3Jl
c3RyaWN0ZWQ7IH0KKworcHJpdmF0ZToKKyAgICBCbG9jayBtX2Jsb2NrOworICAgIGJvb2wgbV9y
ZXN0cmljdGVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX1dITFNMX0ZVTkNUSU9OX0RFQ0xBUkFUSU9OKEZ1bmN0aW9uRGVmaW5p
dGlvbiwgaXNGdW5jdGlvbkRlZmluaXRpb24oKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJZlN0YXRlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSWZTdGF0ZW1lbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2IyM2NlMDJmOWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xJZlN0YXRlbWVudC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24u
aCIKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIK
KyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitj
bGFzcyBJZlN0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQgeworcHVibGljOgorICAgIElmU3Rh
dGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgY29u
ZGl0aW9uYWwsIFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+JiYgYm9keSwgT3B0aW9uYWw8VW5pcXVlUmVm
PFN0YXRlbWVudD4+JiYgZWxzZUJvZHkpCisgICAgICAgIDogU3RhdGVtZW50KFdURk1vdmUob3Jp
Z2luKSkKKyAgICAgICAgLCBtX2NvbmRpdGlvbmFsKFdURk1vdmUoY29uZGl0aW9uYWwpKQorICAg
ICAgICAsIG1fYm9keShXVEZNb3ZlKGJvZHkpKQorICAgICAgICAsIG1fZWxzZUJvZHkoV1RGTW92
ZShlbHNlQm9keSkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfklmU3RhdGVtZW50KCkg
PSBkZWZhdWx0OworCisgICAgSWZTdGF0ZW1lbnQoY29uc3QgSWZTdGF0ZW1lbnQmKSA9IGRlbGV0
ZTsKKyAgICBJZlN0YXRlbWVudChJZlN0YXRlbWVudCYmKSA9IGRlZmF1bHQ7CisgICAgCisgICAg
Ym9vbCBpc0lmU3RhdGVtZW50KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgRXhwcmVzc2lvbiYgY29uZGl0aW9uYWwoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxFeHByZXNz
aW9uJj4obV9jb25kaXRpb25hbCk7IH0KKyAgICBTdGF0ZW1lbnQmIGJvZHkoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxTdGF0ZW1lbnQmPihtX2JvZHkpOyB9CisgICAgU3RhdGVtZW50KiBlbHNlQm9k
eSgpIHsgcmV0dXJuIG1fZWxzZUJvZHkgPyAmc3RhdGljX2Nhc3Q8U3RhdGVtZW50Jj4oKm1fZWxz
ZUJvZHkpIDogbnVsbHB0cjsgfQorCitwcml2YXRlOgorICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9u
PiBtX2NvbmRpdGlvbmFsOworICAgIFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+IG1fYm9keTsKKyAgICBP
cHRpb25hbDxVbmlxdWVSZWY8U3RhdGVtZW50Pj4gbV9lbHNlQm9keTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEFTVAorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9TVEFU
RU1FTlQoSWZTdGF0ZW1lbnQsIGlzSWZTdGF0ZW1lbnQoKSkKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbmRleEV4cHJl
c3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTElu
ZGV4RXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4z
MzkwMWZjYTU4MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTEluZGV4RXhwcmVzc2lvbi5oCkBAIC0wLDAgKzEsODQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
aCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEluZGV4RXhwcmVz
c2lvbiA6IHB1YmxpYyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24geworcHVibGljOgorICAgIElu
ZGV4RXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9u
PiYmIGJhc2UsIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGluZGV4KQorICAgICAgICA6IFByb3Bl
cnR5QWNjZXNzRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoYmFzZSkpCisgICAg
ICAgICwgbV9pbmRleChXVEZNb3ZlKGluZGV4KSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB+SW5kZXhFeHByZXNzaW9uKCkgPSBkZWZhdWx0OworCisgICAgSW5kZXhFeHByZXNzaW9uKGNv
bnN0IEluZGV4RXhwcmVzc2lvbiYpID0gZGVsZXRlOworICAgIEluZGV4RXhwcmVzc2lvbihJbmRl
eEV4cHJlc3Npb24mJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc0luZGV4RXhwcmVzc2lvbigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFN0cmluZyBnZXRGdW5jdGlv
bk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZygib3Bl
cmF0b3JbXSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgIH0KKworICAgIFN0
cmluZyBzZXRGdW5jdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN0cmluZygib3BlcmF0b3ImW10iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsK
KyAgICB9CisKKyAgICBTdHJpbmcgYW5kRnVuY3Rpb25OYW1lKCkgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIHJldHVybiBTdHJpbmcoIm9wZXJhdG9yW109IiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCk7CisgICAgfQorCisgICAgRXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9u
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RXhwcmVzc2lvbiY+KG1faW5kZXgpOyB9CisKK3ByaXZh
dGU6CisgICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1faW5kZXg7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBBU1QKKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRVhQUkVT
U0lPTihJbmRleEV4cHJlc3Npb24sIGlzSW5kZXhFeHByZXNzaW9uKCkpCisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50
ZWdlckxpdGVyYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMSW50ZWdlckxpdGVyYWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwLi43ZTRmZmIzMGIwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmNwcApAQCAtMCwwICsx
LDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFsLmgiCisKKyNpbmNsdWRlICJXSExT
TE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFj
ZSBBU1QgeworCitpbnQ2NF90IEludGVnZXJMaXRlcmFsOjp2YWx1ZUZvclNlbGVjdGVkVHlwZSgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKG1fdHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgYXV0byYg
dHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PFR5cGVSZWZlcmVuY2U+KCptX3R5cGUucmVzb2x2ZWRU
eXBlKCkpOworICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICBh
dXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRp
b24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICByZXR1cm4gbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmZvcm1hdFZhbHVlRnJvbUludGVnZXIoKShtX3ZhbHVlKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEludGVnZXJMaXRlcmFsLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJh
bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jYzlhMGVkNTg0Ngot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTEludGVnZXJMaXRlcmFsLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMRXhwcmVz
c2lvbi5oIgorI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWxUeXBlLmgiCisjaW5jbHVkZSAi
V0hMU0xMZXhlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7
CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBJbnRlZ2VyTGl0ZXJhbCA6IHB1YmxpYyBFeHBy
ZXNzaW9uIHsKK3B1YmxpYzoKKyAgICBJbnRlZ2VyTGl0ZXJhbChMZXhlcjo6VG9rZW4mJiBvcmln
aW4sIGludCB2YWx1ZSkKKyAgICAgICAgOiBFeHByZXNzaW9uKExleGVyOjpUb2tlbihvcmlnaW4p
KQorICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKG9yaWdpbiksIHZhbHVlKQorICAgICAgICAsIG1f
dmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkludGVnZXJMaXRlcmFs
KCkgPSBkZWZhdWx0OworCisgICAgSW50ZWdlckxpdGVyYWwoY29uc3QgSW50ZWdlckxpdGVyYWwm
KSA9IGRlbGV0ZTsKKyAgICBJbnRlZ2VyTGl0ZXJhbChJbnRlZ2VyTGl0ZXJhbCYmKSA9IGRlZmF1
bHQ7CisKKyAgICBJbnRlZ2VyTGl0ZXJhbCYgb3BlcmF0b3I9KGNvbnN0IEludGVnZXJMaXRlcmFs
JikgPSBkZWxldGU7CisgICAgSW50ZWdlckxpdGVyYWwmIG9wZXJhdG9yPShJbnRlZ2VyTGl0ZXJh
bCYmKSA9IGRlZmF1bHQ7CisKKyAgICBJbnRlZ2VyTGl0ZXJhbFR5cGUmIHR5cGUoKSB7IHJldHVy
biBtX3R5cGU7IH0KKyAgICBpbnQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisK
KyAgICBib29sIGlzSW50ZWdlckxpdGVyYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVl
OyB9CisKKyAgICBJbnRlZ2VyTGl0ZXJhbCBjbG9uZSgpIGNvbnN0CisgICAgeworICAgICAgICBJ
bnRlZ2VyTGl0ZXJhbCByZXN1bHQoTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgbV92YWx1ZSk7Cisg
ICAgICAgIGlmIChyZXN1bHQubV90eXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICAgICAgcmVz
dWx0Lm1fdHlwZS5yZXNvbHZlKHJlc3VsdC5tX3R5cGUucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGludDY0X3QgdmFsdWVGb3JT
ZWxlY3RlZFR5cGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJbnRlZ2VyTGl0ZXJhbFR5cGUg
bV90eXBlOworICAgIGludCBtX3ZhbHVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30K
KworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJT04oSW50ZWdlckxp
dGVyYWwsIGlzSW50ZWdlckxpdGVyYWwoKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdl
ckxpdGVyYWxUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
ZjgwOTMwYjYxODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldITFNMSW50ZWdlckxpdGVyYWxUeXBlLmgiCisKKyNpbmNsdWRlICJXSExT
TEluZmVyVHlwZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wg
eworCituYW1lc3BhY2UgQVNUIHsKKworSW50ZWdlckxpdGVyYWxUeXBlOjpJbnRlZ2VyTGl0ZXJh
bFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBpbnQgdmFsdWUpCisgICAgOiBtX3ZhbHVlKHZh
bHVlKQorICAgICwgbV9wcmVmZXJyZWRUeXBlKG1ha2VVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4o
V1RGTW92ZShvcmlnaW4pLCBTdHJpbmcoImludCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpLCBUeXBlQXJndW1lbnRzKCkpKQoreworfQorCitJbnRlZ2VyTGl0ZXJhbFR5cGU6On5JbnRl
Z2VyTGl0ZXJhbFR5cGUoKSA9IGRlZmF1bHQ7CisKK2Jvb2wgSW50ZWdlckxpdGVyYWxUeXBlOjpj
YW5SZXNvbHZlKGNvbnN0IFR5cGUmIHR5cGUpIGNvbnN0Cit7CisgICAgaWYgKCFpczxOYW1lZFR5
cGU+KHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgbmFtZWRUeXBlID0g
ZG93bmNhc3Q8TmFtZWRUeXBlPih0eXBlKTsKKyAgICBpZiAoIWlzPE5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRU
eXBlKTsKKyAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc051bWJlcigpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uY2FuUmVwcmVz
ZW50SW50ZWdlcigpKG1fdmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3Vuc2lnbmVkIEludGVnZXJMaXRlcmFsVHlwZTo6Y29udmVyc2lvbkNvc3Qo
Y29uc3QgVW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSBjb25zdAoreworICAgIGlmIChtYXRjaGVz
KHVubmFtZWRUeXBlLCBzdGF0aWNfY2FzdDxjb25zdCBUeXBlUmVmZXJlbmNlJj4obV9wcmVmZXJy
ZWRUeXBlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAxOworfQorCit9IC8vIG5h
bWVzcGFjZSBBU1QKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdlckxpdGVyYWxUeXBlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJh
bFR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOGFjYWYyZTlm
OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUuaApAQCAtMCwwICsxLDc2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hM
U0xSZXNvbHZhYmxlVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgVHlwZVJlZmVyZW5jZTsKKwor
Y2xhc3MgSW50ZWdlckxpdGVyYWxUeXBlIDogcHVibGljIFJlc29sdmFibGVUeXBlIHsKK3B1Ymxp
YzoKKyAgICBJbnRlZ2VyTGl0ZXJhbFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBpbnQgdmFs
dWUpOworCisgICAgdmlydHVhbCB+SW50ZWdlckxpdGVyYWxUeXBlKCk7CisKKyAgICBJbnRlZ2Vy
TGl0ZXJhbFR5cGUoY29uc3QgSW50ZWdlckxpdGVyYWxUeXBlJikgPSBkZWxldGU7CisgICAgSW50
ZWdlckxpdGVyYWxUeXBlKEludGVnZXJMaXRlcmFsVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBJ
bnRlZ2VyTGl0ZXJhbFR5cGUmIG9wZXJhdG9yPShjb25zdCBJbnRlZ2VyTGl0ZXJhbFR5cGUmKSA9
IGRlbGV0ZTsKKyAgICBJbnRlZ2VyTGl0ZXJhbFR5cGUmIG9wZXJhdG9yPShJbnRlZ2VyTGl0ZXJh
bFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc0ludGVnZXJMaXRlcmFsVHlwZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFR5cGVSZWZlcmVuY2UmIHByZWZl
cnJlZFR5cGUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxUeXBlUmVmZXJlbmNlJj4obV9wcmVmZXJy
ZWRUeXBlKTsgfQorCisgICAgYm9vbCBjYW5SZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYpIGNv
bnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGludCBtX3ZhbHVlOworICAgIC8vIFRoaXMg
aXMgYSB1bmlxdWVfcHRyIHRvIHJlc29sdmUgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4K
KyAgICAvLyBDb25zdGFudEV4cHJlc3Npb24gLT4gTGl0ZXJhbFR5cGUgLT4gVHlwZVJlZmVyZW5j
ZSAtPiBUeXBlQXJndW1lbnRzIC0+IENvbnN0YW50RXhwcmVzc2lvbgorICAgIFVuaXF1ZVJlZjxU
eXBlUmVmZXJlbmNlPiBtX3ByZWZlcnJlZFR5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBBU1QK
KworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfUkVTT0xWQUJMRV9UWVBF
KEludGVnZXJMaXRlcmFsVHlwZSwgaXNJbnRlZ2VyTGl0ZXJhbFR5cGUoKSkKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xM
b2dpY2FsRXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMTG9naWNhbEV4cHJlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uNzg3MThiZGZhOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oCkBAIC0w
LDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJH
UFUpCisKKyNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExleGVy
LmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBMb2dpY2FsRXhw
cmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIFR5
cGUgOiB1aW50OF90IHsKKyAgICAgICAgQW5kLAorICAgICAgICBPcgorICAgIH07CisKKyAgICBM
b2dpY2FsRXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFR5cGUgdHlwZSwgVW5pcXVl
UmVmPEV4cHJlc3Npb24+JiYgbGVmdCwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgcmlnaHQpCisg
ICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV90eXBlKHR5
cGUpCisgICAgICAgICwgbV9sZWZ0KFdURk1vdmUobGVmdCkpCisgICAgICAgICwgbV9yaWdodChX
VEZNb3ZlKHJpZ2h0KSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+TG9naWNhbEV4cHJl
c3Npb24oKSA9IGRlZmF1bHQ7CisKKyAgICBMb2dpY2FsRXhwcmVzc2lvbihjb25zdCBMb2dpY2Fs
RXhwcmVzc2lvbiYpID0gZGVsZXRlOworICAgIExvZ2ljYWxFeHByZXNzaW9uKExvZ2ljYWxFeHBy
ZXNzaW9uJiYpID0gZGVmYXVsdDsKKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZTsgfQorCisgICAgYm9vbCBpc0xvZ2ljYWxFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgRXhwcmVzc2lvbiYgbGVmdCgpIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PEV4cHJlc3Npb24mPihtX2xlZnQpOyB9CisgICAgRXhwcmVzc2lvbiYgcmlnaHQoKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxFeHByZXNzaW9uJj4obV9yaWdodCk7IH0KKworcHJpdmF0ZToK
KyAgICBUeXBlIG1fdHlwZTsKKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9sZWZ0OworICAg
IFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX3JpZ2h0OworfTsKKworfSAvLyBuYW1lc3BhY2UgQVNU
CisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJT04oTG9n
aWNhbEV4cHJlc3Npb24sIGlzTG9naWNhbEV4cHJlc3Npb24oKSkKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2Fs
Tm90RXhwcmVzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMC4uZGVjYWQzNWI1MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExl
eGVyLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBMb2dpY2Fs
Tm90RXhwcmVzc2lvbiA6IHB1YmxpYyBFeHByZXNzaW9uIHsKK3B1YmxpYzoKKyAgICBMb2dpY2Fs
Tm90RXhwcmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9u
PiYmIG9wZXJhbmQpCisgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCisgICAg
ICAgICwgbV9vcGVyYW5kKFdURk1vdmUob3BlcmFuZCkpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgfkxvZ2ljYWxOb3RFeHByZXNzaW9uKCkgPSBkZWZhdWx0OworCisgICAgTG9naWNhbE5v
dEV4cHJlc3Npb24oY29uc3QgTG9naWNhbE5vdEV4cHJlc3Npb24mKSA9IGRlbGV0ZTsKKyAgICBM
b2dpY2FsTm90RXhwcmVzc2lvbihMb2dpY2FsTm90RXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CisK
KyAgICBib29sIGlzTG9naWNhbE5vdEV4cHJlc3Npb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisKKyAgICBFeHByZXNzaW9uJiBvcGVyYW5kKCkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8RXhwcmVzc2lvbiY+KG1fb3BlcmFuZCk7IH0KKworcHJpdmF0ZToKKyAgICBVbmlxdWVSZWY8
RXhwcmVzc2lvbj4gbV9vcGVyYW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKwor
fQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJT04oTG9naWNhbE5vdEV4
cHJlc3Npb24sIGlzTG9naWNhbE5vdEV4cHJlc3Npb24oKSkKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xNYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjY2ODhmODdmMzk2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZUFycmF5UmVm
ZXJlbmNlRXhwcmVzc2lvbi5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24u
aCIKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBB
U1QgeworCitjbGFzcyBNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uIDogcHVibGljIEV4cHJl
c3Npb24geworcHVibGljOgorICAgIE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24oTGV4ZXI6
OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsVmFsdWUpCisgICAgICAg
IDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9sVmFsdWUoV1RGTW92
ZShsVmFsdWUpKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5NYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uKCkgPSBkZWZhdWx0OworCisgICAgTWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbihjb25zdCBNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJikgPSBkZWxldGU7CisgICAg
TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbihNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
JiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgRXhwcmVzc2lvbiYgbFZh
bHVlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RXhwcmVzc2lvbiY+KG1fbFZhbHVlKTsgfQorCitw
cml2YXRlOgorICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xWYWx1ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIEFTVAorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9F
WFBSRVNTSU9OKE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIGlzTWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbigpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBkYTRiZTU4
OWRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmgKQEAgLTAsMCArMSw2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUg
IldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlIDx3
dGYvVW5pcXVlUmVmLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNM
IHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIE1ha2VQb2ludGVyRXhwcmVzc2lvbiA6IHB1
YmxpYyBFeHByZXNzaW9uIHsKK3B1YmxpYzoKKyAgICBNYWtlUG9pbnRlckV4cHJlc3Npb24oTGV4
ZXI6OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBsVmFsdWUpCisgICAg
ICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9sVmFsdWUoV1RG
TW92ZShsVmFsdWUpKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5NYWtlUG9pbnRlckV4
cHJlc3Npb24oKSA9IGRlZmF1bHQ7CisKKyAgICBNYWtlUG9pbnRlckV4cHJlc3Npb24oY29uc3Qg
TWFrZVBvaW50ZXJFeHByZXNzaW9uJikgPSBkZWxldGU7CisgICAgTWFrZVBvaW50ZXJFeHByZXNz
aW9uKE1ha2VQb2ludGVyRXhwcmVzc2lvbiYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzTWFr
ZVBvaW50ZXJFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RXhwcmVzc2lvbiY+
KG1fbFZhbHVlKTsgfQorCitwcml2YXRlOgorICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2xW
YWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19XSExTTF9FWFBSRVNTSU9OKE1ha2VQb2ludGVyRXhwcmVzc2lvbiwgaXNNYWtl
UG9pbnRlckV4cHJlc3Npb24oKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYW1lZFR5cGUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlwZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mOTBkYmVmM2NkOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hbWVkVHlw
ZS5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xO
b2RlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFt
ZXNwYWNlIEFTVCB7CisKK2NsYXNzIE5hbWVkVHlwZSA6IHB1YmxpYyBUeXBlIHsKK3B1YmxpYzoK
KyAgICBOYW1lZFR5cGUoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBTdHJpbmcmJiBuYW1lKQorICAg
ICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgLCBtX25hbWUoV1RGTW92
ZShuYW1lKSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+TmFtZWRUeXBlKCkgPSBkZWZh
dWx0OworCisgICAgTmFtZWRUeXBlKGNvbnN0IE5hbWVkVHlwZSYpID0gZGVsZXRlOworICAgIE5h
bWVkVHlwZShOYW1lZFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgY29uc3QgTGV4ZXI6OlRva2Vu
JiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIFN0cmluZyYgbmFtZSgp
IHsgcmV0dXJuIG1fbmFtZTsgfQorCisgICAgYm9vbCBpc05hbWVkVHlwZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBlRGVmaW5pdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzU3RydWN0dXJlRGVm
aW5pdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzRW51
bWVyYXRpb25EZWZpbml0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgaXNOYXRpdmVUeXBlRGVjbGFyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
CisgICAgdmlydHVhbCBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCB7IHJldHVybiAqdGhp
czsgfQorICAgIHZpcnR1YWwgVHlwZSYgdW5pZnlOb2RlKCkgeyByZXR1cm4gKnRoaXM7IH0KKwor
cHJpdmF0ZToKKyAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CisgICAgU3RyaW5nIG1fbmFtZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX1dITFNMX05BTUVEX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUp
IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9W
YWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldI
TFNMOjpBU1Q6Ok5hbWVkVHlwZSYgdHlwZSkgeyByZXR1cm4gdHlwZS5wcmVkaWNhdGU7IH0gXAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dI
TFNMX1RZUEUoTmFtZWRUeXBlLCBpc05hbWVkVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uMDZkOGUzNjIyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFj
ZSBBU1QgeworCitjbGFzcyBOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHVibGljIEZ1bmN0
aW9uRGVjbGFyYXRpb24geworcHVibGljOgorICAgIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
RnVuY3Rpb25EZWNsYXJhdGlvbiYmIGZ1bmN0aW9uRGVjbGFyYXRpb24sIGJvb2wgcmVzdHJpY3Rl
ZCkKKyAgICAgICAgOiBGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoZnVuY3Rpb25EZWNsYXJh
dGlvbikpCisgICAgICAgICwgbV9yZXN0cmljdGVkKHJlc3RyaWN0ZWQpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgfk5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSA9IGRlZmF1bHQ7CisK
KyAgICBOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKGNvbnN0IE5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24mKSA9IGRlbGV0ZTsKKyAgICBOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKE5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc05hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBi
b29sIHJlc3RyaWN0ZWQoKSBjb25zdCB7IHJldHVybiBtX3Jlc3RyaWN0ZWQ7IH0KKworcHJpdmF0
ZToKKyAgICBib29sIG1fcmVzdHJpY3RlZDsKK307CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9
CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9GVU5DVElPTl9ERUNMQVJBVElP
TihOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLCBpc05hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
KSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNzk4MGI0ZjQwZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5oCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xMZXhlci5o
IgorI2luY2x1ZGUgIldITFNMTmFtZWRUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1l
bnQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgTmF0
aXZlVHlwZURlY2xhcmF0aW9uIDogcHVibGljIE5hbWVkVHlwZSB7CitwdWJsaWM6CisgICAgTmF0
aXZlVHlwZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwg
VHlwZUFyZ3VtZW50cyYmIHR5cGVBcmd1bWVudHMpCisgICAgICAgIDogTmFtZWRUeXBlKFdURk1v
dmUob3JpZ2luKSwgV1RGTW92ZShuYW1lKSkKKyAgICAgICAgLCBtX3R5cGVBcmd1bWVudHMoV1RG
TW92ZSh0eXBlQXJndW1lbnRzKSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+TmF0aXZl
VHlwZURlY2xhcmF0aW9uKCkgPSBkZWZhdWx0OworCisgICAgTmF0aXZlVHlwZURlY2xhcmF0aW9u
KGNvbnN0IE5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYpID0gZGVsZXRlOworICAgIE5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbihOYXRpdmVUeXBlRGVjbGFyYXRpb24mJikgPSBkZWZhdWx0OworCisgICAgYm9v
bCBpc05hdGl2ZVR5cGVEZWNsYXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KKworICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQor
ICAgIFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIFR5cGVBcmd1bWVudHMm
IHR5cGVBcmd1bWVudHMoKSB7IHJldHVybiBtX3R5cGVBcmd1bWVudHM7IH0KKworICAgIGJvb2wg
aXNJbnQoKSBjb25zdCB7IHJldHVybiBtX2lzSW50OyB9CisgICAgYm9vbCBpc051bWJlcigpIGNv
bnN0IHsgcmV0dXJuIG1faXNOdW1iZXI7IH0KKyAgICBib29sIGlzRmxvYXRpbmcoKSBjb25zdCB7
IHJldHVybiBtX2lzRmxvYXRpbmc7IH0KKyAgICBib29sIGlzVmVjdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9pc1ZlY3RvcjsgfQorICAgIGJvb2wgaXNNYXRyaXgoKSBjb25zdCB7IHJldHVybiBtX2lz
TWF0cml4OyB9CisgICAgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2lzVGV4dHVy
ZTsgfQorICAgIGJvb2wgaXNTaWduZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2lnbmVkOyB9Cisg
ICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGludCk+JiBjYW5SZXByZXNlbnRJbnRlZ2VyKCkg
Y29uc3QgeyByZXR1cm4gbV9jYW5SZXByZXNlbnRJbnRlZ2VyOyB9CisgICAgY29uc3Qgc3RkOjpm
dW5jdGlvbjxib29sKHVuc2lnbmVkKT4mIGNhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcigpIGNv
bnN0IHsgcmV0dXJuIG1fY2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyOyB9CisgICAgY29uc3Qg
c3RkOjpmdW5jdGlvbjxib29sKGZsb2F0KT4mIGNhblJlcHJlc2VudEZsb2F0KCkgY29uc3QgeyBy
ZXR1cm4gbV9jYW5SZXByZXNlbnRGbG9hdDsgfQorICAgIGNvbnN0IHN0ZDo6ZnVuY3Rpb248aW50
NjRfdChpbnQ2NF90KT4mIHN1Y2Nlc3NvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yOyB9
CisgICAgY29uc3Qgc3RkOjpmdW5jdGlvbjxpbnQ2NF90KGludCk+JiBmb3JtYXRWYWx1ZUZyb21J
bnRlZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXRWYWx1ZUZyb21JbnRlZ2VyOyB9CisgICAg
Y29uc3Qgc3RkOjpmdW5jdGlvbjxpbnQ2NF90KHVuc2lnbmVkKT4mIGZvcm1hdFZhbHVlRnJvbVVu
c2lnbmVkSW50ZWdlcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJ
bnRlZ2VyOyB9CisgICAgdm9pZCBpdGVyYXRlQWxsVmFsdWVzKGNvbnN0IHN0ZDo6ZnVuY3Rpb248
Ym9vbChpbnQ2NF90KT4mIGNhbGxiYWNrKSB7IG1faXRlcmF0ZUFsbFZhbHVlcyhjYWxsYmFjayk7
IH0KKworICAgIHZvaWQgc2V0SXNJbnQoKSB7IG1faXNJbnQgPSB0cnVlOyB9CisgICAgdm9pZCBz
ZXRJc051bWJlcigpIHsgbV9pc051bWJlciA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzRmxvYXRp
bmcoKSB7IG1faXNGbG9hdGluZyA9IHRydWU7IH0KKyAgICB2b2lkIHNldElzVmVjdG9yKCkgeyBt
X2lzVmVjdG9yID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0SXNNYXRyaXgoKSB7IG1faXNNYXRyaXgg
PSB0cnVlOyB9CisgICAgdm9pZCBzZXRJc1RleHR1cmUoKSB7IG1faXNUZXh0dXJlID0gdHJ1ZTsg
fQorICAgIHZvaWQgc2V0SXNTaWduZWQoKSB7IG1faXNTaWduZWQgPSB0cnVlOyB9CisgICAgdm9p
ZCBzZXRDYW5SZXByZXNlbnRJbnRlZ2VyKHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQpPiYmIGNhblJl
cHJlc2VudCkgeyBtX2NhblJlcHJlc2VudEludGVnZXIgPSBXVEZNb3ZlKGNhblJlcHJlc2VudCk7
IH0KKyAgICB2b2lkIHNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihzdGQ6OmZ1bmN0aW9u
PGJvb2wodW5zaWduZWQpPiYmIGNhblJlcHJlc2VudCkgeyBtX2NhblJlcHJlc2VudFVuc2lnbmVk
SW50ZWdlciA9IFdURk1vdmUoY2FuUmVwcmVzZW50KTsgfQorICAgIHZvaWQgc2V0Q2FuUmVwcmVz
ZW50RmxvYXQoc3RkOjpmdW5jdGlvbjxib29sKGZsb2F0KT4mJiBjYW5SZXByZXNlbnQpIHsgbV9j
YW5SZXByZXNlbnRGbG9hdCA9IFdURk1vdmUoY2FuUmVwcmVzZW50KTsgfQorICAgIHZvaWQgc2V0
U3VjY2Vzc29yKHN0ZDo6ZnVuY3Rpb248aW50NjRfdChpbnQ2NF90KT4mJiBzdWNjZXNzb3IpIHsg
bV9zdWNjZXNzb3IgPSBXVEZNb3ZlKHN1Y2Nlc3Nvcik7IH0KKyAgICB2b2lkIHNldEZvcm1hdFZh
bHVlRnJvbUludGVnZXIoc3RkOjpmdW5jdGlvbjxpbnQ2NF90KGludCk+JiYgZm9ybWF0VmFsdWUp
IHsgbV9mb3JtYXRWYWx1ZUZyb21JbnRlZ2VyID0gV1RGTW92ZShmb3JtYXRWYWx1ZSk7IH0KKyAg
ICB2b2lkIHNldEZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcihzdGQ6OmZ1bmN0aW9uPGlu
dDY0X3QodW5zaWduZWQpPiYmIGZvcm1hdFZhbHVlKSB7IG1fZm9ybWF0VmFsdWVGcm9tVW5zaWdu
ZWRJbnRlZ2VyID0gV1RGTW92ZShmb3JtYXRWYWx1ZSk7IH0KKyAgICB2b2lkIHNldEl0ZXJhdGVB
bGxWYWx1ZXMoc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2
NF90KT4mKT4mJiBpdGVyYXRlQWxsVmFsdWVzKSB7IG1faXRlcmF0ZUFsbFZhbHVlcyA9IFdURk1v
dmUoaXRlcmF0ZUFsbFZhbHVlcyk7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9uYW1lOwor
ICAgIFR5cGVBcmd1bWVudHMgbV90eXBlQXJndW1lbnRzOworICAgIHN0ZDo6ZnVuY3Rpb248Ym9v
bChpbnQpPiBtX2NhblJlcHJlc2VudEludGVnZXI7CisgICAgc3RkOjpmdW5jdGlvbjxib29sKHVu
c2lnbmVkKT4gbV9jYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXI7CisgICAgc3RkOjpmdW5jdGlv
bjxib29sKGZsb2F0KT4gbV9jYW5SZXByZXNlbnRGbG9hdDsKKyAgICBzdGQ6OmZ1bmN0aW9uPGlu
dDY0X3QoaW50NjRfdCk+IG1fc3VjY2Vzc29yOworICAgIHN0ZDo6ZnVuY3Rpb248aW50NjRfdChp
bnQpPiBtX2Zvcm1hdFZhbHVlRnJvbUludGVnZXI7CisgICAgc3RkOjpmdW5jdGlvbjxpbnQ2NF90
KHVuc2lnbmVkKT4gbV9mb3JtYXRWYWx1ZUZyb21VbnNpZ25lZEludGVnZXI7CisgICAgc3RkOjpm
dW5jdGlvbjx2b2lkKGNvbnN0IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2NF90KT4mKT4gbV9pdGVy
YXRlQWxsVmFsdWVzOworICAgIGJvb2wgbV9pc0ludCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lz
TnVtYmVyIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNGbG9hdGluZyB7IGZhbHNlIH07CisgICAg
Ym9vbCBtX2lzVmVjdG9yIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNNYXRyaXggeyBmYWxzZSB9
OworICAgIGJvb2wgbV9pc1RleHR1cmUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1NpZ25lZCB7
IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfV0hMU0xfTkFNRURfVFlQRShOYXRpdmVUeXBlRGVjbGFyYXRpb24sIGlz
TmF0aXZlVHlwZURlY2xhcmF0aW9uKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTm9kZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTm9kZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMTc5MGI1ZTFlYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE5vZGUuaApAQCAtMCww
ICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BV
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFj
ZSBBU1QgeworCitjbGFzcyBOb2RlIHsKK3B1YmxpYzoKKyAgICBOb2RlKCkgPSBkZWZhdWx0Owor
CisgICAgdmlydHVhbCB+Tm9kZSgpID0gZGVmYXVsdDsKKworICAgIGV4cGxpY2l0IE5vZGUoY29u
c3QgTm9kZSYpID0gZGVmYXVsdDsKKyAgICBOb2RlKE5vZGUmJikgPSBkZWZhdWx0OworCisgICAg
Tm9kZSYgb3BlcmF0b3I9KGNvbnN0IE5vZGUmKSA9IGRlZmF1bHQ7CisgICAgTm9kZSYgb3BlcmF0
b3I9KE5vZGUmJikgPSBkZWZhdWx0OworCitwcml2YXRlOgorfTsKKworfSAvLyBuYW1lc3BhY2Ug
QVNUCisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNTAyNzJmZTY2MQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTE51bGxMaXRlcmFs
LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFsVHlwZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitj
bGFzcyBOdWxsTGl0ZXJhbCA6IHB1YmxpYyBFeHByZXNzaW9uIHsKK3B1YmxpYzoKKyAgICBOdWxs
TGl0ZXJhbChMZXhlcjo6VG9rZW4mJiBvcmlnaW4pCisgICAgICAgIDogRXhwcmVzc2lvbihXVEZN
b3ZlKG9yaWdpbikpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfk51bGxMaXRlcmFsKCkg
PSBkZWZhdWx0OworCisgICAgTnVsbExpdGVyYWwoY29uc3QgTnVsbExpdGVyYWwmKSA9IGRlbGV0
ZTsKKyAgICBOdWxsTGl0ZXJhbChOdWxsTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBOdWxs
TGl0ZXJhbCYgb3BlcmF0b3I9KGNvbnN0IE51bGxMaXRlcmFsJikgPSBkZWxldGU7CisgICAgTnVs
bExpdGVyYWwmIG9wZXJhdG9yPShOdWxsTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBOdWxs
TGl0ZXJhbFR5cGUmIHR5cGUoKSB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIGJvb2wgaXNOdWxs
TGl0ZXJhbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIE51bGxMaXRl
cmFsIGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gTnVsbExpdGVy
YWwoTGV4ZXI6OlRva2VuKG9yaWdpbigpKSk7CisgICAgICAgIGlmIChyZXN1bHQubV90eXBlLnJl
c29sdmVkVHlwZSgpKQorICAgICAgICAgICAgcmVzdWx0Lm1fdHlwZS5yZXNvbHZlKHJlc3VsdC5t
X3R5cGUucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBOdWxsTGl0ZXJhbFR5cGUgbV90eXBlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNM
X0VYUFJFU1NJT04oTnVsbExpdGVyYWwsIGlzTnVsbExpdGVyYWwoKSkKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxs
TGl0ZXJhbFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMTnVsbExpdGVyYWxUeXBlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uMzljMTFmZDU0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbFR5cGUuY3BwCkBAIC0wLDAg
KzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldITFNMTnVsbExpdGVyYWxUeXBlLmgiCisKKyNpbmNsdWRlICJX
SExTTFJlZmVyZW5jZVR5cGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
V0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworYm9vbCBOdWxsTGl0ZXJhbFR5cGU6OmNhblJl
c29sdmUoY29uc3QgVHlwZSYgdHlwZSkgY29uc3QKK3sKKyAgICBpZiAoIWlzPFVubmFtZWRUeXBl
Pih0eXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8mIHVubmFtZWRUeXBlID0g
ZG93bmNhc3Q8VW5uYW1lZFR5cGU+KHR5cGUpOworICAgIGlmICghaXM8UmVmZXJlbmNlVHlwZT4o
dW5uYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3Vuc2lnbmVkIE51bGxMaXRlcmFsVHlwZTo6Y29udmVyc2lvbkNvc3QoY29uc3QgVW5uYW1l
ZFR5cGUmKSBjb25zdAoreworICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBBU1QK
KworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVyYWxUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjYwYTc3NjkwZGQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdWxsTGl0
ZXJhbFR5cGUuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBB
U1QgeworCitjbGFzcyBOdWxsTGl0ZXJhbFR5cGUgOiBwdWJsaWMgUmVzb2x2YWJsZVR5cGUgewor
cHVibGljOgorICAgIE51bGxMaXRlcmFsVHlwZSgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwg
fk51bGxMaXRlcmFsVHlwZSgpID0gZGVmYXVsdDsKKworICAgIE51bGxMaXRlcmFsVHlwZShjb25z
dCBOdWxsTGl0ZXJhbFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBOdWxsTGl0ZXJhbFR5cGUoTnVsbExp
dGVyYWxUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIE51bGxMaXRlcmFsVHlwZSYgb3BlcmF0b3I9
KGNvbnN0IE51bGxMaXRlcmFsVHlwZSYpID0gZGVsZXRlOworICAgIE51bGxMaXRlcmFsVHlwZSYg
b3BlcmF0b3I9KE51bGxMaXRlcmFsVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzTnVs
bExpdGVyYWxUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9v
bCBjYW5SZXNvbHZlKGNvbnN0IFR5cGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICB1bnNpZ25lZCBj
b252ZXJzaW9uQ29zdChjb25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorfTsKKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dITFNMX1JFU09MVkFCTEVfVFlQRShOdWxsTGl0ZXJhbFR5cGUsIGlzTnVsbExp
dGVyYWxUeXBlKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xOdW1UaHJlYWRzRnVu
Y3Rpb25BdHRyaWJ1dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
OGM4OGYyZDc3NDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUuaApAQCAtMCww
ICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BV
KQorCisjaW5jbHVkZSAiV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xh
c3MgTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlIDogcHVibGljIEJhc2VGdW5jdGlvbkF0dHJp
YnV0ZSB7CitwdWJsaWM6CisgICAgTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKExleGVyOjpU
b2tlbiYmIG9yaWdpbiwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwgdW5zaWduZWQg
ZGVwdGgpCisgICAgICAgIDogQmFzZUZ1bmN0aW9uQXR0cmlidXRlKFdURk1vdmUob3JpZ2luKSkK
KyAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAsIG1faGVpZ2h0KGhlaWdodCkKKyAg
ICAgICAgLCBtX2RlcHRoKGRlcHRoKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5OdW1U
aHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUoKSA9IGRlZmF1bHQ7CisKKyAgICBOdW1UaHJlYWRzRnVu
Y3Rpb25BdHRyaWJ1dGUoY29uc3QgTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJikgPSBkZWxl
dGU7CisgICAgTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKE51bVRocmVhZHNGdW5jdGlvbkF0
dHJpYnV0ZSYmKSA9IGRlZmF1bHQ7CisKKyAgICB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fd2lkdGg7IH0KKyAgICB1bnNpZ25lZCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hl
aWdodDsgfQorICAgIHVuc2lnbmVkIGRlcHRoKCkgY29uc3QgeyByZXR1cm4gbV9kZXB0aDsgfQor
Citwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fd2lkdGg7CisgICAgdW5zaWduZWQgbV9oZWlnaHQ7
CisgICAgdW5zaWduZWQgbV9kZXB0aDsKK307CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uMDVlM2JlNjU2OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQb2ludGVyVHlwZS5oCkBAIC0wLDAg
KzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUp
CisKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBl
LmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25h
bWVzcGFjZSBBU1QgeworCitjbGFzcyBQb2ludGVyVHlwZSA6IHB1YmxpYyBSZWZlcmVuY2VUeXBl
IHsKK3B1YmxpYzoKKyAgICBQb2ludGVyVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEFkZHJl
c3NTcGFjZSBhZGRyZXNzU3BhY2UsIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gZWxlbWVudFR5cGUp
CisgICAgICAgIDogUmVmZXJlbmNlVHlwZShXVEZNb3ZlKG9yaWdpbiksIGFkZHJlc3NTcGFjZSwg
V1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgflBvaW50
ZXJUeXBlKCkgPSBkZWZhdWx0OworCisgICAgUG9pbnRlclR5cGUoY29uc3QgUG9pbnRlclR5cGUm
KSA9IGRlbGV0ZTsKKyAgICBQb2ludGVyVHlwZShQb2ludGVyVHlwZSYmKSA9IGRlZmF1bHQ7CisK
KyAgICBib29sIGlzUG9pbnRlclR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CisKKyAgICBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+IGNsb25lKCkgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFBvaW50ZXJUeXBlPihMZXhlcjo6VG9r
ZW4ob3JpZ2luKCkpLCBhZGRyZXNzU3BhY2UoKSwgZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAg
ICB9CisKK3ByaXZhdGU6Cit9OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVU5OQU1FRF9UWVBFKFBvaW50ZXJUeXBlLCBpc1Bv
aW50ZXJUeXBlKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4
cHJlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWY3NDVj
NGZkZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaApAQCAtMCwwICsxLDkzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5j
bHVkZSAiV0hMU0xFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1
ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
V0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgUHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uIDogcHVibGljIEV4cHJlc3Npb24geworcHVibGljOgorICAgIFByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiYmIGJh
c2UpCisgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9i
YXNlKFdURk1vdmUoYmFzZSkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgflByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbigpID0gZGVmYXVsdDsKKworICAgIFByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbihjb25zdCBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKSA9IGRlbGV0ZTsKKyAgICBQcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24oUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiYpID0gZGVmYXVs
dDsKKworICAgIGJvb2wgaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24oKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRGdW5jdGlvbk5hbWUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgc2V0RnVuY3Rpb25OYW1lKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGFuZEZ1bmN0aW9uTmFtZSgpIGNvbnN0ID0gMDsKKwor
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAx
PiYgcG9zc2libGVHZXRPdmVybG9hZHMoKSB7IHJldHVybiBtX3Bvc3NpYmxlR2V0T3ZlcmxvYWRz
OyB9CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlv
bj4sIDE+JiBwb3NzaWJsZVNldE92ZXJsb2FkcygpIHsgcmV0dXJuIG1fcG9zc2libGVTZXRPdmVy
bG9hZHM7IH0KKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xh
cmF0aW9uPiwgMT4mIHBvc3NpYmxlQW5kT3ZlcmxvYWRzKCkgeyByZXR1cm4gbV9wb3NzaWJsZUFu
ZE92ZXJsb2FkczsgfQorCisgICAgdm9pZCBzZXRQb3NzaWJsZUdldE92ZXJsb2Fkcyhjb25zdCBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4mIG92
ZXJsb2FkcykKKyAgICB7CisgICAgICAgIG1fcG9zc2libGVHZXRPdmVybG9hZHMgPSBvdmVybG9h
ZHM7CisgICAgfQorICAgIHZvaWQgc2V0UG9zc2libGVTZXRPdmVybG9hZHMoY29uc3QgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8RnVuY3Rpb25EZWNsYXJhdGlvbj4sIDE+JiBvdmVybG9h
ZHMpCisgICAgeworICAgICAgICBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRzID0gb3ZlcmxvYWRzOwor
ICAgIH0KKyAgICB2b2lkIHNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKGNvbnN0IFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgb3ZlcmxvYWRzKQor
ICAgIHsKKyAgICAgICAgbV9wb3NzaWJsZUFuZE92ZXJsb2FkcyA9IG92ZXJsb2FkczsKKyAgICB9
CisKKyAgICBFeHByZXNzaW9uJiBiYXNlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RXhwcmVzc2lv
biY+KG1fYmFzZSk7IH0KKworcHJpdmF0ZToKKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9i
YXNlOworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRp
b24+LCAxPiBtX3Bvc3NpYmxlR2V0T3ZlcmxvYWRzOworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtX3Bvc3NpYmxlU2V0T3ZlcmxvYWRz
OworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEZ1bmN0aW9uRGVjbGFyYXRpb24+
LCAxPiBtX3Bvc3NpYmxlQW5kT3ZlcmxvYWRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgQVNUCisK
K30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJT04oUHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLCBpc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbigpKQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFF1YWxpZmllci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMUXVhbGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmZmNjVjZDBmOTNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMUXVhbGlmaWVyLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2VudW0gY2xhc3Mg
UXVhbGlmaWVyIDogdWludDhfdCB7CisgICAgTm9pbnRlcnBvbGF0aW9uLAorICAgIE5vcGVyc3Bl
Y3RpdmUsCisgICAgVW5pZm9ybSwKKyAgICBDZW50cm9pZCwKKyAgICBTYW1wbGUKK307CisKK3Vz
aW5nIFF1YWxpZmllcnMgPSBWZWN0b3I8UXVhbGlmaWVyPjsKKworfSAvLyBuYW1lc3BhY2UgQVNU
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlYWRNb2RpZnlXcml0ZUV4
cHJlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTQ3YmRi
N2VmMjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmgKQEAgLTAsMCArMSwxMjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNp
bmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEV4cHJl
c3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJs
ZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVm
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNw
YWNlIEFTVCB7CisKKy8qCisgKiAgMS4gRXZhbHVhdGUgbV9sVmFsdWUKKyAqICAyLiBBc3NpZ24g
dGhlIHJlc3VsdCB0byBtX29sZFZhbHVlCisgKiAgMy4gRXZhbHVhdGUgbV9uZXdWYWx1ZUV4cHJl
c3Npb24KKyAqICA0LiBBc3NpZ24gdGhlIHJlc3VsdCB0byBtX25ld1ZhbHVlCisgKiAgNS4gQXNz
aWduIHRoZSByZXN1bHQgdG8gbV9sVmFsdWUKKyAqICA2LiBFdmFsdWF0ZSBtX3Jlc3VsdEV4cHJl
c3Npb24KKyAqICA3LiBSZXR1cm4gdGhlIHJlc3VsdAorICovCitjbGFzcyBSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24geworcHVibGljOgorICAgIHN0YXRpYyBV
bmlxdWVSZWY8UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4gY3JlYXRlKExleGVyOjpUb2tlbiYm
IG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+IGxWYWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtYWtlVW5pcXVlUmVmPFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24+KFdURk1vdmUob3Jp
Z2luKSwgV1RGTW92ZShsVmFsdWUpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5SZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uKCkgPSBkZWZhdWx0OworCisgICAgUmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbihjb25zdCBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJikgPSBkZWxldGU7CisgICAgUmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbihSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiYpID0gZGVm
YXVsdDsKKworICAgIHZvaWQgc2V0TmV3VmFsdWVFeHByZXNzaW9uKFVuaXF1ZVJlZjxFeHByZXNz
aW9uPiYmIG5ld1ZhbHVlRXhwcmVzc2lvbikKKyAgICB7CisgICAgICAgIG1fbmV3VmFsdWVFeHBy
ZXNzaW9uID0gV1RGTW92ZShuZXdWYWx1ZUV4cHJlc3Npb24pOworICAgIH0KKworICAgIHZvaWQg
c2V0UmVzdWx0RXhwcmVzc2lvbihVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiByZXN1bHRFeHByZXNz
aW9uKQorICAgIHsKKyAgICAgICAgbV9yZXN1bHRFeHByZXNzaW9uID0gV1RGTW92ZShyZXN1bHRF
eHByZXNzaW9uKTsKKyAgICB9CisKKyAgICBVbmlxdWVSZWY8VmFyaWFibGVSZWZlcmVuY2U+IG9s
ZFZhcmlhYmxlUmVmZXJlbmNlKCkKKyAgICB7CisgICAgICAgIC8vIFRoZSBvbmx5IHJlYXNvbiB3
ZSBkb24ndCBnZXQgdXNlLWFmdGVyLWZyZWVzIGlzIHRoZSBmYWN0IHRoYXQgZXZlcnkgaW5zdGFu
Y2Ugb2YgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiBpcyBhbGxvY2F0ZWQgb24gdGhlIGhlYXAu
CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPFZhcmlhYmxlUmVmZXJlbmNlPihWYXJpYWJs
ZVJlZmVyZW5jZTo6d3JhcChtX29sZFZhbHVlKSk7CisgICAgfQorCisgICAgVW5pcXVlUmVmPFZh
cmlhYmxlUmVmZXJlbmNlPiBuZXdWYXJpYWJsZVJlZmVyZW5jZSgpCisgICAgeworICAgICAgICAv
LyBUaGUgb25seSByZWFzb24gd2UgZG9uJ3QgZ2V0IHVzZS1hZnRlci1mcmVlcyBpcyB0aGUgZmFj
dCB0aGF0IGV2ZXJ5IGluc3RhbmNlIG9mIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24gaXMgYWxs
b2NhdGVkIG9uIHRoZSBoZWFwLgorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxWYXJpYWJs
ZVJlZmVyZW5jZT4oVmFyaWFibGVSZWZlcmVuY2U6OndyYXAobV9uZXdWYWx1ZSkpOworICAgIH0K
KworICAgIGJvb2wgaXNSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgRXhwcmVzc2lvbiYgbFZhbHVlKCkgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8RXhwcmVzc2lvbiY+KG1fbFZhbHVlKTsgfQorICAgIFZhcmlhYmxlRGVjbGFyYXRp
b24mIG9sZFZhbHVlKCkgeyByZXR1cm4gbV9vbGRWYWx1ZTsgfQorICAgIFZhcmlhYmxlRGVjbGFy
YXRpb24mIG5ld1ZhbHVlKCkgeyByZXR1cm4gbV9uZXdWYWx1ZTsgfQorICAgIEV4cHJlc3Npb24q
IG5ld1ZhbHVlRXhwcmVzc2lvbigpIHsgcmV0dXJuIG1fbmV3VmFsdWVFeHByZXNzaW9uID8gJnN0
YXRpY19jYXN0PEV4cHJlc3Npb24mPigqbV9uZXdWYWx1ZUV4cHJlc3Npb24pIDogbnVsbHB0cjsg
fQorICAgIEV4cHJlc3Npb24qIHJlc3VsdEV4cHJlc3Npb24oKSB7IHJldHVybiBtX3Jlc3VsdEV4
cHJlc3Npb24gPyAmc3RhdGljX2Nhc3Q8RXhwcmVzc2lvbiY+KCptX3Jlc3VsdEV4cHJlc3Npb24p
IDogbnVsbHB0cjsgfQorCitwcml2YXRlOgorICAgIHRlbXBsYXRlPGNsYXNzIFUsIGNsYXNzLi4u
IEFyZ3M+IGZyaWVuZCBVbmlxdWVSZWY8VT4gV1RGOjptYWtlVW5pcXVlUmVmKEFyZ3MmJi4uLik7
CisKKyAgICBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwg
VW5pcXVlUmVmPEV4cHJlc3Npb24+IGxWYWx1ZSkKKyAgICAgICAgOiBFeHByZXNzaW9uKExleGVy
OjpUb2tlbihvcmlnaW4pKQorICAgICAgICAsIG1fbFZhbHVlKFdURk1vdmUobFZhbHVlKSkKKyAg
ICAgICAgLCBtX29sZFZhbHVlKExleGVyOjpUb2tlbihvcmlnaW4pLCBRdWFsaWZpZXJzKCksIFdU
Rjo6bnVsbG9wdCwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KQorICAgICAg
ICAsIG1fbmV3VmFsdWUoV1RGTW92ZShvcmlnaW4pLCBRdWFsaWZpZXJzKCksIFdURjo6bnVsbG9w
dCwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KQorICAgIHsKKyAgICB9CisK
KyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV9sVmFsdWU7CisgICAgVmFyaWFibGVEZWNsYXJh
dGlvbiBtX29sZFZhbHVlOworICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbV9uZXdWYWx1ZTsKKyAg
ICBPcHRpb25hbDxVbmlxdWVSZWY8RXhwcmVzc2lvbj4+IG1fbmV3VmFsdWVFeHByZXNzaW9uOwor
ICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9yZXN1bHRFeHByZXNzaW9uOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX1dITFNMX0VYUFJFU1NJT04oUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiwgaXNSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVmZXJlbmNlVHlwZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mMmJhMTc0N2M0OAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFJlZmVyZW5jZVR5cGUuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2lu
Y2x1ZGUgIldITFNMVW5uYW1lZFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIFJlZmVyZW5jZVR5
cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgQWRkcmVz
c1NwYWNlIDogdWludDhfdCB7CisgICAgICAgIENvbnN0YW50LAorICAgICAgICBEZXZpY2UsCisg
ICAgICAgIFRocmVhZGdyb3VwLAorICAgICAgICBUaHJlYWQKKyAgICB9OworCisgICAgUmVmZXJl
bmNlVHlwZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2Us
IFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4mJiBlbGVtZW50VHlwZSkKKyAgICAgICAgOiBVbm5hbWVk
VHlwZShXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9hZGRyZXNzU3BhY2UoYWRkcmVzc1Nw
YWNlKQorICAgICAgICAsIG1fZWxlbWVudFR5cGUoV1RGTW92ZShlbGVtZW50VHlwZSkpCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgflJlZmVyZW5jZVR5cGUoKSA9IGRlZmF1bHQ7CisKKyAg
ICBSZWZlcmVuY2VUeXBlKGNvbnN0IFJlZmVyZW5jZVR5cGUmKSA9IGRlbGV0ZTsKKyAgICBSZWZl
cmVuY2VUeXBlKFJlZmVyZW5jZVR5cGUmJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc1JlZmVy
ZW5jZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgQWRkcmVz
c1NwYWNlIGFkZHJlc3NTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWRkcmVzc1NwYWNlOyB9Cisg
ICAgY29uc3QgVW5uYW1lZFR5cGUmIGVsZW1lbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgVW5uYW1lZFR5cGUmPihtX2VsZW1lbnRUeXBlKTsgfQorICAgIFVubmFtZWRU
eXBlJiBlbGVtZW50VHlwZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFVubmFtZWRUeXBlJj4obV9l
bGVtZW50VHlwZSk7IH0KKworcHJpdmF0ZToKKyAgICBBZGRyZXNzU3BhY2UgbV9hZGRyZXNzU3Bh
Y2U7CisgICAgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBtX2VsZW1lbnRUeXBlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNM
X1VOTkFNRURfVFlQRShSZWZlcmVuY2VUeXBlLCBpc1JlZmVyZW5jZVR5cGUoKSkKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xSZXNvbHZhYmxlVHlwZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMUmVzb2x2YWJsZVR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uM2E4NWMxZjRiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZXNvbHZhYmxlVHlwZS5oCkBAIC0wLDAgKzEs
ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisK
KyNpbmNsdWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCisj
aW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExT
TCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBSZXNvbHZhYmxlVHlwZSA6IHB1YmxpYyBU
eXBlIHsKK3B1YmxpYzoKKyAgICBSZXNvbHZhYmxlVHlwZSgpID0gZGVmYXVsdDsKKworICAgIHZp
cnR1YWwgflJlc29sdmFibGVUeXBlKCkgPSBkZWZhdWx0OworCisgICAgUmVzb2x2YWJsZVR5cGUo
Y29uc3QgUmVzb2x2YWJsZVR5cGUmKSA9IGRlbGV0ZTsKKyAgICBSZXNvbHZhYmxlVHlwZShSZXNv
bHZhYmxlVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBSZXNvbHZhYmxlVHlwZSYgb3BlcmF0b3I9
KGNvbnN0IFJlc29sdmFibGVUeXBlJikgPSBkZWxldGU7CisgICAgUmVzb2x2YWJsZVR5cGUmIG9w
ZXJhdG9yPShSZXNvbHZhYmxlVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29sIGlzUmVzb2x2
YWJsZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBi
b29sIGlzRmxvYXRMaXRlcmFsVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmly
dHVhbCBib29sIGlzSW50ZWdlckxpdGVyYWxUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNOdWxsTGl0ZXJhbFR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1Vuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZpcnR1YWwgYm9vbCBjYW5SZXNvbHZlKGNvbnN0
IFR5cGUmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB1bnNpZ25lZCBjb252ZXJzaW9uQ29zdChj
b25zdCBVbm5hbWVkVHlwZSYpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0IFVubmFtZWRUeXBlKiBy
ZXNvbHZlZFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVkVHlwZSA/ICZzdGF0aWNfY2Fz
dDxjb25zdCBVbm5hbWVkVHlwZSY+KCptX3Jlc29sdmVkVHlwZSkgOiBudWxscHRyOyB9CisgICAg
VW5uYW1lZFR5cGUqIHJlc29sdmVkVHlwZSgpIHsgcmV0dXJuIG1fcmVzb2x2ZWRUeXBlID8gJnN0
YXRpY19jYXN0PFVubmFtZWRUeXBlJj4oKm1fcmVzb2x2ZWRUeXBlKSA6IG51bGxwdHI7IH0KKwor
ICAgIHZvaWQgcmVzb2x2ZShVbmlxdWVSZWY8VW5uYW1lZFR5cGU+JiYgdHlwZSkKKyAgICB7Cisg
ICAgICAgIG1fcmVzb2x2ZWRUeXBlID0gV1RGTW92ZSh0eXBlKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgT3B0aW9uYWw8VW5pcXVlUmVmPFVubmFtZWRUeXBlPj4gbV9yZXNvbHZlZFR5cGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19XSExTTF9SRVNPTFZBQkxFX1RZUEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNh
dGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6
VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OldITFNMOjpBU1Q6OlJlc29sdmFibGVUeXBlJiB0eXBlKSB7IHJldHVybiB0eXBlLnByZWRpY2F0
ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfVFlQRShSZXNvbHZhYmxlVHlwZSwgaXNSZXNvbHZhYmxlVHlwZSgpKQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFJlc291cmNlU2VtYW50aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmNkNjkzMzRiYjVmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRp
Yy5jcHAKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvdXJjZVNlbWFudGljLmgi
CisKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNMSW5mZXJUeXBl
cy5oIgorI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgorI2luY2x1ZGUgIldITFNMUmVmZXJl
bmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitib29s
IFJlc291cmNlU2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgVW5uYW1lZFR5cGUmIHVu
bmFtZWRUeXBlLCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKSBjb25zdAoreworICAgIHN3
aXRjaCAobV9tb2RlKSB7CisgICAgY2FzZSBNb2RlOjpVbm9yZGVyZWRBY2Nlc3NWaWV3OgorICAg
ICAgICBpZiAoaXM8UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgICAgICBh
dXRvJiByZWZlcmVuY2VUeXBlID0gZG93bmNhc3Q8UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUp
OworICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZVR5cGUuYWRkcmVzc1NwYWNlKCkgPT0gUmVm
ZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpDb25zdGFudCB8fCByZWZlcmVuY2VUeXBlLmFkZHJl
c3NTcGFjZSgpID09IFJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAg
ICB9CisgICAgICAgIGlmIChpczxBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBpZiAoaXM8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUp
KSB7CisgICAgICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8VHlwZVJlZmVy
ZW5jZT4odW5uYW1lZFR5cGUpOworICAgICAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVz
b2x2ZWRUeXBlKCkpOworICAgICAgICAgICAgaWYgKGlzPE5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4o
KnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBk
b3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlw
ZSgpKS5pc1RleHR1cmUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Y2FzZSBNb2RlOjpUZXh0dXJlOgorICAgICAgICBpZiAoaXM8UmVmZXJlbmNlVHlwZT4odW5uYW1l
ZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlZmVyZW5jZVR5cGU+KHVubmFt
ZWRUeXBlKS5hZGRyZXNzU3BhY2UoKSA9PSBSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNv
bnN0YW50OworICAgICAgICBpZiAoaXM8QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGlzPFR5cGVSZWZlcmVuY2U+KHVubmFtZWRU
eXBlKSkgeworICAgICAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PFR5cGVS
ZWZlcmVuY2U+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNl
LnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAgICAgIGlmIChpczxOYXRpdmVUeXBlRGVjbGFyYXRp
b24+KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZl
ZFR5cGUoKSkuaXNUZXh0dXJlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGNhc2UgTW9kZTo6QnVmZmVyOgorICAgICAgICBpZiAoaXM8UmVmZXJlbmNlVHlwZT4odW5u
YW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlZmVyZW5jZVR5cGU+KHVu
bmFtZWRUeXBlKS5hZGRyZXNzU3BhY2UoKSA9PSBSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6
OkNvbnN0YW50OworICAgICAgICByZXR1cm4gaXM8QXJyYXlUeXBlPih1bm5hbWVkVHlwZSk7Cisg
ICAgY2FzZSBNb2RlOjpTYW1wbGVyOgorICAgICAgICByZXR1cm4gbWF0Y2hlcyh1bm5hbWVkVHlw
ZSwgaW50cmluc2ljcy5zYW1wbGVyVHlwZSgpKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVzb3VyY2VT
ZW1hbnRpYzo6aXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihTaGFkZXJJdGVtRGly
ZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3QKK3sKKyAg
ICByZXR1cm4gZGlyZWN0aW9uID09IFNoYWRlckl0ZW1EaXJlY3Rpb246OklucHV0OworfQorCit9
IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VTZW1hbnRpYy5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmVzb3VyY2VT
ZW1hbnRpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42M2M1MzQ2
ODEyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFJlc291cmNlU2VtYW50aWMuaApAQCAtMCwwICsxLDkwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hM
U0xCYXNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNz
IFJlc291cmNlU2VtYW50aWMgOiBwdWJsaWMgQmFzZVNlbWFudGljIHsKK3B1YmxpYzoKKyAgICBl
bnVtIGNsYXNzIE1vZGUgOiB1aW50OF90IHsKKyAgICAgICAgVW5vcmRlcmVkQWNjZXNzVmlldywK
KyAgICAgICAgVGV4dHVyZSwKKyAgICAgICAgQnVmZmVyLAorICAgICAgICBTYW1wbGVyCisgICAg
fTsKKworICAgIFJlc291cmNlU2VtYW50aWMoTGV4ZXI6OlRva2VuJiYgb3JpZ2luLCBNb2RlIG1v
ZGUsIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBzcGFjZSkKKyAgICAgICAgOiBCYXNlU2VtYW50
aWMoV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fbW9kZShtb2RlKQorICAgICAgICAsIG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9zcGFjZShzcGFjZSkKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB+UmVzb3VyY2VTZW1hbnRpYygpID0gZGVmYXVsdDsKKworICAgIFJlc291cmNl
U2VtYW50aWMoY29uc3QgUmVzb3VyY2VTZW1hbnRpYyYpID0gZGVsZXRlOworICAgIFJlc291cmNl
U2VtYW50aWMoUmVzb3VyY2VTZW1hbnRpYyYmKSA9IGRlZmF1bHQ7CisKKyAgICBNb2RlIG1vZGUo
KSBjb25zdCB7IHJldHVybiBtX21vZGU7IH0KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXg7IH0KKyAgICB1bnNpZ25lZCBzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3BhY2U7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZXNvdXJjZVNlbWFudGljJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX21vZGUgPT0gb3RoZXIubV9tb2Rl
ICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleCAmJiBtX3NwYWNlID09IG90aGVyLm1fc3BhY2U7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFJlc291cmNlU2VtYW50aWMmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
IH0KKworICAgIGJvb2wgaXNBY2NlcHRhYmxlVHlwZShjb25zdCBVbm5hbWVkVHlwZSYsIGNvbnN0
IEludHJpbnNpY3MmKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQWNjZXB0YWJsZUZvclNo
YWRlckl0ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiwgY29uc3QgRnVuY3Rpb25EZWZp
bml0aW9uJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgTW9kZSBtX21vZGU7Cisg
ICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB1bnNpZ25lZCBtX3NwYWNlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgQVNUCisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJldHVybi5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjdiNjBjZjZhN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUmV0dXJuLmgKQEAg
LTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkdQVSkKKworI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTGV4
ZXIuaCIKKyNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNp
bmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNw
YWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIFJldHVybiA6IHB1YmxpYyBT
dGF0ZW1lbnQgeworcHVibGljOgorICAgIFJldHVybihMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIE9w
dGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4mJiB2YWx1ZSkKKyAgICAgICAgOiBTdGF0ZW1l
bnQoV1RGTW92ZShvcmlnaW4pKQorICAgICAgICAsIG1fdmFsdWUoV1RGTW92ZSh2YWx1ZSkpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgflJldHVybigpID0gZGVmYXVsdDsKKworICAgIFJl
dHVybihjb25zdCBSZXR1cm4mKSA9IGRlbGV0ZTsKKyAgICBSZXR1cm4oUmV0dXJuJiYpID0gZGVm
YXVsdDsKKyAgICAKKyAgICBib29sIGlzUmV0dXJuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgRXhwcmVzc2lvbiogdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlID8gJnN0
YXRpY19jYXN0PEV4cHJlc3Npb24mPigqbV92YWx1ZSkgOiBudWxscHRyOyB9CisKKyAgICBGdW5j
dGlvbkRlZmluaXRpb24qIGZ1bmN0aW9uKCkgeyByZXR1cm4gbV9mdW5jdGlvbjsgfQorICAgIHZv
aWQgc2V0RnVuY3Rpb24oRnVuY3Rpb25EZWZpbml0aW9uKiBmdW5jdGlvbkRlZmluaXRpb24pIHsg
bV9mdW5jdGlvbiA9IGZ1bmN0aW9uRGVmaW5pdGlvbjsgfQorCitwcml2YXRlOgorICAgIE9wdGlv
bmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV92YWx1ZTsKKyAgICBGdW5jdGlvbkRlZmluaXRp
b24qIG1fZnVuY3Rpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfU1RBVEVNRU5UKFJldHVybiwgaXNSZXR1cm4oKSkK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU2VtYW50aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMC4uNjA1NjRjOTE2YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTZW1hbnRpYy5oCkBAIC0wLDAgKzEsNTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJXSExTTEJ1aWx0SW5TZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMUmVzb3VyY2VTZW1hbnRp
Yy5oIgorI2luY2x1ZGUgIldITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgiCisj
aW5jbHVkZSAiV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaCIKKyNpbmNsdWRlIDx3dGYvVmFyaWFu
dC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVz
cGFjZSBBU1QgeworCit1c2luZyBTZW1hbnRpYyA9IFZhcmlhbnQ8QnVpbHRJblNlbWFudGljLCBS
ZXNvdXJjZVNlbWFudGljLCBTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMsIFN0YWdlSW5P
dXRTZW1hbnRpYz47CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xT
cGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjczZTQ4NDNhZjEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgiCisKKyNpbmNs
dWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKyNp
bmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworYm9vbCBTcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3QgVW5uYW1lZFR5cGUmIHVu
bmFtZWRUeXBlLCBjb25zdCBJbnRyaW5zaWNzJikgY29uc3QKK3sKKyAgICBpZiAoIWlzPFR5cGVS
ZWZlcmVuY2U+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8m
IHR5cGVSZWZlcmVuY2UgPSBkb3duY2FzdDxUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7Cisg
ICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgIGlmICghaXM8TmF0
aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gZG93bmNhc3Q8TmF0aXZlVHlwZURlY2xhcmF0
aW9uPigqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkuaXNOdW1iZXIoKTsKK30KKworYm9v
bCBTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWM6OmlzQWNjZXB0YWJsZUZvclNoYWRlckl0
ZW1EaXJlY3Rpb24oU2hhZGVySXRlbURpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZ1bmN0aW9u
RGVmaW5pdGlvbiYpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBTaGFkZXJJdGVt
RGlyZWN0aW9uOjpJbnB1dDsKK30KKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFu
dGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjlhN2Y4YmMwODU0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLmgKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1Qg
eworCitjbGFzcyBTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMgOiBwdWJsaWMgQmFzZVNl
bWFudGljIHsKK3B1YmxpYzoKKyAgICBTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMoTGV4
ZXI6OlRva2VuJiYgb3JpZ2luKQorICAgICAgICA6IEJhc2VTZW1hbnRpYyhXVEZNb3ZlKG9yaWdp
bikpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgflNwZWNpYWxpemF0aW9uQ29uc3RhbnRT
ZW1hbnRpYygpID0gZGVmYXVsdDsKKworICAgIFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRp
Yyhjb25zdCBTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKSA9IGRlbGV0ZTsKKyAgICBT
cGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMoU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFu
dGljJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMmKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNwZWNpYWxpemF0aW9uQ29uc3Rh
bnRTZW1hbnRpYyYpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgYm9vbCBpc0FjY2VwdGFibGVUeXBlKGNvbnN0IFVubmFtZWRUeXBlJiwgY29uc3QgSW50
cmluc2ljcyYpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNBY2NlcHRhYmxlRm9yU2hhZGVy
SXRlbURpcmVjdGlvbihTaGFkZXJJdGVtRGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRp
b24mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKK307CisKK30gLy8gbmFtZXNwYWNlIEFT
VAorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzA5YWVmYWJjMjgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xTdGFnZUluT3V0U2VtYW50aWMuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldI
TFNMU3RhZ2VJbk91dFNlbWFudGljLmgiCisKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgor
I2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xG
dW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNs
dWRlICJXSExTTEludHJpbnNpY3MuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2Ug
QVNUIHsKKworYm9vbCBTdGFnZUluT3V0U2VtYW50aWM6OmlzQWNjZXB0YWJsZVR5cGUoY29uc3Qg
VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBJbnRyaW5zaWNzJikgY29uc3QKK3sKKyAg
ICBpZiAoaXM8QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGlmICghaXM8VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PFR5cGVSZWZlcmVuY2U+
KHVubmFtZWRUeXBlKTsKKyAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7
CisgICAgYXV0byYgcmVzb2x2ZWRUeXBlID0gKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCk7
CisgICAgaWYgKGlzPEVudW1lcmF0aW9uRGVmaW5pdGlvbj4ocmVzb2x2ZWRUeXBlKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHJlc29s
dmVkVHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24gPSBkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNl
LnJlc29sdmVkVHlwZSgpKTsKKyAgICByZXR1cm4gbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzTnVt
YmVyKCkKKyAgICAgICAgfHwgbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzVmVjdG9yKCkKKyAgICAg
ICAgfHwgbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzTWF0cml4KCk7Cit9CisKK2Jvb2wgU3RhZ2VJ
bk91dFNlbWFudGljOjppc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKFNoYWRlckl0
ZW1EaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9u
RGVmaW5pdGlvbikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKCpmdW5jdGlvbkRlZmluaXRpb24uZW50
cnlQb2ludFR5cGUoKSkgeworICAgIGNhc2UgRnVuY3Rpb25EZWNsYXJhdGlvbjo6RW50cnlQb2lu
dFR5cGU6OlZlcnRleDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBGdW5jdGlvbkRl
Y2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6RnJhZ21lbnQ6CisgICAgICAgIHJldHVybiBkaXJl
Y3Rpb24gPT0gU2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQ7CisgICAgY2FzZSBGdW5jdGlvbkRl
Y2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZToKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0
YWdlSW5PdXRTZW1hbnRpYy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmUwNTdjZmIzYzlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RhZ2VJbk91dFNlbWFudGljLmgKQEAg
LTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkdQVSkKKworI2luY2x1ZGUgIldITFNMQmFzZVNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xM
ZXhlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25h
bWVzcGFjZSBBU1QgeworCitjbGFzcyBTdGFnZUluT3V0U2VtYW50aWMgOiBwdWJsaWMgQmFzZVNl
bWFudGljIHsKK3B1YmxpYzoKKyAgICBTdGFnZUluT3V0U2VtYW50aWMoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgOiBCYXNlU2VtYW50aWMoV1RGTW92ZShv
cmlnaW4pKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgflN0YWdlSW5PdXRTZW1hbnRpYygpID0gZGVmYXVsdDsKKworICAgIFN0YWdlSW5PdXRT
ZW1hbnRpYyhjb25zdCBTdGFnZUluT3V0U2VtYW50aWMmKSA9IGRlbGV0ZTsKKyAgICBTdGFnZUlu
T3V0U2VtYW50aWMoU3RhZ2VJbk91dFNlbWFudGljJiYpID0gZGVmYXVsdDsKKworICAgIHVuc2ln
bmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFN0YWdlSW5PdXRTZW1hbnRpYyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBTdGFnZUluT3V0U2VtYW50aWMmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGJvb2wgaXNBY2Nl
cHRhYmxlVHlwZShjb25zdCBVbm5hbWVkVHlwZSYsIGNvbnN0IEludHJpbnNpY3MmKSBjb25zdCBv
dmVycmlkZTsKKyAgICBib29sIGlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJlY3Rpb24oU2hh
ZGVySXRlbURpcmVjdGlvbiwgY29uc3QgRnVuY3Rpb25EZWZpbml0aW9uJikgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK30gLy8gbmFtZXNw
YWNlIEFTVAorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNWU2NTkxOGQyOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0YXRlbWVudC5o
CkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xWYWx1
ZS5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgU3RhdGVtZW50
IDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBTdGF0ZW1lbnQoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luKQorICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB+U3RhdGVtZW50KCkgPSBkZWZhdWx0OworCisgICAgU3RhdGVtZW50
KGNvbnN0IFN0YXRlbWVudCYpID0gZGVsZXRlOworICAgIFN0YXRlbWVudChTdGF0ZW1lbnQmJikg
PSBkZWZhdWx0OworCisgICAgdmlydHVhbCBib29sIGlzQmxvY2soKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0JyZWFrKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNDb250aW51ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCBib29sIGlzRG9XaGlsZUxvb3AoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc0VmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0ZhbGx0aHJvdWdoKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNGb3JMb29wKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNJZlN0YXRlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzUmV0dXJuKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTd2l0Y2hDYXNlKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTd2l0Y2hTdGF0ZW1lbnQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1RyYXAoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1ZhcmlhYmxlRGVjbGFyYXRpb25zU3Rh
dGVtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNXaGls
ZUxvb3AoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIExleGVyOjpU
b2tlbiBtX29yaWdpbjsKK307CisKK3VzaW5nIFN0YXRlbWVudHMgPSBWZWN0b3I8VW5pcXVlUmVm
PFN0YXRlbWVudD4+OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKKyNkZWZpbmUg
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9TVEFURU1FTlQoVG9WYWx1ZVR5cGVOYW1lLCBw
cmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6V0hMU0w6
OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OldITFNMOjpBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KSB7IHJldHVybiBzdGF0ZW1l
bnQucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLjZiYjE0ODdhNjAwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3RydWN0dXJlRGVmaW5pdGlv
bi5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xT
dHJ1Y3R1cmVFbGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xOYW1lZFR5cGUuaCIKKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisK
K2NsYXNzIFN0cnVjdHVyZURlZmluaXRpb24gOiBwdWJsaWMgTmFtZWRUeXBlIHsKK3B1YmxpYzoK
KyAgICBTdHJ1Y3R1cmVEZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYg
bmFtZSwgU3RydWN0dXJlRWxlbWVudHMmJiBzdHJ1Y3R1cmVFbGVtZW50cykKKyAgICAgICAgOiBO
YW1lZFR5cGUoV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKG5hbWUpKQorICAgICAgICAsIG1fc3Ry
dWN0dXJlRWxlbWVudHMoV1RGTW92ZShzdHJ1Y3R1cmVFbGVtZW50cykpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgflN0cnVjdHVyZURlZmluaXRpb24oKSA9IGRlZmF1bHQ7CisKKyAgICBT
dHJ1Y3R1cmVEZWZpbml0aW9uKGNvbnN0IFN0cnVjdHVyZURlZmluaXRpb24mKSA9IGRlbGV0ZTsK
KyAgICBTdHJ1Y3R1cmVEZWZpbml0aW9uKFN0cnVjdHVyZURlZmluaXRpb24mJikgPSBkZWZhdWx0
OworCisgICAgYm9vbCBpc1N0cnVjdHVyZURlZmluaXRpb24oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICBTdHJ1Y3R1cmVFbGVtZW50cyYgc3RydWN0dXJlRWxlbWVudHMo
KSB7IHJldHVybiBtX3N0cnVjdHVyZUVsZW1lbnRzOyB9CisKK3ByaXZhdGU6CisgICAgU3RydWN0
dXJlRWxlbWVudHMgbV9zdHJ1Y3R1cmVFbGVtZW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIEFT
VAorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9OQU1FRF9UWVBFKFN0
cnVjdHVyZURlZmluaXRpb24sIGlzU3RydWN0dXJlRGVmaW5pdGlvbigpKQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN0
cnVjdHVyZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFN0cnVjdHVyZUVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uZTRhNzY0NjNjZTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmgKQEAgLTAsMCAr
MSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNpbmNs
dWRlICJXSExTTFF1YWxpZmllci5oIgorI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKKyNpbmNs
dWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2Ns
YXNzIFN0cnVjdHVyZUVsZW1lbnQgOiBwdWJsaWMgTm9kZSB7CitwdWJsaWM6CisgICAgU3RydWN0
dXJlRWxlbWVudChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFF1YWxpZmllcnMmJiBxdWFsaWZpZXJz
LCBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgT3B0aW9uYWw8
U2VtYW50aWM+IHNlbWFudGljKQorICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkK
KyAgICAgICAgLCBtX3F1YWxpZmllcnMoV1RGTW92ZShxdWFsaWZpZXJzKSkKKyAgICAgICAgLCBt
X3R5cGUoV1RGTW92ZSh0eXBlKSkKKyAgICAgICAgLCBtX25hbWUoV1RGTW92ZShuYW1lKSkKKyAg
ICAgICAgLCBtX3NlbWFudGljKFdURk1vdmUoc2VtYW50aWMpKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIH5TdHJ1Y3R1cmVFbGVtZW50KCkgPSBkZWZhdWx0OworCisgICAgU3RydWN0dXJl
RWxlbWVudChjb25zdCBTdHJ1Y3R1cmVFbGVtZW50JikgPSBkZWxldGU7CisgICAgU3RydWN0dXJl
RWxlbWVudChTdHJ1Y3R1cmVFbGVtZW50JiYpID0gZGVmYXVsdDsKKworICAgIGNvbnN0IExleGVy
OjpUb2tlbiYgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBVbm5hbWVk
VHlwZSYgdHlwZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFVubmFtZWRUeXBlJj4obV90eXBlKTsg
fQorICAgIGNvbnN0IFN0cmluZyYgbmFtZSgpIHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIE9wdGlv
bmFsPFNlbWFudGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9CisKK3ByaXZh
dGU6CisgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOworICAgIFF1YWxpZmllcnMgbV9xdWFsaWZp
ZXJzOworICAgIFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4gbV90eXBlOworICAgIFN0cmluZyBtX25h
bWU7CisgICAgT3B0aW9uYWw8U2VtYW50aWM+IG1fc2VtYW50aWM7Cit9OworCit1c2luZyBTdHJ1
Y3R1cmVFbGVtZW50cyA9IFZlY3RvcjxTdHJ1Y3R1cmVFbGVtZW50PjsKKworfSAvLyBuYW1lc3Bh
Y2UgQVNUCisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN3aXRjaENhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFN3aXRjaENhc2UuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTVmMDljMjY2OTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTd2l0Y2hDYXNl
LmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQmxvY2suaCIKKyNpbmNsdWRlICJXSExTTENv
bnN0YW50RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJX
SExTTFN0YXRlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFz
cyBTd2l0Y2hDYXNlIDogcHVibGljIFN0YXRlbWVudCB7CitwdWJsaWM6CisgICAgU3dpdGNoQ2Fz
ZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIE9wdGlvbmFsPENvbnN0YW50RXhwcmVzc2lvbj4mJiB2
YWx1ZSwgQmxvY2smJiBibG9jaykKKyAgICAgICAgOiBTdGF0ZW1lbnQoV1RGTW92ZShvcmlnaW4p
KQorICAgICAgICAsIG1fdmFsdWUoV1RGTW92ZSh2YWx1ZSkpCisgICAgICAgICwgbV9ibG9jayhX
VEZNb3ZlKGJsb2NrKSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+U3dpdGNoQ2FzZSgp
ID0gZGVmYXVsdDsKKworICAgIFN3aXRjaENhc2UoY29uc3QgU3dpdGNoQ2FzZSYpID0gZGVsZXRl
OworICAgIFN3aXRjaENhc2UoU3dpdGNoQ2FzZSYmKSA9IGRlZmF1bHQ7CisgICAgCisgICAgYm9v
bCBpc1N3aXRjaENhc2UoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBP
cHRpb25hbDxDb25zdGFudEV4cHJlc3Npb24+JiB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0K
KyAgICBCbG9jayYgYmxvY2soKSB7IHJldHVybiBtX2Jsb2NrOyB9CisKK3ByaXZhdGU6CisgICAg
T3B0aW9uYWw8Q29uc3RhbnRFeHByZXNzaW9uPiBtX3ZhbHVlOworICAgIEJsb2NrIG1fYmxvY2s7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfV0hMU0xfU1RBVEVNRU5UKFN3aXRjaENhc2UsIGlzU3dpdGNoQ2FzZSgpKQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFN3aXRjaFN0YXRlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMU3dpdGNoU3RhdGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLmQ5YWY2OWQ3NzMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMU3dpdGNoU3RhdGVtZW50LmgKQEAgLTAs
MCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKKyNpbmNsdWRlICJXSExTTFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMU3dpdGNoQ2Fz
ZS5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgU3dpdGNoU3Rh
dGVtZW50IDogcHVibGljIFN0YXRlbWVudCB7CitwdWJsaWM6CisgICAgU3dpdGNoU3RhdGVtZW50
KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgdmFsdWUsIFZl
Y3RvcjxTd2l0Y2hDYXNlPiYmIHN3aXRjaENhc2VzKQorICAgICAgICA6IFN0YXRlbWVudChXVEZN
b3ZlKG9yaWdpbikpCisgICAgICAgICwgbV92YWx1ZShXVEZNb3ZlKHZhbHVlKSkKKyAgICAgICAg
LCBtX3N3aXRjaENhc2VzKFdURk1vdmUoc3dpdGNoQ2FzZXMpKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIH5Td2l0Y2hTdGF0ZW1lbnQoKSA9IGRlZmF1bHQ7CisKKyAgICBTd2l0Y2hTdGF0
ZW1lbnQoY29uc3QgU3dpdGNoU3RhdGVtZW50JikgPSBkZWxldGU7CisgICAgU3dpdGNoU3RhdGVt
ZW50KFN3aXRjaFN0YXRlbWVudCYmKSA9IGRlZmF1bHQ7CisgICAgCisgICAgYm9vbCBpc1N3aXRj
aFN0YXRlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIEV4cHJl
c3Npb24mIHZhbHVlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RXhwcmVzc2lvbiY+KG1fdmFsdWUp
OyB9CisgICAgVmVjdG9yPFN3aXRjaENhc2U+JiBzd2l0Y2hDYXNlcygpIHsgcmV0dXJuIG1fc3dp
dGNoQ2FzZXM7IH0KKworcHJpdmF0ZToKKyAgICBVbmlxdWVSZWY8RXhwcmVzc2lvbj4gbV92YWx1
ZTsKKyAgICBWZWN0b3I8U3dpdGNoQ2FzZT4gbV9zd2l0Y2hDYXNlczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEFTVAorCit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9TVEFU
RU1FTlQoU3dpdGNoU3RhdGVtZW50LCBpc1N3aXRjaFN0YXRlbWVudCgpKQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFRl
cm5hcnlFeHByZXNzaW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi41ZDg2MmVlNGU1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFRlcm5hcnlFeHByZXNzaW9uLmgKQEAgLTAs
MCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTGV4ZXIu
aCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIFRlcm5hcnlFeHBy
ZXNzaW9uIDogcHVibGljIEV4cHJlc3Npb24geworcHVibGljOgorICAgIFRlcm5hcnlFeHByZXNz
aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgcHJlZGlj
YXRlLCBVbmlxdWVSZWY8RXhwcmVzc2lvbj4mJiBib2R5RXhwcmVzc2lvbiwgVW5pcXVlUmVmPEV4
cHJlc3Npb24+JiYgZWxzZUV4cHJlc3Npb24pCisgICAgICAgIDogRXhwcmVzc2lvbihXVEZNb3Zl
KG9yaWdpbikpCisgICAgICAgICwgbV9wcmVkaWNhdGUoV1RGTW92ZShwcmVkaWNhdGUpKQorICAg
ICAgICAsIG1fYm9keUV4cHJlc3Npb24oV1RGTW92ZShib2R5RXhwcmVzc2lvbikpCisgICAgICAg
ICwgbV9lbHNlRXhwcmVzc2lvbihXVEZNb3ZlKGVsc2VFeHByZXNzaW9uKSkKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB+VGVybmFyeUV4cHJlc3Npb24oKSA9IGRlZmF1bHQ7CisKKyAgICBU
ZXJuYXJ5RXhwcmVzc2lvbihjb25zdCBUZXJuYXJ5RXhwcmVzc2lvbiYpID0gZGVsZXRlOworICAg
IFRlcm5hcnlFeHByZXNzaW9uKFRlcm5hcnlFeHByZXNzaW9uJiYpID0gZGVmYXVsdDsKKworICAg
IGJvb2wgaXNUZXJuYXJ5RXhwcmVzc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KKworICAgIEV4cHJlc3Npb24mIHByZWRpY2F0ZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEV4
cHJlc3Npb24mPihtX3ByZWRpY2F0ZSk7IH0KKyAgICBFeHByZXNzaW9uJiBib2R5RXhwcmVzc2lv
bigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEV4cHJlc3Npb24mPihtX2JvZHlFeHByZXNzaW9uKTsg
fQorICAgIEV4cHJlc3Npb24mIGVsc2VFeHByZXNzaW9uKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RXhwcmVzc2lvbiY+KG1fZWxzZUV4cHJlc3Npb24pOyB9CisKK3ByaXZhdGU6CisgICAgVW5pcXVl
UmVmPEV4cHJlc3Npb24+IG1fcHJlZGljYXRlOworICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBt
X2JvZHlFeHByZXNzaW9uOworICAgIFVuaXF1ZVJlZjxFeHByZXNzaW9uPiBtX2Vsc2VFeHByZXNz
aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dITFNMX0VYUFJFU1NJT04oVGVybmFyeUV4cHJlc3Npb24sIGlzVGVybmFyeUV4
cHJlc3Npb24oKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUcmFwLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xUcmFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLjBhOTNiMzY4ZjBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHJhcC5oCkBAIC0wLDAgKzEsNjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRl
ICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xTdGF0ZW1lbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xh
c3MgVHJhcCA6IHB1YmxpYyBTdGF0ZW1lbnQgeworcHVibGljOgorICAgIFRyYXAoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luKQorICAgICAgICA6IFN0YXRlbWVudChXVEZNb3ZlKG9yaWdpbikpCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgflRyYXAoKSA9IGRlZmF1bHQ7CisKKyAgICBUcmFwKGNv
bnN0IFRyYXAmKSA9IGRlbGV0ZTsKKyAgICBUcmFwKFRyYXAmJikgPSBkZWZhdWx0OworICAgIAor
ICAgIGJvb2wgaXNUcmFwKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCitwcml2
YXRlOgorfTsKKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX1dITFNMX1NUQVRFTUVOVChUcmFwLCBpc1RyYXAoKSkKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBl
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmRiOTJmZjU0MjhiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMVHlwZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTE5vZGUuaCIKKyNpbmNsdWRlIDx3
dGYvVHlwZUNhc3RzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNM
IHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIFR5cGUgOiBwdWJsaWMgTm9kZSB7CitwdWJs
aWM6CisgICAgVHlwZSgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgflR5cGUoKSA9IGRlZmF1
bHQ7CisKKyAgICBleHBsaWNpdCBUeXBlKGNvbnN0IFR5cGUmKSA9IGRlbGV0ZTsKKyAgICBUeXBl
KFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgVHlwZSYgb3BlcmF0b3I9KGNvbnN0IFR5cGUmKSA9
IGRlbGV0ZTsKKyAgICBUeXBlJiBvcGVyYXRvcj0oVHlwZSYmKSA9IGRlZmF1bHQ7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaXNOYW1lZFR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBpc1VubmFtZWRUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgaXNSZXNvbHZhYmxlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisK
K3ByaXZhdGU6Cit9OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKKyNkZWZpbmUg
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9UWVBFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGlj
YXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OldITFNMOjpBU1Q6
OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3Jl
OjpXSExTTDo6QVNUOjpUeXBlJiB0eXBlKSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVBcmd1bWVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg3MzUwNjVhMWJi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVHlwZUFyZ3VtZW50LmNwcApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExT
TFR5cGVBcmd1bWVudC5oIgorCisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVm
Lmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworVHlwZUFyZ3VtZW50cyBjbG9u
ZShjb25zdCBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKQoreworICAgIFR5cGVBcmd1bWVu
dHMgcmVzdWx0OworICAgIGZvciAoY29uc3QgYXV0byYgdHlwZUFyZ3VtZW50IDogdHlwZUFyZ3Vt
ZW50cykKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjbG9uZSh0eXBlQXJndW1lbnQpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitUeXBlQXJndW1lbnQgY2xvbmUoY29uc3QgVHlwZUFyZ3VtZW50
JiB0eXBlQXJndW1lbnQpCit7CisgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbXShjb25zdCBDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikgLT4gVHlw
ZUFyZ3VtZW50IHsKKyAgICAgICAgcmV0dXJuIGNvbnN0YW50RXhwcmVzc2lvbi5jbG9uZSgpOwor
ICAgIH0sIFtdKGNvbnN0IFVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPiYgdHlwZVJlZmVyZW5jZSkg
LT4gVHlwZUFyZ3VtZW50IHsKKyAgICAgICAgcmV0dXJuIHR5cGVSZWZlcmVuY2UtPmNsb25lVHlw
ZVJlZmVyZW5jZSgpOworICAgIH0pLCB0eXBlQXJndW1lbnQpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBBU1QKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZUFyZ3VtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJndW1lbnQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNjczODNhYTFkYmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlQXJn
dW1lbnQuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2lu
Y2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitj
bGFzcyBUeXBlUmVmZXJlbmNlOworCit1c2luZyBUeXBlQXJndW1lbnQgPSBWYXJpYW50PENvbnN0
YW50RXhwcmVzc2lvbiwgVW5pcXVlUmVmPFR5cGVSZWZlcmVuY2U+PjsKK3VzaW5nIFR5cGVBcmd1
bWVudHMgPSBWZWN0b3I8VHlwZUFyZ3VtZW50PjsKKworVHlwZUFyZ3VtZW50IGNsb25lKGNvbnN0
IFR5cGVBcmd1bWVudCYpOworVHlwZUFyZ3VtZW50cyBjbG9uZShjb25zdCBUeXBlQXJndW1lbnRz
Jik7CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5p
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlw
ZURlZmluaXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmM5
OWE5MjU4MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xUeXBlRGVmaW5pdGlvbi5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJX
SExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCisjaW5jbHVkZSAiV0hMU0xOYW1l
ZFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL1Vu
aXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFz
cyBUeXBlRGVmaW5pdGlvbiA6IHB1YmxpYyBOYW1lZFR5cGUgeworcHVibGljOgorICAgIFR5cGVE
ZWZpbml0aW9uKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbmFtZSwgVW5pcXVlUmVm
PFVubmFtZWRUeXBlPiYmIHR5cGUpCisgICAgICAgIDogTmFtZWRUeXBlKFdURk1vdmUob3JpZ2lu
KSwgV1RGTW92ZShuYW1lKSkKKyAgICAgICAgLCBtX3R5cGUoV1RGTW92ZSh0eXBlKSkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB+VHlwZURlZmluaXRpb24oKSA9IGRlZmF1bHQ7CisKKyAg
ICBUeXBlRGVmaW5pdGlvbihjb25zdCBUeXBlRGVmaW5pdGlvbiYpID0gZGVsZXRlOworICAgIFR5
cGVEZWZpbml0aW9uKFR5cGVEZWZpbml0aW9uJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNU
eXBlRGVmaW5pdGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIFVu
bmFtZWRUeXBlJiB0eXBlKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VW5uYW1lZFR5cGUmPihtX3R5
cGUpOyB9CisKKyAgICBjb25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZS0+dW5pZnlOb2RlKCk7CisgICAgfQorCisgICAgVHlw
ZSYgdW5pZnlOb2RlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUtPnVu
aWZ5Tm9kZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBVbmlxdWVSZWY8VW5uYW1lZFR5cGU+
IG1fdHlwZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19XSExTTF9OQU1FRF9UWVBFKFR5cGVEZWZpbml0aW9uLCBpc1R5cGVEZWZp
bml0aW9uKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJlbmNlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDBjOTlmMTI3NzUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVm
ZXJlbmNlLmNwcApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJH
UFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2Uu
aCIKKworI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSA8
d3RmL1VuaXF1ZVJlZi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExT
TCB7CisKK25hbWVzcGFjZSBBU1QgeworCitVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4gVHlwZVJl
ZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIE5hbWVkVHlwZSYgcmVzb2x2ZWRU
eXBlKQoreworICAgIFR5cGVBcmd1bWVudHMgdHlwZUFyZ3VtZW50czsKKyAgICBpZiAoaXM8TmF0
aXZlVHlwZURlY2xhcmF0aW9uPihyZXNvbHZlZFR5cGUpKQorICAgICAgICB0eXBlQXJndW1lbnRz
ID0gQVNUOjpjbG9uZShkb3duY2FzdDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHJlc29sdmVkVHlw
ZSkudHlwZUFyZ3VtZW50cygpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1ha2VVbmlxdWVSZWY8VHlw
ZVJlZmVyZW5jZT4oV1RGTW92ZShvcmlnaW4pLCBTdHJpbmcocmVzb2x2ZWRUeXBlLm5hbWUoKSks
IFdURk1vdmUodHlwZUFyZ3VtZW50cykpOworICAgIHJlc3VsdC0+c2V0UmVzb2x2ZWRUeXBlKHJl
c29sdmVkVHlwZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSAvLyBuYW1lc3BhY2UgQVNU
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFR5cGVSZWZlcmVuY2UuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjhlNGJmODUwYjQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJl
bmNlLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCisjaW5jbHVk
ZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1Qg
eworCitjbGFzcyBOYW1lZFR5cGU7CisKK2NsYXNzIFR5cGVSZWZlcmVuY2UgOiBwdWJsaWMgVW5u
YW1lZFR5cGUgeworcHVibGljOgorICAgIFR5cGVSZWZlcmVuY2UoTGV4ZXI6OlRva2VuJiYgb3Jp
Z2luLCBTdHJpbmcmJiBuYW1lLCBUeXBlQXJndW1lbnRzJiYgdHlwZUFyZ3VtZW50cykKKyAgICAg
ICAgOiBVbm5hbWVkVHlwZShXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9uYW1lKFdURk1v
dmUobmFtZSkpCisgICAgICAgICwgbV90eXBlQXJndW1lbnRzKFdURk1vdmUodHlwZUFyZ3VtZW50
cykpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgflR5cGVSZWZlcmVuY2UoKSA9IGRlZmF1
bHQ7CisKKyAgICBUeXBlUmVmZXJlbmNlKGNvbnN0IFR5cGVSZWZlcmVuY2UmKSA9IGRlbGV0ZTsK
KyAgICBUeXBlUmVmZXJlbmNlKFR5cGVSZWZlcmVuY2UmJikgPSBkZWZhdWx0OworCisgICAgc3Rh
dGljIFVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPiB3cmFwKExleGVyOjpUb2tlbiYmIG9yaWdpbiwg
TmFtZWRUeXBlJiByZXNvbHZlZFR5cGUpOworCisgICAgYm9vbCBpc1R5cGVSZWZlcmVuY2UoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJl
dHVybiBtX25hbWU7IH0KKyAgICBUeXBlQXJndW1lbnRzJiB0eXBlQXJndW1lbnRzKCkgeyByZXR1
cm4gbV90eXBlQXJndW1lbnRzOyB9CisgICAgTmFtZWRUeXBlKiByZXNvbHZlZFR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3Jlc29sdmVkVHlwZTsgfQorCisgICAgY29uc3QgVHlwZSYgdW5pZnlOb2Rl
KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Jlc29sdmVkVHlwZSk7
CisgICAgICAgIHJldHVybiBtX3Jlc29sdmVkVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgfQorCisg
ICAgVHlwZSYgdW5pZnlOb2RlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3Jl
c29sdmVkVHlwZSk7CisgICAgICAgIHJldHVybiBtX3Jlc29sdmVkVHlwZS0+dW5pZnlOb2RlKCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0UmVzb2x2ZWRUeXBlKE5hbWVkVHlwZSYgcmVzb2x2
ZWRUeXBlKQorICAgIHsKKyAgICAgICAgbV9yZXNvbHZlZFR5cGUgPSAmcmVzb2x2ZWRUeXBlOwor
ICAgIH0KKworICAgIFVuaXF1ZVJlZjxUeXBlUmVmZXJlbmNlPiBjbG9uZVR5cGVSZWZlcmVuY2Uo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8VHlwZVJlZmVyZW5j
ZT4oTGV4ZXI6OlRva2VuKG9yaWdpbigpKSwgU3RyaW5nKG1fbmFtZSksIEFTVDo6Y2xvbmUobV90
eXBlQXJndW1lbnRzKSk7CisgICAgfQorCisgICAgVW5pcXVlUmVmPFVubmFtZWRUeXBlPiBjbG9u
ZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gY2xvbmVUeXBlUmVmZXJl
bmNlKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFN0cmluZyBtX25hbWU7CisgICAgVHlwZUFy
Z3VtZW50cyBtX3R5cGVBcmd1bWVudHM7CisgICAgTmFtZWRUeXBlKiBtX3Jlc29sdmVkVHlwZSB7
IG51bGxwdHIgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZUEUoVHlwZVJlZmVyZW5jZSwgaXNUeXBl
UmVmZXJlbmNlKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg2MmEyNmRjYWU1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUu
aApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMTm9k
ZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgVW5uYW1lZFR5
cGUgOiBwdWJsaWMgVHlwZSB7CitwdWJsaWM6CisgICAgVW5uYW1lZFR5cGUoTGV4ZXI6OlRva2Vu
JiYgb3JpZ2luKQorICAgICAgICA6IG1fb3JpZ2luKFdURk1vdmUob3JpZ2luKSkKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB+VW5uYW1lZFR5cGUoKSA9IGRlZmF1bHQ7CisKKyAgICBVbm5h
bWVkVHlwZShjb25zdCBVbm5hbWVkVHlwZSYpID0gZGVsZXRlOworICAgIFVubmFtZWRUeXBlKFVu
bmFtZWRUeXBlJiYpID0gZGVmYXVsdDsKKworICAgIGJvb2wgaXNVbm5hbWVkVHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNUeXBlUmVmZXJl
bmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludGVy
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGlzQXJyYXlS
ZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wg
aXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBp
c1JlZmVyZW5jZVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBj
b25zdCBUeXBlJiB1bmlmeU5vZGUoKSBjb25zdCB7IHJldHVybiAqdGhpczsgfQorICAgIHZpcnR1
YWwgVHlwZSYgdW5pZnlOb2RlKCkgeyByZXR1cm4gKnRoaXM7IH0KKworICAgIHZpcnR1YWwgVW5p
cXVlUmVmPFVubmFtZWRUeXBlPiBjbG9uZSgpIGNvbnN0ID0gMDsKKworICAgIGNvbnN0IExleGVy
OjpUb2tlbiYgb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKworcHJpdmF0ZToK
KyAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47Cit9OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKwor
fQorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19XSExTTF9VTk5BTUVEX1RZ
UEUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
QkVHSU4oV2ViQ29yZTo6V0hMU0w6OkFTVDo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGlj
IGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OldITFNMOjpBU1Q6OlVubmFtZWRUeXBlJiB0eXBl
KSB7IHJldHVybiB0eXBlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfVFlQRShVbm5hbWVkVHlwZSwgaXNV
bm5hbWVkVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjE0NmUz
YjU5ZjljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5jcHAKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgiCisKKyNpbmNsdWRlICJX
SExTTE5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5j
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVz
cGFjZSBBU1QgeworCitpbnQ2NF90IFVuc2lnbmVkSW50ZWdlckxpdGVyYWw6OnZhbHVlRm9yU2Vs
ZWN0ZWRUeXBlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV90eXBlLnJlc29sdmVkVHlwZSgpKTsK
KyAgICBhdXRvJiB0eXBlUmVmZXJlbmNlID0gZG93bmNhc3Q8VHlwZVJlZmVyZW5jZT4oKm1fdHlw
ZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBl
KCkpOworICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PE5hdGl2ZVR5
cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgIHJldHVy
biBuYXRpdmVUeXBlRGVjbGFyYXRpb24uZm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKCko
bV92YWx1ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xV
bnNpZ25lZEludGVnZXJMaXRlcmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI2NGM5ODY4ZTNjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbC5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIKKyNpbmNs
dWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25h
bWVzcGFjZSBBU1QgeworCitjbGFzcyBVbnNpZ25lZEludGVnZXJMaXRlcmFsIDogcHVibGljIEV4
cHJlc3Npb24geworcHVibGljOgorICAgIFVuc2lnbmVkSW50ZWdlckxpdGVyYWwoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luLCB1bnNpZ25lZCB2YWx1ZSkKKyAgICAgICAgOiBFeHByZXNzaW9uKExleGVy
OjpUb2tlbihvcmlnaW4pKQorICAgICAgICAsIG1fdHlwZShXVEZNb3ZlKG9yaWdpbiksIHZhbHVl
KQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
flVuc2lnbmVkSW50ZWdlckxpdGVyYWwoKSA9IGRlZmF1bHQ7CisKKyAgICBVbnNpZ25lZEludGVn
ZXJMaXRlcmFsKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKSA9IGRlbGV0ZTsKKyAgICBV
bnNpZ25lZEludGVnZXJMaXRlcmFsKFVuc2lnbmVkSW50ZWdlckxpdGVyYWwmJikgPSBkZWZhdWx0
OworCisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgb3BlcmF0b3I9KGNvbnN0IFVuc2lnbmVk
SW50ZWdlckxpdGVyYWwmKSA9IGRlbGV0ZTsKKyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsJiBv
cGVyYXRvcj0oVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYmKSA9IGRlZmF1bHQ7CisKKyAgICBVbnNp
Z25lZEludGVnZXJMaXRlcmFsVHlwZSYgdHlwZSgpIHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHVu
c2lnbmVkIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgYm9vbCBpc1Vu
c2lnbmVkSW50ZWdlckxpdGVyYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisK
KyAgICBVbnNpZ25lZEludGVnZXJMaXRlcmFsIGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAg
IFVuc2lnbmVkSW50ZWdlckxpdGVyYWwgcmVzdWx0KExleGVyOjpUb2tlbihvcmlnaW4oKSksIG1f
dmFsdWUpOworICAgICAgICBpZiAocmVzdWx0Lm1fdHlwZS5yZXNvbHZlZFR5cGUoKSkKKyAgICAg
ICAgICAgIHJlc3VsdC5tX3R5cGUucmVzb2x2ZShyZXN1bHQubV90eXBlLnJlc29sdmVkVHlwZSgp
LT5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBpbnQ2NF90
IHZhbHVlRm9yU2VsZWN0ZWRUeXBlKCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbFR5cGUgbV90eXBlOworICAgIHVuc2lnbmVkIG1fdmFsdWU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hM
U0xfRVhQUkVTU0lPTihVbnNpZ25lZEludGVnZXJMaXRlcmFsLCBpc1Vuc2lnbmVkSW50ZWdlckxp
dGVyYWwoKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbnNpZ25lZEludGVnZXJM
aXRlcmFsVHlwZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU4
YTdjOWE4N2NlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuY3BwCkBAIC0wLDAg
KzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaCIKKwor
I2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2Ug
QVNUIHsKKworVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU6OlVuc2lnbmVkSW50ZWdlckxpdGVy
YWxUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgdW5zaWduZWQgdmFsdWUpCisgICAgOiBtX3Zh
bHVlKHZhbHVlKQorICAgICwgbV9wcmVmZXJyZWRUeXBlKG1ha2VVbmlxdWVSZWY8VHlwZVJlZmVy
ZW5jZT4oV1RGTW92ZShvcmlnaW4pLCBTdHJpbmcoInVpbnQiLCBTdHJpbmc6OkNvbnN0cnVjdEZy
b21MaXRlcmFsKSwgVHlwZUFyZ3VtZW50cygpKSkKK3sKK30KKworVW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbFR5cGU6On5VbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSgpID0gZGVmYXVsdDsKKworYm9v
bCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZTo6Y2FuUmVzb2x2ZShjb25zdCBUeXBlJiB0eXBl
KSBjb25zdAoreworICAgIGlmICghaXM8TmFtZWRUeXBlPih0eXBlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PE5hbWVkVHlwZT4odHlwZSk7
CisgICAgaWYgKCFpczxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2Fz
dDxOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAgaWYgKCFuYXRpdmVUeXBl
RGVjbGFyYXRpb24uaXNJbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbmF0
aXZlVHlwZURlY2xhcmF0aW9uLmlzU2lnbmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5jYW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIo
KShtX3ZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQor
Cit1bnNpZ25lZCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZTo6Y29udmVyc2lvbkNvc3QoY29u
c3QgVW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSBjb25zdAoreworICAgIGlmIChtYXRjaGVzKHVu
bmFtZWRUeXBlLCBzdGF0aWNfY2FzdDxjb25zdCBUeXBlUmVmZXJlbmNlJj4obV9wcmVmZXJyZWRU
eXBlKSkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAxOworfQorCit9IC8vIG5hbWVz
cGFjZSBBU1QKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVk
SW50ZWdlckxpdGVyYWxUeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAuLjExMzBkZjUwNTVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaApAQCAt
MCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9V
bmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xh
c3MgVHlwZVJlZmVyZW5jZTsKKworY2xhc3MgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUgOiBw
dWJsaWMgUmVzb2x2YWJsZVR5cGUgeworcHVibGljOgorICAgIFVuc2lnbmVkSW50ZWdlckxpdGVy
YWxUeXBlKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgdW5zaWduZWQgdmFsdWUpOworCisgICAgdmly
dHVhbCB+VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoKTsKKworICAgIFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWxUeXBlKGNvbnN0IFVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJikgPSBkZWxldGU7
CisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUoVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5
cGUmJikgPSBkZWZhdWx0OworCisgICAgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmIG9wZXJh
dG9yPShjb25zdCBVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSYpID0gZGVsZXRlOworICAgIFVu
c2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJiBvcGVyYXRvcj0oVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bFR5cGUmJikgPSBkZWZhdWx0OworCisgICAgYm9vbCBpc1Vuc2lnbmVkSW50ZWdlckxpdGVyYWxU
eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgVHlwZVJlZmVyZW5j
ZSYgcHJlZmVycmVkVHlwZSgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFR5cGVSZWZlcmVuY2UmPiht
X3ByZWZlcnJlZFR5cGUpOyB9CisKKyAgICBib29sIGNhblJlc29sdmUoY29uc3QgVHlwZSYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHVuc2lnbmVkIGNvbnZlcnNpb25Db3N0KGNvbnN0IFVubmFtZWRU
eXBlJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV92YWx1ZTsK
KyAgICAvLyBUaGlzIGlzIGEgdW5pcXVlX3B0ciB0byByZXNvbHZlIGEgY2lyY3VsYXIgZGVwZW5k
ZW5jeSBiZXR3ZWVuCisgICAgLy8gQ29uc3RhbnRFeHByZXNzaW9uIC0+IExpdGVyYWxUeXBlIC0+
IFR5cGVSZWZlcmVuY2UgLT4gVHlwZUFyZ3VtZW50cyAtPiBDb25zdGFudEV4cHJlc3Npb24KKyAg
ICBVbmlxdWVSZWY8VHlwZVJlZmVyZW5jZT4gbV9wcmVmZXJyZWRUeXBlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgQVNUCisKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1JF
U09MVkFCTEVfVFlQRShVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSwgaXNVbnNpZ25lZEludGVn
ZXJMaXRlcmFsVHlwZSgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYWx1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi5iOTEyZDBlNDg1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhbHVlLmgKQEAgLTAsMCArMSw2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKwor
I2luY2x1ZGUgIldITFNMTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBWYWx1ZSA6IHB1YmxpYyBOb2Rl
IHsKK3B1YmxpYzoKKyAgICBWYWx1ZSgpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgflZh
bHVlKCkgPSBkZWZhdWx0OworCisgICAgZXhwbGljaXQgVmFsdWUoY29uc3QgVmFsdWUmKSA9IGRl
ZmF1bHQ7CisgICAgVmFsdWUoVmFsdWUmJikgPSBkZWZhdWx0OworCisgICAgVmFsdWUmIG9wZXJh
dG9yPShjb25zdCBWYWx1ZSYpID0gZGVmYXVsdDsKKyAgICBWYWx1ZSYgb3BlcmF0b3I9KFZhbHVl
JiYpID0gZGVmYXVsdDsKKworcHJpdmF0ZToKK307CisKK30gLy8gbmFtZXNwYWNlIEFTVAorCit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU1NzA3NDViMzBkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFy
aWFibGVEZWNsYXJhdGlvbi5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24u
aCIKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSAiV0hMU0xRdWFsaWZpZXIuaCIK
KyNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlLmgiCisjaW5j
bHVkZSAiV0hMU0xWYWx1ZS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvVW5p
cXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9uIDogcHVibGljIFZh
bHVlIHsKK3B1YmxpYzoKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbiYmIG9y
aWdpbiwgUXVhbGlmaWVycyYmIHF1YWxpZmllcnMsIE9wdGlvbmFsPFVuaXF1ZVJlZjxVbm5hbWVk
VHlwZT4+JiYgdHlwZSwgU3RyaW5nJiYgbmFtZSwgT3B0aW9uYWw8U2VtYW50aWM+JiYgc2VtYW50
aWMsIE9wdGlvbmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4mJiBpbml0aWFsaXplcikKKyAgICAg
ICAgOiBtX29yaWdpbihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9xdWFsaWZpZXJzKFdU
Rk1vdmUocXVhbGlmaWVycykpCisgICAgICAgICwgbV90eXBlKFdURk1vdmUodHlwZSkpCisgICAg
ICAgICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCisgICAgICAgICwgbV9zZW1hbnRpYyhXVEZNb3Zl
KHNlbWFudGljKSkKKyAgICAgICAgLCBtX2luaXRpYWxpemVyKFdURk1vdmUoaW5pdGlhbGl6ZXIp
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5WYXJpYWJsZURlY2xhcmF0aW9uKCkgPSBk
ZWZhdWx0OworCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbihjb25zdCBWYXJpYWJsZURlY2xhcmF0
aW9uJikgPSBkZWxldGU7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0
aW9uJiYpID0gZGVmYXVsdDsKKworICAgIGNvbnN0IExleGVyOjpUb2tlbiYgb3JpZ2luKCkgY29u
c3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICBTdHJpbmcmIG5hbWUoKSB7IHJldHVybiBtX25h
bWU7IH0KKworICAgIGNvbnN0IE9wdGlvbmFsPFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4+JiB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9IC8vIEFub255bW91cyB2YXJpYWJsZXMgaW5zaWRl
IFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb25zIGhhdmUgdGhlaXIgdHlwZSBzZXQgYnkgdGhlIHR5
cGUgY2hlY2tlci4KKyAgICBVbm5hbWVkVHlwZSogdHlwZSgpIHsgcmV0dXJuIG1fdHlwZSA/ICZz
dGF0aWNfY2FzdDxVbm5hbWVkVHlwZSY+KCptX3R5cGUpIDogbnVsbHB0cjsgfQorICAgIE9wdGlv
bmFsPFNlbWFudGljPiYgc2VtYW50aWMoKSB7IHJldHVybiBtX3NlbWFudGljOyB9CisgICAgRXhw
cmVzc2lvbiogaW5pdGlhbGl6ZXIoKSB7IHJldHVybiBtX2luaXRpYWxpemVyID8gJnN0YXRpY19j
YXN0PEV4cHJlc3Npb24mPigqbV9pbml0aWFsaXplcikgOiBudWxscHRyOyB9CisKK3ByaXZhdGU6
CisgICAgTGV4ZXI6OlRva2VuIG1fb3JpZ2luOworICAgIFF1YWxpZmllcnMgbV9xdWFsaWZpZXJz
OworICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxVbm5hbWVkVHlwZT4+IG1fdHlwZTsKKyAgICBTdHJp
bmcgbV9uYW1lOworICAgIE9wdGlvbmFsPFNlbWFudGljPiBtX3NlbWFudGljOworICAgIE9wdGlv
bmFsPFVuaXF1ZVJlZjxFeHByZXNzaW9uPj4gbV9pbml0aWFsaXplcjsKK307CisKK3VzaW5nIFZh
cmlhYmxlRGVjbGFyYXRpb25zID0gVmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+OworCit9IC8v
IG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExT
TFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLjU1NDRiMTgzNjNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNT
dGF0ZW1lbnQuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUg
IldITFNMU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgi
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBWYXJpYWJsZURlY2xhcmF0
aW9uc1N0YXRlbWVudCA6IHB1YmxpYyBTdGF0ZW1lbnQgeworcHVibGljOgorICAgIFZhcmlhYmxl
RGVjbGFyYXRpb25zU3RhdGVtZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVmVjdG9yPFZhcmlh
YmxlRGVjbGFyYXRpb24+JiYgdmFyaWFibGVEZWNsYXJhdGlvbnMpCisgICAgICAgIDogU3RhdGVt
ZW50KFdURk1vdmUob3JpZ2luKSkKKyAgICAgICAgLCBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zKFdU
Rk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbnMpKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IH5WYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCgpID0gZGVmYXVsdDsKKworICAgIFZhcmlh
YmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KGNvbnN0IFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVt
ZW50JikgPSBkZWxldGU7CisgICAgVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQoVmFyaWFi
bGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQmJikgPSBkZWZhdWx0OworICAgIAorICAgIGJvb2wgaXNW
YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KKworICAgIFZlY3RvcjxWYXJpYWJsZURlY2xhcmF0aW9uPiYgdmFyaWFibGVEZWNsYXJh
dGlvbnMoKSB7IHJldHVybiBtX3ZhcmlhYmxlRGVjbGFyYXRpb25zOyB9CisKK3ByaXZhdGU6Cisg
ICAgVmVjdG9yPFZhcmlhYmxlRGVjbGFyYXRpb24+IG1fdmFyaWFibGVEZWNsYXJhdGlvbnM7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBBU1QKKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfV0hMU0xfU1RBVEVNRU5UKFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LCBpc1Zhcmlh
YmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVuY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxl
UmVmZXJlbmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVmNGZi
NTVkMTlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVmFyaWFibGVSZWZlcmVuY2UuaApAQCAtMCwwICsxLDkxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAi
V0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgorI2luY2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJh
dGlvbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBW
YXJpYWJsZVJlZmVyZW5jZSA6IHB1YmxpYyBFeHByZXNzaW9uIHsKK3B1YmxpYzoKKyAgICBWYXJp
YWJsZVJlZmVyZW5jZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIFN0cmluZyYmIG5hbWUpCisgICAg
ICAgIDogRXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdpbikpCisgICAgICAgICwgbV9uYW1lKFdURk1v
dmUobmFtZSkpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgflZhcmlhYmxlUmVmZXJlbmNl
KCkgPSBkZWZhdWx0OworCisgICAgVmFyaWFibGVSZWZlcmVuY2UoY29uc3QgVmFyaWFibGVSZWZl
cmVuY2UmKSA9IGRlbGV0ZTsKKyAgICBWYXJpYWJsZVJlZmVyZW5jZShWYXJpYWJsZVJlZmVyZW5j
ZSYmKSA9IGRlZmF1bHQ7CisKKyAgICBzdGF0aWMgVmFyaWFibGVSZWZlcmVuY2Ugd3JhcChWYXJp
YWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQorICAgIHsKKyAgICAgICAgVmFy
aWFibGVSZWZlcmVuY2UgcmVzdWx0KExleGVyOjpUb2tlbih2YXJpYWJsZURlY2xhcmF0aW9uLm9y
aWdpbigpKSk7CisgICAgICAgIHJlc3VsdC5tX3ZhcmlhYmxlID0gJnZhcmlhYmxlRGVjbGFyYXRp
b247CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBpc1ZhcmlhYmxl
UmVmZXJlbmNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgU3RyaW5n
JiBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICBWYXJpYWJsZURlY2xhcmF0aW9uKiB2
YXJpYWJsZSgpIHsgcmV0dXJuIG1fdmFyaWFibGU7IH0KKworICAgIHZvaWQgc2V0VmFyaWFibGUo
VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikKKyAgICB7CisgICAgICAg
IG1fdmFyaWFibGUgPSAmdmFyaWFibGVEZWNsYXJhdGlvbjsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgVmFyaWFibGVSZWZlcmVuY2UoTGV4ZXI6OlRva2VuJiYgb3JpZ2luKQorICAgICAgICA6IEV4
cHJlc3Npb24oV1RGTW92ZShvcmlnaW4pKQorICAgIHsKKyAgICB9CisKKyAgICBTdHJpbmcgbV9u
YW1lOworICAgIFZhcmlhYmxlRGVjbGFyYXRpb24qIG1fdmFyaWFibGU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBBU1QKKworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfV0hMU0xfRVhQ
UkVTU0lPTihWYXJpYWJsZVJlZmVyZW5jZSwgaXNWYXJpYWJsZVJlZmVyZW5jZSgpKQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTFdoaWxlTG9vcC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMV2hpbGVMb29wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu
LmFlYzY0Y2FhYzMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMV2hpbGVMb29wLmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTGV4ZXIuaCIKKyNpbmNsdWRlICJXSExT
TFN0YXRlbWVudC5oIgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3Mg
V2hpbGVMb29wIDogcHVibGljIFN0YXRlbWVudCB7CitwdWJsaWM6CisgICAgV2hpbGVMb29wKExl
eGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEV4cHJlc3Npb24+JiYgY29uZGl0aW9uYWws
IFVuaXF1ZVJlZjxTdGF0ZW1lbnQ+JiYgYm9keSkKKyAgICAgICAgOiBTdGF0ZW1lbnQoV1RGTW92
ZShvcmlnaW4pKQorICAgICAgICAsIG1fY29uZGl0aW9uYWwoV1RGTW92ZShjb25kaXRpb25hbCkp
CisgICAgICAgICwgbV9ib2R5KFdURk1vdmUoYm9keSkpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgfldoaWxlTG9vcCgpID0gZGVmYXVsdDsKKworICAgIFdoaWxlTG9vcChjb25zdCBXaGls
ZUxvb3AmKSA9IGRlbGV0ZTsKKyAgICBXaGlsZUxvb3AoV2hpbGVMb29wJiYpID0gZGVmYXVsdDsK
KyAgICAKKyAgICBib29sIGlzV2hpbGVMb29wKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQorCisgICAgRXhwcmVzc2lvbiYgY29uZGl0aW9uYWwoKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxFeHByZXNzaW9uJj4obV9jb25kaXRpb25hbCk7IH0KKyAgICBTdGF0ZW1lbnQmIGJvZHkoKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxTdGF0ZW1lbnQmPihtX2JvZHkpOyB9CisKK3ByaXZhdGU6Cisg
ICAgVW5pcXVlUmVmPEV4cHJlc3Npb24+IG1fY29uZGl0aW9uYWw7CisgICAgVW5pcXVlUmVmPFN0
YXRlbWVudD4gbV9ib2R5OworfTsKKworfSAvLyBuYW1lc3BhY2UgQVNUCisKK30KKworfQorCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX1dITFNMX1NUQVRFTUVOVChXaGlsZUxvb3AsIGlzV2hpbGVM
b29wKCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDdjMjZmNTA4OTAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENo
ZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hM
U0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgorCisjaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVy
ZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNM
SW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2Jvb2wgY2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMoY29uc3QgUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBWZWN0b3I8c3RkOjpyZWZl
cmVuY2Vfd3JhcHBlcjxjb25zdCBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+PiBmdW5jdGlvbnM7
CisgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0aW9uRGVm
aW5pdGlvbnMoKSkKKyAgICAgICAgZnVuY3Rpb25zLmFwcGVuZChzdGF0aWNfY2FzdDxjb25zdCBB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgIGZvciAo
YXV0byYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgZnVuY3Rpb25zLmFwcGVuZChzdGF0aWNfY2FzdDxjb25z
dCBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mPihuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKSk7CisKKyAgICBzdGQ6OnNvcnQoZnVuY3Rpb25zLmJlZ2luKCksIGZ1bmN0aW9ucy5lbmQo
KSwgW10oY29uc3QgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBhLCBjb25zdCBBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24mIGIpIC0+IGJvb2wgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3RkOjptaW4oYS5uYW1lKCkubGVuZ3RoKCksIGIubmFtZSgpLmxlbmd0aCgpKTsgKytp
KSB7CisgICAgICAgICAgICBpZiAoYS5uYW1lKClbaV0gPCBiLm5hbWUoKVtpXSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChhLm5hbWUoKVtpXSA+IGIubmFt
ZSgpW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gYS5uYW1lKCkubGVuZ3RoKCkgPCBiLm5hbWUoKS5sZW5ndGgoKTsKKyAgICB9KTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9ucy5zaXplKCk7ICsraSkgeworICAg
ICAgICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBmdW5jdGlvbnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0uZ2V0KCkubmFtZSgpICE9IGZ1bmN0aW9uc1tq
XS5nZXQoKS5uYW1lKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAo
aXM8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPihmdW5jdGlvbnNbaV0uZ2V0KCkpICYm
IGlzPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4oZnVuY3Rpb25zW2pdLmdldCgpKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbnNbaV0u
Z2V0KCkucGFyYW1ldGVycygpLnNpemUoKSAhPSBmdW5jdGlvbnNbal0uZ2V0KCkucGFyYW1ldGVy
cygpLnNpemUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChm
dW5jdGlvbnNbaV0uZ2V0KCkuaXNDYXN0KCkpIHsKKyAgICAgICAgICAgICAgICBib29sIHNhbWUg
PSB0cnVlOworICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbnNbaV0uZ2V0KCku
dHlwZSgpLCBmdW5jdGlvbnNbal0uZ2V0KCkudHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgICAg
c2FtZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGZ1bmN0aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCku
c2l6ZSgpOyArK2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlcygqZnVu
Y3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVtrXS50eXBlKCksICpmdW5jdGlvbnNbal0uZ2V0
KCkucGFyYW1ldGVycygpW2tdLnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzYW1lID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNhbWUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYm9vbCBz
YW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBrID0gMDsgayA8IGZ1bmN0
aW9uc1tpXS5nZXQoKS5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2spIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtYXRjaGVzKCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpW2tdLnR5
cGUoKSwgKmZ1bmN0aW9uc1tqXS5nZXQoKS5wYXJhbWV0ZXJzKClba10udHlwZSgpKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgc2FtZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKHNhbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGZ1bmN0aW9u
c1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJhdG9yJltdIiAmJiBmdW5jdGlvbnNbaV0uZ2V0KCku
cGFyYW1ldGVycygpLnNpemUoKSA9PSAyCisgICAgICAgICAgICAmJiBpczxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlv
bnNbaV0uZ2V0KCkucGFyYW1ldGVycygpWzBdLnR5cGUoKSkpKSB7CisgICAgICAgICAgICBhdXRv
JiB0eXBlID0gc3RhdGljX2Nhc3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNb
aV0uZ2V0KCkucGFyYW1ldGVycygpWzFdLnR5cGUoKSk7CisgICAgICAgICAgICBpZiAoaXM8QVNU
OjpUeXBlUmVmZXJlbmNlPih0eXBlKSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiByZXNv
bHZlZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHR5cGUpLnJlc29sdmVkVHlw
ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4oKnJlc29sdmVkVHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
PigqcmVzb2x2ZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJ1aW50IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZnVuY3Rpb25zW2ldLmdldCgpLm5h
bWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIiAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVy
cygpLnNpemUoKSA9PSAxCisgICAgICAgICAgICAmJiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5
cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdl
dCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKQorICAgICAgICAgICAgfHwgaXM8QVNUOjpBcnJh
eVR5cGU+KHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ld
LmdldCgpLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGVsc2UgaWYgKGZ1bmN0aW9uc1tpXS5nZXQoKS5uYW1lKCkgPT0gIm9wZXJh
dG9yPT0iCisgICAgICAgICAgICAmJiBmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVycygpLnNp
emUoKSA9PSAyCisgICAgICAgICAgICAmJiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19j
YXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVuY3Rpb25zW2ldLmdldCgpLnBhcmFtZXRl
cnMoKVswXS50eXBlKCkpKQorICAgICAgICAgICAgJiYgaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihz
dGF0aWNfY2FzdDxjb25zdCBBU1Q6OlVubmFtZWRUeXBlJj4oKmZ1bmN0aW9uc1tpXS5nZXQoKS5w
YXJhbWV0ZXJzKClbMV0udHlwZSgpKSkKKyAgICAgICAgICAgICYmIG1hdGNoZXMoc3RhdGljX2Nh
c3Q8Y29uc3QgQVNUOjpVbm5hbWVkVHlwZSY+KCpmdW5jdGlvbnNbaV0uZ2V0KCkucGFyYW1ldGVy
cygpWzBdLnR5cGUoKSksIHN0YXRpY19jYXN0PGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmPigqZnVu
Y3Rpb25zW2ldLmdldCgpLnBhcmFtZXRlcnMoKVsxXS50eXBlKCkpKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KKworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
Q2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMC4uN2VjZWU3ODJjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rp
b25zLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2Jvb2wgY2hlY2tEdXBsaWNhdGVGdW5j
dGlvbnMoY29uc3QgUHJvZ3JhbSYpOworCit9CisKK30KKworCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MGEwZGMzOTgzZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tl
ci5jcHAKQEAgLTAsMCArMSwxNDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUp
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTENoZWNrZXIuaCIKKworI2lu
Y2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5
cGUuaCIKKyNpbmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xDYWxsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29tbWFFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TERvV2hpbGVMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xEb3RFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xGb3JMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMu
aCIKKyNpbmNsdWRlICJXSExTTElmU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5
cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb2dyYW0u
aCIKKyNpbmNsdWRlICJXSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTFJlc29sdmFibGVUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZlT3ZlcmxvYWRJ
bXBsLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZpbmdUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xS
ZXR1cm4uaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldI
TFNMVGVybmFyeUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNs
dWRlICJXSExTTFdoaWxlTG9vcC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFBPRENoZWNrZXIgOiBwdWJsaWMg
VmlzaXRvciB7CitwdWJsaWM6CisgICAgUE9EQ2hlY2tlcigpID0gZGVmYXVsdDsKKworICAgIHZp
cnR1YWwgflBPRENoZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51
bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAg
eworICAgICAgICBWaXNpdG9yOjp2aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghbmF0aXZlVHlwZURlY2xh
cmF0aW9uLmlzTnVtYmVyKCkKKyAgICAgICAgICAgICYmICFuYXRpdmVUeXBlRGVjbGFyYXRpb24u
aXNWZWN0b3IoKQorICAgICAgICAgICAgJiYgIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc01hdHJp
eCgpKQorICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFT
VDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pIG92
ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdCh0eXBlRGVmaW5pdGlvbik7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoYXJyYXlUeXBlKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7Cisg
ICAgfQorfTsKKworc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bj4gcmVzb2x2ZVdpdGhPcGVyYXRvckFuZGVySW5kZXhlcihBU1Q6OkNhbGxFeHByZXNzaW9uJiBj
YWxsRXhwcmVzc2lvbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGZpcnN0QXJndW1lbnQsIGNv
bnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBm
YWxzZTsKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGF1dG8gcmV0dXJuVHlwZSA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNz
aW9uLm9yaWdpbigpKSwgZmlyc3RBcmd1bWVudC5hZGRyZXNzU3BhY2UoKSwgZmlyc3RBcmd1bWVu
dC5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMg
cGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJz
KCksIHsgZmlyc3RBcmd1bWVudC5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmll
cnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNz
aW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKSB9LCBTdHJpbmcoKSwgV1RGOjpu
dWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RG
TW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvciZbXSIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0
b3IpLCBpc1Jlc3RyaWN0ZWQpOworfQorCitzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uPiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKEFTVDo6Q2FsbEV4cHJl
c3Npb24mIGNhbGxFeHByZXNzaW9uLCBBU1Q6OlVubmFtZWRUeXBlJiBmaXJzdEFyZ3VtZW50LCBj
b25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQoreworICAgIGJvb2wgaXNSZXN0cmljdGVkID0g
ZmFsc2U7CisgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKKyAgICBhdXRvIHJldHVyblR5cGUg
PSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9y
aWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCB7IGZpcnN0QXJndW1lbnQuY2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92
ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvci5sZW5ndGgiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJh
dG9yKSwgaXNSZXN0cmljdGVkKTsKK30KKworc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKEFTVDo6Q2Fs
bEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlJiBmaXJzdEFyZ3VtZW50
LCBSZXNvbHZpbmdUeXBlJiBzZWNvbmRBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmlu
c2ljcykKK3sKKyAgICBib29sIGlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgIGJvb2wgaXNPcGVy
YXRvciA9IHRydWU7CisgICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MuYm9v
bFR5cGUoKSk7CisgICAgYXV0byBhcmd1bWVudFR5cGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLT5j
bG9uZSgpOworICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JikgLT4gVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBl
KSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICAgICAgcmV0dXJuIHVu
bmFtZWRUeXBlLT5jbG9uZSgpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlPiYpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgICAgICAv
LyBXZSBlbmNvdW50ZXJlZCAibnVsbCA9PSBudWxsIi4KKyAgICAgICAgICAgIC8vIFRoZSB0eXBl
IGlzbid0IG9ic2VydmFibGUsIHNvIHdlIGNhbiBwaWNrIHdoYXRldmVyIHdlIHdhbnQuCisgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYmUgZ2VuZXJhbGl6ZWQsIHVzaW5n
IHRoZSAicHJlZmVycmVkIHR5cGUiIGluZnJhc3RydWN0dXJlIHVzZWQgYnkgZ2VuZXJpYyBsaXRl
cmFscworICAgICAgICAgICAgcmV0dXJuIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6
VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLmludFR5cGUoKSk7Cisg
ICAgICAgIH0pLCBzZWNvbmRBcmd1bWVudCk7CisgICAgfSksIGZpcnN0QXJndW1lbnQpOworICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLmFw
cGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9u
Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgYXJndW1lbnRUeXBlLT5jbG9uZSgpIH0s
IFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRlcnMu
YXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBXVEZNb3ZlKGFyZ3VtZW50VHlwZSkg
fSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcmV0dXJuIEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygp
LCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3I9PSIs
IFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6
Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworfQorCitzdGF0aWMgT3B0aW9u
YWw8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiByZXNvbHZlQnlJbnN0YW50aWF0aW9u
KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uLCBjb25zdCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIHR5cGVzLCBjb25zdCBJbnRyaW5zaWNz
JiBpbnRyaW5zaWNzKQoreworICAgIGlmIChjYWxsRXhwcmVzc2lvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yJltdIiAmJiB0eXBlcy5zaXplKCkgPT0gMikgeworICAgICAgICBhdXRvKiBmaXJzdEFyZ3Vt
ZW50QXJyYXlSZWYgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUq
IHsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nh
c3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuICZkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpV
bm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYpIC0+IEFTVDo6QXJy
YXlSZWZlcmVuY2VUeXBlKiB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
fSksIHR5cGVzWzBdLmdldCgpKTsKKyAgICAgICAgYm9vbCBzZWNvbmRBcmd1bWVudElzVWludCA9
IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhz
dGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5cGUpLCBpbnRyaW5zaWNzLnVp
bnRUeXBlKCkpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYg
cmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIHJl
c29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUoaW50cmlu
c2ljcy51aW50VHlwZSgpKTsKKyAgICAgICAgfSksIHR5cGVzWzFdLmdldCgpKTsKKyAgICAgICAg
aWYgKGZpcnN0QXJndW1lbnRBcnJheVJlZiAmJiBzZWNvbmRBcmd1bWVudElzVWludCkKKyAgICAg
ICAgICAgIHJldHVybiByZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKGNhbGxFeHByZXNz
aW9uLCAqZmlyc3RBcmd1bWVudEFycmF5UmVmLCBpbnRyaW5zaWNzKTsKKyAgICB9IGVsc2UgaWYg
KGNhbGxFeHByZXNzaW9uLm5hbWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIiAmJiB0eXBlcy5zaXpl
KCkgPT0gMSkgeworICAgICAgICBhdXRvKiBmaXJzdEFyZ3VtZW50UmVmZXJlbmNlID0gV1RGOjp2
aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5u
YW1lZFR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFt
ZWRUeXBlKSkgfHwgaXM8QVNUOjpBcnJheVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5
cGUmPih1bm5hbWVkVHlwZSkpKQorICAgICAgICAgICAgICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8
QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9LCBbXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JikgLT4gQVNU
OjpVbm5hbWVkVHlwZSogeworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0p
LCB0eXBlc1swXS5nZXQoKSk7CisgICAgICAgIGlmIChmaXJzdEFyZ3VtZW50UmVmZXJlbmNlKQor
ICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVXaXRoT3BlcmF0b3JMZW5ndGgoY2FsbEV4cHJlc3Np
b24sICpmaXJzdEFyZ3VtZW50UmVmZXJlbmNlLCBpbnRyaW5zaWNzKTsKKyAgICB9IGVsc2UgaWYg
KGNhbGxFeHByZXNzaW9uLm5hbWUoKSA9PSAib3BlcmF0b3I9PSIgJiYgdHlwZXMuc2l6ZSgpID09
IDIpIHsKKyAgICAgICAgYXV0byBpc0FjY2VwdGFibGUgPSBbXShSZXNvbHZpbmdUeXBlJiByZXNv
bHZpbmdUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4o
c3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKSk7CisgICAgICAgICAg
ICB9LCBbXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzPEFTVDo6TnVsbExpdGVy
YWxUeXBlPihyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAg
ICAgICAgICB9KSwgcmVzb2x2aW5nVHlwZSk7CisgICAgICAgIH07CisgICAgICAgIGlmIChpc0Fj
Y2VwdGFibGUodHlwZXNbMF0uZ2V0KCkpICYmIGlzQWNjZXB0YWJsZSh0eXBlc1sxXS5nZXQoKSkp
CisgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKGNhbGxF
eHByZXNzaW9uLCB0eXBlc1swXS5nZXQoKSwgdHlwZXNbMV0uZ2V0KCksIGludHJpbnNpY3MpOwor
ICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCitjbGFzcyBDaGVja2VyIDogcHVi
bGljIFZpc2l0b3IgeworcHVibGljOgorICAgIENoZWNrZXIoY29uc3QgSW50cmluc2ljcyYgaW50
cmluc2ljcywgUHJvZ3JhbSYgcHJvZ3JhbSkKKyAgICAgICAgOiBtX2ludHJpbnNpY3MoaW50cmlu
c2ljcykKKyAgICAgICAgLCBtX3Byb2dyYW0ocHJvZ3JhbSkKKyAgICB7CisgICAgfQorCisgICAg
fkNoZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KFByb2dyYW0mIHByb2dyYW0p
IG92ZXJyaWRlCisgICAgeworICAgICAgICBmb3IgKGF1dG8mIHR5cGVEZWZpbml0aW9uIDogcHJv
Z3JhbS50eXBlRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChz
dGF0aWNfY2FzdDxBU1Q6OlR5cGVEZWZpbml0aW9uJj4odHlwZURlZmluaXRpb24pKTsKKyAgICAg
ICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVEZWZpbml0aW9uIDogcHJvZ3JhbS5zdHJ1Y3R1cmVEZWZp
bml0aW9ucygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFT
VDo6U3RydWN0dXJlRGVmaW5pdGlvbiY+KHN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAg
Zm9yIChhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmVudW1lcmF0aW9uRGVm
aW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiY+KGVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAg
ICAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA6IHByb2dyYW0ubmF0aXZlVHlw
ZURlY2xhcmF0aW9ucygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19j
YXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJj4obmF0aXZlVHlwZURlY2xhcmF0aW9uKSk7
CisKKyAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkRlZmluaXRpb24gOiBwcm9ncmFtLmZ1bmN0
aW9uRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNf
Y2FzdDxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAg
ICAgICBmb3IgKGF1dG8mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
c3RhdGljX2Nhc3Q8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJj4obmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbikpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGNoZWNrU2hhZGVy
VHlwZShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICgqZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBl
KCkpIHsKKyAgICAgICAgY2FzZSBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbjo6RW50cnlQb2ludFR5
cGU6OlZlcnRleDoKKyAgICAgICAgICAgIHJldHVybiAhbV92ZXJ0ZXhFbnRyeVBvaW50cy5hZGQo
ZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkuaXNOZXdFbnRyeTsKKyAgICAgICAgY2FzZSBBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbjo6RW50cnlQb2ludFR5cGU6OkZyYWdtZW50OgorICAgICAgICAg
ICAgcmV0dXJuICFtX2ZyYWdtZW50RW50cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5u
YW1lKCkpLmlzTmV3RW50cnk7CisgICAgICAgIGNhc2UgQVNUOjpGdW5jdGlvbkRlZmluaXRpb246
OkVudHJ5UG9pbnRUeXBlOjpDb21wdXRlOgorICAgICAgICAgICAgcmV0dXJuICFtX2NvbXB1dGVF
bnRyeVBvaW50cy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkuaXNOZXdFbnRyeTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGJvb2wgY2hlY2tTZW1hbnRpY3MoQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIGF1dG8gZW50cnlQ
b2ludEl0ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKG1faW50cmluc2ljcywgZnVuY3Rpb25E
ZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKCFlbnRyeVBvaW50SXRlbXMpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8gaW5wdXRJdGVtcyA9IFdURk1vdmUoZW50cnlQb2lu
dEl0ZW1zLT5pbnB1dHMpOworICAgICAgICBhdXRvIG91dHB1dEl0ZW1zID0gV1RGTW92ZShlbnRy
eVBvaW50SXRlbXMtPm91dHB1dHMpOworCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gY2hl
Y2tEdXBsaWNhdGVTZW1hbnRpY3MgPSBbJl0oY29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYg
aXRlbXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
aXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9
IGkgKyAxOyBqIDwgaXRlbXMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpdGVtc1tpXS5zZW1hbnRpYyA9PSBpdGVtc1tqXS5zZW1hbnRpYykKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgaWYgKCFjaGVja0R1cGxpY2F0ZVNlbWFudGljcyhpbnB1dEl0ZW1z
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWNoZWNr
RHVwbGljYXRlU2VtYW50aWNzKG91dHB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGNoZWNrU2Vt
YW50aWNUeXBlcyA9IFsmXShjb25zdCBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpdGVtcykgLT4g
Ym9vbCB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXV0byBhY2NlcHRhYmxlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShjb25zdCBBU1Q6OkJhc2VTZW1hbnRpYyYgc2VtYW50aWMpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljLmlzQWNjZXB0YWJsZVR5cGUoaXRl
bS51bm5hbWVkVHlwZSwgbV9pbnRyaW5zaWNzKTsKKyAgICAgICAgICAgICAgICAgICAgfSksIGl0
ZW0uc2VtYW50aWMpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2VwdGFibGUpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlm
ICghY2hlY2tTZW1hbnRpY1R5cGVzKGlucHV0SXRlbXMpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY1R5cGVzKG91dHB1dEl0ZW1z
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB7
CisgICAgICAgICAgICBhdXRvIGNoZWNrU2VtYW50aWNGb3JTaGFkZXJUeXBlID0gWyZdKGNvbnN0
IFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGl0ZW1zLCBBU1Q6OkJhc2VTZW1hbnRpYzo6U2hhZGVy
SXRlbURpcmVjdGlvbiBkaXJlY3Rpb24pIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGZvciAo
YXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWNjZXB0YWJs
ZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgQVNUOjpCYXNlU2VtYW50
aWMmIHNlbWFudGljKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
ZW1hbnRpYy5pc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKGRpcmVjdGlvbiwgZnVu
Y3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgfSksIGl0ZW0uc2VtYW50aWMp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWFjY2VwdGFibGUpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICghY2hlY2tTZW1h
bnRpY0ZvclNoYWRlclR5cGUoaW5wdXRJdGVtcywgQVNUOjpCYXNlU2VtYW50aWM6OlNoYWRlckl0
ZW1EaXJlY3Rpb246OklucHV0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNGb3JTaGFkZXJUeXBlKG91dHB1dEl0ZW1zLCBBU1Q6
OkJhc2VTZW1hbnRpYzo6U2hhZGVySXRlbURpcmVjdGlvbjo6T3V0cHV0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBh
dXRvIGNoZWNrUE9ERGF0YSA9IFsmXShjb25zdCBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpdGVt
cykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsK
KyAgICAgICAgICAgICAgICAgICAgUE9EQ2hlY2tlciBwb2RDaGVja2VyOworICAgICAgICAgICAg
ICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4oaXRlbS51bm5hbWVkVHlwZSkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPihpdGVtLnVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KGl0
ZW0udW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVj
a0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KGl0ZW0udW5u
YW1lZFR5cGUpLmVsZW1lbnRUeXBlKCkpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChp
czxBU1Q6OkFycmF5VHlwZT4oaXRlbS51bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkFycmF5VHlw
ZT4oaXRlbS51bm5hbWVkVHlwZSkudHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlm
IChwb2RDaGVja2VyLmVycm9yKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICghY2hlY2tQT0REYXRhKGlucHV0SXRlbXMpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghY2hlY2tQT0RE
YXRhKG91dHB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGNoZWNrT3BlcmF0
b3JPdmVybG9hZChjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0
aW9uKQorICAgIHsKKyAgICAgICAgZW51bSBjbGFzcyBDaGVja0tpbmQgeworICAgICAgICAgICAg
SW5kZXgsCisgICAgICAgICAgICBEb3QKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGNoZWNr
R2V0dGVyID0gWyZdKENoZWNrS2luZCBraW5kKSAtPiBib29sIHsKKyAgICAgICAgICAgIHNpemVf
dCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6SW5kZXggPyAyIDog
MTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUo
KSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpWzBdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgaWYgKGlzPEFT
VDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiB1bm5h
bWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAg
ICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBjaGVja1NldHRlciA9IFsmXShD
aGVja0tpbmQga2luZCkgLT4gYm9vbCB7CisgICAgICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQ
YXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6OkluZGV4ID8gMyA6IDI7CisgICAgICAgICAg
ICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0
ZWRQYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGF1dG8mIGZpcnN0QXJndW1lbnRVbmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMF0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBpZiAoaXM8QVNU
OjpVbm5hbWVkVHlwZT4oZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0QXJn
dW1lbnRVbmlmeU5vZGUpOworICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBl
Pih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbkRlZmluaXRpb24udHlw
ZSgpLCAqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8mIHZhbHVlVHlwZSA9ICpm
dW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW251bUV4cGVjdGVkUGFyYW1ldGVycyAtIDFd
LnR5cGUoKTsKKyAgICAgICAgICAgIGF1dG8gZ2V0dGVyTmFtZSA9IGZ1bmN0aW9uRGVmaW5pdGlv
bi5uYW1lKCkuc3Vic3RyaW5nKDAsIGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkubGVuZ3RoKCkg
LSAxKTsKKyAgICAgICAgICAgIGF1dG8qIGdldHRlckZ1bmNzID0gbV9wcm9ncmFtLm5hbWVDb250
ZXh0KCkuZ2V0RnVuY3Rpb25zKGdldHRlck5hbWUpOworICAgICAgICAgICAgaWYgKCFnZXR0ZXJG
dW5jcykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBWZWN0b3I8
UmVzb2x2aW5nVHlwZT4gYXJndW1lbnRUeXBlczsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhcmd1bWVudFR5cGVSZWZlcmVuY2VzOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1FeHBlY3RlZFBhcmFtZXRlcnMg
LSAxOyArK2kpCisgICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlcy5hcHBlbmQoKCpmdW5jdGlv
bkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSktPmNsb25lKCkpOworICAgICAgICAg
ICAgZm9yIChhdXRvJiBhcmd1bWVudFR5cGUgOiBhcmd1bWVudFR5cGVzKQorICAgICAgICAgICAg
ICAgIGFyZ3VtZW50VHlwZVJlZmVyZW5jZXMuYXBwZW5kKGFyZ3VtZW50VHlwZSk7CisgICAgICAg
ICAgICBPcHRpb25hbDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4gY2Fz
dFJldHVyblR5cGUgPSBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBhdXRvKiBvdmVybG9hZCA9
IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbCgqZ2V0dGVyRnVuY3MsIGFyZ3VtZW50VHlwZVJl
ZmVyZW5jZXMsIGNhc3RSZXR1cm5UeXBlKTsKKyAgICAgICAgICAgIGlmICghb3ZlcmxvYWQpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byYgcmVzdWx0VHlw
ZSA9IG92ZXJsb2FkLT50eXBlKCk7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMocmVzdWx0VHlw
ZSwgdmFsdWVUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGNoZWNrQW5kZXIgPSBb
Jl0oQ2hlY2tLaW5kIGtpbmQpIC0+IGJvb2wgeworICAgICAgICAgICAgc2l6ZV90IG51bUV4cGVj
dGVkUGFyYW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCA/IDIgOiAxOworICAgICAg
ICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IG51bUV4
cGVjdGVkUGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gZnVuY3Rpb25EZWZpbml0
aW9uLnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6VW5u
YW1lZFR5cGU+KHVuaWZ5Tm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1l
ZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlBvaW50ZXJU
eXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhdXRvJiB1bmlmeU5v
ZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKS0+dW5pZnlO
b2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5v
ZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
YXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUp
OworICAgICAgICAgICAgICAgIGlmICghaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUp
ICYmICFpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAgIGlmICghZnVuY3Rp
b25EZWZpbml0aW9uLmlzT3BlcmF0b3IoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmlzQ2FzdCgpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRv
cisrIgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0
b3ItLSIpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygp
LnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGlmICghbWF0Y2hlcygqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCks
IGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmdW5j
dGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcisiCisgICAgICAgICAgICB8fCBmdW5j
dGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvci0iKSB7CisgICAgICAgICAgICBpZiAo
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMQorICAgICAgICAgICAg
ICAgICYmIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IDIpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9y
KiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9y
LyIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9y
JSIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9y
JiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9y
fCIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9y
XiIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9y
PDwiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcHJlYXRv
cj4+IikgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCku
c2l6ZSgpICE9IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5u
YW1lKCkgPT0gIm9wZXJhdG9yfiIpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRp
b24ucGFyYW1ldGVycygpLnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmdW5j
dGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcj09IgorICAgICAgICAgICAgfHwgZnVu
Y3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I8IgorICAgICAgICAgICAgfHwgZnVu
Y3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I8PSIKKyAgICAgICAgICAgIHx8IGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPiIKKyAgICAgICAgICAgIHx8IGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPj0iKSB7CisgICAgICAgICAgICBp
ZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMikKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25E
ZWZpbml0aW9uLnR5cGUoKSwgbV9pbnRyaW5zaWNzLmJvb2xUeXBlKCkpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdIikgewor
ICAgICAgICAgICAgaWYgKCFjaGVja0dldHRlcihDaGVja0tpbmQ6OkluZGV4KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXT0i
KSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrU2V0dGVyKENoZWNrS2luZDo6SW5kZXgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRv
ciZbXSIpIHsKKyAgICAgICAgICAgIGlmICghY2hlY2tBbmRlcihDaGVja0tpbmQ6OkluZGV4KSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5zdGFydHNX
aXRoKCJvcGVyYXRvci4iKSkgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5u
YW1lKCkuZW5kc1dpdGgoIj0iKSkgeworICAgICAgICAgICAgICAgIGlmICghY2hlY2tTZXR0ZXIo
Q2hlY2tLaW5kOjpEb3QpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghY2hlY2tHZXR0ZXIoQ2hlY2tL
aW5kOjpEb3QpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVu
Y3Rpb25EZWZpbml0aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvciYuIikpIHsKKyAgICAg
ICAgICAgIGlmICghY2hlY2tBbmRlcihDaGVja0tpbmQ6OkRvdCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRl
ZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSkgeworICAgICAgICAgICAgaWYg
KCFjaGVja1NoYWRlclR5cGUoZnVuY3Rpb25EZWZpbml0aW9uKSkgeworICAgICAgICAgICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKCFjaGVja1NlbWFudGljcyhmdW5jdGlvbkRlZmluaXRpb24pKSB7CisgICAg
ICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjaGVja09wZXJhdG9yT3ZlcmxvYWQoZnVu
Y3Rpb25EZWZpbml0aW9uKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlv
bkRlZmluaXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRl
ZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGlmICghZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSkgeworICAgICAgICAgICAgLy8gRklY
TUU6IEhhbmRsZSBhIG51bGwgYmFzZSB0eXBlLgorICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
c3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KCplbnVtZXJhdGlvbkRlZmluaXRpb24udHlw
ZSgpKSk7CisKKyAgICAgICAgYXV0byYgYmFzZVR5cGUgPSBzdGF0aWNfY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlJj4oKmVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpLnVuaWZ5Tm9kZSgpOworCisg
ICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4oYmFzZVR5cGUpKSB7CisgICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1
dG8mIHVubmFtZWRCYXNlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4oYmFzZVR5cGUpOwor
ICAgICAgICBpZiAoIWlzPEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZEJhc2UpKSB7CisgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGF1dG8mIHR5cGVSZWZlcmVuY2VCYXNlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNl
Pih1bm5hbWVkQmFzZSk7CisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZl
ZFR5cGUoKSk7CisgICAgICAgIGlmICghaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0
eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUoKSkpIHsKKyAgICAgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byYgbmF0aXZl
VHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0
eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIGlmICghbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmlzSW50KCkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGVudW1lcmF0aW9uTWVtYmVy
cyA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1lbWJlcnMoKTsKKworICAgICAg
ICBmb3IgKGF1dG8mIG1lbWJlciA6IGVudW1lcmF0aW9uTWVtYmVycykgeworICAgICAgICAgICAg
aWYgKCFtZW1iZXIuZ2V0KCkudmFsdWUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAgICAgYm9vbCBzdWNjZXNzOworICAgICAgICAgICAgbWVtYmVyLmdldCgpLnZhbHVl
KCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGF1dG8mIHZhbHVlKSB7CisgICAgICAgICAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBhdXRvIGl0
ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJnZhbHVlKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
aXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0g
V1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1h
dGNoZXMoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKSwgZW51bWVy
YXRpb25EZWZpbml0aW9uKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oUmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2UmIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KGVudW1lcmF0
aW9uRGVmaW5pdGlvbiwgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UucmVzb2x2YWJsZVR5cGUoKSkp
OworICAgICAgICAgICAgICAgIH0pLCBpdGVyYXRvci0+dmFsdWUpOworICAgICAgICAgICAgfSkp
OworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpbnQ2NF90IG5leHRWYWx1ZSA9IDA7CisgICAgICAgIGZvciAoYXV0byYgbWVtYmVy
IDogZW51bWVyYXRpb25NZW1iZXJzKSB7CisgICAgICAgICAgICBpZiAobWVtYmVyLmdldCgpLnZh
bHVlKCkpIHsKKyAgICAgICAgICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAgICAgICAgICAg
IG1lbWJlci5nZXQoKS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6Oklu
dGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IGludGVnZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCk7CisgICAgICAgICAgICAg
ICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVy
YWwudmFsdWVGb3JTZWxlY3RlZFR5cGUoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpG
bG9hdExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0o
QVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICBu
ZXh0VmFsdWUgPSBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc3VjY2Vzc29yKCkodmFsdWUpOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtZW1iZXIuZ2V0KCkuc2V0VmFsdWUo
QVNUOjpDb25zdGFudEV4cHJlc3Npb24oQVNUOjpJbnRlZ2VyTGl0ZXJhbChMZXhlcjo6VG9rZW4o
bWVtYmVyLmdldCgpLm9yaWdpbigpKSwgbmV4dFZhbHVlKSkpOworICAgICAgICAgICAgICAgIG5l
eHRWYWx1ZSA9IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zdWNjZXNzb3IoKShuZXh0VmFsdWUpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBlbnVtZXJhdGlvbk1lbWJlcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8mIG1l
bWJlciA9IGVudW1lcmF0aW9uTWVtYmVyc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIEFTU0VSVCht
ZW1iZXIudmFsdWUoKSk7CisgICAgICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAgICAgICAg
bWVtYmVyLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxp
dGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnRlZ2Vy
TGl0ZXJhbC52YWx1ZSgpOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIHZhbHVl
ID0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICAgICAgfSwgWyZdKEFT
VDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFu
TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVm
ZXJlbmNlJikgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgfSkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgZW51bWVy
YXRpb25NZW1iZXJzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgYXV0byYgb3RoZXJN
ZW1iZXIgPSBlbnVtZXJhdGlvbk1lbWJlcnNbal0uZ2V0KCk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKG90aGVyTWVtYmVyLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIGJvb2wgZmFpbCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIG90aGVyTWVtYmVyLnZhbHVlKCktPnZpc2l0KFdURjo6bWFr
ZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZhaWwgPSB2YWx1ZSA9PSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOwor
ICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgZmFpbCA9IHZhbHVlID09
IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0o
QVNUOjpGbG9hdExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAg
ICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9
LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAg
ICAgICBpZiAoZmFpbCkgeworICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBmb3VuZFplcm8gPSBmYWxzZTsKKyAgICAgICAgZm9y
IChhdXRvJiBtZW1iZXIgOiBlbnVtZXJhdGlvbk1lbWJlcnMpIHsKKyAgICAgICAgICAgIEFTU0VS
VChtZW1iZXIuZ2V0KCkudmFsdWUoKSk7CisgICAgICAgICAgICBtZW1iZXIuZ2V0KCkudmFsdWUo
KS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdl
ckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW50ZWdlckxpdGVyYWwudmFsdWUoKSA9
PSAwKQorICAgICAgICAgICAgICAgICAgICBmb3VuZFplcm8gPSB0cnVlOworICAgICAgICAgICAg
fSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCkgeworICAgICAgICAgICAgICAgIGlmICh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCkg
PT0gMCkKKyAgICAgICAgICAgICAgICAgICAgZm91bmRaZXJvID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSwgWyZdKEFT
VDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWZvdW5kWmVybykg
eworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJl
bmNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2
ZWRUeXBlKCkpOworCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlUmVmZXJlbmNlKTsK
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFi
bGVEZWNsYXJhdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOyAvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsg
d2l0aCBhbm9ueW1vdXMgdmFyaWFibGVzIHdoaWNoIGRvbid0IGhhdmUgdHlwZXMuCisgICAgICAg
IGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpIHsKKyAgICAgICAgICAgIGF1
dG8mIGxoc1R5cGUgPSAqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCk7CisgICAgICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSk7Cisg
ICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQodmFyaWFibGVEZWNsYXJh
dGlvbi5pbml0aWFsaXplcigpKTsKKyAgICAgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3R5
cGVNYXAuZW5kKCkpOworICAgICAgICAgICAgYXV0byYgcmhzID0gaXRlcmF0b3ItPnZhbHVlOwor
ICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhsaHNUeXBlLCBzdGF0aWNfY2FzdDxBU1Q6OlVu
bmFtZWRUeXBlJj4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KGxo
c1R5cGUsIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAg
ICAgICAgICB9KSwgcmhzKTsKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHBy
ZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOworICAgICAgICBh
dXRvIGxlZnRJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZhc3NpZ25tZW50RXhwcmVzc2lvbi5s
ZWZ0KCkpOworICAgICAgICBBU1NFUlQobGVmdEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7
CisgICAgICAgIGF1dG8mIGxoc1R5cGUgPSBsZWZ0SXRlcmF0b3ItPnZhbHVlOworICAgICAgICAv
LyBGSVhNRTogSG93IHRvIGRvIGx2YWx1ZSBhbmQgYWRkcmVzcyBzcGFjZSBhbmFseXNpcz8KKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOwor
ICAgICAgICBhdXRvIHJpZ2h0SXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmYXNzaWdubWVudEV4
cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIEFTU0VSVChyaWdodEl0ZXJhdG9yICE9IG1fdHlw
ZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIHJoc1R5cGUgPSByaWdodEl0ZXJhdG9yLT52YWx1
ZTsKKyAgICAgICAgYXV0byByZXN1bHRUeXBlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IE9wdGlvbmFsPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByaWdodCkg
LT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAgICAg
ICAgaWYgKG1hdGNoZXMoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KGxlZnQpLCBzdGF0
aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4ocmlnaHQpKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGxlZnQtPmNsb25lKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdo
dCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUm
PihsZWZ0KSwgcmlnaHQtPnJlc29sdmFibGVUeXBlKCkpOworICAgICAgICAgICAgfSksIHJoc1R5
cGUpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGVmdCkg
LT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQoc3RhdGljX2Nhc3Q8QVNU
OjpVbm5hbWVkVHlwZSY+KHJpZ2h0KSwgbGVmdC0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAg
ICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmlnaHQpIC0+IE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICAgICAgICAgIHJldHVy
biBtYXRjaEFuZENvbW1pdChsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpLCByaWdodC0+cmVzb2x2YWJs
ZVR5cGUoKSk7CisgICAgICAgICAgICB9KSwgcmhzVHlwZSk7CisgICAgICAgIH0pLCBsaHNUeXBl
KTsKKyAgICAgICAgaWYgKCFyZXN1bHRUeXBlKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV90eXBlTWFwLmFkZCgmYXNzaWdubWVudEV4cHJlc3Npb24sIFdURk1vdmUoKnJlc3VsdFR5cGUp
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
biYgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAg
ICAgICAgYXV0byBsVmFsdWVJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZyZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICAgICAgQVNTRVJUKGxWYWx1ZUl0ZXJhdG9yICE9
IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIGxoc1R5cGUgPSBsVmFsdWVJdGVyYXRv
ci0+dmFsdWU7CisgICAgICAgIC8vIEZJWE1FOiBIb3cgdG8gZG8gbHZhbHVlIGFuZCBhZGRyZXNz
IHNwYWNlIGFuYWx5c2lzPworICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGF0IHRvIGRv
IHdpdGggdGhlIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ncyBBbm9ueW1vdXNWYXJpYWJsZXMu
CisgICAgICAgIEFTU0VSVChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVz
c2lvbigpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpyZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKTsKKyAgICAgICAgYXV0byBuZXdWYWx1ZUl0ZXJh
dG9yID0gbV90eXBlTWFwLmZpbmQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4
cHJlc3Npb24oKSk7CisgICAgICAgIEFTU0VSVChuZXdWYWx1ZUl0ZXJhdG9yICE9IG1fdHlwZU1h
cC5lbmQoKSk7CisgICAgICAgIGF1dG8mIG5ld1ZhbHVlVHlwZSA9IG5ld1ZhbHVlSXRlcmF0b3It
PnZhbHVlOworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgbGVmdCkgLT4gYm9vbCB7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mIHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbWF0Y2hlcyhzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4obGVmdCksIHN0YXRpY19j
YXN0PEFTVDo6VW5uYW1lZFR5cGUmPihyaWdodCkpOworICAgICAgICAgICAgfSwgWyZdKFJlZjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoc3RhdGljX2Nhc3Q8QVNU
OjpVbm5hbWVkVHlwZSY+KGxlZnQpLCByaWdodC0+cmVzb2x2YWJsZVR5cGUoKSkpOworICAgICAg
ICAgICAgfSksIG5ld1ZhbHVlVHlwZSk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmln
aHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPiht
YXRjaEFuZENvbW1pdChzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4ocmlnaHQpLCBsZWZ0
LT5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVU
eXBlUmVmZXJlbmNlPiYgcmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdChsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpLCBy
aWdodC0+cmVzb2x2YWJsZVR5cGUoKSkpOworICAgICAgICAgICAgfSksIG5ld1ZhbHVlVHlwZSk7
CisgICAgICAgIH0pLCBsaHNUeXBlKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IEFTU0VSVChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnJlc3VsdEV4cHJlc3Npb24oKSk7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1
bHRFeHByZXNzaW9uKCkpOworICAgICAgICBhdXRvIHJlc3VsdEl0ZXJhdG9yID0gbV90eXBlTWFw
LmZpbmQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHByZXNzaW9uKCkpOworICAg
ICAgICBBU1NFUlQocmVzdWx0SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAg
YXV0byYgcmVzdWx0VHlwZSA9IHJlc3VsdEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgV1RGOjp2
aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJl
c3VsdCkgeworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOworICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgfSwg
WyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc3VsdCkgeworICAgICAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
LCByZXN1bHQuY29weVJlZigpKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0
LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIH0pLCByZXN1bHRUeXBlKTsKKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5j
ZUV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZGVyZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50ZXIoKSk7CisgICAgICAgIGF1dG8gcG9pbnRlckl0
ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkp
OworICAgICAgICBBU1NFUlQocG9pbnRlckl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7Cisg
ICAgICAgIGF1dG8mIHR5cGUgPSBwb2ludGVySXRlcmF0b3ItPnZhbHVlOworICAgICAgICBhdXRv
KiBwb2ludGVyVHlwZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mIHR5cGUpIC0+IEFTVDo6UG9pbnRlclR5cGUqIHsKKyAgICAgICAg
ICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IHR5cGUtPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgaWYg
KCFpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKQorICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6
OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlBvaW50
ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBl
KTsKKyAgICAgICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdHlwZSkgLT4g
QVNUOjpQb2ludGVyVHlwZSogeworICAgICAgICAgICAgYXV0byogcmVzb2x2ZWRUeXBlID0gdHlw
ZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgICAgIGlmICghcmVz
b2x2ZWRUeXBlKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
YXV0byYgdW5pZnlOb2RlID0gcmVzb2x2ZWRUeXBlLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAg
IGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgIGlmICghaXM8QVNUOjpQ
b2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVk
VHlwZSk7CisgICAgICAgIH0pLCB0eXBlKTsKKyAgICAgICAgaWYgKCFwb2ludGVyVHlwZSkgewor
ICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAvLyBGSVhNRTogSG93IHRvIGRvIGx2YWx1ZSBhbmQgYWRkcmVzcyBzcGFjZSBhbmFs
eXNpcz8KKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZkZXJlZmVyZW5j
ZUV4cHJlc3Npb24sIHBvaW50ZXJUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNF
RChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pIG92
ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZVBvaW50ZXJFeHBy
ZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBsVmFsdWVJdGVyYXRvciA9IG1fdHlwZU1h
cC5maW5kKCZtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgICAgICBBU1NFUlQo
bFZhbHVlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgZWxlbWVu
dFR5cGUgPSBsVmFsdWVJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1dG8qIGxWYWx1ZVR5cGUg
PSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CisgICAgICAgICAgICByZXR1cm4gJnN0
YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih0eXBlKTsKKyAgICAgICAgfSwgW10oUmVmPFJl
c29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAg
ICAgICAgICAgcmV0dXJuIHR5cGUtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCk7Cisg
ICAgICAgIH0pLCBlbGVtZW50VHlwZSk7CisgICAgICAgIGlmICghbFZhbHVlVHlwZSkgeworICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAvLyBGSVhNRTogSG93IHRvIGRvIGx2YWx1ZSBhbmQgYWRkcmVzcyBzcGFjZSBhbmFseXNp
cz8KKyAgICAgICAgQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNl
ID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmljZTsKKyAgICAgICAgYXV0
byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZtYWtlUG9pbnRlckV4cHJlc3Npb24sIFJlc29s
dmluZ1R5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4obWFr
ZVBvaW50ZXJFeHByZXNzaW9uLm9yaWdpbigpKSwgYWRkcmVzc1NwYWNlLCBsVmFsdWVUeXBlLT5j
bG9uZSgpKSkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0Lmlz
TmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVu
Y2VFeHByZXNzaW9uJiBtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24ubFZhbHVlKCkpOworICAgICAgICBhdXRvIGxWYWx1ZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZp
bmQoJm1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgICAgICBBU1NF
UlQobFZhbHVlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgZWxl
bWVudFR5cGUgPSBsVmFsdWVJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1dG8qIHVubmFtZWRU
eXBlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICAgICAgcmV0dXJu
ICZzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odHlwZSk7CisgICAgICAgIH0sIFtdKFJl
ZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsK
KyAgICAgICAgICAgIHJldHVybiB0eXBlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgp
OworICAgICAgICB9KSwgZWxlbWVudFR5cGUpOworICAgICAgICBpZiAoIXVubmFtZWRUeXBlKSB7
CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IHVubmFtZWRUeXBlLT51bmlmeU5vZGUoKTsKKyAg
ICAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAg
IGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2Rl
KTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpIHsK
KyAgICAgICAgICAgICAgICBhdXRvJiBwb2ludGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6UG9pbnRl
clR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQmVjb21lIGEg
Q29udmVydFBvaW50ZXJUb0FycmF5UmVmZXJlbmNlRXhwcmVzc2lvbgorICAgICAgICAgICAgICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVz
c2lvbiwgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
PihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksIHBv
aW50ZXJUeXBlLmFkZHJlc3NTcGFjZSgpLCBwb2ludGVyVHlwZS5lbGVtZW50VHlwZSgpLmNsb25l
KCkpKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBIb3cgdG8gZG8gbHZhbHVlIGFuZCBhZGRyZXNzIHNwYWNl
IGFuYWx5c2lzPworICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlw
ZSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBhcnJheVR5cGUgPSBkb3duY2FzdDxBU1Q6OkFy
cmF5VHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIb3cgdG8g
ZG8gbHZhbHVlIGFuZCBhZGRyZXNzIHNwYWNlIGFuYWx5c2lzPworICAgICAgICAgICAgICAgIEFT
VDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJl
bmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFNhdmUgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KKyAgICAgICAgICAgICAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fdHlwZU1hcC5hZGQoJm1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIFJlc29s
dmluZ1R5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRv
a2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCBhZGRyZXNzU3BhY2Us
IGFycmF5VHlwZS50eXBlKCkuY2xvbmUoKSkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIb3cg
dG8gZG8gbHZhbHVlIGFuZCBhZGRyZXNzIHNwYWNlIGFuYWx5c2lzPworICAgICAgICBBU1Q6OlJl
ZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5
cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlw
ZU1hcC5hZGQoJm1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUobWFr
ZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJh
eVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCBhZGRyZXNzU3BhY2UsIHVubmFtZWRUeXBl
LT5jbG9uZSgpKSkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0
LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNzaW9u
JiBkb3RFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRvdEV4cHJlc3Npb24uYmFzZSgpKTsKKyAgICAgICAgYXV0byBiYXNlSXRlcmF0b3IgPSBt
X3R5cGVNYXAuZmluZCgmZG90RXhwcmVzc2lvbi5iYXNlKCkpOworICAgICAgICBBU1NFUlQoYmFz
ZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIGJhc2VUeXBlID0g
YmFzZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byogYmFzZVVuaWZ5Tm9kZSA9IFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBi
YXNlVHlwZSkgLT4gQVNUOjpUeXBlKiB7CisgICAgICAgICAgICByZXR1cm4gJmJhc2VUeXBlLT51
bmlmeU5vZGUoKTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4m
IGJhc2VUeXBlKSAtPiBBU1Q6OlR5cGUqIHsKKyAgICAgICAgICAgIGlmICghYmFzZVR5cGUtPnJl
c29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0
YXRpY19jYXN0PGJvb2w+KGNvbW1pdChiYXNlVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSkpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiAmYmFzZVR5cGUtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCktPnVu
aWZ5Tm9kZSgpOworICAgICAgICB9KSwgYmFzZVR5cGUpOworICAgICAgICBpZiAoIWJhc2VVbmlm
eU5vZGUpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgYXV0byB3cmFwcGVkQmFzZVR5cGUgPSAoWyZdKCkgLT4gVW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRU
eXBlPigqYmFzZVVuaWZ5Tm9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFT
VDo6VW5uYW1lZFR5cGU+KCpiYXNlVW5pZnlOb2RlKS5jbG9uZSgpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBlPihiYXNlVW5pZnlO
b2RlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChM
ZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIGRvd25jYXN0PEFTVDo6TmFtZWRU
eXBlPigqYmFzZVVuaWZ5Tm9kZSkpOworICAgICAgICAgICAgfQorICAgICAgICB9KSgpOworCisg
ICAgICAgIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiBj
YXN0UmV0dXJuVHlwZTsKKworICAgICAgICBSZXNvbHZpbmdUeXBlIGdldEFyZ3VtZW50VHlwZSh3
cmFwcGVkQmFzZVR5cGUtPmNsb25lKCkpOworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gZ2V0QXJndW1lbnRUeXBlczsKKyAgICAgICAgZ2V0QXJn
dW1lbnRUeXBlcy5hcHBlbmQoZ2V0QXJndW1lbnRUeXBlKTsKKyAgICAgICAgYXV0byogZ2V0RnVu
Y3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVzc2lvbi5wb3NzaWJs
ZUdldE92ZXJsb2FkcygpLCBnZXRBcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSk7CisgICAg
ICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFJldHVyblR5cGUgPSBudWxscHRyOworICAgICAgICBp
ZiAoZ2V0RnVuY3Rpb24pCisgICAgICAgICAgICBnZXRSZXR1cm5UeXBlID0gJmdldEZ1bmN0aW9u
LT50eXBlKCk7CisKKyAgICAgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBhbmRGdW5jdGlv
biA9IG51bGxwdHI7CisgICAgICAgIEFTVDo6VW5uYW1lZFR5cGUqIGFuZFJldHVyblR5cGUgPSBu
dWxscHRyOworICAgICAgICBhdXRvIGNvbXB1dGVBbmRBcmd1bWVudFR5cGUgPSBbJl0oQVNUOjpV
bm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIC0+IE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IHsKKyAg
ICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiB7IHVubmFtZWRUeXBlLmNsb25lKCkgfTsKKyAgICAgICAg
ICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAg
IHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpU
b2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNz
U3BhY2U6OlRocmVhZCwgZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBl
KCkuY2xvbmUoKSkgfTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5h
bWVkVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
ICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2Vu
KGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkLCBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKS5j
bG9uZSgpKSB9OworICAgICAgICB9OworICAgICAgICBhdXRvIGNvbXB1dGVBbmRSZXR1cm5UeXBl
ID0gWyZdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBl
KiB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1l
ZFR5cGUpLmVsZW1lbnRUeXBlKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgfTsKKyAgICAgICAgYXV0byBhbmRBcmd1bWVudFR5cGUgPSBjb21wdXRlQW5kQXJndW1lbnRU
eXBlKHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih3cmFwcGVkQmFzZVR5cGUpKTsKKyAg
ICAgICAgaWYgKGFuZEFyZ3VtZW50VHlwZSkgeworICAgICAgICAgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGFuZEFyZ3VtZW50VHlwZXM7CisgICAgICAg
ICAgICBhbmRBcmd1bWVudFR5cGVzLmFwcGVuZCgqYW5kQXJndW1lbnRUeXBlKTsKKyAgICAgICAg
ICAgIGFuZEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Np
b24ucG9zc2libGVBbmRPdmVybG9hZHMoKSwgYW5kQXJndW1lbnRUeXBlcywgY2FzdFJldHVyblR5
cGUpOworICAgICAgICAgICAgaWYgKGFuZEZ1bmN0aW9uKQorICAgICAgICAgICAgICAgIGFuZFJl
dHVyblR5cGUgPSBjb21wdXRlQW5kUmV0dXJuVHlwZShhbmRGdW5jdGlvbi0+dHlwZSgpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghZ2V0UmV0dXJuVHlwZSAmJiAhYW5kUmV0dXJuVHlwZSkg
eworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChnZXRSZXR1cm5UeXBlICYmIGFuZFJldHVyblR5cGUgJiYgIW1hdGNo
ZXMoKmdldFJldHVyblR5cGUsICphbmRSZXR1cm5UeXBlKSkgeworICAgICAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJlc29sdmlu
Z1R5cGUgc2V0QXJndW1lbnQxVHlwZSh3cmFwcGVkQmFzZVR5cGUtPmNsb25lKCkpOworICAgICAg
ICBSZXNvbHZpbmdUeXBlIHNldEFyZ3VtZW50MlR5cGUoZ2V0UmV0dXJuVHlwZSA/IGdldFJldHVy
blR5cGUtPmNsb25lKCkgOiBhbmRSZXR1cm5UeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgVmVjdG9y
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHNldEFyZ3VtZW50VHlwZXM7
CisgICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKHNldEFyZ3VtZW50MVR5cGUpOworICAg
ICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZChzZXRBcmd1bWVudDJUeXBlKTsKKyAgICAgICAg
YXV0byogc2V0RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoZG90RXhwcmVz
c2lvbi5wb3NzaWJsZVNldE92ZXJsb2FkcygpLCBzZXRBcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJu
VHlwZSk7CisgICAgICAgIGlmIChzZXRGdW5jdGlvbikgeworICAgICAgICAgICAgaWYgKCFtYXRj
aGVzKHNldEZ1bmN0aW9uLT50eXBlKCksIHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih3
cmFwcGVkQmFzZVR5cGUpKSkgeworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8g
RklYTUU6IEhvdyB0byBkbyBsdmFsdWUgYW5kIGFkZHJlc3Mgc3BhY2UgYW5hbHlzaXM/CisKKyAg
ICAgICAgLy8gRklYTUU6IEdlbmVyYXRlIHRoZSBjYWxsIGV4cHJlc3Npb25zCisgICAgICAgIC8q
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxBU1Q6OkV4cHJlc3Npb24+PiBnZXRBcmd1bWVudHM7Cisg
ICAgICAgIGdldEFyZ3VtZW50cy5hcHBlbmQoZG90RXhwcmVzc2lvbi5iYXNlKCkpOyAvLyBGSVhN
RTogVGhpcyBoYXMgdG8gYmUgdGhlIHNhbWUgYmFzZSBhcyBkb3RFeHByZXNzaW9uLmJhc2UoKS4K
KyAgICAgICAgYXV0byBjYWxsRm9yR2V0ID0gc3RkOjptYWtlX3VuaXF1ZTxBU1Q6OkNhbGxFeHBy
ZXNzaW9uPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmlnaW4oKSksIGRvdEV4cHJlc3Np
b24uZ2V0RnVuY3Rpb25OYW1lKCksIFdURk1vdmUoZ2V0QXJndW1lbnRzKSk7CisgICAgICAgIGNh
bGxGb3JHZXQtPnNldEZ1bmN0aW9uKCpnZXRGdW5jdGlvbik7CisgICAgICAgIGF1dG8gZ2V0UmVz
dWx0VHlwZSA9IGdldEZ1bmN0aW9uLT50eXBlKCkuY2xvbmUoKTsqLworICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBtZQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJp
YWJsZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CisgICAgICAgIEFTU0VSVCh2
YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCkpOworICAgICAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fdHlwZU1hcC5hZGQoJnZhcmlhYmxlUmVmZXJlbmNlLCB2YXJpYWJsZVJlZmVyZW5j
ZS52YXJpYWJsZSgpLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFk
ZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQo
QVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFT
U0VSVChyZXR1cm5TdGF0ZW1lbnQuZnVuY3Rpb24oKSk7CisgICAgICAgIGlmIChyZXR1cm5TdGF0
ZW1lbnQudmFsdWUoKSkgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpyZXR1cm5T
dGF0ZW1lbnQudmFsdWUoKSk7CisgICAgICAgICAgICBhdXRvIHZhbHVlSXRlcmF0b3IgPSBtX3R5
cGVNYXAuZmluZChyZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgICAgICAgICBBU1NFUlQo
dmFsdWVJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICAgICAgYXV0byYgcmVz
dWx0VHlwZSA9IHZhbHVlSXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgYXV0byBzdWNjZXNz
ID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4mIHJlc3VsdFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBtYXRj
aGVzKHJldHVyblN0YXRlbWVudC5mdW5jdGlvbigpLT50eXBlKCksIHN0YXRpY19jYXN0PEFTVDo6
VW5uYW1lZFR5cGUmPihyZXN1bHRUeXBlKSk7CisgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzdWx0VHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHJldHVyblN0YXRlbWVu
dC5mdW5jdGlvbigpLT50eXBlKCksIHJlc3VsdFR5cGUtPnJlc29sdmFibGVUeXBlKCkpKTsKKyAg
ICAgICAgICAgIH0pLCByZXN1bHRUeXBlKTsKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykKKyAg
ICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKCFtYXRjaGVzKHJldHVyblN0YXRlbWVudC5mdW5jdGlvbigpLT50eXBl
KCksIG1faW50cmluc2ljcy52b2lkVHlwZSgpKSkKKyAgICAgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJikgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIC8vIEZvbGxvd2luZyBwb2ludGVyIHR5cGVzIGNhbiBjYXVzZSBpbmZpbml0ZSBs
b29wcyBiZWNhdXNlIG9mIGRhdGEgc3RydWN0dXJlcworICAgICAgICAvLyBsaWtlIGxpbmtlZCBs
aXN0cy4KKyAgICAgICAgLy8gRklYTUU6IE1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBi
ZSBlbXB0eQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUm
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gRm9sbG93aW5nIGFycmF5IHJlZmVyZW5jZSB0
eXBlcyBjYW4gY2F1c2UgaW5maW5pdGUgbG9vcHMgYmVjYXVzZSBvZiBkYXRhCisgICAgICAgIC8v
IHN0cnVjdHVyZXMgbGlrZSBsaW5rZWQgbGlzdHMuCisgICAgICAgIC8vIEZJWE1FOiBNYWtlIHN1
cmUgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW1wdHkKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgYXV0byByZWYgPSBhZG9wdFJlZigqbmV3IFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKGlu
dGVnZXJMaXRlcmFsLnR5cGUoKSkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1h
cC5hZGQoJmludGVnZXJMaXRlcmFsLCBXVEZNb3ZlKHJlZikpOworICAgICAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQg
dmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFs
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byByZWYgPSBhZG9wdFJlZigqbmV3IFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlKHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudHlwZSgpKSk7CisgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmdW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCwgV1RGTW92ZShyZWYpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRl
cmFsJiBmbG9hdExpdGVyYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIHJlZiA9IGFk
b3B0UmVmKCpuZXcgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UoZmxvYXRMaXRlcmFsLnR5cGUoKSkp
OworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmZsb2F0TGl0ZXJhbCwg
V1RGTW92ZShyZWYpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TnVsbExpdGVyYWwm
IG51bGxMaXRlcmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byByZWYgPSBhZG9wdFJl
ZigqbmV3IFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKG51bGxMaXRlcmFsLnR5cGUoKSkpOworICAg
ICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJm51bGxMaXRlcmFsLCBXVEZNb3Zl
KHJlZikpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3
RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9v
bGVhbkxpdGVyYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
dHlwZU1hcC5hZGQoJmJvb2xlYW5MaXRlcmFsLCBSZXNvbHZpbmdUeXBlKEFTVDo6VHlwZVJlZmVy
ZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oYm9vbGVhbkxpdGVyYWwub3JpZ2luKCkpLCBtX2ludHJp
bnNpY3MuYm9vbFR5cGUoKSkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmVudW1lcmF0
aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uID0g
KmNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmVudW1lcmF0aW9u
RGVmaW5pdGlvbigpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmNv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLCBSZXNvbHZpbmdUeXBl
KEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Uub3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRp
b24pKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdF
bnRyeSk7CisgICAgfQorCisgICAgYm9vbCBpc0Jvb2xUeXBlKFJlc29sdmluZ1R5cGUmIHJlc29s
dmluZ1R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IGJvb2wgeworICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoZXMoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KGxl
ZnQpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdChtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSwg
bGVmdC0+cmVzb2x2YWJsZVR5cGUoKSkpOworICAgICAgICB9KSwgcmVzb2x2aW5nVHlwZSk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2Fs
Tm90RXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChsb2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkpOworICAgICAgICBhdXRvIG9wZXJhbmRJ
dGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZsb2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkp
OworICAgICAgICBBU1NFUlQob3BlcmFuZEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7Cisg
ICAgICAgIGF1dG8mIG9wZXJhbmRUeXBlID0gb3BlcmFuZEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAg
ICAgaWYgKCFpc0Jvb2xUeXBlKG9wZXJhbmRUeXBlKSkgeworICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdHlwZU1hcC5hZGQoJmxvZ2ljYWxOb3RFeHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlKEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obG9naWNhbE5vdEV4cHJlc3Npb24u
b3JpZ2luKCkpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lk
IHZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNzaW9uKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uLmxl
ZnQoKSk7CisgICAgICAgIGF1dG8gbGVmdEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmxvZ2lj
YWxFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgICAgIEFTU0VSVChsZWZ0SXRlcmF0b3IgIT0gbV90
eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgbGVmdFR5cGUgPSBsZWZ0SXRlcmF0b3ItPnZh
bHVlOworCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5yaWdo
dCgpKTsKKyAgICAgICAgYXV0byByaWdodEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmxvZ2lj
YWxFeHByZXNzaW9uLnJpZ2h0KCkpOworICAgICAgICBBU1NFUlQocmlnaHRJdGVyYXRvciAhPSBt
X3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiByaWdodFR5cGUgPSByaWdodEl0ZXJhdG9y
LT52YWx1ZTsKKworICAgICAgICBpZiAoIWlzQm9vbFR5cGUobGVmdFR5cGUpIHx8ICFpc0Jvb2xU
eXBlKHJpZ2h0VHlwZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRk
KCZsb2dpY2FsRXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZShBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAoTGV4ZXI6OlRva2VuKGxvZ2ljYWxFeHByZXNzaW9uLm9yaWdpbigpKSwgbV9pbnRyaW5zaWNz
LmJvb2xUeXBlKCkpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1
bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50
JiBpZlN0YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAgYXV0byBjb25kaXRpb25hbEl0
ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmlmU3RhdGVtZW50LmNvbmRpdGlvbmFsKCkpOworICAg
ICAgICBBU1NFUlQoY29uZGl0aW9uYWxJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAg
ICAgICBhdXRvJiBjb25kaXRpb25hbFR5cGUgPSBjb25kaXRpb25hbEl0ZXJhdG9yLT52YWx1ZTsK
KyAgICAgICAgaWYgKCFpc0Jvb2xUeXBlKGNvbmRpdGlvbmFsVHlwZSkpIHsKKyAgICAgICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CisgICAgICAgIGlmIChpZlN0YXRl
bWVudC5lbHNlQm9keSgpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19j
YXN0PEFTVDo6U3RhdGVtZW50Jj4oKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpKTsKKyAgICB9CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApIG92ZXJyaWRlCisgICAg
eworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwor
ICAgICAgICBhdXRvIGNvbmRpdGlvbmFsSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmd2hpbGVM
b29wLmNvbmRpdGlvbmFsKCkpOworICAgICAgICBBU1NFUlQoY29uZGl0aW9uYWxJdGVyYXRvciAh
PSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBjb25kaXRpb25hbFR5cGUgPSBjb25k
aXRpb25hbEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKCFpc0Jvb2xUeXBlKGNvbmRpdGlv
bmFsVHlwZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3Ap
IG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3Au
Ym9keSgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmNvbmRpdGlv
bmFsKCkpOworICAgICAgICBhdXRvIGNvbmRpdGlvbmFsSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmlu
ZCgmZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7CisgICAgICAgIEFTU0VSVChjb25kaXRpb25h
bEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIGNvbmRpdGlvbmFs
VHlwZSA9IGNvbmRpdGlvbmFsSXRlcmF0b3ItPnZhbHVlOworICAgICAgICBpZiAoIWlzQm9vbFR5
cGUoY29uZGl0aW9uYWxUeXBlKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JM
b29wJiBmb3JMb29wKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFsmXShBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50JiB2YXJpYWJs
ZURlY2xhcmF0aW9uc1N0YXRlbWVudCkgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKKyAgICAgICAgfSwgWyZdKFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CisgICAgICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpFeHByZXNzaW9uJj4oZXhwcmVzc2lvbikpOworICAg
ICAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsKKyAgICAgICAgaWYgKGZvckxvb3Au
Y29uZGl0aW9uKCkpIHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9vcC5j
b25kaXRpb24oKSk7CisgICAgICAgICAgICBhdXRvIGNvbmRpdGlvbkl0ZXJhdG9yID0gbV90eXBl
TWFwLmZpbmQoZm9yTG9vcC5jb25kaXRpb24oKSk7CisgICAgICAgICAgICBBU1NFUlQoY29uZGl0
aW9uSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgICAgIGF1dG8mIGNvbmRp
dGlvblR5cGUgPSBjb25kaXRpb25JdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICBpZiAoIWlz
Qm9vbFR5cGUoY29uZGl0aW9uVHlwZSkpIHsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBpZiAoZm9yTG9vcC5pbmNyZW1lbnQoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCgqZm9yTG9vcC5pbmNyZW1lbnQoKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmb3JM
b29wLmJvZHkoKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVu
dCYgc3dpdGNoU3RhdGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHN3aXRjaFN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICAgICAgYXV0byB2YWx1ZUl0ZXJh
dG9yID0gbV90eXBlTWFwLmZpbmQoJnN3aXRjaFN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICAgICAg
QVNTRVJUKHZhbHVlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYg
dmFsdWVUeXBlID0gdmFsdWVJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1dG8gdmFsdWVVbmlm
eU5vZGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiYgbGVmdCkgLT4gQVNUOjpUeXBlKiB7CisgICAgICAgICAgICByZXR1cm4gJmxl
ZnQtPnVuaWZ5Tm9kZSgpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYgbGVmdCkgLT4gQVNUOjpUeXBlKiB7CisgICAgICAgICAgICBpZiAoIWxlZnQtPnJlc29s
dmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXRp
Y19jYXN0PGJvb2w+KGNvbW1pdChsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpKSkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuICZsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpLT51bmlmeU5vZGUoKTsK
KyAgICAgICAgfSksIHZhbHVlVHlwZSk7CisgICAgICAgIGlmICghaXM8QVNUOjpOYW1lZFR5cGU+
KCp2YWx1ZVVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byYgdmFsdWVOYW1lZFVuaWZ5Tm9kZSA9
IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPigqdmFsdWVVbmlmeU5vZGUpOworICAgICAgICBpZiAo
IShpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4odmFsdWVOYW1lZFVuaWZ5Tm9kZSkgJiYg
ZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHZhbHVlTmFtZWRVbmlmeU5vZGUp
LmlzSW50KCkpCisgICAgICAgICAgICAmJiAhaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+
KHZhbHVlTmFtZWRVbmlmeU5vZGUpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBoYXNEZWZhdWx0ID0gZmFs
c2U7CisgICAgICAgIGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0
Y2hDYXNlcygpKSB7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZS5i
bG9jaygpKTsKKyAgICAgICAgICAgIGlmICghc3dpdGNoQ2FzZS52YWx1ZSgpKSB7CisgICAgICAg
ICAgICAgICAgaGFzRGVmYXVsdCA9IHRydWU7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBib29sIHN1Y2Nlc3M7CisgICAgICAgICAgICBzd2l0
Y2hDYXNlLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxp
dGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB2
YWx1ZVR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHZh
bHVlVHlwZSksIGludGVnZXJMaXRlcmFsLnR5cGUoKSkpOworICAgICAgICAgICAgICAgIH0sIFsm
XShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiB2YWx1ZVR5cGUpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQo
dmFsdWVUeXBlLT5yZXNvbHZhYmxlVHlwZSgpLCBpbnRlZ2VyTGl0ZXJhbC50eXBlKCkpKTsKKyAg
ICAgICAgICAgICAgICB9KSwgdmFsdWVUeXBlKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVu
c2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAg
ICAgICAgICBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHZhbHVlVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdChzdGF0aWNfY2Fz
dDxBU1Q6OlVubmFtZWRUeXBlJj4odmFsdWVUeXBlKSwgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC50
eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHZhbHVlVHlwZS0+cmVzb2x2YWJsZVR5cGUo
KSwgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9KSwg
dmFsdWVUeXBlKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRM
aXRlcmFsKSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFdURjo6dmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB2YWx1ZVR5cGUpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hB
bmRDb21taXQoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHZhbHVlVHlwZSksIGZsb2F0
TGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVU
eXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHZhbHVlVHlwZS0+cmVzb2x2
YWJsZVR5cGUoKSwgZmxvYXRMaXRlcmFsLnR5cGUoKSkpOworICAgICAgICAgICAgICAgIH0pLCB2
YWx1ZVR5cGUpOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRl
cmFsKSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlz
aXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB2YWx1ZVR5cGUpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRD
b21taXQoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHZhbHVlVHlwZSksIG51bGxMaXRl
cmFsLnR5cGUoKSkpOworICAgICAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2U+JiB2YWx1ZVR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQodmFsdWVUeXBlLT5yZXNvbHZhYmxl
VHlwZSgpLCBudWxsTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9KSwgdmFsdWVU
eXBlKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJikgeworICAgICAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoZXMoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHZh
bHVlVHlwZSksIG1faW50cmluc2ljcy5ib29sVHlwZSgpKTsKKyAgICAgICAgICAgICAgICB9LCBb
Jl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0
KG1faW50cmluc2ljcy5ib29sVHlwZSgpLCB2YWx1ZVR5cGUtPnJlc29sdmFibGVUeXBlKCkpKTsK
KyAgICAgICAgICAgICAgICB9KSwgdmFsdWVUeXBlKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6
OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4
cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkgeworICAgICAgICAgICAgICAgIEFT
U0VSVChjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJh
dGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFdURjo6dmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB2YWx1ZVR5
cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhzdGF0aWNf
Y2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odmFsdWVUeXBlKSwgKmNvbnN0YW50RXhwcmVzc2lvbkVu
dW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAg
ICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBl
KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+
KG1hdGNoQW5kQ29tbWl0KCpjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZS5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSwgdmFsdWVUeXBlLT5yZXNvbHZhYmxlVHlwZSgp
KSk7CisgICAgICAgICAgICAgICAgfSksIHZhbHVlVHlwZSk7CisgICAgICAgICAgICB9KSk7Cisg
ICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCku
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8mIGZpcnN0Q2FzZSA9IHN3aXRjaFN0YXRl
bWVudC5zd2l0Y2hDYXNlcygpW2ldOworICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAx
OyBqIDwgc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkuc2l6ZSgpOyArK2opIHsKKyAgICAg
ICAgICAgICAgICBhdXRvJiBzZWNvbmRDYXNlID0gc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2Vz
KClbal07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PGJvb2w+KGZpcnN0Q2FzZS52YWx1ZSgpKSAhPSBzdGF0aWNfY2FzdDxib29sPihzZWNvbmRDYXNl
LnZhbHVlKCkpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg
ICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9vbD4oZmlyc3RDYXNlLnZhbHVlKCkpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGZpcnN0Q2FzZS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBmaXJzdEludGVnZXJMaXRlcmFsKSB7CisgICAgICAg
ICAgICAgICAgICAgIHNlY29uZENhc2UudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgc2Vjb25kSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmaXJzdEludGVnZXJMaXRlcmFsLnZhbHVlKCkgIT0g
c2Vjb25kSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZd
KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgc2Vjb25kVW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHN0YXRpY19jYXN0PGludDY0
X3Q+KGZpcnN0SW50ZWdlckxpdGVyYWwudmFsdWUoKSkgIT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4o
c2Vjb25kVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICB9LCBb
Jl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6
Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikgeworICAgICAgICAgICAg
ICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbCYgZmlyc3RVbnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNlY29uZENhc2UudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJ
bnRlZ2VyTGl0ZXJhbCYgc2Vjb25kSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN1Y2Nlc3MgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihmaXJzdFVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwudmFsdWUoKSkgIT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oc2Vjb25kSW50ZWdlckxp
dGVyYWwudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVk
SW50ZWdlckxpdGVyYWwmIHNlY29uZFVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmaXJzdFVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFs
dWUoKSAhPSBzZWNvbmRVbnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAg
ICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgIH0sIFsm
XShBU1Q6OkJvb2xlYW5MaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNU
OjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpIHsKKyAgICAg
ICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0
ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAg
ICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAg
ICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZSYgZmlyc3RDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkg
eworICAgICAgICAgICAgICAgICAgICBzZWNvbmRDYXNlLnZhbHVlKCktPnZpc2l0KFdURjo6bWFr
ZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAg
IH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAg
ICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgfSwg
WyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6
OkJvb2xlYW5MaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25z
dGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgc2Vjb25kQ29uc3RhbnRF
eHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN1Y2Nlc3MgPSBmaXJzdENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVy
UmVmZXJlbmNlLmVudW1lcmF0aW9uTWVtYmVyKCkgIT0gc2Vjb25kQ29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghaGFzRGVmYXVsdCkgeworICAgICAgICAgICAgaWYgKGlz
PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPih2YWx1ZU5hbWVkVW5pZnlOb2RlKSkgeworICAg
ICAgICAgICAgICAgIEhhc2hTZXQ8aW50NjRfdD4gdmFsdWVzOworICAgICAgICAgICAgICAgIGJv
b2wgemVyb1ZhbHVlRXhpc3RzOworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgc3dpdGNoQ2Fz
ZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKSB7CisgICAgICAgICAgICAgICAgICAg
IGludDY0X3QgdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaENhc2UudmFsdWUoKS0+
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxp
dGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW50ZWdlckxpdGVyYWwu
dmFsdWVGb3JTZWxlY3RlZFR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlRm9y
U2VsZWN0ZWRUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0
ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAg
ICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpD
b25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAg
ICB9KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAg
ICAgICAgICB6ZXJvVmFsdWVFeGlzdHMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYWRkKHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4odmFsdWVOYW1lZFVuaWZ5
Tm9kZSkuaXRlcmF0ZUFsbFZhbHVlcyhbJl0oaW50NjRfdCB2YWx1ZSkgLT4gYm9vbCB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghemVyb1ZhbHVlRXhpc3RzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vz
cyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCF2YWx1ZXMuY29udGFpbnModmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odmFsdWVOYW1lZFVuaWZ5Tm9kZSkpOworICAgICAgICAg
ICAgICAgIEhhc2hTZXQ8QVNUOjpFbnVtZXJhdGlvbk1lbWJlcio+IHZhbHVlczsKKyAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2Fz
ZXMoKSkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2hDYXNlLnZhbHVlKCktPnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwg
WyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNU
OjpGbG9hdExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwg
WyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJS
ZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZXMuYWRkKGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmVu
dW1lcmF0aW9uTWVtYmVyKCkpOworICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25NZW1iZXIgOiBk
b3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odmFsdWVOYW1lZFVuaWZ5Tm9kZSku
ZW51bWVyYXRpb25NZW1iZXJzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXMu
Y29udGFpbnMoJmVudW1lcmF0aW9uTWVtYmVyLmdldCgpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1h
RXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChjb21tYUV4cHJlc3Np
b24ubGlzdCgpLnNpemUoKSA+IDApOworICAgICAgICBWaXNpdG9yOjp2aXNpdChjb21tYUV4cHJl
c3Npb24pOworICAgICAgICBhdXRvIGxhc3RJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZzdGF0
aWNfY2FzdDxBU1Q6OkV4cHJlc3Npb24mPihjb21tYUV4cHJlc3Npb24ubGlzdCgpLmxhc3QoKSkp
OworICAgICAgICBBU1NFUlQobGFzdEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAg
ICAgIGF1dG8mIGxhc3RUeXBlID0gbGFzdEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgV1RGOjp2
aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxh
c3RUeXBlKSB7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmNv
bW1hRXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZShsYXN0VHlwZS0+Y2xvbmUoKSkpOworICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAg
ICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxhc3RUeXBlKSB7Cisg
ICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJmNvbW1hRXhwcmVzc2lv
biwgUmVzb2x2aW5nVHlwZShsYXN0VHlwZS5jb3B5UmVmKCkpKTsKKyAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIH0pLCBs
YXN0VHlwZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9u
JiB0ZXJuYXJ5RXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7CisgICAgICAgIGF1dG8gcHJl
ZGljYXRlSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmdGVybmFyeUV4cHJlc3Npb24ucHJlZGlj
YXRlKCkpOworICAgICAgICBBU1NFUlQocHJlZGljYXRlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVu
ZCgpKTsKKyAgICAgICAgYXV0byYgcHJlZGljYXRlVHlwZSA9IHByZWRpY2F0ZUl0ZXJhdG9yLT52
YWx1ZTsKKyAgICAgICAgaWYgKCFpc0Jvb2xUeXBlKHByZWRpY2F0ZVR5cGUpKSB7CisgICAgICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLmJvZHlFeHByZXNzaW9uKCkp
OworICAgICAgICBhdXRvIGJvZHlJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZ0ZXJuYXJ5RXhw
cmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKKyAgICAgICAgQVNTRVJUKGJvZHlJdGVyYXRvciAh
PSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBib2R5VHlwZSA9IGJvZHlJdGVyYXRv
ci0+dmFsdWU7CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9u
LmVsc2VFeHByZXNzaW9uKCkpOworICAgICAgICBhdXRvIGVsc2VJdGVyYXRvciA9IG1fdHlwZU1h
cC5maW5kKCZ0ZXJuYXJ5RXhwcmVzc2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKKyAgICAgICAgQVNT
RVJUKGVsc2VJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBlbHNl
VHlwZSA9IGVsc2VJdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAgYXV0byByZXN1bHRUeXBlID0g
V1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4mIGJvZHlUeXBlKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsK
KyAgICAgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgZWxzZVR5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKHN0YXRpY19j
YXN0PEFTVDo6VW5uYW1lZFR5cGUmPihib2R5VHlwZSksIHN0YXRpY19jYXN0PEFTVDo6VW5uYW1l
ZFR5cGUmPihlbHNlVHlwZSkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9keVR5cGUt
PmNsb25lKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
ICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBlbHNlVHlwZSkgLT4gT3B0
aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1hdGNoQW5kQ29tbWl0KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPihib2R5VHlw
ZSksIGVsc2VUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAgICAgIH0pLCBlbHNlVHlw
ZSk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBib2R5VHlw
ZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAg
ICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4mIGVsc2VUeXBlKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQoc3RhdGljX2Nh
c3Q8QVNUOjpVbm5hbWVkVHlwZSY+KGVsc2VUeXBlKSwgYm9keVR5cGUtPnJlc29sdmFibGVUeXBl
KCkpOworICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGVs
c2VUeXBlKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQoYm9keVR5cGUtPnJlc29sdmFibGVUeXBl
KCksIGVsc2VUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAgICAgIH0pLCBlbHNlVHlw
ZSk7CisgICAgICAgIH0pLCBib2R5VHlwZSk7CisgICAgICAgIGlmICghcmVzdWx0VHlwZSkgewor
ICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJnRlcm5hcnlFeHByZXNzaW9u
LCBSZXNvbHZpbmdUeXBlKFdURk1vdmUoKnJlc3VsdFR5cGUpKSk7CisgICAgICAgIEFTU0VSVF9V
TlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9p
ZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGZvciAoYXV0byYgYXJndW1lbnQgOiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVu
dHMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OkV4
cHJlc3Npb24mPihhcmd1bWVudCkpOworICAgICAgICBpZiAoY2FsbEV4cHJlc3Npb24uY2FzdFJl
dHVyblR5cGUoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChjYWxsRXhwcmVzc2lv
bi5jYXN0UmV0dXJuVHlwZSgpLT5nZXQoKSk7CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiB0eXBlczsKKyAgICAgICAgdHlwZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKS5zaXplKCkpOworICAgICAg
ICBmb3IgKGF1dG8mIGFyZ3VtZW50IDogY2FsbEV4cHJlc3Npb24uYXJndW1lbnRzKCkpIHsKKyAg
ICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmc3RhdGljX2Nhc3Q8QVNU
OjpFeHByZXNzaW9uJj4oYXJndW1lbnQpKTsKKyAgICAgICAgICAgIEFTU0VSVChpdGVyYXRvciAh
PSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICAgICAgdHlwZXMudW5jaGVja2VkQXBwZW5kKGl0
ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoY2FsbEV4cHJlc3Np
b24uaGFzT3ZlcmxvYWRzKCkpOworICAgICAgICBhdXRvKiBmdW5jdGlvbiA9IHJlc29sdmVGdW5j
dGlvbk92ZXJsb2FkSW1wbCgqY2FsbEV4cHJlc3Npb24ub3ZlcmxvYWRzKCksIHR5cGVzLCBjYWxs
RXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpKTsKKyAgICAgICAgaWYgKCFmdW5jdGlvbikgewor
ICAgICAgICAgICAgaWYgKGF1dG8gbmV3RnVuY3Rpb24gPSByZXNvbHZlQnlJbnN0YW50aWF0aW9u
KGNhbGxFeHByZXNzaW9uLCB0eXBlcywgbV9pbnRyaW5zaWNzKSkgeworICAgICAgICAgICAgICAg
IG1fcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmV3RnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAg
ICBmdW5jdGlvbiA9ICZzdGF0aWNfY2FzdDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24m
PihtX3Byb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5sYXN0KCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmdW5jdGlvbikgeworICAgICAgICAg
ICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rpb24tPnBhcmFtZXRlcnMoKS5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgYXV0byBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mKSAtPiBib29sIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KCpmdW5jdGlv
bi0+cGFyYW1ldGVycygpW2ldLnR5cGUoKSwgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29s
dmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgIH0pLCB0eXBlc1tpXS5nZXQoKSk7CisgICAgICAg
ICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNh
bGxFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCpmdW5jdGlvbik7CisKKyAgICAgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZjYWxsRXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZShmdW5j
dGlvbi0+dHlwZSgpLmNsb25lKCkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQs
IGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKK3ByaXZhdGU6CisKKyAgICAvKmNsYXNz
IFJlc29sdmluZ1R5cGVIYXNoVHJhaXRzIDogcHVibGljIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxS
ZXNvbHZpbmdUeXBlPgorICAgIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHN0YXRpYyBSZXNvbHZp
bmdUeXBlJiBlbXB0eVZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVzb2x2aW5nVHlw
ZT4gZW1wdHlWYWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBlbXB0eVZhbHVlLmdldCgpOworICAg
ICAgICB9CisKKyAgICAgICAgdHlwZWRlZiBSZXNvbHZpbmdUeXBlJiBQZWVrVHlwZTsKKyAgICAg
ICAgc3RhdGljIFBlZWtUeXBlIHBlZWsoUmVzb2x2aW5nVHlwZSYgdmFsdWUpIHsgcmV0dXJuIHZh
bHVlOyB9CisgICAgICAgIHR5cGVkZWYgUmVzb2x2aW5nVHlwZSYmIFRha2VUeXBlOworICAgICAg
ICBzdGF0aWMgVGFrZVR5cGUgdGFrZShSZXNvbHZpbmdUeXBlJiYgdmFsdWUpIHsgcmV0dXJuIFdU
Rk1vdmUodmFsdWUpOyB9CisgICAgfTsqLworCisgICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24q
LCBSZXNvbHZpbmdUeXBlIC8qLCBXVEY6OlB0ckhhc2g8QVNUOjpFeHByZXNzaW9uKj4sIFdURjo6
SGFzaFRyYWl0czxBU1Q6OkV4cHJlc3Npb24qPiwgUmVzb2x2aW5nVHlwZUhhc2hUcmFpdHMqLz4g
bV90eXBlTWFwOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX3ZlcnRleEVudHJ5UG9pbnRzOworICAg
IEhhc2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50RW50cnlQb2ludHM7CisgICAgSGFzaFNldDxTdHJp
bmc+IG1fY29tcHV0ZUVudHJ5UG9pbnRzOworICAgIGNvbnN0IEludHJpbnNpY3MmIG1faW50cmlu
c2ljczsKKyAgICBQcm9ncmFtJiBtX3Byb2dyYW07Cit9OworCitib29sIGNoZWNrKFByb2dyYW0m
IHByb2dyYW0pCit7CisgICAgQ2hlY2tlciBjaGVja2VyKHByb2dyYW0uaW50cmluc2ljcygpLCBw
cm9ncmFtKTsKKyAgICBjaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtKTsKKyAgICBy
ZXR1cm4gIWNoZWNrZXIuZXJyb3IoKTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWQyNjhkNzM0MWYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIu
aApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisK
K2NsYXNzIFByb2dyYW07CisKK2Jvb2wgY2hlY2soUHJvZ3JhbSYpOworCit9CisKK30KKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAuLmVlNDE4ZDcwMjg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRl
bXMuY3BwCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShXRUJHUFUp
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEdhdGhlckVudHJ5UG9pbnRJ
dGVtcy5oIgorCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNM
VmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEdhdGhlcmVyIDogcHVibGljIFZpc2l0
b3IgeworcHVibGljOgorICAgIEdhdGhlcmVyKGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3Ms
IEFTVDo6U2VtYW50aWMqIHNlbWFudGljID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2ludHJpbnNp
Y3MoaW50cmluc2ljcykKKyAgICAgICAgLCBtX2N1cnJlbnRTZW1hbnRpYyhzZW1hbnRpYykKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB+R2F0aGVyZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2
b2lkIHJlc2V0KCkKKyAgICB7CisgICAgICAgIG1fY3VycmVudFNlbWFudGljID0gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiYgdGFrZUVudHJ5UG9pbnRJdGVt
cygpCisgICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX2VudHJ5UG9pbnRJdGVtcyk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpCisgICAg
eworICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJv
cigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fZW50cnlQb2lu
dEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShtX3R5cGVSZWZlcmVuY2VzLmxhc3QoKS5nZXQo
KSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok5h
dGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2N1cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobWF0Y2hlcyhuYXRpdmVU
eXBlRGVjbGFyYXRpb24sIG1faW50cmluc2ljcy52b2lkVHlwZSgpKSkgeworICAgICAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1f
ZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShtX3R5cGVSZWZlcmVuY2VzLmxh
c3QoKS5nZXQoKSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCisgICAgewor
ICAgICAgICBpZiAobV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8mIHN0
cnVjdHVyZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkp
IHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkpCisgICAgICAg
ICAgICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSAmKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMo
KTsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlw
ZURlZmluaXRpb24pCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZURlZmlu
aXRpb24udHlwZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5j
ZSYgdHlwZVJlZmVyZW5jZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJl
c29sdmVkVHlwZSgpKTsKKyAgICAgICAgbV90eXBlUmVmZXJlbmNlcy5hcHBlbmQodHlwZVJlZmVy
ZW5jZSk7CisgICAgICAgIGF1dG8gZGVwdGggPSBtX3R5cGVSZWZlcmVuY2VzLnNpemUoKTsKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChkZXB0aCwgbV90eXBlUmVmZXJlbmNlcy5zaXplKCkgPT0g
ZGVwdGgpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRl
clR5cGUpCisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShwb2ludGVyVHlwZSwgKm1f
Y3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1
cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQ
b2ludEl0ZW0oYXJyYXlSZWZlcmVuY2VUeXBlLCAqbV9jdXJyZW50U2VtYW50aWMpKTsKKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCisgICAgeworICAg
ICAgICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1z
LmFwcGVuZChFbnRyeVBvaW50SXRlbShhcnJheVR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOwor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJs
ZURlY2xhcmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRTZW1hbnRpYyk7
CisgICAgICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpCisgICAgICAgICAg
ICBtX2N1cnJlbnRTZW1hbnRpYyA9ICYqdmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpOwor
ICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpCisgICAgICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgY29uc3QgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOworICAgIEFTVDo6U2Vt
YW50aWMqIG1fY3VycmVudFNlbWFudGljIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEFTVDo6VHlwZVJlZmVyZW5jZT4+IG1fdHlwZVJlZmVyZW5jZXM7Cisg
ICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBtX2VudHJ5UG9pbnRJdGVtczsKK307CisKK09wdGlv
bmFsPEVudHJ5UG9pbnRJdGVtcz4gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKGNvbnN0IEludHJpbnNp
Y3MmIGludHJpbnNpY3MsIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRp
b24pCit7CisgICAgQVNTRVJUKGZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKTsK
KyAgICBHYXRoZXJlciBpbnB1dEdhdGhlcmVyKGludHJpbnNpY3MpOworICAgIGZvciAoYXV0byYg
cGFyYW1ldGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkgeworICAgICAgICBp
bnB1dEdhdGhlcmVyLnJlc2V0KCk7CisgICAgICAgIGlucHV0R2F0aGVyZXIuY2hlY2tFcnJvckFu
ZFZpc2l0KHBhcmFtZXRlcik7CisgICAgICAgIGlmIChpbnB1dEdhdGhlcmVyLmVycm9yKCkpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKyAgICBHYXRoZXJlciBvdXRw
dXRHYXRoZXJlcihpbnRyaW5zaWNzLCBmdW5jdGlvbkRlZmluaXRpb24uc2VtYW50aWMoKSA/ICYq
ZnVuY3Rpb25EZWZpbml0aW9uLnNlbWFudGljKCkgOiBudWxscHRyKTsKKyAgICBvdXRwdXRHYXRo
ZXJlci5jaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7CisgICAg
aWYgKG91dHB1dEdhdGhlcmVyLmVycm9yKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICByZXR1cm4ge3sgaW5wdXRHYXRoZXJlci50YWtlRW50cnlQb2ludEl0ZW1zKCksIG91
dHB1dEdhdGhlcmVyLnRha2VFbnRyeVBvaW50SXRlbXMoKSB9fTsKK30KKworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAuLmUxZWI4MjkyMWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMu
aApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRnVuY3Rp
b25EZWZpbml0aW9uOworCit9CisKK2NsYXNzIEludHJpbnNpY3M7CitjbGFzcyBVbm5hbWVkVHlw
ZTsKKworc3RydWN0IEVudHJ5UG9pbnRJdGVtIHsKKyAgICBFbnRyeVBvaW50SXRlbShBU1Q6OlVu
bmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMpCisgICAgICAg
IDogdW5uYW1lZFR5cGUodW5uYW1lZFR5cGUpCisgICAgICAgICwgc2VtYW50aWMoc2VtYW50aWMp
CisgICAgeworICAgIH0KKworICAgIEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlOworICAg
IEFTVDo6U2VtYW50aWMmIHNlbWFudGljOworfTsKKworc3RydWN0IEVudHJ5UG9pbnRJdGVtcyB7
CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBpbnB1dHM7CisgICAgVmVjdG9yPEVudHJ5UG9p
bnRJdGVtPiBvdXRwdXRzOworfTsKKworT3B0aW9uYWw8RW50cnlQb2ludEl0ZW1zPiBnYXRoZXJF
bnRyeVBvaW50SXRlbXMoY29uc3QgSW50cmluc2ljcyYsIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9u
Jik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwLi5lN2QyMDJlMzNjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKQEAgLTAs
MCArMSwyNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorCisjaW5jbHVkZSAiV0hM
U0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2lu
Y2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmFtZWRU
eXBlLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRl
ICJXSExTTFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgor
I2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlw
ZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitzdGF0aWMgYm9vbCBtYXRjaGVz
KGNvbnN0IEFTVDo6VHlwZSYgdW5pZnlUaGlzLCBjb25zdCBBU1Q6OlR5cGUmIHVuaWZ5T3RoZXIp
Cit7CisgICAgaWYgKCZ1bmlmeVRoaXMgPT0gJnVuaWZ5T3RoZXIpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgaWYgKGlzPEFTVDo6TmFtZWRUeXBlPih1bmlmeVRoaXMpICYmIGlzPEFTVDo6
TmFtZWRUeXBlPih1bmlmeU90aGVyKSkgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAg
YXV0byYgbmFtZWRUaGlzID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHVuaWZ5VGhpcyk7Cisg
ICAgICAgIGF1dG8mIG5hbWVkT3RoZXIgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlP
dGhlcik7CisgICAgICAgIEFTU0VSVCghaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRUaGlz
KSAmJiAhaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4obmFtZWRPdGhlcikpOworI2VuZGlmCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVu
aWZ5VGhpcykgJiYgaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlPdGhlcikpIHsKKyAgICAgICAg
YXV0byYgdW5uYW1lZFRoaXMgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeVRoaXMp
OworICAgICAgICBhdXRvJiB1bm5hbWVkT3RoZXIgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBl
Pih1bmlmeU90aGVyKTsKKyAgICAgICAgQVNTRVJUKCFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVu
bmFtZWRUaGlzKSAmJiAhaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkT3RoZXIpKTsKKyAg
ICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OlBv
aW50ZXJUeXBlPih1bm5hbWVkT3RoZXIpKSB7CisgICAgICAgICAgICBhdXRvJiBwb2ludGVyVGhp
cyA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUaGlzKTsKKyAgICAgICAgICAg
IGF1dG8mIHBvaW50ZXJPdGhlciA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRP
dGhlcik7CisgICAgICAgICAgICBpZiAocG9pbnRlclRoaXMuYWRkcmVzc1NwYWNlKCkgIT0gcG9p
bnRlck90aGVyLmFkZHJlc3NTcGFjZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKHBvaW50ZXJUaGlzLmVsZW1lbnRUeXBlKCksIHBv
aW50ZXJPdGhlci5lbGVtZW50VHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXM8QVNU
OjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUaGlzKSAmJiBpczxBU1Q6OkFycmF5UmVmZXJl
bmNlVHlwZT4odW5uYW1lZE90aGVyKSl7CisgICAgICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5j
ZVRoaXMgPSBkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFRoaXMpOwor
ICAgICAgICAgICAgYXV0byYgYXJyYXlSZWZlcmVuY2VPdGhlciA9IGRvd25jYXN0PEFTVDo6QXJy
YXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkT3RoZXIpOworICAgICAgICAgICAgaWYgKGFycmF5UmVm
ZXJlbmNlVGhpcy5hZGRyZXNzU3BhY2UoKSAhPSBhcnJheVJlZmVyZW5jZU90aGVyLmFkZHJlc3NT
cGFjZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVy
biBtYXRjaGVzKGFycmF5UmVmZXJlbmNlVGhpcy5lbGVtZW50VHlwZSgpLCBhcnJheVJlZmVyZW5j
ZU90aGVyLmVsZW1lbnRUeXBlKCkpOworICAgICAgICB9CisgICAgICAgIGlmIChpczxBU1Q6OkFy
cmF5VHlwZT4odW5uYW1lZFRoaXMpICYmIGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkT3RoZXIp
KSB7CisgICAgICAgICAgICBhdXRvJiBhcnJheVRoaXMgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlw
ZT4odW5uYW1lZFRoaXMpOworICAgICAgICAgICAgYXV0byYgYXJyYXlPdGhlciA9IGRvd25jYXN0
PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkT3RoZXIpOworICAgICAgICAgICAgaWYgKGFycmF5VGhp
cy5udW1FbGVtZW50cygpICE9IGFycmF5T3RoZXIubnVtRWxlbWVudHMoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhhcnJheVRoaXMu
dHlwZSgpLCBhcnJheU90aGVyLnR5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgbWF0Y2hlcyhjb25zdCBB
U1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgY29uc3QgQVNUOjpVbm5hbWVkVHlwZSYgb3Ro
ZXIpCit7CisgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUudW5pZnlOb2RlKCksIG90aGVy
LnVuaWZ5Tm9kZSgpKTsKK30KKworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6TmFtZWRUeXBlJiBu
YW1lZFR5cGUsIGNvbnN0IEFTVDo6TmFtZWRUeXBlJiBvdGhlcikKK3sKKyAgICByZXR1cm4gbWF0
Y2hlcyhuYW1lZFR5cGUudW5pZnlOb2RlKCksIG90aGVyLnVuaWZ5Tm9kZSgpKTsKK30KKworYm9v
bCBtYXRjaGVzKGNvbnN0IEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBjb25zdCBBU1Q6
Ok5hbWVkVHlwZSYgb3RoZXIpCit7CisgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUudW5p
ZnlOb2RlKCksIG90aGVyLnVuaWZ5Tm9kZSgpKTsKK30KKworc3RhdGljIE9wdGlvbmFsPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpUeXBlJiB1bmlmeU5v
ZGUsIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKQoreworICAgIEFTU0VSVCgh
cmVzb2x2YWJsZVR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGlmICghcmVzb2x2YWJsZVR5cGUu
Y2FuUmVzb2x2ZSh1bmlmeU5vZGUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IGlmIChpczxBU1Q6Ok5hbWVkVHlwZT4odW5pZnlOb2RlKSkgeworICAgICAgICBhdXRvJiBuYW1l
ZFVuaWZ5Tm9kZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAg
ICBhdXRvIHJlc3VsdCA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFt
ZWRVbmlmeU5vZGUub3JpZ2luKCkpLCBuYW1lZFVuaWZ5Tm9kZSk7CisgICAgICAgIHJlc29sdmFi
bGVUeXBlLnJlc29sdmUocmVzdWx0LT5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92
ZShyZXN1bHQpIH07CisgICAgfQorCisgICAgYXV0byByZXN1bHQgPSBkb3duY2FzdDxBU1Q6OlVu
bmFtZWRUeXBlPih1bmlmeU5vZGUpLmNsb25lKCk7CisgICAgcmVzb2x2YWJsZVR5cGUucmVzb2x2
ZShyZXN1bHQtPmNsb25lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09wdGlvbmFsPFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoQVNUOjpVbm5hbWVkVHlw
ZSYgdW5uYW1lZFR5cGUsIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKQorewor
ICAgIHJldHVybiBtYXRjaEFuZENvbW1pdCh1bm5hbWVkVHlwZS51bmlmeU5vZGUoKSwgcmVzb2x2
YWJsZVR5cGUpOworfQorCitPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1h
dGNoQW5kQ29tbWl0KEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUsIEFTVDo6UmVzb2x2YWJsZVR5
cGUmIHJlc29sdmFibGVUeXBlKQoreworICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChuYW1lZFR5
cGUudW5pZnlOb2RlKCksIHJlc29sdmFibGVUeXBlKTsKK30KKworT3B0aW9uYWw8VW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJiBy
ZXNvbHZhYmxlVHlwZTEsIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlMikKK3sK
KyAgICBBU1NFUlQoIXJlc29sdmFibGVUeXBlMS5yZXNvbHZlZFR5cGUoKSk7CisgICAgQVNTRVJU
KCFyZXNvbHZhYmxlVHlwZTIucmVzb2x2ZWRUeXBlKCkpOworICAgIGlmIChpczxBU1Q6OkZsb2F0
TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkgJiYgaXM8QVNUOjpGbG9hdExpdGVyYWxUeXBl
PihyZXNvbHZhYmxlVHlwZTIpKSB7CisgICAgICAgIHJlc29sdmFibGVUeXBlMS5yZXNvbHZlKGRv
d25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKS5wcmVmZXJyZWRU
eXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJlc29sdmFibGVUeXBlMi5yZXNvbHZlKGRvd25jYXN0
PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKS5wcmVmZXJyZWRUeXBlKCku
Y2xvbmUoKSk7CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+
KHJlc29sdmFibGVUeXBlMSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCk7CisgICAgfQorICAgIGlm
IChpczxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUxKSAmJiBpczxBU1Q6
OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUyKSkgeworICAgICAgICByZXNvbHZh
YmxlVHlwZTEucmVzb2x2ZShkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4ocmVzb2x2
YWJsZVR5cGUxKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJlc29sdmFibGVU
eXBlMi5yZXNvbHZlKGRvd25jYXN0PEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxl
VHlwZTIpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZTEpLnByZWZlcnJlZFR5cGUo
KS5jbG9uZSgpOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZT4ocmVzb2x2YWJsZVR5cGUxKSAmJiBpczxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxU
eXBlPihyZXNvbHZhYmxlVHlwZTIpKSB7CisgICAgICAgIHJlc29sdmFibGVUeXBlMS5yZXNvbHZl
KGRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBl
MSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOworICAgICAgICByZXNvbHZhYmxlVHlwZTIucmVz
b2x2ZShkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxl
VHlwZTIpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlMSkucHJlZmVy
cmVkVHlwZSgpLmNsb25lKCk7CisgICAgfQorICAgIGlmIChpczxBU1Q6Ok51bGxMaXRlcmFsVHlw
ZT4ocmVzb2x2YWJsZVR5cGUxKSAmJiBpczxBU1Q6Ok51bGxMaXRlcmFsVHlwZT4ocmVzb2x2YWJs
ZVR5cGUyKSkgeworICAgICAgICAvLyBGSVhNRTogVHJ5aW5nIHRvIG1hdGNoIG51bGxwdHIgYW5k
IG51bGxwdHIgZmFpbHMuCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK09wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPj4gY29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKQorewor
ICAgIEFTU0VSVCghcmVzb2x2YWJsZVR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAgIGlmIChpczxB
U1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKSkgeworICAgICAgICByZXNvbHZh
YmxlVHlwZS5yZXNvbHZlKGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJs
ZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5j
bG9uZSgpOworICAgIH0KKyAgICBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29s
dmFibGVUeXBlKSkgeworICAgICAgICByZXNvbHZhYmxlVHlwZS5yZXNvbHZlKGRvd25jYXN0PEFT
VDo6SW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkucHJlZmVycmVkVHlwZSgpLmNs
b25lKCkpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+
KHJlc29sdmFibGVUeXBlKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKTsKKyAgICB9CisgICAgaWYg
KGlzPEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKSkgewor
ICAgICAgICByZXNvbHZhYmxlVHlwZS5yZXNvbHZlKGRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7
CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBl
PihyZXNvbHZhYmxlVHlwZSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCk7CisgICAgfQorICAgIGlm
IChpczxBU1Q6Ok51bGxMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7CisgICAgICAgIC8v
IEZJWE1FOiBUcnlpbmcgdG8gbWF0Y2ggbnVsbHB0ciBhbmQgbnVsbHB0ciBmYWlscy4KKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
K30KKworYm9vbCBpbmZlclR5cGVzRm9yVHlwZUFyZ3VtZW50cyhBU1Q6Ok5hbWVkVHlwZSYgcG9z
c2libGVUeXBlLCBBU1Q6OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMpCit7CisgICAgaWYg
KGlzPEFTVDo6VHlwZURlZmluaXRpb24+KHBvc3NpYmxlVHlwZSkKKyAgICAgICAgfHwgaXM8QVNU
OjpTdHJ1Y3R1cmVEZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpCisgICAgICAgIHx8IGlzPEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uPihwb3NzaWJsZVR5cGUpKSB7CisgICAgICAgIHJldHVybiB0
eXBlQXJndW1lbnRzLmlzRW1wdHkoKTsKKyAgICB9CisKKyAgICBBU1NFUlQoaXM8QVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24+KHBvc3NpYmxlVHlwZSkpOworICAgIGF1dG8mIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPihwb3NzaWJs
ZVR5cGUpOworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNp
emUoKSAhPSB0eXBlQXJndW1lbnRzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVu
dHMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiogdHlw
ZUFyZ3VtZW50RXhwcmVzc2lvbiA9IG51bGxwdHI7CisgICAgICAgIEFTVDo6VHlwZVJlZmVyZW5j
ZSogdHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSA9IG51bGxwdHI7CisgICAgICAgIEFTVDo6Q29u
c3RhbnRFeHByZXNzaW9uKiBuYXRpdmVUeXBlQXJndW1lbnRFeHByZXNzaW9uID0gbnVsbHB0cjsK
KyAgICAgICAgQVNUOjpUeXBlUmVmZXJlbmNlKiBuYXRpdmVUeXBlQXJndW1lbnRUeXBlUmVmZXJl
bmNlID0gbnVsbHB0cjsKKworICAgICAgICBhdXRvIGFzc2lnbiA9IFsmXShBU1Q6OlR5cGVBcmd1
bWVudCYgdHlwZUFyZ3VtZW50LCBBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiomIGV4cHJlc3Npb24s
IEFTVDo6VHlwZVJlZmVyZW5jZSomIHR5cGVSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgIFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0
YW50RXhwcmVzc2lvbikgeworICAgICAgICAgICAgICAgIGV4cHJlc3Npb24gPSAmY29uc3RhbnRF
eHByZXNzaW9uOworICAgICAgICAgICAgfSwgWyZdKFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVu
Y2U+JiB0aGVUeXBlUmVmZXJlbmNlKSB7CisgICAgICAgICAgICAgICAgdHlwZVJlZmVyZW5jZSA9
ICZzdGF0aWNfY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2UmPih0aGVUeXBlUmVmZXJlbmNlKTsKKyAg
ICAgICAgICAgIH0pLCB0eXBlQXJndW1lbnQpOworICAgICAgICB9OworCisgICAgICAgIGFzc2ln
bih0eXBlQXJndW1lbnRzW2ldLCB0eXBlQXJndW1lbnRFeHByZXNzaW9uLCB0eXBlQXJndW1lbnRU
eXBlUmVmZXJlbmNlKTsKKyAgICAgICAgYXNzaWduKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBl
QXJndW1lbnRzKClbaV0sIG5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24sIG5hdGl2ZVR5cGVB
cmd1bWVudFR5cGVSZWZlcmVuY2UpOworCisgICAgICAgIGlmICh0eXBlQXJndW1lbnRFeHByZXNz
aW9uICYmIG5hdGl2ZVR5cGVBcmd1bWVudEV4cHJlc3Npb24pIHsKKyAgICAgICAgICAgIGlmICgh
dHlwZUFyZ3VtZW50RXhwcmVzc2lvbi0+bWF0Y2hlcygqbmF0aXZlVHlwZUFyZ3VtZW50RXhwcmVz
c2lvbikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgaWYg
KHR5cGVBcmd1bWVudFR5cGVSZWZlcmVuY2UgJiYgbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVy
ZW5jZSkgeworICAgICAgICAgICAgaWYgKCFtYXRjaGVzKCp0eXBlQXJndW1lbnRUeXBlUmVmZXJl
bmNlLCAqbmF0aXZlVHlwZUFyZ3VtZW50VHlwZVJlZmVyZW5jZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgaW5mZXJUeXBlc0ZvckNhbGwoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBwb3NzaWJs
ZUZ1bmN0aW9uLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4m
IGFyZ3VtZW50VHlwZXMsIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1l
ZFR5cGU+PiYgY2FzdFJldHVyblR5cGUpCit7CisgICAgaWYgKHBvc3NpYmxlRnVuY3Rpb24ucGFy
YW1ldGVycygpLnNpemUoKSAhPSBhcmd1bWVudFR5cGVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9zc2libGVGdW5jdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byBzdWNjZXNzID0gV1RGOjp2aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFt
ZWRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKCpwb3NzaWJsZUZ1
bmN0aW9uLnBhcmFtZXRlcnMoKVtpXS50eXBlKCksIHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5
cGUmPih1bm5hbWVkVHlwZSkpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAgICAgICAgICAg
cmV0dXJuIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29s
dmUoKnBvc3NpYmxlRnVuY3Rpb24ucGFyYW1ldGVycygpW2ldLnR5cGUoKSk7CisgICAgICAgIH0p
LCBhcmd1bWVudFR5cGVzW2ldLmdldCgpKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoY2FzdFJldHVyblR5cGUgJiYgIW1h
dGNoZXMoY2FzdFJldHVyblR5cGUtPmdldCgpLCBwb3NzaWJsZUZ1bmN0aW9uLnR5cGUoKSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xJbmZlclR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TEluZmVyVHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjI4
NDE2NGNjYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTEluZmVyVHlwZXMuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xSZXNv
bHZpbmdUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKyNpbmNsdWRlIDxt
ZW1vcnk+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFt
ZXNwYWNlIEFTVCB7CisKK2NsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBOYW1lZFR5
cGU7CitjbGFzcyBSZXNvbHZhYmxlVHlwZTsKK2NsYXNzIFVubmFtZWRUeXBlOworCit9CisKK2Jv
b2wgbWF0Y2hlcyhjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgQVNUOjpVbm5hbWVkVHlw
ZSYpOworYm9vbCBtYXRjaGVzKGNvbnN0IEFTVDo6TmFtZWRUeXBlJiwgY29uc3QgQVNUOjpOYW1l
ZFR5cGUmKTsKK2Jvb2wgbWF0Y2hlcyhjb25zdCBBU1Q6OlVubmFtZWRUeXBlJiwgY29uc3QgQVNU
OjpOYW1lZFR5cGUmKTsKKy8vIEZJWE1FOiBJcyBhbnlvbmUgYWN0dWFsbHkgdXNpbmcgdGhlIHJl
dHVybiB0eXBlIGhlcmU/CitPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1h
dGNoQW5kQ29tbWl0KEFTVDo6VW5uYW1lZFR5cGUmLCBBU1Q6OlJlc29sdmFibGVUeXBlJik7CitP
cHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KEFTVDo6
TmFtZWRUeXBlJiwgQVNUOjpSZXNvbHZhYmxlVHlwZSYpOworT3B0aW9uYWw8VW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChBU1Q6OlJlc29sdmFibGVUeXBlJiwgQVNU
OjpSZXNvbHZhYmxlVHlwZSYpOworT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
PiBjb21taXQoQVNUOjpSZXNvbHZhYmxlVHlwZSYpOworYm9vbCBpbmZlclR5cGVzRm9yVHlwZUFy
Z3VtZW50cyhBU1Q6Ok5hbWVkVHlwZSYgcG9zc2libGVUeXBlLCBBU1Q6OlR5cGVBcmd1bWVudHMm
IHR5cGVBcmd1bWVudHMpOworYm9vbCBpbmZlclR5cGVzRm9yQ2FsbChBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24mIHBvc3NpYmxlRnVuY3Rpb24sIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRUeXBlcywgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+JiBjYXN0UmV0dXJuVHlwZSk7CisKK30KKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMSW50cmluc2ljcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTEludHJpbnNpY3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li5lZTA2Mjc5ZmZmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMSW50cmluc2ljcy5jcHAKQEAgLTAsMCArMSw0NDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldITFNMSW50cmluc2ljcy5oIgorCisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Np
b24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1ZGUgIldITFNMVHlw
ZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCitJbnRyaW5zaWNzOjpJbnRyaW5zaWNzKCkKKyAgICA6
IG1fdGV4dHVyZVR5cGVOYW1lcyB7IFN0cmluZygiVGV4dHVyZTFEIiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTFEIiwgU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUxREFy
cmF5IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmco
IlJXVGV4dHVyZTFEQXJyYXkiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAg
ICAgICAgIFN0cmluZygiVGV4dHVyZTJEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCks
CisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTJEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlRleHR1cmUyREFycmF5IiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoIlJXVGV4dHVyZTJEQXJy
YXkiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygi
VGV4dHVyZTNEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBT
dHJpbmcoIlJXVGV4dHVyZTNEIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAg
ICAgICAgICBTdHJpbmcoIlRleHR1cmVDdWJlIiwgIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVy
YWwpIH0KKyAgICAsIG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzIHsgU3RyaW5nKCJ1Y2hhciIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJ1c2hvcnQi
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwKKyAgICAgICAgICAgIFN0cmluZygidWlu
dCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3RyaW5nKCJj
aGFyIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmco
InNob3J0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJp
bmcoImludCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLAorICAgICAgICAgICAgU3Ry
aW5nKCJoYWxmIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksCisgICAgICAgICAgICBT
dHJpbmcoImZsb2F0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkgfQorICAgICwgbV9k
ZXB0aFRleHR1cmVJbm5lclR5cGVzIHsgU3RyaW5nKCJoYWxmIiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksCisgICAgICAgICAgICBTdHJpbmcoImZsb2F0IiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCkgfQoreworICAgIEFTU0VSVChtX3RleHR1cmVUeXBlTmFtZXMuc2l6ZSgp
ID09IDExKTsgLy8gZnVsbFRleHR1cmVzIGhhcmRjb2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJy
YXkuCisgICAgQVNTRVJUKG1fdGV4dHVyZUlubmVyVHlwZU5hbWVzLnNpemUoKSA9PSA4KTsgLy8g
ZnVsbFRleHR1cmVzIGhhcmRjb2RlcyB0aGUgbGVuZ3RoIG9mIHRoaXMgYXJyYXkuCisgICAgQVNT
RVJUKG1fZGVwdGhUZXh0dXJlSW5uZXJUeXBlcy5zaXplKCkgPT0gMik7IC8vIHRleHR1cmVEZXB0
aDJEICYgZnJpZW5kcyBoYXJkY29kZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGFycmF5LgorfQorCit2
b2lkIEludHJpbnNpY3M6OmFkZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKQorewor
ICAgIC8vIEZJWE1FOiBQb3B1bGF0ZSB0aGlzLgorfQorCitib29sIEludHJpbnNpY3M6OmFkZFBy
aW1pdGl2ZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9u
KQoreworICAgIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpLnNpemUo
KSAhPSAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobmF0aXZlVHlwZURlY2xh
cmF0aW9uLm5hbWUoKSA9PSAidm9pZCIpCisgICAgICAgIG1fdm9pZFR5cGUgPSAmbmF0aXZlVHlw
ZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkg
PT0gImJvb2wiKQorICAgICAgICBtX2Jvb2xUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsK
KyAgICBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJ1Y2hhciIpIHsK
KyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzSW50KCk7CisgICAgICAgIG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051bWJlcigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFy
YXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShpbnQgeCkgeworICAgICAgICAgICAgcmV0
dXJuIHggPj0gMCAmJiB4IDw9IDB4RkY7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBl
RGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgp
IHsKKyAgICAgICAgICAgIHJldHVybiB4IDw9IDB4RkY7CisgICAgICAgIH0pOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQgeCkgewor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDx1aW50OF90
Pih4KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXRTdWNjZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1aW50OF90Pih4ICsgMSk7CisgICAgICAgIH0pOworICAgICAgICBuYXRp
dmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tSW50ZWdlcihbXShpbnQgeCkgLT4g
aW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDhfdD4oeCk7Cisg
ICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVG
cm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIC0+IGludDY0X3QgeworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAg
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEl0ZXJhdGVBbGxWYWx1ZXMoW10oY29uc3Qgc3RkOjpm
dW5jdGlvbjxib29sKGludDY0X3QpPiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGZvciAoaW50
NjRfdCBpID0gMDsgaSA8IDB4MTAwOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGJh
Y2soaSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9KTsKKyAgICAgICAgbV91Y2hhclR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAg
IH0gZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAidXNob3J0Iikgewor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAgICAgbmF0aXZl
VHlwZURlY2xhcmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCB4KSB7CisgICAgICAgICAgICByZXR1
cm4geCA+PSAwICYmIHggPD0gMHhGRkZGOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNpZ25lZCB4
KSB7CisgICAgICAgICAgICByZXR1cm4geCA8PSAweEZGRkY7CisgICAgICAgIH0pOworICAgICAg
ICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQgeCkg
eworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2FzdDx1aW50
MTZfdD4oeCkpID09IHg7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uc2V0U3VjY2Vzc29yKFtdKGludDY0X3QgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dWludDE2X3Q+KHggKyAxKTsKKyAgICAgICAgfSk7CisgICAgICAg
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4
KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MTZfdD4o
eCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0
VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIC0+IGludDY0X3QgeworICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQxNl90Pih4KTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJdGVyYXRlQWxsVmFsdWVzKFtdKGNvbnN0
IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQ2NF90KT4mIGNhbGxiYWNrKSB7CisgICAgICAgICAgICBm
b3IgKGludDY0X3QgaSA9IDA7IGkgPCAweDEwMDAwOyArK2kpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoY2FsbGJhY2soaSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9KTsKKyAgICAgICAgbV91c2hvcnRUeXBlID0gJm5hdGl2ZVR5cGVEZWNsYXJh
dGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gInVp
bnQiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0ludCgpOworICAgICAg
ICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudEludGVnZXIoW10oaW50IHgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB4ID49IDA7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFy
YXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkKSB7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9hdCB4KSB7CisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0YXRpY19jYXN0PHVpbnQzMl90Pih4KSkgPT0geDsK
KyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3Io
W10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDx1aW50MzJfdD4oeCArIDEpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xh
cmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbUludGVnZXIoW10oaW50IHgpIC0+IGludDY0X3Qgewor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pih4KTsKKyAgICAgICAgfSk7
CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRGb3JtYXRWYWx1ZUZyb21VbnNpZ25l
ZEludGVnZXIoW10odW5zaWduZWQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlw
ZURlY2xhcmF0aW9uLnNldEl0ZXJhdGVBbGxWYWx1ZXMoW10oY29uc3Qgc3RkOjpmdW5jdGlvbjxi
b29sKGludDY0X3QpPiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGZvciAoaW50NjRfdCBpID0g
MDsgaSA8IDB4MTAwMDAwMDAwOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2so
aSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKyAgICAgICAgbV91aW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBl
bHNlIGlmIChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgpID09ICJjaGFyIikgeworICAgICAg
ICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNJbnQoKTsKKyAgICAgICAgbmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXRJc1NpZ25lZCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVz
ZW50SW50ZWdlcihbXShpbnQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPj0gLTEyOCAmJiB4
IDw9IDEyNzsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRD
YW5SZXByZXNlbnRVbnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAgICAgICAgICAg
cmV0dXJuIHggPD0gMTI3OworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnNldENhblJlcHJlc2VudEZsb2F0KFtdKGZsb2F0IHgpIHsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4oc3RhdGljX2Nhc3Q8aW50OF90Pih4KSkgPT0geDsKKyAgICAg
ICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3IoW10oaW50
NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ4
X3Q+KHggKyAxKTsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5z
ZXRGb3JtYXRWYWx1ZUZyb21JbnRlZ2VyKFtdKGludCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAg
bmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEZvcm1hdFZhbHVlRnJvbVVuc2lnbmVkSW50ZWdlcihb
XSh1bnNpZ25lZCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9u
LnNldEl0ZXJhdGVBbGxWYWx1ZXMoW10oY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGludDY0X3Qp
PiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGZvciAoaW50NjRfdCBpID0gLTEyODsgaSA8IDEy
ODsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGkpKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIG1fY2hh
clR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIH0gZWxzZSBpZiAobmF0aXZlVHlw
ZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAic2hvcnQiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNO
dW1iZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzU2lnbmVkKCk7Cisg
ICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGlu
dCB4KSB7CisgICAgICAgICAgICByZXR1cm4geCA+PSAtMzI3NjggJiYgeCA8PSAzMjc2NzsKKyAg
ICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRV
bnNpZ25lZEludGVnZXIoW10odW5zaWduZWQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHggPD0g
MzI3Njc7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2Fu
UmVwcmVzZW50RmxvYXQoW10oZmxvYXQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGZsb2F0PihzdGF0aWNfY2FzdDxpbnQxNl90Pih4KSkgPT0geDsKKyAgICAgICAgfSk7Cisg
ICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRTdWNjZXNzb3IoW10oaW50NjRfdCB4KSAt
PiBpbnQ2NF90IHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQxNl90Pih4ICsg
MSk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0
VmFsdWVGcm9tSW50ZWdlcihbXShpbnQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50MTZfdD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVU
eXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2ln
bmVkIHgpIC0+IGludDY0X3QgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDE2
X3Q+KHgpOworICAgICAgICB9KTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEl0
ZXJhdGVBbGxWYWx1ZXMoW10oY29uc3Qgc3RkOjpmdW5jdGlvbjxib29sKGludDY0X3QpPiYgY2Fs
bGJhY2spIHsKKyAgICAgICAgICAgIGZvciAoaW50NjRfdCBpID0gLTMyNzY4OyBpIDwgMzI3Njg7
ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhpKSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICBtX3Nob3J0
VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBl
RGVjbGFyYXRpb24ubmFtZSgpID09ICJpbnQiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbi5zZXRJc0ludCgpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNOdW1i
ZXIoKTsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzU2lnbmVkKCk7CisgICAg
ICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRlZ2VyKFtdKGludCkg
eworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVU
eXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVk
IHgpIHsKKyAgICAgICAgICAgIHJldHVybiB4IDw9IDIxNDc0ODM2NDc7CisgICAgICAgIH0pOwor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxv
YXQgeCkgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih4KSkgPT0geDsKKyAgICAgICAgfSk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbi5zZXRTdWNjZXNzb3IoW10oaW50NjRfdCB4KSAtPiBpbnQ2NF90IHsKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Pih4ICsgMSk7CisgICAgICAgIH0pOworICAg
ICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9ybWF0VmFsdWVGcm9tSW50ZWdlcihbXShp
bnQgeCkgLT4gaW50NjRfdCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJf
dD4oeCk7CisgICAgICAgIH0pOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Rm9y
bWF0VmFsdWVGcm9tVW5zaWduZWRJbnRlZ2VyKFtdKHVuc2lnbmVkIHgpIC0+IGludDY0X3Qgewor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KHgpOworICAgICAgICB9KTsK
KyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldEl0ZXJhdGVBbGxWYWx1ZXMoW10oY29u
c3Qgc3RkOjpmdW5jdGlvbjxib29sKGludDY0X3QpPiYgY2FsbGJhY2spIHsKKyAgICAgICAgICAg
IGZvciAoaW50NjRfdCBpID0gLTIxNDc0ODM2NDc7IGkgPCAyMTQ3NDgzNjQ4OyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soaSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgbV9pbnRUeXBlID0gJm5hdGl2
ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9IGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5u
YW1lKCkgPT0gImhhbGYiKSB7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc051
bWJlcigpOworICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0SXNGbG9hdGluZygpOwor
ICAgICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50SW50ZWdlcihbXShp
bnQpIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnNldENhblJlcHJlc2VudFVuc2lnbmVkSW50ZWdlcihbXSh1bnNp
Z25lZCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBu
YXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50RmxvYXQoW10oZmxvYXQpIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KTsKKyAgICAgICAgbV9oYWxmVHlwZSA9
ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfSBlbHNlIGlmIChuYXRpdmVUeXBlRGVjbGFy
YXRpb24ubmFtZSgpID09ICJmbG9hdCIpIHsKKyAgICAgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9u
LnNldElzTnVtYmVyKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc0Zsb2F0
aW5nKCk7CisgICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRJbnRl
Z2VyKFtdKGludCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAg
ICAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0Q2FuUmVwcmVzZW50VW5zaWduZWRJbnRlZ2Vy
KFtdKHVuc2lnbmVkKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRDYW5SZXByZXNlbnRGbG9hdChbXShmbG9h
dCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pOworICAgICAgICBtX2Zs
b2F0VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgfQorICAgIGVsc2UgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21pY19pbnQiKQorICAgICAgICBtX2F0
b21pY0ludFR5cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UgaWYgKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gImF0b21pY191aW50IikKKyAgICAgICAgbV9hdG9t
aWNVaW50VHlwZSA9ICZuYXRpdmVUeXBlRGVjbGFyYXRpb247CisgICAgZWxzZSBpZiAobmF0aXZl
VHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSAic2FtcGxlciIpCisgICAgICAgIG1fc2FtcGxlclR5
cGUgPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50cmluc2ljczo6YWRk
VmVjdG9yKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24p
Cit7CisgICAgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgIT0gInZlY3RvciIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChuYXRpdmVUeXBlRGVjbGFyYXRpb24u
dHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAyKTsKKyAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRl
cm5hdGl2ZTxVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPj4obmF0aXZlVHlwZURlY2xhcmF0
aW9uLnR5cGVBcmd1bWVudHMoKVswXSkpOworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFy
Z3VtZW50cygpWzFdKSk7CisgICAgYXV0byYgaW5uZXJUeXBlID0gc3RhdGljX2Nhc3Q8QVNUOjpU
eXBlUmVmZXJlbmNlJj4oV1RGOjpnZXQ8VW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKKyAgICBhdXRvJiBsZW5n
dGhFeHByZXNzaW9uID0gV1RGOjpnZXQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0pOworICAgIEFTU0VSVChpbm5lclR5cGUu
dHlwZUFyZ3VtZW50cygpLnNpemUoKSA9PSAwKTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
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
ICAgQVNTRVJUKGlubmVyVHlwZS50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDApOworICAgIEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKiAoKmFycmF5KVszXTsKKyAgICBpZiAoaW5uZXJUeXBl
Lm5hbWUoKSA9PSAiaGFsZiIpCisgICAgICAgIGFycmF5ID0gbV9tYXRyaXhIYWxmOworICAgIGlm
IChpbm5lclR5cGUubmFtZSgpID09ICJmbG9hdCIpCisgICAgICAgIGFycmF5ID0gbV9tYXRyaXhG
bG9hdDsKKyAgICBpbnQgcm93ID0gcm93RXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgpLnZhbHVl
KCk7CisgICAgQVNTRVJUKHJvdyA+PSAyICYmIHJvdyA8PSA0KTsKKyAgICBpbnQgY29sdW1uID0g
Y29sdW1uRXhwcmVzc2lvbi5pbnRlZ2VyTGl0ZXJhbCgpLnZhbHVlKCk7CisgICAgQVNTRVJUKGNv
bHVtbiA+PSAyICYmIGNvbHVtbiA8PSA0KTsKKyAgICBuYXRpdmVUeXBlRGVjbGFyYXRpb24uc2V0
SXNNYXRyaXgoKTsKKyAgICBhcnJheVtyb3cgLSAyXVtjb2x1bW4gLSAyXSA9ICZuYXRpdmVUeXBl
RGVjbGFyYXRpb247CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW50cmluc2ljczo6YWRk
RnVsbFRleHR1cmUoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiwgQVNUOjpUeXBlUmVmZXJlbmNlJiBpbm5lclR5cGUpCit7CisgICAgdW5zaWduZWQgdGV4
dHVyZVR5cGVJbmRleCA9IG1fdGV4dHVyZVR5cGVOYW1lcy5zaXplKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdGV4dHVyZVR5cGVOYW1lcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUoKSA9PSBtX3RleHR1cmVUeXBlTmFtZXNb
aV0pCisgICAgICAgICAgICB0ZXh0dXJlVHlwZUluZGV4ID0gaTsKKyAgICB9CisgICAgaWYgKHRl
eHR1cmVUeXBlSW5kZXggPT0gbV90ZXh0dXJlVHlwZU5hbWVzLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgaW5uZXJUeXBlSW5kZXggPSBtX3RleHR1cmVJbm5l
clR5cGVOYW1lcy5zaXplKCk7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKS5zdGFydHNXaXRoKG1fdGV4dHVyZUlubmVy
VHlwZU5hbWVzW2ldKSkgeworICAgICAgICAgICAgdGV4dHVyZVR5cGVJbmRleCA9IGk7CisgICAg
ICAgICAgICBpZiAoaW5uZXJUeXBlLm5hbWUoKSA9PSBtX3RleHR1cmVJbm5lclR5cGVOYW1lc1tp
XSkKKyAgICAgICAgICAgICAgICB2ZWN0b3JMZW5ndGggPSAxOworICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGlubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgPT0gbV90
ZXh0dXJlSW5uZXJUeXBlTmFtZXNbaV0ubGVuZ3RoKCkgKyAxKTsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoaW5uZXJUeXBlLm5hbWUoKVtpbm5lclR5cGUubmFtZSgpLmxlbmd0aCgpIC0gMV0gPT0g
JzInCisgICAgICAgICAgICAgICAgICAgIHx8IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5h
bWUoKS5sZW5ndGgoKSAtIDFdID09ICczJworICAgICAgICAgICAgICAgICAgICB8fCBpbm5lclR5
cGUubmFtZSgpW2lubmVyVHlwZS5uYW1lKCkubGVuZ3RoKCkgLSAxXSA9PSAnNCcpOworICAgICAg
ICAgICAgICAgIHZlY3Rvckxlbmd0aCA9IGlubmVyVHlwZS5uYW1lKClbaW5uZXJUeXBlLm5hbWUo
KS5sZW5ndGgoKSAtIDFdIC0gJzAnOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIEFTU0VSVChpbm5lclR5cGVJbmRleCAhPSBtX3RleHR1cmVJbm5lclR5cGVOYW1lcy5zaXpl
KCkpOworICAgIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5zZXRJc1RleHR1cmUoKTsKKyAgICBtX2Z1
bGxUZXh0dXJlc1t0ZXh0dXJlVHlwZUluZGV4XVtpbm5lclR5cGVJbmRleF1bdmVjdG9yTGVuZ3Ro
IC0gMV0gPSAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIEludHJpbnNpY3M6OmFkZERlcHRoVGV4dHVyZShBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biYgbmF0aXZlVHlwZURlY2xhcmF0aW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2UmIGlubmVyVHlwZSkK
K3sKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbioqIHRleHR1cmU7CisgICAgaWYgKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkgPT0gIlRleHR1cmVEZXB0aDJEIikKKyAgICAgICAg
dGV4dHVyZSA9IG1fdGV4dHVyZURlcHRoMkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xh
cmF0aW9uLm5hbWUoKSA9PSAiUldUZXh0dXJlRGVwdGgyRCIpCisgICAgICAgIHRleHR1cmUgPSBt
X3J3VGV4dHVyZURlcHRoMkQ7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5h
bWUoKSA9PSAiVGV4dHVyZURlcHRoMkRBcnJheSIpCisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1
cmVEZXB0aDJEQXJyYXk7CisgICAgZWxzZSBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uLm5hbWUo
KSA9PSAiUldUZXh0dXJlRGVwdGgyREFycmF5IikKKyAgICAgICAgdGV4dHVyZSA9IG1fcndUZXh0
dXJlRGVwdGgyREFycmF5OworICAgIGVsc2UgaWYgKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5uYW1l
KCkgPT0gIlRleHR1cmVEZXB0aEN1YmUiKQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlRGVw
dGhDdWJlOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgdW5z
aWduZWQgaW5uZXJUeXBlSW5kZXggPSBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6ZSgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RlcHRoVGV4dHVyZUlubmVyVHlwZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGlubmVyVHlwZS5uYW1lKCkgPT0gbV9kZXB0aFRleHR1
cmVJbm5lclR5cGVzW2ldKQorICAgICAgICAgICAgaW5uZXJUeXBlSW5kZXggPSBpOworICAgIH0K
KyAgICBBU1NFUlQoaW5uZXJUeXBlSW5kZXggIT0gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzLnNp
emUoKSk7CisgICAgbmF0aXZlVHlwZURlY2xhcmF0aW9uLnNldElzVGV4dHVyZSgpOworICAgIHRl
eHR1cmVbaW5uZXJUeXBlSW5kZXhdID0gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBJbnRyaW5zaWNzOjphZGRUZXh0dXJlKEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgQVNTRVJUKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKCkuc2l6ZSgpID09IDEpOworICAgIEFTU0VS
VChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+Pihu
YXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzBdKSk7CisgICAgYXV0byYgaW5u
ZXJUeXBlID0gc3RhdGljX2Nhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlJj4oV1RGOjpnZXQ8VW5pcXVl
UmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1l
bnRzKClbMF0pKTsKKyAgICBBU1NFUlQoaW5uZXJUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkg
PT0gMCk7CisgICAgaWYgKGFkZEZ1bGxUZXh0dXJlKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgaW5u
ZXJUeXBlKSkgeworICAgICAgICBtX3RleHR1cmVTZXQuYWRkKCZuYXRpdmVUeXBlRGVjbGFyYXRp
b24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChhZGREZXB0aFRleHR1cmUobmF0
aXZlVHlwZURlY2xhcmF0aW9uLCBpbm5lclR5cGUpKQorICAgICAgICBtX3RleHR1cmVTZXQuYWRk
KCZuYXRpdmVUeXBlRGVjbGFyYXRpb24pOworfQorCit2b2lkIEludHJpbnNpY3M6OmFkZChBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQoreworICAgIGlm
IChhZGRQcmltaXRpdmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChhZGRWZWN0b3IobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChhZGRNYXRyaXgobmF0aXZlVHlwZURlY2xhcmF0aW9uKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGFkZFRleHR1cmUobmF0aXZlVHlwZURlY2xhcmF0aW9uKTsKK30KKworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xJbnRyaW5zaWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEludHJpbnNpY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uMzFhOThhYjNkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuaApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
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
M11bM107CisKKyAgICBWZWN0b3I8U3RyaW5nPiBtX3RleHR1cmVUeXBlTmFtZXM7CisgICAgVmVj
dG9yPFN0cmluZz4gbV90ZXh0dXJlSW5uZXJUeXBlTmFtZXM7CisKKyAgICBBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiogbV9mdWxsVGV4dHVyZXNbMTFdWzhdWzRdOworCisgICAgVmVjdG9yPFN0
cmluZz4gbV9kZXB0aFRleHR1cmVJbm5lclR5cGVzOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xh
cmF0aW9uKiBtX3RleHR1cmVEZXB0aDJEWzJdOworICAgIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uKiBtX3J3VGV4dHVyZURlcHRoMkRbMl07CisgICAgQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24qIG1fdGV4dHVyZURlcHRoMkRBcnJheVsyXTsKKyAgICBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbiogbV9yd1RleHR1cmVEZXB0aDJEQXJyYXlbMl07CisgICAgQVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24qIG1fdGV4dHVyZURlcHRoQ3ViZVsyXTsKK307CisKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5j
cHAKaW5kZXggM2IxOTM0ZTkzMTYuLmU5YWVhZTdiNTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcApAQCAtMjMsOCArMjMsNiBA
QAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNwcmFnbWEgb25j
ZQotCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV0hMU0xMZXhlci5oIgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNv
bnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZTg2YmI5
ODA0YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMTmFtZUNvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExT
TE5hbWVDb250ZXh0LmgiCisKKyNpbmNsdWRlICJXSExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5o
IgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVj
bGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNs
dWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xh
cmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwor
TmFtZUNvbnRleHQ6Ok5hbWVDb250ZXh0KE5hbWVDb250ZXh0KiBwYXJlbnQpCisgICAgOiBtX3Bh
cmVudChwYXJlbnQpCit7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OlR5cGVEZWZp
bml0aW9uJiB0eXBlRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoZXhpc3RzKHR5cGVEZWZpbml0aW9u
Lm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlw
ZXMuYWRkKHR5cGVEZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8QVNUOjpOYW1lZFR5cGU+LCAxPigpKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQo
dHlwZURlZmluaXRpb24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0
OjphZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQorewor
ICAgIGlmIChleGlzdHMoc3RydWN0dXJlRGVmaW5pdGlvbi5uYW1lKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChzdHJ1Y3R1cmVEZWZpbml0
aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+
LCAxPigpKTsKKyAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlv
bik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkVu
dW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQoreworICAgIGlmIChl
eGlzdHMoZW51bWVyYXRpb25EZWZpbml0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdHlwZXMuYWRkKGVudW1lcmF0aW9uRGVmaW5pdGlvbi5u
YW1lKCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPiwgMT4o
KSk7CisgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbik7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmFkZChBU1Q6OkZ1bmN0
aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIGlmIChtX3R5cGVzLmZp
bmQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkgIT0gbV90eXBlcy5lbmQoKQorICAgICAgICB8
fCBtX3ZhcmlhYmxlcy5maW5kKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFi
bGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX2Z1
bmN0aW9ucy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSwgVmVjdG9yPHN0ZDo6cmVmZXJl
bmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4oKSk7CisgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBOYW1lQ29udGV4dDo6YWRkKEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKK3sKKyAgICBpZiAobV90eXBlcy5m
aW5kKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSgpKSAhPSBtX3R5cGVzLmVuZCgpCisg
ICAgICAgIHx8IG1fdmFyaWFibGVzLmZpbmQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0
byByZXN1bHQgPSBtX2Z1bmN0aW9ucy5hZGQobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1l
KCksIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
bj4sIDE+KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZUZ1bmN0
aW9uRGVjbGFyYXRpb24pOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIE5hbWVDb250ZXh0
OjphZGQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikK
K3sKKyAgICBpZiAobV9mdW5jdGlvbnMuZmluZChuYXRpdmVUeXBlRGVjbGFyYXRpb24ubmFtZSgp
KSAhPSBtX2Z1bmN0aW9ucy5lbmQoKQorICAgICAgICB8fCBtX3ZhcmlhYmxlcy5maW5kKG5hdGl2
ZVR5cGVEZWNsYXJhdGlvbi5uYW1lKCkpICE9IG1fdmFyaWFibGVzLmVuZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgYXV0byByZXN1bHQgPSBtX3R5cGVzLmFkZChuYXRpdmVUeXBlRGVj
bGFyYXRpb24ubmFtZSgpLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVk
VHlwZT4sIDE+KCkpOworICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6
OmFkZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7Cisg
ICAgaWYgKGV4aXN0cyh2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUoKSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fdmFyaWFibGVzLmFkZChTdHJpbmcodmFyaWFi
bGVEZWNsYXJhdGlvbi5uYW1lKCkpLCAmdmFyaWFibGVEZWNsYXJhdGlvbik7CisgICAgcmV0dXJu
IHJlc3VsdC5pc05ld0VudHJ5OworfQorCitWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxB
U1Q6Ok5hbWVkVHlwZT4sIDE+KiBOYW1lQ29udGV4dDo6Z2V0VHlwZXMoY29uc3QgU3RyaW5nJiBu
YW1lKQoreworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3R5cGVzLmZpbmQobmFtZSk7CisgICAgaWYg
KGl0ZXJhdG9yID09IG1fdHlwZXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKG1fcGFyZW50KQorICAg
ICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRUeXBlcyhuYW1lKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiAmaXRlcmF0b3ItPnZhbHVlOworfQorCitWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiog
TmFtZUNvbnRleHQ6OmdldEZ1bmN0aW9ucyhjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgYXV0
byBpdGVyYXRvciA9IG1fZnVuY3Rpb25zLmZpbmQobmFtZSk7CisgICAgaWYgKGl0ZXJhdG9yID09
IG1fZnVuY3Rpb25zLmVuZCgpKSB7CisgICAgICAgIGlmIChtX3BhcmVudCkKKyAgICAgICAgICAg
IHJldHVybiBtX3BhcmVudC0+Z2V0RnVuY3Rpb25zKG5hbWUpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgcmV0dXJuICZpdGVyYXRvci0+dmFsdWU7Cit9CisKK0FTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbiogTmFtZUNvbnRleHQ6OmdldFZhcmlhYmxlKGNvbnN0IFN0cmluZyYg
bmFtZSkKK3sKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV92YXJpYWJsZXMuZmluZChuYW1lKTsKKyAg
ICBpZiAoaXRlcmF0b3IgPT0gbV92YXJpYWJsZXMuZW5kKCkpIHsKKyAgICAgICAgaWYgKG1fcGFy
ZW50KQorICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5nZXRWYXJpYWJsZShuYW1lKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBpdGVyYXRvci0+dmFsdWU7
Cit9CisKK2Jvb2wgTmFtZUNvbnRleHQ6OmV4aXN0cyhTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0
dXJuIG1fdHlwZXMuZmluZChuYW1lKSAhPSBtX3R5cGVzLmVuZCgpCisgICAgICAgIHx8IG1fZnVu
Y3Rpb25zLmZpbmQobmFtZSkgIT0gbV9mdW5jdGlvbnMuZW5kKCkKKyAgICAgICAgfHwgbV92YXJp
YWJsZXMuZmluZChuYW1lKSAhPSBtX3ZhcmlhYmxlcy5lbmQoKTsKK30KKworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xOYW1lQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xOYW1lQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5k
M2RmODAwMTRhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSA8ZnVuY3Rp
b25hbD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgTmFtZWRUeXBl
OworY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNzIFR5cGVEZWZpbml0aW9uOworY2xh
c3MgU3RydWN0dXJlRGVmaW5pdGlvbjsKK2NsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbjsKK2Ns
YXNzIEZ1bmN0aW9uRGVmaW5pdGlvbjsKK2NsYXNzIE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb247
CitjbGFzcyBOYXRpdmVUeXBlRGVjbGFyYXRpb247CitjbGFzcyBWYXJpYWJsZURlY2xhcmF0aW9u
OworCit9CisKK2NsYXNzIE5hbWVDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBOYW1lQ29udGV4dChO
YW1lQ29udGV4dCogcGFyZW50ID0gbnVsbHB0cik7CisKKyAgICBib29sIGFkZChBU1Q6OlR5cGVE
ZWZpbml0aW9uJik7CisgICAgYm9vbCBhZGQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJik7Cisg
ICAgYm9vbCBhZGQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKTsKKyAgICBib29sIGFkZChB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiYpOworICAgIGJvb2wgYWRkKEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
Jik7CisgICAgYm9vbCBhZGQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJik7CisKKyAgICBWZWN0
b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+KiBnZXRUeXBlcyhj
b25zdCBTdHJpbmcmKTsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24+LCAxPiogZ2V0RnVuY3Rpb25zKGNvbnN0IFN0cmluZyYpOworICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiogZ2V0VmFyaWFibGUoY29uc3QgU3RyaW5nJik7CisK
K3ByaXZhdGU6CisgICAgYm9vbCBleGlzdHMoU3RyaW5nJik7CisKKyAgICBIYXNoTWFwPFN0cmlu
ZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+LCAxPj4gbV90
eXBlczsKKyAgICBIYXNoTWFwPFN0cmluZywgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uPiwgMT4+IG1fZnVuY3Rpb25zOworICAgIEhhc2hNYXA8
U3RyaW5nLCBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24qPiBtX3ZhcmlhYmxlczsKKyAgICBOYW1l
Q29udGV4dCogbV9wYXJlbnQ7Cit9OworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU0ZTBlMmE1ZGI4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xOYW1lUmVzb2x2ZXIuY3BwCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVO
QUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTE5hbWVS
ZXNvbHZlci5oIgorCisjaW5jbHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCIK
KyNpbmNsdWRlICJXSExTTE5hbWVDb250ZXh0LmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZlT3Zl
cmxvYWRJbXBsLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAi
V0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTElmU3RhdGVtZW50Lmgi
CisjaW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKKyNpbmNsdWRlICJXSExTTERvV2hpbGVMb29w
LmgiCisjaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURl
Y2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5oIgorI2luY2x1
ZGUgIldITFNMUmV0dXJuLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uaCIKKyNpbmNsdWRlICJXSExTTERvdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEVu
dW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIK
KyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgV0hMU0wgeworCitOYW1lUmVzb2x2ZXI6Ok5hbWVSZXNvbHZlcihOYW1lQ29udGV4dCYg
bmFtZUNvbnRleHQpCisgICAgOiBtX25hbWVDb250ZXh0KG5hbWVDb250ZXh0KQoreworfQorCit2
b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNl
KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlUmVmZXJlbmNlKTsKKyAgICBpZiAodHlw
ZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byog
Y2FuZGlkYXRlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXModHlwZVJlZmVyZW5jZS5uYW1lKCkp
OworICAgIGlmIChjYW5kaWRhdGVzID09IG51bGxwdHIpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYXV0byByZXN1bHQgPSByZXNvbHZlVHlw
ZU92ZXJsb2FkSW1wbCgqY2FuZGlkYXRlcywgdHlwZVJlZmVyZW5jZS50eXBlQXJndW1lbnRzKCkp
KQorICAgICAgICB0eXBlUmVmZXJlbmNlLnNldFJlc29sdmVkVHlwZSgqcmVzdWx0KTsKKyAgICBl
bHNlIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwor
dm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlv
bkRlZmluaXRpb24pCit7CisgICAgTmFtZUNvbnRleHQgbmV3TmFtZUNvbnRleHQoJm1fbmFtZUNv
bnRleHQpOworICAgIE5hbWVSZXNvbHZlciBuZXdOYW1lUmVzb2x2ZXIobmV3TmFtZUNvbnRleHQp
OworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAg
ICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkp
IHsKKyAgICAgICAgbmV3TmFtZVJlc29sdmVyLmNoZWNrRXJyb3JBbmRWaXNpdChwYXJhbWV0ZXIp
OworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBuZXdOYW1lQ29udGV4dC5hZGQocGFyYW1ldGVyKTsK
KyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIG5ld05hbWVSZXNvbHZlci5jaGVj
a0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLmJsb2NrKCkpOworfQorCit2b2lkIE5h
bWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpCbG9jayYgYmxvY2spCit7CisgICAgTmFtZUNvbnRleHQg
bmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4
dCkuY2hlY2tFcnJvckFuZFZpc2l0KGJsb2NrKTsKK30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZp
c2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKKyAgICBOYW1lQ29udGV4dCBuYW1lQ29u
dGV4dCgmbV9uYW1lQ29udGV4dCk7CisgICAgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KS5jaGVj
a0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKKyAgICBpZiAoaWZTdGF0ZW1lbnQu
ZWxzZUJvZHkoKSkgeworICAgICAgICBOYW1lQ29udGV4dCBuYW1lQ29udGV4dCgmbV9uYW1lQ29u
dGV4dCk7CisgICAgICAgIE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZp
c2l0KHN0YXRpY19jYXN0PEFTVDo6U3RhdGVtZW50Jj4oKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkp
KTsKKyAgICB9Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OldoaWxlTG9vcCYg
d2hpbGVMb29wKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0aW9u
YWwoKSk7CisgICAgTmFtZUNvbnRleHQgbmFtZUNvbnRleHQoJm1fbmFtZUNvbnRleHQpOworICAg
IE5hbWVSZXNvbHZlcihuYW1lQ29udGV4dCkuY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5i
b2R5KCkpOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9vcCYg
d2hpbGVMb29wKQoreworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0
KTsKKyAgICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdCh3aGls
ZUxvb3AuYm9keSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmNvbmRpdGlv
bmFsKCkpOworfQorCit2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JM
b29wKQoreworICAgIE5hbWVDb250ZXh0IG5hbWVDb250ZXh0KCZtX25hbWVDb250ZXh0KTsKKyAg
ICBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpLmNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wKTsK
K30KKwordm9pZCBOYW1lUmVzb2x2ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYg
dmFyaWFibGVEZWNsYXJhdGlvbikKK3sKKyAgICBtX25hbWVDb250ZXh0LmFkZCh2YXJpYWJsZURl
Y2xhcmF0aW9uKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7
Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2
YXJpYWJsZVJlZmVyZW5jZSkKK3sKKyAgICBpZiAodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIHZhcmlhYmxlID0gbV9uYW1lQ29u
dGV4dC5nZXRWYXJpYWJsZSh2YXJpYWJsZVJlZmVyZW5jZS5uYW1lKCkpKQorICAgICAgICB2YXJp
YWJsZVJlZmVyZW5jZS5zZXRWYXJpYWJsZSgqdmFyaWFibGUpOworICAgIGVsc2UgeworICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIE5hbWVSZXNv
bHZlcjo6dmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKK3sKKyAgICBBU1NFUlQo
bV9jdXJyZW50RnVuY3Rpb24pOworICAgIHJldHVyblN0YXRlbWVudC5zZXRGdW5jdGlvbihtX2N1
cnJlbnRGdW5jdGlvbik7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJldHVyblN0YXRlbWVudCk7
Cit9CisKK3ZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQoreworICAgIGlmIChhdXRvKiBnZXRGdW5j
dGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24uZ2V0RnVuY3Rpb25OYW1lKCkpKQorICAgICAgICBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
c2V0UG9zc2libGVHZXRPdmVybG9hZHMoKmdldEZ1bmN0aW9ucyk7CisgICAgaWYgKGF1dG8qIHNl
dEZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5zZXRGdW5jdGlvbk5hbWUoKSkpCisgICAgICAgIHByb3BlcnR5QWNjZXNzRXhwcmVz
c2lvbi5zZXRQb3NzaWJsZVNldE92ZXJsb2Fkcygqc2V0RnVuY3Rpb25zKTsKKyAgICBpZiAoYXV0
byogYW5kRnVuY3Rpb25zID0gbV9uYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMocHJvcGVydHlBY2Nl
c3NFeHByZXNzaW9uLmFuZEZ1bmN0aW9uTmFtZSgpKSkKKyAgICAgICAgcHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLnNldFBvc3NpYmxlQW5kT3ZlcmxvYWRzKCphbmRGdW5jdGlvbnMpOworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pOworfQorCit2b2lkIE5h
bWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQorewor
ICAgIGlmIChpczxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihkb3RFeHByZXNzaW9uLmJhc2UoKSkp
IHsKKyAgICAgICAgaWYgKGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0
VHlwZXMoZG93bmNhc3Q8QVNUOjpWYXJpYWJsZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5iYXNl
KCkpLm5hbWUoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvblR5cGVzLT5zaXpl
KCkgPT0gMSk7CisgICAgICAgICAgICBBU1Q6Ok5hbWVkVHlwZSYgdHlwZSA9ICgqZW51bWVyYXRp
b25UeXBlcylbMF07CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24+KHR5cGUpKSB7CisgICAgICAgICAgICAgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24m
IGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uPih0eXBlKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogbWVtYmVyID0gZW51bWVyYXRp
b25EZWZpbml0aW9uLm1lbWJlckJ5TmFtZShkb3RFeHByZXNzaW9uLmZpZWxkTmFtZSgpKSkgewor
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbCkgPD0gc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVz
c2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWxz
IHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKKyAgICAgICAgICAgICAgICAgICAg
TGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7CisgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBQZXJoYXBzIGRvIHRoaXMgd2l0aCB2YXJpYW50cyBvciBhIFJl
d3JpdGVyIGluc3RlYWQuCisgICAgICAgICAgICAgICAgICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4
cHJlc3Npb24oKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3ICgmZG90RXhwcmVzc2lvbikgQVNU
OjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoV1RGTW92ZShvcmlnaW4pLCAqbWVtYmVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG90RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgTmFtZVJlc29s
dmVyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKK3sKKyAgICBp
ZiAoIWNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKSB7CisgICAgICAgIGlmIChhdXRvKiBm
dW5jdGlvbnMgPSBtX25hbWVDb250ZXh0LmdldEZ1bmN0aW9ucyhjYWxsRXhwcmVzc2lvbi5uYW1l
KCkpKQorICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRzKCpmdW5jdGlvbnMp
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiB0eXBlcyA9IG1fbmFtZUNv
bnRleHQuZ2V0VHlwZXMoY2FsbEV4cHJlc3Npb24ubmFtZSgpKSkgeworICAgICAgICAgICAgICAg
IGlmICh0eXBlcy0+c2l6ZSgpID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8q
IGZ1bmN0aW9ucyA9IG1fbmFtZUNvbnRleHQuZ2V0RnVuY3Rpb25zKFN0cmluZygib3BlcmF0b3Ig
Y2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0Q2FzdERhdGEoKCp0eXBlcylbMF0uZ2V0KCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0T3ZlcmxvYWRzKCpmdW5j
dGlvbnMpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGlmICghY2FsbEV4cHJlc3Npb24uaGFzT3Zl
cmxvYWRzKCkpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQoY2FsbEV4cHJlc3Npb24pOworfQorCit2b2lkIE5hbWVS
ZXNvbHZlcjo6dmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJl
ZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpCit7
CisgICAgaWYgKGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMo
Y29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UubGVmdCgpKSkgewor
ICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25UeXBlcy0+c2l6ZSgpID09IDEpOworICAgICAgICBB
U1Q6Ok5hbWVkVHlwZSYgdHlwZSA9ICgqZW51bWVyYXRpb25UeXBlcylbMF07CisgICAgICAgIGlm
IChpczxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSkpIHsKKyAgICAgICAgICAgIEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSBkb3duY2Fz
dDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSk7CisgICAgICAgICAgICBpZiAoYXV0
byogbWVtYmVyID0gZW51bWVyYXRpb25EZWZpbml0aW9uLm1lbWJlckJ5TmFtZShjb25zdGFudEV4
cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5yaWdodCgpKSkgeworICAgICAgICAg
ICAgICAgIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLnNldEVu
dW1lcmF0aW9uTWVtYmVyKGVudW1lcmF0aW9uRGVmaW5pdGlvbiwgKm1lbWJlcik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHNldEVycm9yKCk7Cit9CisKKy8vIEZJWE1FOiBNYWtlIHN1cmUgYWxsIHRoZSBuYW1lcyBo
YXZlIGJlZW4gcmVzb2x2ZWQuCisKK2Jvb2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiBw
cm9ncmFtLCBOYW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3IgKGF1dG8mIHR5
cGVEZWZpbml0aW9uIDogcHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBuYW1l
UmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6VHlwZURlZmluaXRp
b24mPih0eXBlRGVmaW5pdGlvbikpOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGZvciAoYXV0byYgc3RydWN0
dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKSkgeworICAgICAg
ICBuYW1lUmVzb2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbiY+KHN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgaWYgKG5hbWVS
ZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBm
b3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25EZWZp
bml0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoc3Rh
dGljX2Nhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mPihlbnVtZXJhdGlvbkRlZmluaXRp
b24pKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA6
IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZl
ci5jaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRp
b24mPihuYXRpdmVUeXBlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgaWYgKG5hbWVSZXNvbHZlci5l
cnJvcigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtLCBO
YW1lUmVzb2x2ZXImIG5hbWVSZXNvbHZlcikKK3sKKyAgICBmb3IgKGF1dG8mIGZ1bmN0aW9uRGVm
aW5pdGlvbiA6IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpKSB7CisgICAgICAgIG5hbWVS
ZXNvbHZlci5zZXRDdXJyZW50RnVuY3Rpb25EZWZpbml0aW9uKCZzdGF0aWNfY2FzdDxBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiY+KGZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgICAgICBuYW1lUmVz
b2x2ZXIuY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0
aW9uJj4oZnVuY3Rpb25EZWZpbml0aW9uKSk7CisgICAgICAgIGlmIChuYW1lUmVzb2x2ZXIuZXJy
b3IoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbmFtZVJlc29sdmVy
LnNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24obnVsbHB0cik7CisgICAgZm9yIChhdXRvJiBu
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9ucygpKSB7CisgICAgICAgIG5hbWVSZXNvbHZlci5jaGVja0Vycm9yQW5kVmlzaXQoc3RhdGlj
X2Nhc3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4obmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bikpOworICAgICAgICBpZiAobmFtZVJlc29sdmVyLmVycm9yKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5h
bWVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xO
YW1lUmVzb2x2ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTVh
ZmRlM2QwM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTE5h
bWVDb250ZXh0LmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKworY2xhc3MgTmFt
ZVJlc29sdmVyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIE5hbWVSZXNvbHZlcihO
YW1lQ29udGV4dCYpOworCisgICAgdmlydHVhbCB+TmFtZVJlc29sdmVyKCkgPSBkZWZhdWx0Owor
CisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0
aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQgc2V0Q3VycmVudEZ1bmN0aW9uRGVmaW5pdGlvbihB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiogZnVuY3Rpb25EZWZpbml0aW9uKQorICAgIHsKKyAgICAg
ICAgbV9jdXJyZW50RnVuY3Rpb24gPSBmdW5jdGlvbkRlZmluaXRpb247CisgICAgfQorCitwcml2
YXRlOgorICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OkJsb2NrJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Oklm
U3RhdGVtZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYpIG92
ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9vcCYpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFy
aWFibGVSZWZlcmVuY2UmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYp
IG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9p
ZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
Jikgb3ZlcnJpZGU7CisKKyAgICBOYW1lQ29udGV4dCBtX25hbWVDb250ZXh0OworICAgIEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uKiBtX2N1cnJlbnRGdW5jdGlvbiB7IG51bGxwdHIgfTsKK307CisK
K2Jvb2wgcmVzb2x2ZU5hbWVzSW5UeXBlcyhQcm9ncmFtJiwgTmFtZVJlc29sdmVyJik7Citib29s
IHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKFByb2dyYW0mLCBOYW1lUmVzb2x2ZXImKTsKKworfQor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQYXJzZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
Li45YTlkNWQ3YjMzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcApAQCAtMCwwICsxLDI1OTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xQYXJzZXIuaCIKKworI2lm
IEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworUGFyc2VyOjpQYXJz
ZXIoKQoreworfQorCisvLyBGSVhNRTogUmV0dXJuIGEgYmV0dGVyIGVycm9yIGNvZGUgZnJvbSB0
aGlzLCBhbmQgcmVwb3J0IGl0IHRvIEphdmFTY3JpcHQuCithdXRvIFBhcnNlcjo6cGFyc2UoUHJv
Z3JhbSYgcHJvZ3JhbSwgU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBNb2RlIG1vZGUpIC0+IE9wdGlv
bmFsPEVycm9yPgoreworICAgIG1fbGV4ZXIgPSBMZXhlcihzdHJpbmdWaWV3KTsKKyAgICBtX21v
ZGUgPSBtb2RlOworCisgICAgd2hpbGUgKCFtX2xleGVyLmlzRnVsbHlDb25zdW1lZCgpKSB7Cisg
ICAgICAgIGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6U2VtaWNvbG9uKSkgeworICAg
ICAgICAgICAgbV9sZXhlci5jb25zdW1lVG9rZW4oKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byB0eXBlRGVmaW5pdGlvbiA9
IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPEFTVDo6VHlwZURlZmluaXRpb24sIEVycm9yPj4o
WyZdKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVR5cGVEZWZpbml0aW9uKCk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmICh0eXBlRGVmaW5pdGlvbikgeworICAgICAg
ICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKnR5cGVEZWZp
bml0aW9uKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAg
ICAgICAgIFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCB0eXBlRGVmaW5pdGlvbi0+bmFt
ZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8gc3RydWN0
dXJlRGVmaW5pdGlvbiA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPEFTVDo6U3RydWN0dXJl
RGVmaW5pdGlvbiwgRXJyb3I+PihbJl0oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNl
U3RydWN0dXJlRGVmaW5pdGlvbigpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAo
c3RydWN0dXJlRGVmaW5pdGlvbikgeworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHBy
b2dyYW0uYXBwZW5kKFdURk1vdmUoKnN0cnVjdHVyZURlZmluaXRpb24pKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJO
YW1lIEVycm9yISAlcyIsIHN0cnVjdHVyZURlZmluaXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICB7CisgICAgICAgICAgICBhdXRvIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9
IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uLCBF
cnJvcj4+KFsmXSgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VFbnVtZXJhdGlvbkRl
ZmluaXRpb24oKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKGVudW1lcmF0aW9u
RGVmaW5pdGlvbikgeworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IHByb2dyYW0uYXBw
ZW5kKFdURk1vdmUoKmVudW1lcmF0aW9uRGVmaW5pdGlvbikpOworICAgICAgICAgICAgICAgIGlm
ICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIk5hbWUgRXJy
b3IhICVzIiwgZW51bWVyYXRpb25EZWZpbml0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgT3B0aW9uYWw8RXJyb3I+IGVycm9yOworICAgICAgICB7CisgICAgICAgICAgICBh
dXRvIGZ1bmN0aW9uRGVmaW5pdGlvbiA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uLCBFcnJvcj4+KFsmXSgpIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcGFyc2VGdW5jdGlvbkRlZmluaXRpb24oKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbikgeworICAgICAgICAgICAgICAgIGF1dG8gc3VjY2Vz
cyA9IHByb2dyYW0uYXBwZW5kKFdURk1vdmUoKmZ1bmN0aW9uRGVmaW5pdGlvbikpOworICAgICAg
ICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICBXVEZMb2dBbHdh
eXMoIk5hbWUgRXJyb3IhICVzIiwgZnVuY3Rpb25EZWZpbml0aW9uLT5uYW1lKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZXJyb3IgPSBmdW5jdGlvbkRlZmluaXRpb24uZXJyb3IoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtX21vZGUgPT0gTW9kZTo6U3RhbmRhcmRMaWJyYXJ5KSB7CisgICAgICAg
ICAgICBhdXRvIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gPSBiYWNrdHJhY2tpbmdTY29wZTxF
eHBlY3RlZDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPj4oWyZdKCkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24pIHsKKyAgICAgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBwcm9ncmFtLmFwcGVuZChXVEZN
b3ZlKCpuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgaWYgKCFz
dWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEg
JXMiLCBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLT5uYW1lKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKG1fbW9kZSA9PSBNb2RlOjpTdGFuZGFyZExpYnJhcnkpIHsKKyAgICAgICAg
ICAgIGF1dG8gbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0
ZWQ8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24sIEVycm9yPj4oWyZdKCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlvbigpOworICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBpZiAobmF0aXZlVHlwZURlY2xhcmF0aW9uKSB7CisgICAgICAgICAg
ICAgICAgYXV0byBzdWNjZXNzID0gcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmF0aXZlVHlwZURl
Y2xhcmF0aW9uKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAg
ICAgICAgICAgIFdURkxvZ0Fsd2F5cygiTmFtZSBFcnJvciEgJXMiLCBuYXRpdmVUeXBlRGVjbGFy
YXRpb24tPm5hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBXVEZMb2dBbHdheXMoIiVz
IiwgZXJyb3ItPmVycm9yLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gV1RGTW92ZSgq
ZXJyb3IpOworICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxsb3B0OworfQorCithdXRvIFBhcnNl
cjo6ZmFpbChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIC0+IFVuZXhwZWN0ZWQ8RXJyb3I+IHsKKyAg
ICBpZiAoYXV0byBuZXh0VG9rZW4gPSBwZWVrKCkpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihFcnJvcihtX2xleGVyLmVycm9yU3RyaW5nKCpuZXh0VG9rZW4sIG1lc3NhZ2UpKSk7
CisgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKFN0cmluZzo6Zm9ybWF0KCJDYW5u
b3QgbGV4OiAlcyIsIG1lc3NhZ2UudXRmOCgpLmRhdGEoKSkpKTsKK30KKworYXV0byBQYXJzZXI6
OnBlZWsoKSAtPiBFeHBlY3RlZDxMZXhlcjo6VG9rZW4sIEVycm9yPiB7CisgICAgaWYgKGF1dG8g
dG9rZW4gPSBtX2xleGVyLmNvbnN1bWVUb2tlbigpKSB7CisgICAgICAgIG1fbGV4ZXIudW5jb25z
dW1lVG9rZW4oTGV4ZXI6OlRva2VuKCp0b2tlbikpOworICAgICAgICByZXR1cm4gKnRva2VuOwor
ICAgIH0KKyAgICByZXR1cm4gZmFpbChTdHJpbmcoIkNhbm5vdCBjb25zdW1lIHRva2VuIiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworfQorCitPcHRpb25hbDxMZXhlcjo6VG9rZW4+
IFBhcnNlcjo6dHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGUgdHlwZSkKK3sKKyAgICBpZiAoYXV0
byB0b2tlbiA9IG1fbGV4ZXIuY29uc3VtZVRva2VuKCkpIHsKKyAgICAgICAgaWYgKHRva2VuLT50
eXBlID09IHR5cGUpCisgICAgICAgICAgICByZXR1cm4gdG9rZW47CisgICAgICAgIG1fbGV4ZXIu
dW5jb25zdW1lVG9rZW4oTGV4ZXI6OlRva2VuKCp0b2tlbikpOworICAgIH0KKyAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworfQorCitPcHRpb25hbDxMZXhlcjo6VG9rZW4+IFBhcnNlcjo6dHJ5VHlw
ZXMoVmVjdG9yPExleGVyOjpUb2tlbjo6VHlwZT4gdHlwZXMpCit7CisgICAgaWYgKGF1dG8gdG9r
ZW4gPSBtX2xleGVyLmNvbnN1bWVUb2tlbigpKSB7CisgICAgICAgIGlmIChzdGQ6OmZpbmQodHlw
ZXMuYmVnaW4oKSwgdHlwZXMuZW5kKCksIHRva2VuLT50eXBlKSAhPSB0eXBlcy5lbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgbV9sZXhlci51bmNvbnN1bWVUb2tlbihM
ZXhlcjo6VG9rZW4oKnRva2VuKSk7CisgICAgfQorICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9
CisKK2F1dG8gUGFyc2VyOjpjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGUgdHlwZSkgLT4g
RXhwZWN0ZWQ8TGV4ZXI6OlRva2VuLCBFcnJvcj4geworICAgIGlmIChhdXRvIHRva2VuID0gbV9s
ZXhlci5jb25zdW1lVG9rZW4oKSkgeworICAgICAgICBpZiAodG9rZW4tPnR5cGUgPT0gdHlwZSkK
KyAgICAgICAgICAgIHJldHVybiAqdG9rZW47CisgICAgICAgIHJldHVybiBmYWlsKFN0cmluZzo6
Zm9ybWF0KCJVbmV4cGVjdGVkIHRva2VuIChleHBlY3RlZCAlcyBnb3QgJXMpIiwgTGV4ZXI6OlRv
a2VuOjp0eXBlTmFtZSh0eXBlKSwgTGV4ZXI6OlRva2VuOjp0eXBlTmFtZSh0b2tlbi0+dHlwZSkp
KTsKKyAgICB9CisgICAgcmV0dXJuIGZhaWwoU3RyaW5nOjpmb3JtYXQoIkNhbm5vdCBjb25zdW1l
IHRva2VuIChleHBlY3RlZCAlcykiLCBMZXhlcjo6VG9rZW46OnR5cGVOYW1lKHR5cGUpKSk7Cit9
CisKK2F1dG8gUGFyc2VyOjpjb25zdW1lVHlwZXMoVmVjdG9yPExleGVyOjpUb2tlbjo6VHlwZT4g
dHlwZXMpIC0+IEV4cGVjdGVkPExleGVyOjpUb2tlbiwgRXJyb3I+IHsKKyAgICBhdXRvIGJ1aWxk
RXhwZWN0ZWRTdHJpbmcgPSBbJl0oKSAtPiBTdHJpbmcgeworICAgICAgICBTdHJpbmdCdWlsZGVy
IGJ1aWxkZXI7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJbIik7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0eXBlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGkg
PiAwKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsICIpOworICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoTGV4ZXI6OlRva2VuOjp0eXBlTmFtZSh0eXBlc1tpXSkpOworICAgICAg
ICB9CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJdIik7CisgICAgICAgIHJldHVybiBidWlsZGVy
LnRvU3RyaW5nKCk7CisgICAgfTsKKworICAgIGlmIChhdXRvIHRva2VuID0gbV9sZXhlci5jb25z
dW1lVG9rZW4oKSkgeworICAgICAgICBpZiAoc3RkOjpmaW5kKHR5cGVzLmJlZ2luKCksIHR5cGVz
LmVuZCgpLCB0b2tlbi0+dHlwZSkgIT0gdHlwZXMuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4g
KnRva2VuOworICAgICAgICByZXR1cm4gZmFpbChTdHJpbmc6OmZvcm1hdCgiVW5leHBlY3RlZCB0
b2tlbiAoZXhwZWN0ZWQgb25lIG9mICVzIGdvdCAlcykiLCBidWlsZEV4cGVjdGVkU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgTGV4ZXI6OlRva2VuOjp0eXBlTmFtZSh0b2tlbi0+dHlwZSkpKTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhaWwoU3RyaW5nOjpmb3JtYXQoIkNhbm5vdCBjb25zdW1lIHRva2Vu
IChleHBlY3RlZCAlcykiLCBidWlsZEV4cGVjdGVkU3RyaW5nKCkudXRmOCgpLmRhdGEoKSkpOwor
fQorCitzdGF0aWMgaW50IGRpZ2l0VmFsdWUoVUNoYXIgY2hhcmFjdGVyKQoreworICAgIGlmIChj
aGFyYWN0ZXIgPj0gJzAnICYmIGNoYXJhY3RlciA8PSAnOScpCisgICAgICAgIHJldHVybiBjaGFy
YWN0ZXIgLSAnMCc7CisgICAgaWYgKGNoYXJhY3RlciA+PSAnYScgJiYgY2hhcmFjdGVyIDw9ICdm
JykKKyAgICAgICAgcmV0dXJuIGNoYXJhY3RlciAtICdhJyArIDEwOworICAgIHJldHVybiBjaGFy
YWN0ZXIgLSAnQScgKyAxMDsKK30KKworc3RhdGljIEV4cGVjdGVkPGludCwgUGFyc2VyOjpFcnJv
cj4gaW50TGl0ZXJhbFRvSW50KFN0cmluZ1ZpZXcgdGV4dCkKK3sKKyAgICBib29sIG5lZ2F0ZSA9
IGZhbHNlOworICAgIGlmICh0ZXh0LnN0YXJ0c1dpdGgoU3RyaW5nKCItIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCkpKSB7CisgICAgICAgIG5lZ2F0ZSA9IHRydWU7CisgICAgICAgIHRl
eHQgPSB0ZXh0LnN1YnN0cmluZygxKTsKKyAgICB9CisgICAgaW50IGJhc2UgPSAxMDsKKyAgICBp
ZiAodGV4dC5zdGFydHNXaXRoKFN0cmluZygiMHgiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSkpIHsKKyAgICAgICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDIpOworICAgICAgICBiYXNl
ID0gMTY7CisgICAgfQorCisgICAgaW50IHJlc3VsdCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpbnQgZGlnaXQgPSBkaWdp
dFZhbHVlKHRleHRbaV0pOworICAgICAgICBhdXRvIHByZXZpb3VzID0gcmVzdWx0OworICAgICAg
ICByZXN1bHQgPSByZXN1bHQgKiBiYXNlICsgZGlnaXQ7CisgICAgICAgIGlmIChyZXN1bHQgPCBw
cmV2aW91cykgLy8gRklYTUU6IG92ZXJmbG93IG9uIHNpZ25lZCBpbnRlZ2VycyBpcyB1bmRlZmlu
ZWQKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPFBhcnNlcjo6RXJyb3I+KFBhcnNlcjo6
RXJyb3IoU3RyaW5nOjpmb3JtYXQoImludCBsaXRlcmFsICVzIGlzIG91dCBvZiBib3VuZHMiLCB0
ZXh0LnV0ZjgoKS5kYXRhKCkpKSk7CisgICAgfQorICAgIGlmIChuZWdhdGUpCisgICAgICAgIHJl
c3VsdCAqPSAtMTsKKyAgICAvLyBGSVhNRTogVGhpcyBhbGdvcml0aG0gbWFrZXMgaXQgaW1wb3Nz
aWJsZSB0byByZXByZXNlbnQgMHg4MDAwMDAgKHRoZSBtb3N0IG5lZ2F0aXZlIHJlcHJlc2VudGFi
bGUgdmFsdWUpCisgICAgcmV0dXJuIHsgcmVzdWx0IH07Cit9CisKK3N0YXRpYyBFeHBlY3RlZDx1
bnNpZ25lZCwgUGFyc2VyOjpFcnJvcj4gdWludExpdGVyYWxUb1VpbnQoU3RyaW5nVmlldyB0ZXh0
KQoreworICAgIHVuc2lnbmVkIGJhc2UgPSAxMDsKKyAgICBpZiAodGV4dC5zdGFydHNXaXRoKFN0
cmluZygiMHgiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkpIHsKKyAgICAgICAgdGV4
dCA9IHRleHQuc3Vic3RyaW5nKDIpOworICAgICAgICBiYXNlID0gMTY7CisgICAgfQorICAgIEFT
U0VSVCh0ZXh0LnN1YnN0cmluZyh0ZXh0Lmxlbmd0aCgpIC0gMSkgPT0gInUiKTsKKyAgICB0ZXh0
ID0gdGV4dC5zdWJzdHJpbmcoMCwgdGV4dC5sZW5ndGgoKSAtIDEpOworICAgIHVuc2lnbmVkIHJl
c3VsdCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7ICsr
aSkgeworICAgICAgICB1bnNpZ25lZCBkaWdpdCA9IGRpZ2l0VmFsdWUodGV4dFtpXSk7CisgICAg
ICAgIGF1dG8gcHJldmlvdXMgPSByZXN1bHQ7CisgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIGJh
c2UgKyBkaWdpdDsKKyAgICAgICAgaWYgKHJlc3VsdCA8IHByZXZpb3VzKQorICAgICAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8UGFyc2VyOjpFcnJvcj4oUGFyc2VyOjpFcnJvcihTdHJpbmc6OmZv
cm1hdCgidWludCBsaXRlcmFsICVzIGlzIG91dCBvZiBib3VuZHMiLCB0ZXh0LnV0ZjgoKS5kYXRh
KCkpKSk7CisgICAgfQorICAgIHJldHVybiB7IHJlc3VsdCB9OworfQorCitzdGF0aWMgRXhwZWN0
ZWQ8ZmxvYXQsIFBhcnNlcjo6RXJyb3I+IGZsb2F0TGl0ZXJhbFRvRmxvYXQoU3RyaW5nVmlldyB0
ZXh0KQoreworICAgIGJvb2wgbmVnYXRlID0gZmFsc2U7CisgICAgaWYgKHRleHQubGVuZ3RoKCkg
PiAwICYmIHRleHRbMF0gPT0gJy0nKSB7CisgICAgICAgIG5lZ2F0ZSA9IHRydWU7CisgICAgICAg
IHRleHQgPSB0ZXh0LnN1YnN0cmluZygxKTsKKyAgICB9CisgICAgaWYgKHRleHQubGVuZ3RoKCkg
PiAwICYmIHRleHRbdGV4dC5sZW5ndGgoKSAtIDFdID09ICdmJykKKyAgICAgICAgdGV4dCA9IHRl
eHQuc3Vic3RyaW5nKDAsIHRleHQubGVuZ3RoKCkgLSAxKTsKKyAgICBmbG9hdCByZXN1bHQ7Cisg
ICAgdW5zaWduZWQgaW5kZXggPSAwOworICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHRleHQu
bGVuZ3RoKCkgJiYgdGV4dFtpbmRleF0gIT0gJy4nOyArK2luZGV4KSB7CisgICAgICAgIEFTU0VS
VCh0ZXh0W2luZGV4XSA+PSAnMCcgJiYgdGV4dFtpbmRleF0gPD0gJzknKTsKKyAgICAgICAgcmVz
dWx0ID0gcmVzdWx0ICogMTAgKyAodGV4dFtpbmRleF0gLSAnMCcpOworICAgIH0KKyAgICBBU1NF
UlQoaW5kZXggPCB0ZXh0Lmxlbmd0aCgpKTsKKyAgICBBU1NFUlQodGV4dFtpbmRleF0gPT0gJy4n
KTsKKyAgICBmbG9hdCBkZWNpbWFsID0gMS4wZiAvIDEwLjBmOworICAgIGZvciAoKytpbmRleDsg
aW5kZXggPCB0ZXh0Lmxlbmd0aCgpOyArK2luZGV4KSB7CisgICAgICAgIEFTU0VSVCh0ZXh0W2lu
ZGV4XSA+PSAnMCcgJiYgdGV4dFtpbmRleF0gPD0gJzknKTsKKyAgICAgICAgcmVzdWx0ICs9IGRl
Y2ltYWwgKiAodGV4dFtpbmRleF0gLSAnMCcpOworICAgICAgICBkZWNpbWFsIC89IDEwLjBmOwor
ICAgIH0KKyAgICBpZiAobmVnYXRlKQorICAgICAgICByZXN1bHQgKj0gLTE7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworYXV0byBQYXJzZXI6OmNvbnN1bWVJbnRlZ3JhbExpdGVyYWwoKSAtPiBF
eHBlY3RlZDxWYXJpYW50PGludCwgdW5zaWduZWQ+LCBFcnJvcj4geworICAgIGF1dG8gaW50ZWdy
YWxMaXRlcmFsVG9rZW4gPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OkludExp
dGVyYWwsIExleGVyOjpUb2tlbjo6VHlwZTo6VWludExpdGVyYWwgfSk7CisgICAgaWYgKCFpbnRl
Z3JhbExpdGVyYWxUb2tlbikKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGludGVn
cmFsTGl0ZXJhbFRva2VuLmVycm9yKCkpOworCisgICAgc3dpdGNoIChpbnRlZ3JhbExpdGVyYWxU
b2tlbi0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpJbnRMaXRlcmFsOiB7
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gaW50TGl0ZXJhbFRvSW50KGludGVncmFsTGl0ZXJhbFRv
a2VuLT5zdHJpbmdWaWV3KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVy
biB7eyAqcmVzdWx0IH19OworICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocmVzdWx0
LmVycm9yKCkpOworICAgIH0KKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VWludExpdGVy
YWw6IHsKKyAgICAgICAgYXV0byByZXN1bHQgPSB1aW50TGl0ZXJhbFRvVWludChpbnRlZ3JhbExp
dGVyYWxUb2tlbi0+c3RyaW5nVmlldyk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAg
ICByZXR1cm4ge3sgKnJlc3VsdCB9fTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KHJlc3VsdC5lcnJvcigpKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJp
bmcoIlNvbWV0aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCkpKTsKKyAgICB9Cit9CisKK2F1dG8gUGFyc2VyOjpjb25zdW1lTm9uTmVnYXRpdmVJ
bnRlZ3JhbExpdGVyYWwoKSAtPiBFeHBlY3RlZDx1bnNpZ25lZCwgRXJyb3I+IHsKKyAgICBhdXRv
IGludGVncmFsTGl0ZXJhbCA9IGNvbnN1bWVJbnRlZ3JhbExpdGVyYWwoKTsKKyAgICBpZiAoIWlu
dGVncmFsTGl0ZXJhbCkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGludGVncmFs
TGl0ZXJhbC5lcnJvcigpKTsKKyAgICBhdXRvIHJlc3VsdCA9IFdURjo6dmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbXShpbnQgeCkgLT4gT3B0aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAgICAgaWYgKHgg
PCAwKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHg7
CisgICAgfSwgW10odW5zaWduZWQgeCkgLT4gT3B0aW9uYWw8dW5zaWduZWQ+IHsKKyAgICAgICAg
cmV0dXJuIHg7CisgICAgfSksICppbnRlZ3JhbExpdGVyYWwpOworICAgIGlmIChyZXN1bHQpCisg
ICAgICAgIHJldHVybiAqcmVzdWx0OworICAgIHJldHVybiBmYWlsKFN0cmluZygiaW50IGxpdGVy
YWwgaXMgbmVnYXRpdmUiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSk7Cit9CisKK3N0
YXRpYyBFeHBlY3RlZDx1bnNpZ25lZCwgUGFyc2VyOjpFcnJvcj4gcmVjb2duaXplU2ltcGxlVW5z
aWduZWRJbnRlZ2VyKFN0cmluZ1ZpZXcgc3RyaW5nVmlldykKK3sKKyAgICB1bnNpZ25lZCByZXN1
bHQgPSAwOworICAgIGlmIChzdHJpbmdWaWV3Lmxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8UGFyc2VyOjpFcnJvcj4oUGFyc2VyOjpFcnJvcihTdHJpbmc6OmZvcm1hdCgi
U2ltcGxlIHVuc2lnbmVkIGxpdGVyYWwgJXMgaXMgdG9vIHNob3J0Iiwgc3RyaW5nVmlldy51dGY4
KCkuZGF0YSgpKSkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHJpbmdWaWV3Lmxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKHN0cmluZ1ZpZXdbaV0gPCAnMCcgfHwgc3RyaW5n
Vmlld1tpXSA+ICc5JykKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPFBhcnNlcjo6RXJy
b3I+KFBhcnNlcjo6RXJyb3IoU3RyaW5nOjpmb3JtYXQoIlNpbXBsZSB1bnNpZ25lZCBsaXRlcmFs
ICVzIGlzbid0IG9mIHRoZSBmb3JtIFswLTldKyIsIHN0cmluZ1ZpZXcudXRmOCgpLmRhdGEoKSkp
KTsKKyAgICAgICAgYXV0byBwcmV2aW91cyA9IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0ID0gcmVz
dWx0ICogMTAgKyAoc3RyaW5nVmlld1tpXSAtICcwJyk7CisgICAgICAgIGlmIChyZXN1bHQgPCBw
cmV2aW91cykKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPFBhcnNlcjo6RXJyb3I+KFBh
cnNlcjo6RXJyb3IoU3RyaW5nOjpmb3JtYXQoIlNpbXBsZSB1bnNpZ25lZCBsaXRlcmFsICVzIGlz
IG91dCBvZiBib3VuZHMiLCBzdHJpbmdWaWV3LnV0ZjgoKS5kYXRhKCkpKSk7CisgICAgfQorICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2F1dG8gUGFyc2VyOjpwYXJzZUNvbnN0YW50RXhwcmVzc2lv
bigpIC0+IEV4cGVjdGVkPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uLCBFcnJvcj4geworICAgIGF1
dG8gdHlwZSA9IGNvbnN1bWVUeXBlcyh7CisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6SW50
TGl0ZXJhbCwKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpVaW50TGl0ZXJhbCwKKyAgICAg
ICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpGbG9hdExpdGVyYWwsCisgICAgICAgIExleGVyOjpUb2tl
bjo6VHlwZTo6TnVsbCwKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpUcnVlLAorICAgICAg
ICBMZXhlcjo6VG9rZW46OlR5cGU6OkZhbHNlLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6
OklkZW50aWZpZXIsCisgICAgfSk7CisgICAgaWYgKCF0eXBlKQorICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxFcnJvcj4odHlwZS5lcnJvcigpKTsKKworICAgIHN3aXRjaCAodHlwZS0+dHlwZSkg
eworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpJbnRMaXRlcmFsOiB7CisgICAgICAgIGF1
dG8gdmFsdWUgPSBpbnRMaXRlcmFsVG9JbnQodHlwZS0+c3RyaW5nVmlldyk7CisgICAgICAgIGlm
ICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFsdWUuZXJy
b3IoKSk7CisgICAgICAgIHJldHVybiB7eyBBU1Q6OkludGVnZXJMaXRlcmFsKFdURk1vdmUoKnR5
cGUpLCAqdmFsdWUpIH19OworICAgIH0KKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VWlu
dExpdGVyYWw6IHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IHVpbnRMaXRlcmFsVG9VaW50KHR5cGUt
PnN0cmluZ1ZpZXcpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KHZhbHVlLmVycm9yKCkpOworICAgICAgICByZXR1cm4ge3sgQVNUOjpV
bnNpZ25lZEludGVnZXJMaXRlcmFsKFdURk1vdmUoKnR5cGUpLCAqdmFsdWUpIH19OworICAgIH0K
KyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6RmxvYXRMaXRlcmFsOiB7CisgICAgICAgIGF1
dG8gdmFsdWUgPSBmbG9hdExpdGVyYWxUb0Zsb2F0KHR5cGUtPnN0cmluZ1ZpZXcpOworICAgICAg
ICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZhbHVl
LmVycm9yKCkpOworICAgICAgICByZXR1cm4ge3sgQVNUOjpGbG9hdExpdGVyYWwoV1RGTW92ZSgq
dHlwZSksICp2YWx1ZSkgfX07CisgICAgfQorICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpO
dWxsOgorICAgICAgICByZXR1cm4geyBBU1Q6Ok51bGxMaXRlcmFsKFdURk1vdmUoKnR5cGUpKSB9
OworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpUcnVlOgorICAgICAgICByZXR1cm4geyBB
U1Q6OkJvb2xlYW5MaXRlcmFsKFdURk1vdmUoKnR5cGUpLCB0cnVlKSB9OworICAgIGNhc2UgTGV4
ZXI6OlRva2VuOjpUeXBlOjpGYWxzZToKKyAgICAgICAgcmV0dXJuIHsgQVNUOjpCb29sZWFuTGl0
ZXJhbChXVEZNb3ZlKCp0eXBlKSwgZmFsc2UpIH07CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5
cGU6OklkZW50aWZpZXI6IHsKKyAgICAgICAgYXV0byBvcmlnaW4gPSBjb25zdW1lVHlwZShMZXhl
cjo6VG9rZW46OlR5cGU6OkZ1bGxTdG9wKTsKKyAgICAgICAgaWYgKCFvcmlnaW4pCisgICAgICAg
ICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOworICAgICAgICBh
dXRvIG5leHQgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIpOwor
ICAgICAgICBpZiAoIW5leHQpCisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
bmV4dC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIHsgQVNUOjpDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZShXVEZNb3ZlKCpvcmlnaW4pLCB0eXBlLT5zdHJpbmdW
aWV3LnRvU3RyaW5nKCksIG5leHQtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSkgfTsKKyAgICB9Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJpbmcoIlNvbWV0aGluZyByZWFsbHkgYmFkIGhh
cHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKTsKKyAgICB9Cit9CisKK2F1
dG8gUGFyc2VyOjpwYXJzZVR5cGVBcmd1bWVudCgpIC0+IEV4cGVjdGVkPEFTVDo6VHlwZUFyZ3Vt
ZW50LCBFcnJvcj4geworICAgIGF1dG8gY29uc3RhbnRFeHByZXNzaW9uID0gYmFja3RyYWNraW5n
U2NvcGU8RXhwZWN0ZWQ8QVNUOjpDb25zdGFudEV4cHJlc3Npb24sIEVycm9yPj4oWyZdKCkgewor
ICAgICAgICByZXR1cm4gcGFyc2VDb25zdGFudEV4cHJlc3Npb24oKTsKKyAgICB9KTsKKyAgICBp
ZiAoY29uc3RhbnRFeHByZXNzaW9uKQorICAgICAgICByZXR1cm4gQVNUOjpUeXBlQXJndW1lbnQo
V1RGTW92ZSgqY29uc3RhbnRFeHByZXNzaW9uKSk7CisgICAgYXV0byByZXN1bHQgPSBjb25zdW1l
VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIpOworICAgIGlmICghcmVzdWx0KQor
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocmVzdWx0LmVycm9yKCkpOworICAgIHJl
dHVybiBBU1Q6OlR5cGVBcmd1bWVudChtYWtlVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4o
TGV4ZXI6OlRva2VuKCpyZXN1bHQpLCByZXN1bHQtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgQVNU
OjpUeXBlQXJndW1lbnRzKCkpKTsKK30KKworYXV0byBQYXJzZXI6OnBhcnNlVHlwZUFyZ3VtZW50
cygpIC0+IEV4cGVjdGVkPEFTVDo6VHlwZUFyZ3VtZW50cywgRXJyb3I+IHsKKyAgICBhdXRvIHR5
cGVBcmd1bWVudHMgPSBiYWNrdHJhY2tpbmdTY29wZTxPcHRpb25hbDxBU1Q6OlR5cGVBcmd1bWVu
dHM+PihbJl0oKSAtPiBPcHRpb25hbDxBU1Q6OlR5cGVBcmd1bWVudHM+IHsKKyAgICAgICAgYXV0
byBsZXNzVGhhblNpZ24gPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6Okxlc3NUaGFu
U2lnbik7CisgICAgICAgIGlmICghbGVzc1RoYW5TaWduKQorICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICAgICAgQVNUOjpUeXBlQXJndW1lbnRzIHR5cGVBcmd1bWVudHM7Cisg
ICAgICAgIGF1dG8gdHlwZUFyZ3VtZW50ID0gcGFyc2VUeXBlQXJndW1lbnQoKTsKKyAgICAgICAg
aWYgKCF0eXBlQXJndW1lbnQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICB0eXBlQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCp0eXBlQXJndW1lbnQpKTsKKyAgICAg
ICAgd2hpbGUgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb21tYSkpIHsKKyAgICAgICAg
ICAgIGF1dG8gdHlwZUFyZ3VtZW50ID0gcGFyc2VUeXBlQXJndW1lbnQoKTsKKyAgICAgICAgICAg
IGlmICghdHlwZUFyZ3VtZW50KQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgICAgICB0eXBlQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCp0eXBlQXJndW1lbnQp
KTsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGdyZWF0ZXJUaGFuU2lnbiA9IGNvbnN1bWVUeXBl
KExleGVyOjpUb2tlbjo6VHlwZTo6R3JlYXRlclRoYW5TaWduKTsKKyAgICAgICAgaWYgKCFncmVh
dGVyVGhhblNpZ24pCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBy
ZXR1cm4gdHlwZUFyZ3VtZW50czsKKyAgICB9KTsKKyAgICBpZiAodHlwZUFyZ3VtZW50cykKKyAg
ICAgICAgcmV0dXJuIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpOworCisgICAgdHlwZUFyZ3VtZW50
cyA9IGJhY2t0cmFja2luZ1Njb3BlPE9wdGlvbmFsPEFTVDo6VHlwZUFyZ3VtZW50cz4+KFsmXSgp
IC0+IE9wdGlvbmFsPEFTVDo6VHlwZUFyZ3VtZW50cz4geworICAgICAgICBhdXRvIGxlc3NUaGFu
U2lnbiA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6TGVzc1RoYW5TaWduKTsKKyAg
ICAgICAgaWYgKCFsZXNzVGhhblNpZ24pCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgICAgICBhdXRvIGdyZWF0ZXJUaGFuU2lnbiA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tl
bjo6VHlwZTo6R3JlYXRlclRoYW5TaWduKTsKKyAgICAgICAgaWYgKCFncmVhdGVyVGhhblNpZ24p
CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4ge3sgfX07
CisgICAgfSk7CisgICAgaWYgKHR5cGVBcmd1bWVudHMpCisgICAgICAgIHJldHVybiBXVEZNb3Zl
KCp0eXBlQXJndW1lbnRzKTsKKworICAgIHJldHVybiBBU1Q6OlR5cGVBcmd1bWVudHMoKTsKK30K
KworYXV0byBQYXJzZXI6OnBhcnNlVHlwZVN1ZmZpeEFiYnJldmlhdGVkKCkgLT4gRXhwZWN0ZWQ8
VHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBFcnJvcj4geworICAgIGF1dG8gdG9rZW4gPSBjb25zdW1l
VHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OlN0YXIsIExleGVyOjpUb2tlbjo6VHlwZTo6U3F1
YXJlQnJhY2tldFBhaXIsIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQgfSk7
CisgICAgaWYgKCF0b2tlbikKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHRva2Vu
LmVycm9yKCkpOworICAgIGlmICh0b2tlbi0+dHlwZSA9PSBMZXhlcjo6VG9rZW46OlR5cGU6Okxl
ZnRTcXVhcmVCcmFja2V0KSB7CisgICAgICAgIGF1dG8gbnVtRWxlbWVudHMgPSBjb25zdW1lTm9u
TmVnYXRpdmVJbnRlZ3JhbExpdGVyYWwoKTsKKyAgICAgICAgaWYgKCFudW1FbGVtZW50cykKKyAg
ICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihudW1FbGVtZW50cy5lcnJvcigpKTsK
KyAgICAgICAgYXV0byByaWdodFNxdWFyZUJyYWNrZXQgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9r
ZW46OlR5cGU6OlJpZ2h0U3F1YXJlQnJhY2tldCk7CisgICAgICAgIGlmICghcmlnaHRTcXVhcmVC
cmFja2V0KQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHJpZ2h0U3F1YXJl
QnJhY2tldC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIHt7ICp0b2tlbiwgKm51bUVsZW1lbnRz
IH19OworICAgIH0KKyAgICByZXR1cm4ge3sgKnRva2VuLCBXVEY6Om51bGxvcHQgfX07Cit9CisK
K2F1dG8gUGFyc2VyOjpwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCgpIC0+IEV4cGVjdGVk
PFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCwgRXJyb3I+IHsKKyAgICBhdXRvIHRva2VuID0gY29u
c3VtZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpTdGFyLCBMZXhlcjo6VG9rZW46OlR5cGU6
OlNxdWFyZUJyYWNrZXRQYWlyLCBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0
IH0pOworICAgIGlmICghdG9rZW4pCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0
b2tlbi5lcnJvcigpKTsKKyAgICBpZiAodG9rZW4tPnR5cGUgPT0gTGV4ZXI6OlRva2VuOjpUeXBl
OjpMZWZ0U3F1YXJlQnJhY2tldCkgeworICAgICAgICBhdXRvIG51bUVsZW1lbnRzID0gY29uc3Vt
ZU5vbk5lZ2F0aXZlSW50ZWdyYWxMaXRlcmFsKCk7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMp
CisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obnVtRWxlbWVudHMuZXJyb3Io
KSk7CisgICAgICAgIGF1dG8gcmlnaHRTcXVhcmVCcmFja2V0ID0gY29uc3VtZVR5cGUoTGV4ZXI6
OlRva2VuOjpUeXBlOjpSaWdodFNxdWFyZUJyYWNrZXQpOworICAgICAgICBpZiAoIXJpZ2h0U3F1
YXJlQnJhY2tldCkKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodFNx
dWFyZUJyYWNrZXQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybiB7eyAqdG9rZW4sIFdURjo6bnVs
bG9wdCwgKm51bUVsZW1lbnRzIH19OworICAgIH0KKyAgICBhdXRvIGFkZHJlc3NTcGFjZVRva2Vu
ID0gY29uc3VtZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpEZXZpY2UsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExleGVy
OjpUb2tlbjo6VHlwZTo6VGhyZWFkfSk7CisgICAgaWYgKCFhZGRyZXNzU3BhY2VUb2tlbikKKyAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFkZHJlc3NTcGFjZVRva2VuLmVycm9yKCkp
OworICAgIEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsKKyAg
ICBzd2l0Y2ggKGFkZHJlc3NTcGFjZVRva2VuLT50eXBlKSB7CisgICAgY2FzZSBMZXhlcjo6VG9r
ZW46OlR5cGU6OkNvbnN0YW50OgorICAgICAgICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5j
ZVR5cGU6OkFkZHJlc3NTcGFjZTo6Q29uc3RhbnQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2U6CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6
UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cDoKKyAgICAgICAgYWRkcmVzc1Nw
YWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZGdyb3VwOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkOgorICAgICAg
ICBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFk
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKFN0cmluZygiU29t
ZXRoaW5nIHJlYWxseSBiYWQgaGFwcGVuZWQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSkpOworICAgIH0KKyAgICByZXR1cm4ge3sgKnRva2VuLCB7IGFkZHJlc3NTcGFjZSB9LCBXVEY6
Om51bGxvcHQgfX07Cit9CisKK2F1dG8gUGFyc2VyOjpwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKSAt
PiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiB7CisgICAgYXV0
byBhZGRyZXNzU3BhY2VUb2tlbiA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6
Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6
OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOworICAgIGlmICghYWRk
cmVzc1NwYWNlVG9rZW4pCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNz
U3BhY2VUb2tlbi5lcnJvcigpKTsKKyAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFj
ZSBhZGRyZXNzU3BhY2U7CisgICAgc3dpdGNoIChhZGRyZXNzU3BhY2VUb2tlbi0+dHlwZSkgewor
ICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudDoKKyAgICAgICAgYWRkcmVzc1Nw
YWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlOgorICAgICAgICBh
ZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6RGV2aWNlOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXA6
CisgICAgICAgIGFkZHJlc3NTcGFjZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNl
OjpUaHJlYWRncm91cDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5
cGU6OlRocmVhZDoKKyAgICAgICAgYWRkcmVzc1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpB
ZGRyZXNzU3BhY2U6OlRocmVhZDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
PihFcnJvcihTdHJpbmcoIlNvbWV0aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKTsKKyAgICB9CisgICAgYXV0byBuYW1lID0gY29uc3VtZVR5
cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKKyAgICBpZiAoIW5hbWUpCisgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOworICAgIGF1dG8gdHlw
ZUFyZ3VtZW50cyA9IHBhcnNlVHlwZUFyZ3VtZW50cygpOworICAgIGlmICghdHlwZUFyZ3VtZW50
cykKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGVBcmd1bWVudHMuZXJyb3Io
KSk7CisKKyAgICBhdXRvIGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4QWJicmV2aWF0ZWQgPSBbJl0o
Y29uc3QgVHlwZVN1ZmZpeEFiYnJldmlhdGVkJiB0eXBlU3VmZml4QWJicmV2aWF0ZWQsIFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHByZXZpb3VzKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4geworICAgICAgICBzd2l0Y2ggKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbi50
eXBlKSB7CisgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpTdGFyOgorICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHR5
cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFjZSwgV1RGTW92ZShwcmV2aW91
cykpOworICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXI6
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIGFkZHJlc3NTcGFj
ZSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6
TGVmdFNxdWFyZUJyYWNrZXQ6CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBU1Q6
OkFycmF5VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhBYmJyZXZpYXRlZC50b2tlbiksIFdU
Rk1vdmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeEFiYnJldmlhdGVkLm51bUVsZW1lbnRzKTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICB9CisgICAgfTsKKworICAgIGF1dG8gZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQgPSBwYXJz
ZVR5cGVTdWZmaXhBYmJyZXZpYXRlZCgpOworICAgIGlmICghZmlyc3RUeXBlU3VmZml4QWJicmV2
aWF0ZWQpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihmaXJzdFR5cGVTdWZmaXhB
YmJyZXZpYXRlZC5lcnJvcigpKTsKKyAgICBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4gcmVz
dWx0ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+KFdURk1vdmUoKmFkZHJlc3NT
cGFjZVRva2VuKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJn
dW1lbnRzKSk7CisgICAgcmVzdWx0ID0gY29uc3RydWN0VHlwZUZyb21TdWZmaXhBYmJyZXZpYXRl
ZCgqZmlyc3RUeXBlU3VmZml4QWJicmV2aWF0ZWQsIFdURk1vdmUocmVzdWx0KSk7CisgICAgd2hp
bGUgKHRydWUpIHsKKyAgICAgICAgYXV0byB0eXBlU3VmZml4QWJicmV2aWF0ZWQgPSBiYWNrdHJh
Y2tpbmdTY29wZTxFeHBlY3RlZDxUeXBlU3VmZml4QWJicmV2aWF0ZWQsIEVycm9yPj4oWyZdKCkg
eworICAgICAgICAgICAgcmV0dXJuIHBhcnNlVHlwZVN1ZmZpeEFiYnJldmlhdGVkKCk7CisgICAg
ICAgIH0pOworICAgICAgICBpZiAoIXR5cGVTdWZmaXhBYmJyZXZpYXRlZCkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAvLyBGSVhNRTogVGhlIG5lc3RpbmcgaGVyZSBtaWdodCBiZSBpbiB0
aGUgd3Jvbmcgb3JkZXIuCisgICAgICAgIHJlc3VsdCA9IGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4
QWJicmV2aWF0ZWQoKnR5cGVTdWZmaXhBYmJyZXZpYXRlZCwgV1RGTW92ZShyZXN1bHQpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworfQorCithdXRvIFBhcnNlcjo6cGFy
c2VOb25BZGRyZXNzU3BhY2VUeXBlKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+LCBFcnJvcj4geworICAgIGF1dG8gb3JpZ2luID0gcGVlaygpOworICAgIGlmICghb3Jp
Z2luKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwor
ICAgIGF1dG8gbmFtZSA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmll
cik7CisgICAgaWYgKCFuYW1lKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmFt
ZS5lcnJvcigpKTsKKyAgICBhdXRvIHR5cGVBcmd1bWVudHMgPSBwYXJzZVR5cGVBcmd1bWVudHMo
KTsKKyAgICBpZiAoIXR5cGVBcmd1bWVudHMpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVy
cm9yPih0eXBlQXJndW1lbnRzLmVycm9yKCkpOworCisgICAgYXV0byBjb25zdHJ1Y3RUeXBlRnJv
bVN1ZmZpeE5vbkFiYnJldmlhdGVkID0gWyZdKGNvbnN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRl
ZCYgdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4m
JiBwcmV2aW91cykgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgc3dp
dGNoICh0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4udHlwZSkgeworICAgICAgICBjYXNl
IExleGVyOjpUb2tlbjo6VHlwZTo6U3RhcjoKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVl
UmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0
ZWQudG9rZW4pLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLmFkZHJlc3NTcGFjZSwgV1RGTW92
ZShwcmV2aW91cykpOworICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJh
Y2tldFBhaXI6CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC50b2tlbiks
ICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQuYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKHByZXZpb3Vz
KSk7CisgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldDoK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlUeXBlPihMZXhlcjo6
VG9rZW4odHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLnRva2VuKSwgV1RGTW92ZShwcmV2aW91cyks
ICp0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQubnVtRWxlbWVudHMpOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHJlc3VsdCA9IG1ha2VVbmlxdWVSZWY8
QVNUOjpUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRv
U3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKKyAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICBhdXRvIHR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCA9IGJhY2t0cmFja2luZ1Njb3Bl
PEV4cGVjdGVkPFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCwgRXJyb3I+PihbJl0oKSB7CisgICAg
ICAgICAgICByZXR1cm4gcGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQoKTsKKyAgICAgICAg
fSk7CisgICAgICAgIGlmICghdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIC8vIEZJWE1FOiBUaGUgbmVzdGluZyBoZXJlIG1pZ2h0IGJlIGluIHRo
ZSB3cm9uZyBvcmRlci4KKyAgICAgICAgcmVzdWx0ID0gY29uc3RydWN0VHlwZUZyb21TdWZmaXhO
b25BYmJyZXZpYXRlZCgqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBXVEZNb3ZlKHJlc3VsdCkp
OworICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK2F1dG8gUGFyc2Vy
OjpwYXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIEVy
cm9yPiB7CisgICAgYXV0byB0eXBlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8VW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4+KFsmXSgpIHsKKyAgICAgICAgcmV0dXJuIHBh
cnNlQWRkcmVzc1NwYWNlVHlwZSgpOworICAgIH0pOworICAgIGlmICh0eXBlKQorICAgICAgICBy
ZXR1cm4gdHlwZTsKKworICAgIHR5cGUgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPj4oWyZdKCkgeworICAgICAgICByZXR1cm4g
cGFyc2VOb25BZGRyZXNzU3BhY2VUeXBlKCk7CisgICAgfSk7CisgICAgaWYgKHR5cGUpCisgICAg
ICAgIHJldHVybiB0eXBlOworCisgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJy
b3IoKSk7Cit9CisKK2F1dG8gUGFyc2VyOjpwYXJzZVR5cGVEZWZpbml0aW9uKCkgLT4gRXhwZWN0
ZWQ8QVNUOjpUeXBlRGVmaW5pdGlvbiwgRXJyb3I+IHsKKyAgICBhdXRvIG9yaWdpbiA9IGNvbnN1
bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6VHlwZWRlZik7CisgICAgaWYgKCFvcmlnaW4pCisg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CisgICAgYXV0
byBuYW1lID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKKyAg
ICBpZiAoIW5hbWUpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9y
KCkpOworICAgIGF1dG8gZXF1YWxzID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpF
cXVhbHNTaWduKTsKKyAgICBpZiAoIWVxdWFscykKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KGVxdWFscy5lcnJvcigpKTsKKyAgICBhdXRvIHR5cGUgPSBwYXJzZVR5cGUoKTsKKyAg
ICBpZiAoIXR5cGUpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9y
KCkpOworICAgIGF1dG8gc2VtaWNvbG9uID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBl
OjpTZW1pY29sb24pOworICAgIGlmICghc2VtaWNvbG9uKQorICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4oc2VtaWNvbG9uLmVycm9yKCkpOworICAgIHJldHVybiBBU1Q6OlR5cGVEZWZp
bml0aW9uKFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RG
TW92ZSgqdHlwZSkpOworfQorCithdXRvIFBhcnNlcjo6cGFyc2VCdWlsdEluU2VtYW50aWMoKSAt
PiBFeHBlY3RlZDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYywgRXJyb3I+IHsKKyAgICBhdXRvIG9yaWdp
biA9IGNvbnN1bWVUeXBlcyh7CisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6U1ZJbnN0YW5j
ZUlELAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlNWVmVydGV4SUQsCisgICAgICAgIExl
eGVyOjpUb2tlbjo6VHlwZTo6UFNpemUsCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6U1ZQ
b3NpdGlvbiwKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpTVklzRnJvbnRGYWNlLAorICAg
ICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlNWU2FtcGxlSW5kZXgsCisgICAgICAgIExleGVyOjpU
b2tlbjo6VHlwZTo6U1ZJbm5lckNvdmVyYWdlLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6
OlNWVGFyZ2V0LAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlNWRGVwdGgsCisgICAgICAg
IExleGVyOjpUb2tlbjo6VHlwZTo6U1ZDb3ZlcmFnZSwKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpU
eXBlOjpTVkRpc3BhdGNoVGhyZWFkSUQsCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6U1ZH
cm91cElELAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlNWR3JvdXBJbmRleCwKKyAgICAg
ICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpTVkdyb3VwVGhyZWFkSUR9KTsKKyAgICBpZiAoIW9yaWdp
bikKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKKwor
ICAgIHN3aXRjaCAob3JpZ2luLT50eXBlKSB7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6
OlNWSW5zdGFuY2VJRDoKKyAgICAgICAgcmV0dXJuIEFTVDo6QnVpbHRJblNlbWFudGljKFdURk1v
dmUoKm9yaWdpbiksIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZJbnN0YW5jZUlE
KTsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U1ZWZXJ0ZXhJRDoKKyAgICAgICAgcmV0
dXJuIEFTVDo6QnVpbHRJblNlbWFudGljKFdURk1vdmUoKm9yaWdpbiksIEFTVDo6QnVpbHRJblNl
bWFudGljOjpWYXJpYWJsZTo6U1ZWZXJ0ZXhJRCk7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5
cGU6OlBTaXplOgorICAgICAgICByZXR1cm4gQVNUOjpCdWlsdEluU2VtYW50aWMoV1RGTW92ZSgq
b3JpZ2luKSwgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpQU2l6ZSk7CisgICAgY2Fz
ZSBMZXhlcjo6VG9rZW46OlR5cGU6OlNWUG9zaXRpb246CisgICAgICAgIHJldHVybiBBU1Q6OkJ1
aWx0SW5TZW1hbnRpYyhXVEZNb3ZlKCpvcmlnaW4pLCBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFy
aWFibGU6OlNWUG9zaXRpb24pOworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpTVklzRnJv
bnRGYWNlOgorICAgICAgICByZXR1cm4gQVNUOjpCdWlsdEluU2VtYW50aWMoV1RGTW92ZSgqb3Jp
Z2luKSwgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVklzRnJvbnRGYWNlKTsKKyAg
ICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U1ZTYW1wbGVJbmRleDoKKyAgICAgICAgcmV0dXJu
IEFTVDo6QnVpbHRJblNlbWFudGljKFdURk1vdmUoKm9yaWdpbiksIEFTVDo6QnVpbHRJblNlbWFu
dGljOjpWYXJpYWJsZTo6U1ZTYW1wbGVJbmRleCk7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5
cGU6OlNWSW5uZXJDb3ZlcmFnZToKKyAgICAgICAgcmV0dXJuIEFTVDo6QnVpbHRJblNlbWFudGlj
KFdURk1vdmUoKm9yaWdpbiksIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZJbm5l
ckNvdmVyYWdlKTsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U1ZUYXJnZXQ6IHsKKyAg
ICAgICAgYXV0byB0YXJnZXQgPSBjb25zdW1lTm9uTmVnYXRpdmVJbnRlZ3JhbExpdGVyYWwoKTsK
KyAgICAgICAgaWYgKCF0YXJnZXQpCisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4odGFyZ2V0LmVycm9yKCkpOworICAgICAgICByZXR1cm4gQVNUOjpCdWlsdEluU2VtYW50aWMo
V1RGTW92ZSgqb3JpZ2luKSwgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlRhcmdl
dCwgKnRhcmdldCk7CisgICAgfQorICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpTVkRlcHRo
OgorICAgICAgICByZXR1cm4gQVNUOjpCdWlsdEluU2VtYW50aWMoV1RGTW92ZSgqb3JpZ2luKSwg
QVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkRlcHRoKTsKKyAgICBjYXNlIExleGVy
OjpUb2tlbjo6VHlwZTo6U1ZDb3ZlcmFnZToKKyAgICAgICAgcmV0dXJuIEFTVDo6QnVpbHRJblNl
bWFudGljKFdURk1vdmUoKm9yaWdpbiksIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6
U1ZDb3ZlcmFnZSk7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlNWRGlzcGF0Y2hUaHJl
YWRJRDoKKyAgICAgICAgcmV0dXJuIEFTVDo6QnVpbHRJblNlbWFudGljKFdURk1vdmUoKm9yaWdp
biksIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZEaXNwYXRjaFRocmVhZElEKTsK
KyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U1ZHcm91cElEOgorICAgICAgICByZXR1cm4g
QVNUOjpCdWlsdEluU2VtYW50aWMoV1RGTW92ZSgqb3JpZ2luKSwgQVNUOjpCdWlsdEluU2VtYW50
aWM6OlZhcmlhYmxlOjpTVkdyb3VwSUQpOworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpT
Vkdyb3VwSW5kZXg6CisgICAgICAgIHJldHVybiBBU1Q6OkJ1aWx0SW5TZW1hbnRpYyhXVEZNb3Zl
KCpvcmlnaW4pLCBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWR3JvdXBJbmRleCk7
CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlNWR3JvdXBUaHJlYWRJRDoKKyAgICAgICAg
cmV0dXJuIEFTVDo6QnVpbHRJblNlbWFudGljKFdURk1vdmUoKm9yaWdpbiksIEFTVDo6QnVpbHRJ
blNlbWFudGljOjpWYXJpYWJsZTo6U1ZHcm91cFRocmVhZElEKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KEVycm9yKFN0cmluZygiU29tZXRoaW5nIHJlYWxseSBiYWQgaGFwcGVuZWQiLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkpOworICAgIH0KK30KKworYXV0byBQYXJzZXI6OnBhcnNl
UmVzb3VyY2VTZW1hbnRpYygpIC0+IEV4cGVjdGVkPEFTVDo6UmVzb3VyY2VTZW1hbnRpYywgRXJy
b3I+IHsKKyAgICBhdXRvIG9yaWdpbiA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6
UmVnaXN0ZXIpOworICAgIGlmICghb3JpZ2luKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxF
cnJvcj4ob3JpZ2luLmVycm9yKCkpOworCisgICAgYXV0byBsZWZ0UGFyZW50aGVzaXMgPSBjb25z
dW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRQYXJlbnRoZXNpcyk7CisgICAgaWYgKCFs
ZWZ0UGFyZW50aGVzaXMpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihsZWZ0UGFy
ZW50aGVzaXMuZXJyb3IoKSk7CisKKyAgICBhdXRvIGluZm8gPSBjb25zdW1lVHlwZShMZXhlcjo6
VG9rZW46OlR5cGU6OklkZW50aWZpZXIpOworICAgIGlmICghaW5mbykKKyAgICAgICAgcmV0dXJu
IFVuZXhwZWN0ZWQ8RXJyb3I+KGluZm8uZXJyb3IoKSk7CisgICAgaWYgKGluZm8tPnN0cmluZ1Zp
ZXcubGVuZ3RoKCkgPCAyIHx8IChpbmZvLT5zdHJpbmdWaWV3WzBdICE9ICd1JworICAgICAgICAm
JiBpbmZvLT5zdHJpbmdWaWV3WzBdICE9ICd0JworICAgICAgICAmJiBpbmZvLT5zdHJpbmdWaWV3
WzBdICE9ICdiJworICAgICAgICAmJiBpbmZvLT5zdHJpbmdWaWV3WzBdICE9ICdzJykpCisgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJpbmc6OmZvcm1hdCgiJWMgaXMg
bm90IGEga25vd24gcmVzb3VyY2UgdHlwZSAoJ3UnLCAndCcsICdiJywgb3IgJ3MnKSIsIGluZm8t
PnN0cmluZ1ZpZXdbMF0pKSk7CisKKyAgICBBU1Q6OlJlc291cmNlU2VtYW50aWM6Ok1vZGUgbW9k
ZTsKKyAgICBzd2l0Y2ggKGluZm8tPnN0cmluZ1ZpZXdbMF0pIHsKKyAgICBjYXNlICd1JzoKKyAg
ICAgICAgbW9kZSA9IEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6TW9kZTo6VW5vcmRlcmVkQWNjZXNz
VmlldzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAndCc6CisgICAgICAgIG1vZGUgPSBBU1Q6
OlJlc291cmNlU2VtYW50aWM6Ok1vZGU6OlRleHR1cmU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgJ2InOgorICAgICAgICBtb2RlID0gQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlOjpCdWZm
ZXI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3MnOgorICAgICAgICBtb2RlID0gQVNUOjpS
ZXNvdXJjZVNlbWFudGljOjpNb2RlOjpTYW1wbGVyOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBhdXRvIGluZGV4ID0gcmVjb2duaXplU2ltcGxlVW5zaWduZWRJbnRlZ2VyKGluZm8tPnN0
cmluZ1ZpZXcuc3Vic3RyaW5nKDEpKTsKKyAgICBpZiAoIWluZGV4KQorICAgICAgICByZXR1cm4g
VW5leHBlY3RlZDxFcnJvcj4oaW5kZXguZXJyb3IoKSk7CisKKyAgICB1bnNpZ25lZCBzcGFjZSA9
IDA7CisgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb21tYSkpIHsKKyAgICAg
ICAgYXV0byBzcGFjZVRva2VuID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVu
dGlmaWVyKTsKKyAgICAgICAgaWYgKCFzcGFjZVRva2VuKQorICAgICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KHNwYWNlVG9rZW4uZXJyb3IoKSk7CisgICAgICAgIGF1dG8gcHJlZml4
ID0gU3RyaW5nKCJzcGFjZSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAg
ICBpZiAoIXNwYWNlVG9rZW4tPnN0cmluZ1ZpZXcuc3RhcnRzV2l0aChTdHJpbmdWaWV3KHByZWZp
eCkpKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKFN0cmluZzo6
Zm9ybWF0KCJTZWNvbmQgYXJndW1lbnQgdG8gcmVzb3VyY2Ugc2VtYW50aWMgJXMgbmVlZHMgYmUg
b2YgdGhlIGZvcm0gJ3NwYWNlMCciLCBzcGFjZVRva2VuLT5zdHJpbmdWaWV3LnV0ZjgoKS5kYXRh
KCkpKSk7CisgICAgICAgIGlmIChzcGFjZVRva2VuLT5zdHJpbmdWaWV3Lmxlbmd0aCgpIDw9IHBy
ZWZpeC5sZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJv
cihTdHJpbmc6OmZvcm1hdCgiU2Vjb25kIGFyZ3VtZW50IHRvIHJlc291cmNlIHNlbWFudGljICVz
IG5lZWRzIGJlIG9mIHRoZSBmb3JtICdzcGFjZTAnIiwgc3BhY2VUb2tlbi0+c3RyaW5nVmlldy51
dGY4KCkuZGF0YSgpKSkpOworICAgICAgICBhdXRvIHNwYWNlVmFsdWUgPSByZWNvZ25pemVTaW1w
bGVVbnNpZ25lZEludGVnZXIoc3BhY2VUb2tlbi0+c3RyaW5nVmlldy5zdWJzdHJpbmcocHJlZml4
Lmxlbmd0aCgpKSk7CisgICAgICAgIGlmICghc3BhY2VWYWx1ZSkKKyAgICAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihzcGFjZVZhbHVlLmVycm9yKCkpOworICAgICAgICBzcGFjZSA9
ICpzcGFjZVZhbHVlOworICAgIH0KKworICAgIGF1dG8gcmlnaHRQYXJlbnRoZXNpcyA9IGNvbnN1
bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRQYXJlbnRoZXNpcyk7CisgICAgaWYgKCFy
aWdodFBhcmVudGhlc2lzKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocmlnaHRQ
YXJlbnRoZXNpcy5lcnJvcigpKTsKKworICAgIHJldHVybiBBU1Q6OlJlc291cmNlU2VtYW50aWMo
V1RGTW92ZSgqb3JpZ2luKSwgbW9kZSwgKmluZGV4LCBzcGFjZSk7Cit9CisKK2F1dG8gUGFyc2Vy
OjpwYXJzZVNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYygpIC0+IEV4cGVjdGVkPEFTVDo6
U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLCBFcnJvcj4geworICAgIGF1dG8gb3JpZ2lu
ID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpTcGVjaWFsaXplZCk7CisgICAgaWYg
KCFvcmlnaW4pCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3Io
KSk7CisgICAgcmV0dXJuIEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljKFdURk1v
dmUoKm9yaWdpbikpOworfQorCithdXRvIFBhcnNlcjo6cGFyc2VTdGFnZUluT3V0U2VtYW50aWMo
KSAtPiBFeHBlY3RlZDxBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYywgRXJyb3I+IHsKKyAgICBhdXRv
IG9yaWdpbiA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6QXR0cmlidXRlKTsKKyAg
ICBpZiAoIW9yaWdpbikKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5l
cnJvcigpKTsKKworICAgIGF1dG8gbGVmdFBhcmVudGhlc2lzID0gY29uc3VtZVR5cGUoTGV4ZXI6
OlRva2VuOjpUeXBlOjpMZWZ0UGFyZW50aGVzaXMpOworICAgIGlmICghbGVmdFBhcmVudGhlc2lz
KQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obGVmdFBhcmVudGhlc2lzLmVycm9y
KCkpOworCisgICAgYXV0byBpbmRleCA9IGNvbnN1bWVOb25OZWdhdGl2ZUludGVncmFsTGl0ZXJh
bCgpOworICAgIGlmICghaW5kZXgpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihp
bmRleC5lcnJvcigpKTsKKworICAgIGF1dG8gcmlnaHRQYXJlbnRoZXNpcyA9IGNvbnN1bWVUeXBl
KExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRQYXJlbnRoZXNpcyk7CisgICAgaWYgKCFyaWdodFBh
cmVudGhlc2lzKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocmlnaHRQYXJlbnRo
ZXNpcy5lcnJvcigpKTsKKworICAgIHJldHVybiBBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyhXVEZN
b3ZlKCpvcmlnaW4pLCAqaW5kZXgpOworfQorCithdXRvIFBhcnNlcjo6cGFyc2VTZW1hbnRpYygp
IC0+IEV4cGVjdGVkPEFTVDo6U2VtYW50aWMsIEVycm9yPiB7CisgICAgYXV0byBidWlsdEluU2Vt
YW50aWMgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYywg
RXJyb3I+PihbJl0oKSB7CisgICAgICAgIHJldHVybiBwYXJzZUJ1aWx0SW5TZW1hbnRpYygpOwor
ICAgIH0pOworICAgIGlmIChidWlsdEluU2VtYW50aWMpCisgICAgICAgIHJldHVybiBBU1Q6OlNl
bWFudGljKFdURk1vdmUoKmJ1aWx0SW5TZW1hbnRpYykpOworCisgICAgYXV0byByZXNvdXJjZVNl
bWFudGljID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8QVNUOjpSZXNvdXJjZVNlbWFudGlj
LCBFcnJvcj4+KFsmXSgpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlUmVzb3VyY2VTZW1hbnRpYygp
OworICAgIH0pOworICAgIGlmIChyZXNvdXJjZVNlbWFudGljKQorICAgICAgICByZXR1cm4gQVNU
OjpTZW1hbnRpYyhXVEZNb3ZlKCpyZXNvdXJjZVNlbWFudGljKSk7CisKKyAgICBhdXRvIHNwZWNp
YWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPEFT
VDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljLCBFcnJvcj4+KFsmXSgpIHsKKyAgICAg
ICAgcmV0dXJuIHBhcnNlU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljKCk7CisgICAgfSk7
CisgICAgaWYgKHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYykKKyAgICAgICAgcmV0dXJu
IEFTVDo6U2VtYW50aWMoV1RGTW92ZSgqc3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljKSk7
CisKKyAgICBhdXRvIHN0YWdlSW5PdXRTZW1hbnRpYyA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVj
dGVkPEFTVDo6U3RhZ2VJbk91dFNlbWFudGljLCBFcnJvcj4+KFsmXSgpIHsKKyAgICAgICAgcmV0
dXJuIHBhcnNlU3RhZ2VJbk91dFNlbWFudGljKCk7CisgICAgfSk7CisgICAgaWYgKHN0YWdlSW5P
dXRTZW1hbnRpYykKKyAgICAgICAgcmV0dXJuIEFTVDo6U2VtYW50aWMoV1RGTW92ZSgqc3RhZ2VJ
bk91dFNlbWFudGljKSk7CisKKyAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oc3RhZ2VJbk91
dFNlbWFudGljLmVycm9yKCkpOworfQorQVNUOjpRdWFsaWZpZXJzIFBhcnNlcjo6cGFyc2VRdWFs
aWZpZXJzKCkKK3sKKyAgICBBU1Q6OlF1YWxpZmllcnMgcXVhbGlmaWVyczsKKyAgICB3aGlsZSAo
dHJ1ZSkgeworICAgICAgICBpZiAoYXV0byBuZXh0ID0gdHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5
cGU6OlF1YWxpZmllcikpIHsKKyAgICAgICAgICAgIGlmICgibm9pbnRlcnBvbGF0aW9uIiA9PSBu
ZXh0LT5zdHJpbmdWaWV3KQorICAgICAgICAgICAgICAgIHF1YWxpZmllcnMuYXBwZW5kKEFTVDo6
UXVhbGlmaWVyOjpOb2ludGVycG9sYXRpb24pOworICAgICAgICAgICAgZWxzZSBpZiAoIm5vcGVy
c3BlY3RpdmUiID09IG5leHQtPnN0cmluZ1ZpZXcpCisgICAgICAgICAgICAgICAgcXVhbGlmaWVy
cy5hcHBlbmQoQVNUOjpRdWFsaWZpZXI6Ok5vcGVyc3BlY3RpdmUpOworICAgICAgICAgICAgZWxz
ZSBpZiAoInVuaWZvcm0iID09IG5leHQtPnN0cmluZ1ZpZXcpCisgICAgICAgICAgICAgICAgcXVh
bGlmaWVycy5hcHBlbmQoQVNUOjpRdWFsaWZpZXI6OlVuaWZvcm0pOworICAgICAgICAgICAgZWxz
ZSBpZiAoImNlbnRyb2lkIiA9PSBuZXh0LT5zdHJpbmdWaWV3KQorICAgICAgICAgICAgICAgIHF1
YWxpZmllcnMuYXBwZW5kKEFTVDo6UXVhbGlmaWVyOjpDZW50cm9pZCk7CisgICAgICAgICAgICBl
bHNlIGlmICgic2FtcGxlIiA9PSBuZXh0LT5zdHJpbmdWaWV3KQorICAgICAgICAgICAgICAgIHF1
YWxpZmllcnMuYXBwZW5kKEFTVDo6UXVhbGlmaWVyOjpTYW1wbGUpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcXVhbGlmaWVyczsKK30KKwor
YXV0byBQYXJzZXI6OnBhcnNlU3RydWN0dXJlRWxlbWVudCgpIC0+IEV4cGVjdGVkPEFTVDo6U3Ry
dWN0dXJlRWxlbWVudCwgRXJyb3I+IHsKKyAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKKyAgICBp
ZiAoIW9yaWdpbikKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJv
cigpKTsKKworICAgIEFTVDo6UXVhbGlmaWVycyBxdWFsaWZpZXJzID0gcGFyc2VRdWFsaWZpZXJz
KCk7CisKKyAgICBhdXRvIHR5cGUgPSBwYXJzZVR5cGUoKTsKKyAgICBpZiAoIXR5cGUpCisgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOworCisgICAgYXV0byBu
YW1lID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKKyAgICBp
ZiAoIW5hbWUpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkp
OworCisgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb2xvbikpIHsKKyAgICAg
ICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKKyAgICAgICAgaWYgKCFzZW1hbnRp
YykKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5lcnJvcigp
KTsKKworICAgICAgICBhdXRvIHNlbWljb2xvbiA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6
VHlwZTo6U2VtaWNvbG9uKTsKKyAgICAgICAgaWYgKCFzZW1pY29sb24pCisgICAgICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oc2VtaWNvbG9uLmVycm9yKCkpOworCisgICAgICAgIHJl
dHVybiBBU1Q6OlN0cnVjdHVyZUVsZW1lbnQoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShxdWFs
aWZpZXJzKSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RG
TW92ZSgqc2VtYW50aWMpKTsKKyAgICB9CisKKyAgICBhdXRvIHNlbWljb2xvbiA9IGNvbnN1bWVU
eXBlKExleGVyOjpUb2tlbjo6VHlwZTo6U2VtaWNvbG9uKTsKKyAgICBpZiAoIXNlbWljb2xvbikK
KyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNlbWljb2xvbi5lcnJvcigpKTsKKwor
ICAgIHJldHVybiBBU1Q6OlN0cnVjdHVyZUVsZW1lbnQoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92
ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmco
KSwgV1RGOjpudWxsb3B0KTsKK30KKworYXV0byBQYXJzZXI6OnBhcnNlU3RydWN0dXJlRGVmaW5p
dGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiwgRXJyb3I+IHsKKyAg
ICBhdXRvIG9yaWdpbiA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6U3RydWN0KTsK
KyAgICBpZiAoIW9yaWdpbikKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdp
bi5lcnJvcigpKTsKKworICAgIGF1dG8gbmFtZSA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6
VHlwZTo6SWRlbnRpZmllcik7CisgICAgaWYgKCFuYW1lKQorICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4obmFtZS5lcnJvcigpKTsKKworICAgIGF1dG8gbGVmdEN1cmx5QnJhY2tldCA9
IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdEN1cmx5QnJhY2tldCk7CisgICAg
aWYgKCFsZWZ0Q3VybHlCcmFja2V0KQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
bGVmdEN1cmx5QnJhY2tldC5lcnJvcigpKTsKKworICAgIEFTVDo6U3RydWN0dXJlRWxlbWVudHMg
c3RydWN0dXJlRWxlbWVudHM7CisgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgYXV0byBzdHJ1
Y3R1cmVFbGVtZW50ID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8QVNUOjpTdHJ1Y3R1cmVF
bGVtZW50LCBFcnJvcj4+KFsmXSgpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZVN0cnVjdHVy
ZUVsZW1lbnQoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmVFbGVtZW50KQor
ICAgICAgICAgICAgc3RydWN0dXJlRWxlbWVudHMuYXBwZW5kKFdURk1vdmUoKnN0cnVjdHVyZUVs
ZW1lbnQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
YXV0byByaWdodEN1cmx5QnJhY2tldCA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6
UmlnaHRDdXJseUJyYWNrZXQpOworICAgIGlmICghcmlnaHRDdXJseUJyYWNrZXQpCisgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodEN1cmx5QnJhY2tldC5lcnJvcigpKTsKKwor
ICAgIHJldHVybiBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgbmFt
ZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHN0cnVjdHVyZUVsZW1lbnRzKSk7Cit9
CisKK2F1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigpIC0+IEV4cGVjdGVk
PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uLCBFcnJvcj4geworICAgIGF1dG8gb3JpZ2luID0g
Y29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpFbnVtKTsKKyAgICBpZiAoIW9yaWdpbikK
KyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKKworICAg
IGF1dG8gbmFtZSA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7
CisgICAgaWYgKCFuYW1lKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmFtZS5l
cnJvcigpKTsKKworICAgIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gdHlw
ZTsKKyAgICBpZiAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbG9uKSkgeworICAgICAg
ICBhdXRvIHBhcnNlZFR5cGUgPSBwYXJzZVR5cGUoKTsKKyAgICAgICAgaWYgKCFwYXJzZWRUeXBl
KQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHBhcnNlZFR5cGUuZXJyb3Io
KSk7CisgICAgICAgIHR5cGUgPSBXVEZNb3ZlKCpwYXJzZWRUeXBlKTsKKyAgICB9CisKKyAgICBh
dXRvIGxlZnRDdXJseUJyYWNrZXQgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6Okxl
ZnRDdXJseUJyYWNrZXQpOworICAgIGlmICghbGVmdEN1cmx5QnJhY2tldCkKKyAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGxlZnRDdXJseUJyYWNrZXQuZXJyb3IoKSk7CisKKyAgICBh
dXRvIGZpcnN0RW51bWVyYXRpb25NZW1iZXIgPSBwYXJzZUVudW1lcmF0aW9uTWVtYmVyKCk7Cisg
ICAgaWYgKCFmaXJzdEVudW1lcmF0aW9uTWVtYmVyKQorICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4oZmlyc3RFbnVtZXJhdGlvbk1lbWJlci5lcnJvcigpKTsKKworICAgIEFTVDo6RW51
bWVyYXRpb25EZWZpbml0aW9uIHJlc3VsdChXVEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdW
aWV3LnRvU3RyaW5nKCksIFdURk1vdmUodHlwZSkpOworICAgIGF1dG8gc3VjY2VzcyA9IHJlc3Vs
dC5hZGQoV1RGTW92ZSgqZmlyc3RFbnVtZXJhdGlvbk1lbWJlcikpOworICAgIGlmICghc3VjY2Vz
cykKKyAgICAgICAgcmV0dXJuIGZhaWwoU3RyaW5nKCJDYW5ub3QgYWRkIGVudW1lcmF0aW9uIG1l
bWJlciIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKKworICAgIHdoaWxlICh0cnlU
eXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Q29tbWEpKSB7CisgICAgICAgIGF1dG8gbWVtYmVyID0g
cGFyc2VFbnVtZXJhdGlvbk1lbWJlcigpOworICAgICAgICBpZiAoIW1lbWJlcikKKyAgICAgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihtZW1iZXIuZXJyb3IoKSk7CisgICAgICAgIHN1
Y2Nlc3MgPSByZXN1bHQuYWRkKFdURk1vdmUoKm1lbWJlcikpOworICAgICAgICBpZiAoIXN1Y2Nl
c3MpCisgICAgICAgICAgICByZXR1cm4gZmFpbChTdHJpbmcoIkNhbm5vdCBhZGQgZW51bWVyYXRp
b24gbWVtYmVyIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOworICAgIH0KKworICAg
IGF1dG8gcmlnaHRDdXJseUJyYWNrZXQgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6
OlJpZ2h0Q3VybHlCcmFja2V0KTsKKyAgICBpZiAoIXJpZ2h0Q3VybHlCcmFja2V0KQorICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocmlnaHRDdXJseUJyYWNrZXQuZXJyb3IoKSk7CisK
KyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOworfQorCithdXRvIFBhcnNlcjo6cGFyc2VFbnVt
ZXJhdGlvbk1lbWJlcigpIC0+IEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25NZW1iZXIsIEVycm9y
PiB7CisgICAgYXV0byBpZGVudGlmaWVyID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBl
OjpJZGVudGlmaWVyKTsKKyAgICBpZiAoIWlkZW50aWZpZXIpCisgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihpZGVudGlmaWVyLmVycm9yKCkpOworICAgIGF1dG8gbmFtZSA9IGlkZW50
aWZpZXItPnN0cmluZ1ZpZXcudG9TdHJpbmcoKTsKKworICAgIGlmICh0cnlUeXBlKExleGVyOjpU
b2tlbjo6VHlwZTo6RXF1YWxzU2lnbikpIHsKKyAgICAgICAgYXV0byBjb25zdGFudEV4cHJlc3Np
b24gPSBwYXJzZUNvbnN0YW50RXhwcmVzc2lvbigpOworICAgICAgICBpZiAoIWNvbnN0YW50RXhw
cmVzc2lvbikKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihjb25zdGFudEV4
cHJlc3Npb24uZXJyb3IoKSk7CisgICAgICAgIHJldHVybiBBU1Q6OkVudW1lcmF0aW9uTWVtYmVy
KExleGVyOjpUb2tlbigqaWRlbnRpZmllciksIFdURk1vdmUobmFtZSksIFdURk1vdmUoKmNvbnN0
YW50RXhwcmVzc2lvbikpOworICAgIH0KKyAgICByZXR1cm4gQVNUOjpFbnVtZXJhdGlvbk1lbWJl
cihMZXhlcjo6VG9rZW4oKmlkZW50aWZpZXIpLCBXVEZNb3ZlKG5hbWUpKTsKK30KKworYXV0byBQ
YXJzZXI6OnBhcnNlTmF0aXZlVHlwZURlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24sIEVycm9yPiB7CisgICAgYXV0byBvcmlnaW4gPSBjb25zdW1lVHlw
ZShMZXhlcjo6VG9rZW46OlR5cGU6Ok5hdGl2ZSk7CisgICAgaWYgKCFvcmlnaW4pCisgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CisKKyAgICBhdXRvIHBh
cnNlZFR5cGVkZWYgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlR5cGVkZWYpOwor
ICAgIGlmICghcGFyc2VkVHlwZWRlZikKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KHBhcnNlZFR5cGVkZWYuZXJyb3IoKSk7CisKKyAgICBhdXRvIG5hbWUgPSBjb25zdW1lVHlwZShM
ZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIpOworICAgIGlmICghbmFtZSkKKyAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CisKKyAgICBhdXRvIHR5cGVB
cmd1bWVudHMgPSBwYXJzZVR5cGVBcmd1bWVudHMoKTsKKyAgICBpZiAoIXR5cGVBcmd1bWVudHMp
CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih0eXBlQXJndW1lbnRzLmVycm9yKCkp
OworCisgICAgYXV0byBzZW1pY29sb24gPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6
OlNlbWljb2xvbik7CisgICAgaWYgKCFzZW1pY29sb24pCisgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihzZW1pY29sb24uZXJyb3IoKSk7CisKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmlu
ZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7Cit9CisKK2F1dG8gUGFyc2VyOjpwYXJzZU51
bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSgpIC0+IEV4cGVjdGVkPEFTVDo6TnVtVGhyZWFkc0Z1
bmN0aW9uQXR0cmlidXRlLCBFcnJvcj4geworICAgIGF1dG8gb3JpZ2luID0gY29uc3VtZVR5cGUo
TGV4ZXI6OlRva2VuOjpUeXBlOjpOdW1UaHJlYWRzKTsKKyAgICBpZiAoIW9yaWdpbikKKyAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKKworICAgIGF1dG8g
bGVmdFBhcmVudGhlc2lzID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0UGFy
ZW50aGVzaXMpOworICAgIGlmICghbGVmdFBhcmVudGhlc2lzKQorICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxFcnJvcj4obGVmdFBhcmVudGhlc2lzLmVycm9yKCkpOworCisgICAgYXV0byB3aWR0
aCA9IGNvbnN1bWVOb25OZWdhdGl2ZUludGVncmFsTGl0ZXJhbCgpOworICAgIGlmICghd2lkdGgp
CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih3aWR0aC5lcnJvcigpKTsKKworICAg
IGF1dG8gY29tbWEgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKTsKKyAg
ICBpZiAoIWNvbW1hKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oY29tbWEuZXJy
b3IoKSk7CisKKyAgICBhdXRvIGhlaWdodCA9IGNvbnN1bWVOb25OZWdhdGl2ZUludGVncmFsTGl0
ZXJhbCgpOworICAgIGlmICghaGVpZ2h0KQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4oaGVpZ2h0LmVycm9yKCkpOworCisgICAgY29tbWEgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9r
ZW46OlR5cGU6OkNvbW1hKTsKKyAgICBpZiAoIWNvbW1hKQorICAgICAgICByZXR1cm4gVW5leHBl
Y3RlZDxFcnJvcj4oY29tbWEuZXJyb3IoKSk7CisKKyAgICBhdXRvIGRlcHRoID0gY29uc3VtZU5v
bk5lZ2F0aXZlSW50ZWdyYWxMaXRlcmFsKCk7CisgICAgaWYgKCFkZXB0aCkKKyAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGRlcHRoLmVycm9yKCkpOworCisgICAgYXV0byByaWdodFBh
cmVudGhlc2lzID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodFBhcmVudGhl
c2lzKTsKKyAgICBpZiAoIXJpZ2h0UGFyZW50aGVzaXMpCisgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihyaWdodFBhcmVudGhlc2lzLmVycm9yKCkpOworCisgICAgcmV0dXJuIEFTVDo6
TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKFdURk1vdmUoKm9yaWdpbiksICp3aWR0aCwgKmhl
aWdodCwgKmRlcHRoKTsKK30KKworYXV0byBQYXJzZXI6OnBhcnNlQXR0cmlidXRlQmxvY2soKSAt
PiBFeHBlY3RlZDxBU1Q6OkF0dHJpYnV0ZUJsb2NrLCBFcnJvcj4geworICAgIGF1dG8gbGVmdFNx
dWFyZUJyYWNrZXQgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTcXVhcmVC
cmFja2V0KTsKKyAgICBpZiAoIWxlZnRTcXVhcmVCcmFja2V0KQorICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxFcnJvcj4obGVmdFNxdWFyZUJyYWNrZXQuZXJyb3IoKSk7CisKKyAgICBBU1Q6OkF0
dHJpYnV0ZUJsb2NrIHJlc3VsdDsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGF1dG8g
bnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8
QVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUsIEVycm9yPj4oWyZdKCkgeworICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKCk7CisgICAgICAg
IH0pOworICAgICAgICBpZiAobnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKSB7CisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKm51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkp
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBhdXRvIHJpZ2h0U3F1YXJlQnJhY2tldCA9IGNvbnN1bWVUeXBlKExleGVyOjpU
b2tlbjo6VHlwZTo6UmlnaHRTcXVhcmVCcmFja2V0KTsKKyAgICBpZiAoIXJpZ2h0U3F1YXJlQnJh
Y2tldCkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHJpZ2h0U3F1YXJlQnJhY2tl
dC5lcnJvcigpKTsKKworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK2F1dG8gUGFy
c2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biwgRXJyb3I+IHsKKyAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKKyAgICBpZiAoIW9yaWdpbikK
KyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKKworICAg
IEFTVDo6UXVhbGlmaWVycyBxdWFsaWZpZXJzID0gcGFyc2VRdWFsaWZpZXJzKCk7CisKKyAgICBh
dXRvIHR5cGUgPSBwYXJzZVR5cGUoKTsKKyAgICBpZiAoIXR5cGUpCisgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOworCisgICAgU3RyaW5nIG5hbWU7CisgICAg
aWYgKGF1dG8gdG9rZW4gPSB0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllcikp
CisgICAgICAgIG5hbWUgPSB0b2tlbi0+c3RyaW5nVmlldy50b1N0cmluZygpOworCisgICAgaWYg
KHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb2xvbikpIHsKKyAgICAgICAgYXV0byBzZW1h
bnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKKyAgICAgICAgaWYgKCFzZW1hbnRpYykKKyAgICAgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5lcnJvcigpKTsKKyAgICAgICAg
cmV0dXJuIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3Zl
KHF1YWxpZmllcnMpLCBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+KFdURk1v
dmUoKnR5cGUpKSwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBXVEY6Om51bGxv
cHQpOworICAgIH0KKworICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oV1RGTW92
ZSgqb3JpZ2luKSwgV1RGTW92ZShxdWFsaWZpZXJzKSwgeyBXVEZNb3ZlKCp0eXBlKSB9LCBXVEZN
b3ZlKG5hbWUpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7Cit9CisKK2F1dG8gUGFyc2Vy
OjpwYXJzZVBhcmFtZXRlcnMoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
LCBFcnJvcj4geworICAgIGF1dG8gbGVmdFBhcmVudGhlc2lzID0gY29uc3VtZVR5cGUoTGV4ZXI6
OlRva2VuOjpUeXBlOjpMZWZ0UGFyZW50aGVzaXMpOworICAgIGlmICghbGVmdFBhcmVudGhlc2lz
KQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obGVmdFBhcmVudGhlc2lzLmVycm9y
KCkpOworCisgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgIGlm
ICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRQYXJlbnRoZXNpcykpCisgICAgICAg
IHJldHVybiBXVEZNb3ZlKHBhcmFtZXRlcnMpOworCisgICAgYXV0byBmaXJzdFBhcmFtZXRlciA9
IHBhcnNlUGFyYW1ldGVyKCk7CisgICAgaWYgKCFmaXJzdFBhcmFtZXRlcikKKyAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGZpcnN0UGFyYW1ldGVyLmVycm9yKCkpOworICAgIHBhcmFt
ZXRlcnMuYXBwZW5kKFdURk1vdmUoKmZpcnN0UGFyYW1ldGVyKSk7CisKKyAgICB3aGlsZSAodHJ5
VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkgeworICAgICAgICBhdXRvIHBhcmFtZXRl
ciA9IHBhcnNlUGFyYW1ldGVyKCk7CisgICAgICAgIGlmICghcGFyYW1ldGVyKQorICAgICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHBhcmFtZXRlci5lcnJvcigpKTsKKyAgICAgICAg
cGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSgqcGFyYW1ldGVyKSk7CisgICAgfQorCisgICAgYXV0
byByaWdodFBhcmVudGhlc2lzID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdo
dFBhcmVudGhlc2lzKTsKKyAgICBpZiAoIXJpZ2h0UGFyZW50aGVzaXMpCisgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihyaWdodFBhcmVudGhlc2lzLmVycm9yKCkpOworCisgICAgcmV0
dXJuIFdURk1vdmUocGFyYW1ldGVycyk7Cit9CisKK2F1dG8gUGFyc2VyOjpwYXJzZUZ1bmN0aW9u
RGVmaW5pdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uLCBFcnJvcj4g
eworICAgIGJvb2wgcmVzdHJpY3RlZCA9IHN0YXRpY19jYXN0PGJvb2w+KHRyeVR5cGUoTGV4ZXI6
OlRva2VuOjpUeXBlOjpSZXN0cmljdGVkKSk7CisKKyAgICBhdXRvIGZ1bmN0aW9uRGVjbGFyYXRp
b24gPSBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKTsKKyAgICBpZiAoIWZ1bmN0aW9uRGVjbGFy
YXRpb24pCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihmdW5jdGlvbkRlY2xhcmF0
aW9uLmVycm9yKCkpOworCisgICAgYXV0byBibG9jayA9IHBhcnNlQmxvY2soKTsKKyAgICBpZiAo
IWJsb2NrKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYmxvY2suZXJyb3IoKSk7
CisKKyAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlZmluaXRpb24oV1RGTW92ZSgqZnVuY3Rpb25E
ZWNsYXJhdGlvbiksIFdURk1vdmUoKmJsb2NrKSwgcmVzdHJpY3RlZCk7Cit9CisKK2F1dG8gUGFy
c2VyOjpwYXJzZUVudHJ5UG9pbnRGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4geworICAgIGF1dG8gb3JpZ2luID0gcGVlaygp
OworICAgIGlmICghb3JpZ2luKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3Jp
Z2luLmVycm9yKCkpOworCisgICAgQVNUOjpBdHRyaWJ1dGVCbG9jayBhdHRyaWJ1dGVCbG9jazsK
KyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb246OkVudHJ5UG9pbnRUeXBlIGVudHJ5UG9pbnRU
eXBlOworCisgICAgYXV0byBwYXJzZWRBdHRyaWJ1dGVCbG9jayA9IGJhY2t0cmFja2luZ1Njb3Bl
PEV4cGVjdGVkPEFTVDo6QXR0cmlidXRlQmxvY2ssIEVycm9yPj4oWyZdKCkgeworICAgICAgICBy
ZXR1cm4gcGFyc2VBdHRyaWJ1dGVCbG9jaygpOworICAgIH0pOworICAgIGlmIChwYXJzZWRBdHRy
aWJ1dGVCbG9jaykgeworICAgICAgICBhdXRvIGNvbXB1dGUgPSBjb25zdW1lVHlwZShMZXhlcjo6
VG9rZW46OlR5cGU6OkNvbXB1dGUpOworICAgICAgICBpZiAoIWNvbXB1dGUpCisgICAgICAgICAg
ICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oY29tcHV0ZS5lcnJvcigpKTsKKyAgICAgICAgYXR0
cmlidXRlQmxvY2sgPSBXVEZNb3ZlKCpwYXJzZWRBdHRyaWJ1dGVCbG9jayk7CisgICAgICAgIGVu
dHJ5UG9pbnRUeXBlID0gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6
Q29tcHV0ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBhdXRvIHR5cGUgPSBjb25zdW1lVHlwZXMo
eyBMZXhlcjo6VG9rZW46OlR5cGU6OlZlcnRleCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpGcmFnbWVu
dCB9KTsKKyAgICAgICAgaWYgKCF0eXBlKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KHR5cGUuZXJyb3IoKSk7CisKKyAgICAgICAgc3dpdGNoIChvcmlnaW4tPnR5cGUpIHsK
KyAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlZlcnRleDoKKyAgICAgICAgICAgIGVu
dHJ5UG9pbnRUeXBlID0gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6
VmVydGV4OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpU
eXBlOjpGcmFnbWVudDoKKyAgICAgICAgICAgIGVudHJ5UG9pbnRUeXBlID0gQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uOjpFbnRyeVBvaW50VHlwZTo6RnJhZ21lbnQ7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgZW50cnlQb2ludFR5cGUgPSBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb246OkVu
dHJ5UG9pbnRUeXBlOjpWZXJ0ZXg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHR5cGUg
PSBwYXJzZVR5cGUoKTsKKyAgICBpZiAoIXR5cGUpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPih0eXBlLmVycm9yKCkpOworCisgICAgYXV0byBuYW1lID0gY29uc3VtZVR5cGUoTGV4
ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKKyAgICBpZiAoIW5hbWUpCisgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOworCisgICAgYXV0byBwYXJhbWV0
ZXJzID0gcGFyc2VQYXJhbWV0ZXJzKCk7CisgICAgaWYgKCFwYXJhbWV0ZXJzKQorICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocGFyYW1ldGVycy5lcnJvcigpKTsKKworICAgIGJvb2wg
aXNPcGVyYXRvciA9IGZhbHNlOworCisgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBl
OjpDb2xvbikpIHsKKyAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKKyAg
ICAgICAgaWYgKCFzZW1hbnRpYykKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
PihzZW1hbnRpYy5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJh
dGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKGF0dHJpYnV0ZUJsb2NrKSwgZW50cnlQb2lu
dFR5cGUsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1v
dmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3IpOworICAgIH0K
KworICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwg
V1RGTW92ZShhdHRyaWJ1dGVCbG9jayksIGVudHJ5UG9pbnRUeXBlLCBXVEZNb3ZlKCp0eXBlKSwg
bmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGOjpu
dWxsb3B0LCBpc09wZXJhdG9yKTsKK30KKworYXV0byBQYXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0
aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVy
cm9yPiB7CisgICAgYXV0byBvcmlnaW4gPSBwZWVrKCk7CisgICAgaWYgKCFvcmlnaW4pCisgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CisKKyAgICBhdXRv
IHR5cGUgPSBwYXJzZVR5cGUoKTsKKyAgICBpZiAoIXR5cGUpCisgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPih0eXBlLmVycm9yKCkpOworCisgICAgYXV0byBuYW1lID0gY29uc3VtZVR5
cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyLCBMZXhlcjo6VG9rZW46OlR5cGU6
Ok9wZXJhdG9yTmFtZSB9KTsKKyAgICBpZiAoIW5hbWUpCisgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihuYW1lLmVycm9yKCkpOworICAgIGF1dG8gaXNPcGVyYXRvciA9IG5hbWUtPnR5
cGUgPT0gTGV4ZXI6OlRva2VuOjpUeXBlOjpPcGVyYXRvck5hbWU7CisKKyAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBwYXJzZVBhcmFtZXRlcnMoKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpCisgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihwYXJhbWV0ZXJzLmVycm9yKCkpOworCisgICAgaWYg
KHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb2xvbikpIHsKKyAgICAgICAgYXV0byBzZW1h
bnRpYyA9IHBhcnNlU2VtYW50aWMoKTsKKyAgICAgICAgaWYgKCFzZW1hbnRpYykKKyAgICAgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1hbnRpYy5lcnJvcigpKTsKKyAgICAgICAg
cmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdU
Rjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwg
V1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvcik7Cisg
ICAgfQorCisgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmln
aW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcu
dG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRv
cik7Cit9CisKK2F1dG8gUGFyc2VyOjpwYXJzZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXJhdGlvbigp
IC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHsKKyAgICBhdXRv
IG9yaWdpbiA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6T3BlcmF0b3IpOworICAg
IGlmICghb3JpZ2luKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVy
cm9yKCkpOworCisgICAgYXV0byB0eXBlID0gcGFyc2VUeXBlKCk7CisgICAgaWYgKCF0eXBlKQor
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odHlwZS5lcnJvcigpKTsKKworICAgIGF1
dG8gcGFyYW1ldGVycyA9IHBhcnNlUGFyYW1ldGVycygpOworICAgIGlmICghcGFyYW1ldGVycykK
KyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHBhcmFtZXRlcnMuZXJyb3IoKSk7CisK
KyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworCisgICAgaWYgKHRyeVR5cGUoTGV4ZXI6OlRv
a2VuOjpUeXBlOjpDb2xvbikpIHsKKyAgICAgICAgYXV0byBzZW1hbnRpYyA9IHBhcnNlU2VtYW50
aWMoKTsKKyAgICAgICAgaWYgKCFzZW1hbnRpYykKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihzZW1hbnRpYy5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92
ZSgqdHlwZSksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxp
dGVyYWwpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBpc09wZXJh
dG9yKTsKKyAgICB9CisKKyAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1v
dmUoKm9yaWdpbiksIHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgU3RyaW5nKCJv
cGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoKnBh
cmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0b3IpOworfQorCithdXRvIFBhcnNlcjo6
cGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xh
cmF0aW9uLCBFcnJvcj4geworICAgIGF1dG8gZW50cnlQb2ludEZ1bmN0aW9uRGVjbGFyYXRpb24g
PSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVy
cm9yPj4oWyZdKCkgeworICAgICAgICByZXR1cm4gcGFyc2VFbnRyeVBvaW50RnVuY3Rpb25EZWNs
YXJhdGlvbigpOworICAgIH0pOworICAgIGlmIChlbnRyeVBvaW50RnVuY3Rpb25EZWNsYXJhdGlv
bikKKyAgICAgICAgcmV0dXJuIFdURk1vdmUoKmVudHJ5UG9pbnRGdW5jdGlvbkRlY2xhcmF0aW9u
KTsKKworICAgIGF1dG8gcmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24gPSBiYWNrdHJhY2tpbmdT
Y29wZTxFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPj4oWyZdKCkgewor
ICAgICAgICByZXR1cm4gcGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigpOworICAgIH0p
OworICAgIGlmIChyZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbikKKyAgICAgICAgcmV0dXJuIFdU
Rk1vdmUoKnJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0aW9uKTsKKworICAgIGF1dG8gb3BlcmF0b3JG
dW5jdGlvbkRlY2xhcmF0aW9uID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8QVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4+KFsmXSgpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlT3Bl
cmF0b3JGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CisgICAgfSk7CisgICAgaWYgKG9wZXJhdG9yRnVu
Y3Rpb25EZWNsYXJhdGlvbikKKyAgICAgICAgcmV0dXJuIFdURk1vdmUoKm9wZXJhdG9yRnVuY3Rp
b25EZWNsYXJhdGlvbik7CisKKyAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3BlcmF0b3JG
dW5jdGlvbkRlY2xhcmF0aW9uLmVycm9yKCkpOworfQorCithdXRvIFBhcnNlcjo6cGFyc2VOYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uLCBFcnJvcj4geworICAgIE9wdGlvbmFsPExleGVyOjpUb2tlbj4gb3JpZ2luOwor
CisgICAgYm9vbCByZXN0cmljdGVkID0gZmFsc2U7CisgICAgaWYgKGF1dG8gcmVzdHJpY3RlZFZh
bHVlID0gdHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlJlc3RyaWN0ZWQpKSB7CisgICAgICAg
IG9yaWdpbiA9ICpyZXN0cmljdGVkVmFsdWU7CisgICAgICAgIHJlc3RyaWN0ZWQgPSB0cnVlOwor
ICAgIH0KKworICAgIGF1dG8gbmF0aXZlID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBl
OjpOYXRpdmUpOworICAgIGlmICghbmF0aXZlKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxF
cnJvcj4obmF0aXZlLmVycm9yKCkpOworICAgIGlmICghb3JpZ2luKQorICAgICAgICBvcmlnaW4g
PSAqbmF0aXZlOworCisgICAgYXV0byBmdW5jdGlvbkRlY2xhcmF0aW9uID0gcGFyc2VGdW5jdGlv
bkRlY2xhcmF0aW9uKCk7CisgICAgaWYgKCFmdW5jdGlvbkRlY2xhcmF0aW9uKQorICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZnVuY3Rpb25EZWNsYXJhdGlvbi5lcnJvcigpKTsKKwor
ICAgIGF1dG8gc2VtaWNvbG9uID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpTZW1p
Y29sb24pOworICAgIGlmICghc2VtaWNvbG9uKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxF
cnJvcj4oc2VtaWNvbG9uLmVycm9yKCkpOworCisgICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbihXVEZNb3ZlKCpmdW5jdGlvbkRlY2xhcmF0aW9uKSwgcmVzdHJpY3RlZCk7
Cit9CisKK2F1dG8gUGFyc2VyOjpwYXJzZUJsb2NrKCkgLT4gRXhwZWN0ZWQ8QVNUOjpCbG9jaywg
RXJyb3I+IHsKKyAgICBhdXRvIG9yaWdpbiA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlw
ZTo6TGVmdEN1cmx5QnJhY2tldCk7CisgICAgaWYgKCFvcmlnaW4pCisgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IHBh
cnNlQmxvY2tCb2R5KFdURk1vdmUoKm9yaWdpbikpOworCisgICAgYXV0byByaWdodEN1cmx5QnJh
Y2tldCA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRDdXJseUJyYWNrZXQp
OworICAgIGlmICghcmlnaHRDdXJseUJyYWNrZXQpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihyaWdodEN1cmx5QnJhY2tldC5lcnJvcigpKTsKKworICAgIHJldHVybiBXVEZNb3Zl
KHJlc3VsdCk7Cit9CisKK0FTVDo6QmxvY2sgUGFyc2VyOjpwYXJzZUJsb2NrQm9keShMZXhlcjo6
VG9rZW4mJiBvcmlnaW4pCit7CisgICAgQVNUOjpTdGF0ZW1lbnRzIHN0YXRlbWVudHM7CisgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgYXV0byBzdGF0ZW1lbnQgPSBiYWNrdHJhY2tpbmdTY29w
ZTxFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1lbnQ+LCBFcnJvcj4+KFsmXSgpIHsKKyAg
ICAgICAgICAgIHJldHVybiBwYXJzZVN0YXRlbWVudCgpOworICAgICAgICB9KTsKKyAgICAgICAg
aWYgKHN0YXRlbWVudCkKKyAgICAgICAgICAgIHN0YXRlbWVudHMuYXBwZW5kKFdURk1vdmUoKnN0
YXRlbWVudCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAg
cmV0dXJuIEFTVDo6QmxvY2soV1RGTW92ZShvcmlnaW4pLCBXVEZNb3ZlKHN0YXRlbWVudHMpKTsK
K30KKworYXV0byBQYXJzZXI6OnBhcnNlSWZTdGF0ZW1lbnQoKSAtPiBFeHBlY3RlZDxBU1Q6Oklm
U3RhdGVtZW50LCBFcnJvcj4geworICAgIGF1dG8gb3JpZ2luID0gY29uc3VtZVR5cGUoTGV4ZXI6
OlRva2VuOjpUeXBlOjpJZik7CisgICAgaWYgKCFvcmlnaW4pCisgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CisKKyAgICBhdXRvIGxlZnRQYXJlbnRoZXNp
cyA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFBhcmVudGhlc2lzKTsKKyAg
ICBpZiAoIWxlZnRQYXJlbnRoZXNpcykKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KGxlZnRQYXJlbnRoZXNpcy5lcnJvcigpKTsKKworICAgIGF1dG8gY29uZGl0aW9uYWwgPSBwYXJz
ZUV4cHJlc3Npb24oKTsKKyAgICBpZiAoIWNvbmRpdGlvbmFsKQorICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxFcnJvcj4oY29uZGl0aW9uYWwuZXJyb3IoKSk7CisKKyAgICBhdXRvIHJpZ2h0UGFy
ZW50aGVzaXMgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0UGFyZW50aGVz
aXMpOworICAgIGlmICghcmlnaHRQYXJlbnRoZXNpcykKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KHJpZ2h0UGFyZW50aGVzaXMuZXJyb3IoKSk7CisKKyAgICBhdXRvIGJvZHkgPSBw
YXJzZVN0YXRlbWVudCgpOworICAgIGlmICghYm9keSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KGJvZHkuZXJyb3IoKSk7CisKKyAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpT
dGF0ZW1lbnQ+PiBlbHNlQm9keTsKKyAgICBpZiAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6
OkVsc2UpKSB7CisgICAgICAgIGF1dG8gcGFyc2VkRWxzZUJvZHkgPSBwYXJzZVN0YXRlbWVudCgp
OworICAgICAgICBpZiAoIXBhcnNlZEVsc2VCb2R5KQorICAgICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KHBhcnNlZEVsc2VCb2R5LmVycm9yKCkpOworICAgICAgICBlbHNlQm9keSA9
IFdURk1vdmUoKnBhcnNlZEVsc2VCb2R5KTsKKyAgICB9CisKKyAgICBWZWN0b3I8VW5pcXVlUmVm
PEFTVDo6RXhwcmVzc2lvbj4+IGNhc3RBcmd1bWVudHM7CisgICAgY2FzdEFyZ3VtZW50cy5hcHBl
bmQoV1RGTW92ZSgqY29uZGl0aW9uYWwpKTsKKyAgICBhdXRvIGJvb2xDYXN0ID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKm9yaWdpbiksIFN0cmluZygi
Ym9vbCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhc3RBcmd1bWVu
dHMpKTsKKyAgICByZXR1cm4gQVNUOjpJZlN0YXRlbWVudChXVEZNb3ZlKCpvcmlnaW4pLCBXVEZN
b3ZlKGJvb2xDYXN0KSwgV1RGTW92ZSgqYm9keSksIFdURk1vdmUoZWxzZUJvZHkpKTsKK30KKwor
YXV0byBQYXJzZXI6OnBhcnNlU3dpdGNoU3RhdGVtZW50KCkgLT4gRXhwZWN0ZWQ8QVNUOjpTd2l0
Y2hTdGF0ZW1lbnQsIEVycm9yPiB7CisgICAgYXV0byBvcmlnaW4gPSBjb25zdW1lVHlwZShMZXhl
cjo6VG9rZW46OlR5cGU6OlN3aXRjaCk7CisgICAgaWYgKCFvcmlnaW4pCisgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CisKKyAgICBhdXRvIGxlZnRQYXJl
bnRoZXNpcyA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFBhcmVudGhlc2lz
KTsKKyAgICBpZiAoIWxlZnRQYXJlbnRoZXNpcykKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KGxlZnRQYXJlbnRoZXNpcy5lcnJvcigpKTsKKworICAgIGF1dG8gdmFsdWUgPSBwYXJz
ZUV4cHJlc3Npb24oKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4odmFsdWUuZXJyb3IoKSk7CisKKyAgICBhdXRvIHJpZ2h0UGFyZW50aGVzaXMgPSBj
b25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0UGFyZW50aGVzaXMpOworICAgIGlm
ICghcmlnaHRQYXJlbnRoZXNpcykKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHJp
Z2h0UGFyZW50aGVzaXMuZXJyb3IoKSk7CisKKyAgICBhdXRvIGxlZnRDdXJseUJyYWNrZXQgPSBj
b25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRDdXJseUJyYWNrZXQpOworICAgIGlm
ICghbGVmdEN1cmx5QnJhY2tldCkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGxl
ZnRDdXJseUJyYWNrZXQuZXJyb3IoKSk7CisKKyAgICBWZWN0b3I8QVNUOjpTd2l0Y2hDYXNlPiBz
d2l0Y2hDYXNlczsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBhdXRvIHN3aXRjaENhc2Ug
PSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxBU1Q6OlN3aXRjaENhc2UsIEVycm9yPj4oWyZd
KCkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3dpdGNoQ2FzZSgpOworICAgICAgICB9KTsK
KyAgICAgICAgaWYgKHN3aXRjaENhc2UpCisgICAgICAgICAgICBzd2l0Y2hDYXNlcy5hcHBlbmQo
V1RGTW92ZSgqc3dpdGNoQ2FzZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBhdXRvIHJpZ2h0Q3VybHlCcmFja2V0ID0gY29uc3VtZVR5cGUoTGV4ZXI6
OlRva2VuOjpUeXBlOjpSaWdodEN1cmx5QnJhY2tldCk7CisgICAgaWYgKCFyaWdodEN1cmx5QnJh
Y2tldCkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHJpZ2h0Q3VybHlCcmFja2V0
LmVycm9yKCkpOworCisgICAgcmV0dXJuIEFTVDo6U3dpdGNoU3RhdGVtZW50KFdURk1vdmUoKm9y
aWdpbiksIFdURk1vdmUoKnZhbHVlKSwgV1RGTW92ZShzd2l0Y2hDYXNlcykpOworfQorCithdXRv
IFBhcnNlcjo6cGFyc2VTd2l0Y2hDYXNlKCkgLT4gRXhwZWN0ZWQ8QVNUOjpTd2l0Y2hDYXNlLCBF
cnJvcj4geworICAgIGF1dG8gb3JpZ2luID0gY29uc3VtZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpU
eXBlOjpDYXNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OkRlZmF1bHQgfSk7CisgICAgaWYgKCFvcmln
aW4pCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CisK
KyAgICBzd2l0Y2ggKG9yaWdpbi0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBl
OjpDYXNlOiB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBwYXJzZUNvbnN0YW50RXhwcmVzc2lvbigp
OworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KHZhbHVlLmVycm9yKCkpOworCisgICAgICAgIGF1dG8gb3JpZ2luID0gY29uc3VtZVR5cGUo
TGV4ZXI6OlRva2VuOjpUeXBlOjpDb2xvbik7CisgICAgICAgIGlmICghb3JpZ2luKQorICAgICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKKworICAgICAg
ICBhdXRvIGJsb2NrID0gcGFyc2VCbG9ja0JvZHkoTGV4ZXI6OlRva2VuKCpvcmlnaW4pKTsKKwor
ICAgICAgICByZXR1cm4gQVNUOjpTd2l0Y2hDYXNlKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUo
KnZhbHVlKSwgV1RGTW92ZShibG9jaykpOworICAgIH0KKyAgICBjYXNlIExleGVyOjpUb2tlbjo6
VHlwZTo6RGVmYXVsdDogeworICAgICAgICBhdXRvIG9yaWdpbiA9IGNvbnN1bWVUeXBlKExleGVy
OjpUb2tlbjo6VHlwZTo6Q29sb24pOworICAgICAgICBpZiAoIW9yaWdpbikKKyAgICAgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CisKKyAgICAgICAgYXV0
byBibG9jayA9IHBhcnNlQmxvY2tCb2R5KExleGVyOjpUb2tlbigqb3JpZ2luKSk7CisKKyAgICAg
ICAgcmV0dXJuIEFTVDo6U3dpdGNoQ2FzZShXVEZNb3ZlKCpvcmlnaW4pLCBXVEY6Om51bGxvcHQs
IFdURk1vdmUoYmxvY2spKTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihTdHJp
bmcoIlNvbWV0aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCkpKTsKKyAgICB9Cit9CisKK2F1dG8gUGFyc2VyOjpwYXJzZUZvckxvb3AoKSAtPiBF
eHBlY3RlZDxBU1Q6OkZvckxvb3AsIEVycm9yPiB7CisgICAgYXV0byBvcmlnaW4gPSBjb25zdW1l
VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkZvcik7CisgICAgaWYgKCFvcmlnaW4pCisgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CisKKyAgICBhdXRvIHBh
cnNlUmVtYWluZGVyID0gWyZdKFZhcmlhbnQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudCwgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+JiYgaW5pdGlhbGl6YXRpb24pIC0+IEV4
cGVjdGVkPEFTVDo6Rm9yTG9vcCwgRXJyb3I+IHsKKyAgICAgICAgYXV0byBzZW1pY29sb24gPSBj
b25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlNlbWljb2xvbik7CisgICAgICAgIGlmICgh
c2VtaWNvbG9uKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNlbWljb2xv
bi5lcnJvcigpKTsKKworICAgICAgICBhdXRvIGNvbmRpdGlvbiA9IGJhY2t0cmFja2luZ1Njb3Bl
PE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+Pj4oWyZdKCkgLT4gT3B0aW9uYWw8
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IHsKKyAgICAgICAgICAgIGlmIChhdXRvIGV4cHJl
c3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4geyBXVEZN
b3ZlKCpleHByZXNzaW9uKSB9OworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAgICAgfSk7CisKKyAgICAgICAgc2VtaWNvbG9uID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2Vu
OjpUeXBlOjpTZW1pY29sb24pOworICAgICAgICBpZiAoIXNlbWljb2xvbikKKyAgICAgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1pY29sb24uZXJyb3IoKSk7CisKKyAgICAgICAg
YXV0byBpbmNyZW1lbnQgPSBiYWNrdHJhY2tpbmdTY29wZTxPcHRpb25hbDxVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPj4+KFsmXSgpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+PiB7CisgICAgICAgICAgICBpZiAoYXV0byBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9u
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgV1RGTW92ZSgqZXhwcmVzc2lvbikgfTsKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIH0pOworCisgICAgICAgIGF1
dG8gcmlnaHRQYXJlbnRoZXNpcyA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6Umln
aHRQYXJlbnRoZXNpcyk7CisgICAgICAgIGlmICghcmlnaHRQYXJlbnRoZXNpcykKKyAgICAgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodFBhcmVudGhlc2lzLmVycm9yKCkpOwor
CisgICAgICAgIGF1dG8gYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7CisgICAgICAgIGlmICghYm9k
eSkKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihib2R5LmVycm9yKCkpOwor
CisgICAgICAgIHJldHVybiBBU1Q6OkZvckxvb3AoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZShp
bml0aWFsaXphdGlvbiksIFdURk1vdmUoY29uZGl0aW9uKSwgV1RGTW92ZShpbmNyZW1lbnQpLCBX
VEZNb3ZlKCpib2R5KSk7CisgICAgfTsKKworICAgIGF1dG8gbGVmdFBhcmVudGhlc2lzID0gY29u
c3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0UGFyZW50aGVzaXMpOworICAgIGlmICgh
bGVmdFBhcmVudGhlc2lzKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obGVmdFBh
cmVudGhlc2lzLmVycm9yKCkpOworCisgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0aW9ucyA9IGJh
Y2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQsIEVycm9yPj4oWyZdKCkgeworICAgICAgICByZXR1cm4gcGFyc2VWYXJpYWJsZURlY2xhcmF0
aW9ucygpOworICAgIH0pOworICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9ucykKKyAgICAgICAg
cmV0dXJuIHBhcnNlUmVtYWluZGVyKFdURk1vdmUoKnZhcmlhYmxlRGVjbGFyYXRpb25zKSk7CisK
KyAgICBhdXRvIGVmZmVjdGZ1bEV4cHJlc3Npb24gPSBwYXJzZUVmZmVjdGZ1bEV4cHJlc3Npb24o
KTsKKyAgICBpZiAoIWVmZmVjdGZ1bEV4cHJlc3Npb24pCisgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihlZmZlY3RmdWxFeHByZXNzaW9uLmVycm9yKCkpOworCisgICAgcmV0dXJuIHBh
cnNlUmVtYWluZGVyKFdURk1vdmUoKmVmZmVjdGZ1bEV4cHJlc3Npb24pKTsKK30KKworYXV0byBQ
YXJzZXI6OnBhcnNlV2hpbGVMb29wKCkgLT4gRXhwZWN0ZWQ8QVNUOjpXaGlsZUxvb3AsIEVycm9y
PiB7CisgICAgYXV0byBvcmlnaW4gPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6Oldo
aWxlKTsKKyAgICBpZiAoIW9yaWdpbikKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KG9yaWdpbi5lcnJvcigpKTsKKworICAgIGF1dG8gbGVmdFBhcmVudGhlc2lzID0gY29uc3VtZVR5
cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0UGFyZW50aGVzaXMpOworICAgIGlmICghbGVmdFBh
cmVudGhlc2lzKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obGVmdFBhcmVudGhl
c2lzLmVycm9yKCkpOworCisgICAgYXV0byBjb25kaXRpb25hbCA9IHBhcnNlRXhwcmVzc2lvbigp
OworICAgIGlmICghY29uZGl0aW9uYWwpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
Pihjb25kaXRpb25hbC5lcnJvcigpKTsKKworICAgIGF1dG8gcmlnaHRQYXJlbnRoZXNpcyA9IGNv
bnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRQYXJlbnRoZXNpcyk7CisgICAgaWYg
KCFyaWdodFBhcmVudGhlc2lzKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocmln
aHRQYXJlbnRoZXNpcy5lcnJvcigpKTsKKworICAgIGF1dG8gYm9keSA9IHBhcnNlU3RhdGVtZW50
KCk7CisgICAgaWYgKCFib2R5KQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYm9k
eS5lcnJvcigpKTsKKworICAgIHJldHVybiBBU1Q6OldoaWxlTG9vcChXVEZNb3ZlKCpvcmlnaW4p
LCBXVEZNb3ZlKCpjb25kaXRpb25hbCksIFdURk1vdmUoKmJvZHkpKTsKK30KKworYXV0byBQYXJz
ZXI6OnBhcnNlRG9XaGlsZUxvb3AoKSAtPiBFeHBlY3RlZDxBU1Q6OkRvV2hpbGVMb29wLCBFcnJv
cj4geworICAgIGF1dG8gb3JpZ2luID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpE
byk7CisgICAgaWYgKCFvcmlnaW4pCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihv
cmlnaW4uZXJyb3IoKSk7CisKKyAgICBhdXRvIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOworICAg
IGlmICghYm9keSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGJvZHkuZXJyb3Io
KSk7CisKKyAgICBhdXRvIHdoaWxlS2V5d29yZCA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6
VHlwZTo6V2hpbGUpOworICAgIGlmICghd2hpbGVLZXl3b3JkKQorICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxFcnJvcj4od2hpbGVLZXl3b3JkLmVycm9yKCkpOworCisgICAgYXV0byBsZWZ0UGFy
ZW50aGVzaXMgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRQYXJlbnRoZXNp
cyk7CisgICAgaWYgKCFsZWZ0UGFyZW50aGVzaXMpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihsZWZ0UGFyZW50aGVzaXMuZXJyb3IoKSk7CisKKyAgICBhdXRvIGNvbmRpdGlvbmFs
ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgaWYgKCFjb25kaXRpb25hbCkKKyAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGNvbmRpdGlvbmFsLmVycm9yKCkpOworCisgICAgYXV0byBy
aWdodFBhcmVudGhlc2lzID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodFBh
cmVudGhlc2lzKTsKKyAgICBpZiAoIXJpZ2h0UGFyZW50aGVzaXMpCisgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPihyaWdodFBhcmVudGhlc2lzLmVycm9yKCkpOworCisgICAgcmV0dXJu
IEFTVDo6RG9XaGlsZUxvb3AoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZSgqYm9keSksIFdURk1v
dmUoKmNvbmRpdGlvbmFsKSk7Cit9CisKK2F1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFy
YXRpb24oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYgdHlwZSkgLT4gRXhwZWN0ZWQ8QVNU
OjpWYXJpYWJsZURlY2xhcmF0aW9uLCBFcnJvcj4geworICAgIGF1dG8gb3JpZ2luID0gcGVlaygp
OworICAgIGlmICghb3JpZ2luKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3Jp
Z2luLmVycm9yKCkpOworCisgICAgYXV0byBxdWFsaWZpZXJzID0gcGFyc2VRdWFsaWZpZXJzKCk7
CisKKyAgICBhdXRvIG5hbWUgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50
aWZpZXIpOworICAgIGlmICghbmFtZSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KG5hbWUuZXJyb3IoKSk7CisKKyAgICBpZiAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNv
bG9uKSkgeworICAgICAgICBhdXRvIHNlbWFudGljID0gcGFyc2VTZW1hbnRpYygpOworICAgICAg
ICBpZiAoIXNlbWFudGljKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNl
bWFudGljLmVycm9yKCkpOworCisgICAgICAgIGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlw
ZTo6RXF1YWxzU2lnbikpIHsKKyAgICAgICAgICAgIGF1dG8gaW5pdGlhbGl6ZXIgPSBwYXJzZUV4
cHJlc3Npb24oKTsKKyAgICAgICAgICAgIGlmICghaW5pdGlhbGl6ZXIpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGluaXRpYWxpemVyLmVycm9yKCkpOworICAgICAg
ICAgICAgcmV0dXJuIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBX
VEZNb3ZlKHF1YWxpZmllcnMpLCB7IFdURk1vdmUodHlwZSkgfSwgbmFtZS0+c3RyaW5nVmlldy50
b1N0cmluZygpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIFdURk1vdmUoKmluaXRpYWxpemVyKSk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdURk1v
dmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIHsgV1RGTW92ZSh0eXBlKSB9LCBuYW1l
LT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnNlbWFudGljKSwgV1RGOjpudWxsb3B0
KTsKKyAgICB9CisKKyAgICBpZiAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkVxdWFsc1Np
Z24pKSB7CisgICAgICAgIGF1dG8gaW5pdGlhbGl6ZXIgPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAg
ICAgICAgaWYgKCFpbml0aWFsaXplcikKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVy
cm9yPihpbml0aWFsaXplci5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmllcnMpLCB7IFdURk1v
dmUodHlwZSkgfSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEY6Om51bGxvcHQsIFdU
Rk1vdmUoKmluaXRpYWxpemVyKSk7CisgICAgfQorCisgICAgcmV0dXJuIEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmllcnMpLCB7IFdURk1v
dmUodHlwZSkgfSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCk7Cit9CisKK2F1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25z
KCkgLT4gRXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCwgRXJyb3I+
IHsKKyAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKKyAgICBpZiAoIW9yaWdpbikKKyAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKKworICAgIGF1dG8gdHlw
ZSA9IHBhcnNlVHlwZSgpOworICAgIGlmICghdHlwZSkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7CisKKyAgICBhdXRvIGZpcnN0VmFyaWFibGVEZWNsYXJh
dGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigoKnR5cGUpLT5jbG9uZSgpKTsKKyAgICBp
ZiAoIWZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KGZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsKKworICAgIFZlY3RvcjxB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24+IHJlc3VsdDsKKyAgICByZXN1bHQuYXBwZW5kKFdURk1v
dmUoKmZpcnN0VmFyaWFibGVEZWNsYXJhdGlvbikpOworCisgICAgd2hpbGUgKHRyeVR5cGUoTGV4
ZXI6OlRva2VuOjpUeXBlOjpDb21tYSkpIHsKKyAgICAgICAgYXV0byB2YXJpYWJsZURlY2xhcmF0
aW9uID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKCgqdHlwZSktPmNsb25lKCkpOworICAgICAg
ICBpZiAoIXZhcmlhYmxlRGVjbGFyYXRpb24pCisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4odmFyaWFibGVEZWNsYXJhdGlvbi5lcnJvcigpKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChXVEZNb3ZlKCp2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgfQorCisgICAgcmV0dXJu
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQoV1RGTW92ZSgqb3JpZ2luKSwgV1RG
TW92ZShyZXN1bHQpKTsKK30KKworYXV0byBQYXJzZXI6OnBhcnNlU3RhdGVtZW50KCkgLT4gRXhw
ZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6U3RhdGVtZW50PiwgRXJyb3I+IHsKKyAgICB7CisgICAgICAg
IGF1dG8gYmxvY2sgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxBU1Q6OkJsb2NrLCBFcnJv
cj4+KFsmXSgpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUJsb2NrKCk7CisgICAgICAgIH0p
OworICAgICAgICBpZiAoYmxvY2spCisgICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVm
PEFTVDo6QmxvY2s+KFdURk1vdmUoKmJsb2NrKSkgfTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IGF1dG8gaWZTdGF0ZW1lbnQgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxBU1Q6OklmU3Rh
dGVtZW50LCBFcnJvcj4+KFsmXSgpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUlmU3RhdGVt
ZW50KCk7CisgICAgICAgIH0pOworICAgICAgICBpZiAoaWZTdGF0ZW1lbnQpCisgICAgICAgICAg
ICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6SWZTdGF0ZW1lbnQ+KFdURk1vdmUoKmlmU3Rh
dGVtZW50KSkgfTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8gc3dpdGNoU3RhdGVtZW50
ID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQsIEVycm9y
Pj4oWyZdKCkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlU3dpdGNoU3RhdGVtZW50KCk7Cisg
ICAgICAgIH0pOworICAgICAgICBpZiAoc3dpdGNoU3RhdGVtZW50KQorICAgICAgICAgICAgcmV0
dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlN3aXRjaFN0YXRlbWVudD4oV1RGTW92ZSgqc3dpdGNo
U3RhdGVtZW50KSkgfTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8gZm9yTG9vcCA9IGJh
Y2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPEFTVDo6Rm9yTG9vcCwgRXJyb3I+PihbJl0oKSB7Cisg
ICAgICAgICAgICByZXR1cm4gcGFyc2VGb3JMb29wKCk7CisgICAgICAgIH0pOworICAgICAgICBp
ZiAoZm9yTG9vcCkKKyAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpGb3JM
b29wPihXVEZNb3ZlKCpmb3JMb29wKSkgfTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8g
d2hpbGVMb29wID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8QVNUOjpXaGlsZUxvb3AsIEVy
cm9yPj4oWyZdKCkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlV2hpbGVMb29wKCk7CisgICAg
ICAgIH0pOworICAgICAgICBpZiAod2hpbGVMb29wKQorICAgICAgICAgICAgcmV0dXJuIHsgbWFr
ZVVuaXF1ZVJlZjxBU1Q6OldoaWxlTG9vcD4oV1RGTW92ZSgqd2hpbGVMb29wKSkgfTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIGF1dG8gZG9XaGlsZUxvb3AgPSBiYWNrdHJhY2tpbmdTY29wZTxF
eHBlY3RlZDxBU1Q6OkRvV2hpbGVMb29wLCBFcnJvcj4+KFsmXSgpIC0+IEV4cGVjdGVkPEFTVDo6
RG9XaGlsZUxvb3AsIEVycm9yPiB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHBhcnNlRG9X
aGlsZUxvb3AoKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPihyZXN1bHQuZXJyb3IoKSk7CisKKyAgICAgICAgICAgIGF1
dG8gc2VtaWNvbG9uID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpTZW1pY29sb24p
OworICAgICAgICAgICAgaWYgKCFzZW1pY29sb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KHNlbWljb2xvbi5lcnJvcigpKTsKKworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfSk7CisgICAgICAgIGlmIChkb1doaWxlTG9vcCkKKyAgICAgICAg
ICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpEb1doaWxlTG9vcD4oV1RGTW92ZSgqZG9X
aGlsZUxvb3ApKSB9OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byBicmVha09iamVjdCA9
IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPEFTVDo6QnJlYWssIEVycm9yPj4oWyZdKCkgLT4g
RXhwZWN0ZWQ8QVNUOjpCcmVhaywgRXJyb3I+IHsKKyAgICAgICAgICAgIGF1dG8gb3JpZ2luID0g
Y29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpCcmVhayk7CisgICAgICAgICAgICBpZiAo
IW9yaWdpbikKKyAgICAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2lu
LmVycm9yKCkpOworCisgICAgICAgICAgICBhdXRvIHNlbWljb2xvbiA9IGNvbnN1bWVUeXBlKExl
eGVyOjpUb2tlbjo6VHlwZTo6U2VtaWNvbG9uKTsKKyAgICAgICAgICAgIGlmICghc2VtaWNvbG9u
KQorICAgICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzZW1pY29sb24uZXJy
b3IoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBBU1Q6OkJyZWFrKFdURk1vdmUoKm9yaWdpbikp
OworICAgICAgICB9KTsKKyAgICAgICAgaWYgKGJyZWFrT2JqZWN0KQorICAgICAgICAgICAgcmV0
dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkJyZWFrPihXVEZNb3ZlKCpicmVha09iamVjdCkpIH07
CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvIGNvbnRpbnVlT2JqZWN0ID0gYmFja3RyYWNr
aW5nU2NvcGU8RXhwZWN0ZWQ8QVNUOjpDb250aW51ZSwgRXJyb3I+PihbJl0oKSAtPiBFeHBlY3Rl
ZDxBU1Q6OkNvbnRpbnVlLCBFcnJvcj4geworICAgICAgICAgICAgYXV0byBvcmlnaW4gPSBjb25z
dW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnRpbnVlKTsKKyAgICAgICAgICAgIGlmICgh
b3JpZ2luKQorICAgICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4u
ZXJyb3IoKSk7CisKKyAgICAgICAgICAgIGF1dG8gc2VtaWNvbG9uID0gY29uc3VtZVR5cGUoTGV4
ZXI6OlRva2VuOjpUeXBlOjpTZW1pY29sb24pOworICAgICAgICAgICAgaWYgKCFzZW1pY29sb24p
CisgICAgICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNlbWljb2xvbi5lcnJv
cigpKTsKKworICAgICAgICAgICAgcmV0dXJuIEFTVDo6Q29udGludWUoV1RGTW92ZSgqb3JpZ2lu
KSk7CisgICAgICAgIH0pOworICAgICAgICBpZiAoY29udGludWVPYmplY3QpCisgICAgICAgICAg
ICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6Q29udGludWU+KFdURk1vdmUoKmNvbnRpbnVl
T2JqZWN0KSkgfTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8gZmFsbHRocm91Z2hPYmpl
Y3QgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxBU1Q6OkZhbGx0aHJvdWdoLCBFcnJvcj4+
KFsmXSgpIC0+IEV4cGVjdGVkPEFTVDo6RmFsbHRocm91Z2gsIEVycm9yPiB7CisgICAgICAgICAg
ICBhdXRvIG9yaWdpbiA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6RmFsbHRocm91
Z2gpOworICAgICAgICAgICAgaWYgKCFvcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKKworICAgICAgICAgICAgYXV0byBzZW1p
Y29sb24gPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlNlbWljb2xvbik7CisgICAg
ICAgICAgICBpZiAoIXNlbWljb2xvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4oc2VtaWNvbG9uLmVycm9yKCkpOworCisgICAgICAgICAgICByZXR1cm4gQVNUOjpG
YWxsdGhyb3VnaChXVEZNb3ZlKCpvcmlnaW4pKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmIChm
YWxsdGhyb3VnaE9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNU
OjpGYWxsdGhyb3VnaD4oV1RGTW92ZSgqZmFsbHRocm91Z2hPYmplY3QpKSB9OworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgYXV0byB0cmFwT2JqZWN0ID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0
ZWQ8QVNUOjpUcmFwLCBFcnJvcj4+KFsmXSgpIC0+IEV4cGVjdGVkPEFTVDo6VHJhcCwgRXJyb3I+
IHsKKyAgICAgICAgICAgIGF1dG8gb3JpZ2luID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpU
eXBlOjpUcmFwKTsKKyAgICAgICAgICAgIGlmICghb3JpZ2luKQorICAgICAgICAgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CisKKyAgICAgICAgICAgIGF1
dG8gc2VtaWNvbG9uID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpTZW1pY29sb24p
OworICAgICAgICAgICAgaWYgKCFzZW1pY29sb24pCisgICAgICAgICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KHNlbWljb2xvbi5lcnJvcigpKTsKKworICAgICAgICAgICAgcmV0dXJu
IEFTVDo6VHJhcChXVEZNb3ZlKCpvcmlnaW4pKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmICh0
cmFwT2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlRyYXA+
KFdURk1vdmUoKnRyYXBPYmplY3QpKSB9OworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0byBy
ZXR1cm5PYmplY3QgPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxBU1Q6OlJldHVybiwgRXJy
b3I+PihbJl0oKSAtPiBFeHBlY3RlZDxBU1Q6OlJldHVybiwgRXJyb3I+IHsKKyAgICAgICAgICAg
IGF1dG8gb3JpZ2luID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpSZXR1cm4pOwor
ICAgICAgICAgICAgaWYgKCFvcmlnaW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKKworICAgICAgICAgICAgaWYgKGF1dG8gc2VtaWNv
bG9uID0gdHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlNlbWljb2xvbikpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEFTVDo6UmV0dXJuKFdURk1vdmUoKm9yaWdpbiksIFdURjo6bnVsbG9wdCk7
CisKKyAgICAgICAgICAgIGF1dG8gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigpOworICAg
ICAgICAgICAgaWYgKCFleHByZXNzaW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBVbmV4cGVj
dGVkPEVycm9yPihleHByZXNzaW9uLmVycm9yKCkpOworCisgICAgICAgICAgICBhdXRvIHNlbWlj
b2xvbiA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6U2VtaWNvbG9uKTsKKyAgICAg
ICAgICAgIGlmICghc2VtaWNvbG9uKQorICAgICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihzZW1pY29sb24uZXJyb3IoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBBU1Q6OlJl
dHVybihXVEZNb3ZlKCpvcmlnaW4pLCB7IFdURk1vdmUoKmV4cHJlc3Npb24pIH0pOworICAgICAg
ICB9KTsKKyAgICAgICAgaWYgKHJldHVybk9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiB7IG1h
a2VVbmlxdWVSZWY8QVNUOjpSZXR1cm4+KFdURk1vdmUoKnJldHVybk9iamVjdCkpIH07CisgICAg
fQorCisgICAgeworICAgICAgICBhdXRvIHZhcmlhYmxlRGVjbGFyYXRpb25zID0gYmFja3RyYWNr
aW5nU2NvcGU8RXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCwgRXJy
b3I+PihbJl0oKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50
LCBFcnJvcj4geworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBwYXJzZVZhcmlhYmxlRGVjbGFy
YXRpb25zKCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4ocmVzdWx0LmVycm9yKCkpOworCisgICAgICAgICAgICBhdXRv
IHNlbWljb2xvbiA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6U2VtaWNvbG9uKTsK
KyAgICAgICAgICAgIGlmICghc2VtaWNvbG9uKQorICAgICAgICAgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihzZW1pY29sb24uZXJyb3IoKSk7CisKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0pOworICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbnMpCisg
ICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bnNTdGF0ZW1lbnQ+KFdURk1vdmUoKnZhcmlhYmxlRGVjbGFyYXRpb25zKSkgfTsKKyAgICB9CisK
KyAgICBhdXRvIGVmZmVjdGZ1bEV4cHJlc3Npb24gPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3Rl
ZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+PihbJl0oKSAtPiBFeHBlY3RlZDxV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHsKKyAgICAgICAgYXV0byByZXN1bHQg
PSBwYXJzZUVmZmVjdGZ1bEV4cHJlc3Npb24oKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAg
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocmVzdWx0LmVycm9yKCkpOworCisgICAg
ICAgIGF1dG8gc2VtaWNvbG9uID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpTZW1p
Y29sb24pOworICAgICAgICBpZiAoIXNlbWljb2xvbikKKyAgICAgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihzZW1pY29sb24uZXJyb3IoKSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9KTsKKyAgICBpZiAoZWZmZWN0ZnVsRXhwcmVzc2lvbikKKyAgICAgICAgcmV0dXJu
IHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQ+KFdURk1v
dmUoKmVmZmVjdGZ1bEV4cHJlc3Npb24pKSB9OworCisgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KGVmZmVjdGZ1bEV4cHJlc3Npb24uZXJyb3IoKSk7Cit9CisKK2F1dG8gUGFyc2VyOjpwYXJz
ZUVmZmVjdGZ1bEV4cHJlc3Npb24oKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNz
aW9uPiwgRXJyb3I+IHsKKyAgICBhdXRvIG9yaWdpbiA9IHBlZWsoKTsKKyAgICBpZiAoIW9yaWdp
bikKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKKwor
ICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gZXhwcmVzc2lvbnM7CisKKyAg
ICBhdXRvIGZpcnN0ID0gYmFja3RyYWNraW5nU2NvcGU8T3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4+PihbJl0oKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
Pj4geworICAgICAgICBhdXRvIGVmZmVjdGZ1bEV4cHJlc3Npb24gPSBwYXJzZUVmZmVjdGZ1bEFz
c2lnbm1lbnQoKTsKKyAgICAgICAgaWYgKCFlZmZlY3RmdWxFeHByZXNzaW9uKQorICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92ZSgqZWZmZWN0
ZnVsRXhwcmVzc2lvbikgfTsKKyAgICB9KTsKKyAgICBpZiAoIWZpcnN0KQorICAgICAgICByZXR1
cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6Q29tbWFFeHByZXNzaW9uPihXVEZNb3ZlKCpvcmlnaW4p
LCBXVEZNb3ZlKGV4cHJlc3Npb25zKSkgfTsKKworICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZN
b3ZlKCpmaXJzdCkpOworCisgICAgd2hpbGUgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpD
b21tYSkpIHsKKyAgICAgICAgYXV0byBleHByZXNzaW9uID0gcGFyc2VFZmZlY3RmdWxBc3NpZ25t
ZW50KCk7CisgICAgICAgIGlmICghZXhwcmVzc2lvbikKKyAgICAgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihleHByZXNzaW9uLmVycm9yKCkpOworICAgICAgICBleHByZXNzaW9ucy5h
cHBlbmQoV1RGTW92ZSgqZXhwcmVzc2lvbikpOworICAgIH0KKworICAgIGlmIChleHByZXNzaW9u
cy5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIFdURk1vdmUoZXhwcmVzc2lvbnNbMF0pOwor
ICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpDb21tYUV4cHJlc3Npb24+KFdURk1vdmUo
Km9yaWdpbiksIFdURk1vdmUoZXhwcmVzc2lvbnMpKSB9OworfQorCithdXRvIFBhcnNlcjo6cGFy
c2VFZmZlY3RmdWxBc3NpZ25tZW50KCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4sIEVycm9yPiB7CisgICAgYXV0byBhc3NpZ25tZW50ID0gYmFja3RyYWNraW5nU2NvcGU8
RXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPj4oWyZdKCkgeworICAg
ICAgICByZXR1cm4gcGFyc2VBc3NpZ25tZW50KCk7CisgICAgfSk7CisgICAgaWYgKGFzc2lnbm1l
bnQpCisgICAgICAgIHJldHVybiBhc3NpZ25tZW50OworCisgICAgYXNzaWdubWVudCA9IGJhY2t0
cmFja2luZ1Njb3BlPEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4+
KFsmXSgpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlRWZmZWN0ZnVsUHJlZml4KCk7CisgICAgfSk7
CisgICAgaWYgKGFzc2lnbm1lbnQpCisgICAgICAgIHJldHVybiBhc3NpZ25tZW50OworCisgICAg
YXNzaWdubWVudCA9IGJhY2t0cmFja2luZ1Njb3BlPEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4
cHJlc3Npb24+LCBFcnJvcj4+KFsmXSgpIHsKKyAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbEV4cHJl
c3Npb24oKTsKKyAgICB9KTsKKyAgICBpZiAoYXNzaWdubWVudCkKKyAgICAgICAgcmV0dXJuIGFz
c2lnbm1lbnQ7CisKKyAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYXNzaWdubWVudC5lcnJv
cigpKTsKK30KKworYXV0byBQYXJzZXI6OnBhcnNlRWZmZWN0ZnVsUHJlZml4KCkgLT4gRXhwZWN0
ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiB7CisgICAgYXV0byBwcmVmaXgg
PSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OlBsdXNQbHVzLCBMZXhlcjo6VG9r
ZW46OlR5cGU6Ok1pbnVzTWludXMgfSk7CisgICAgaWYgKCFwcmVmaXgpCisgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihwcmVmaXguZXJyb3IoKSk7CisKKyAgICBhdXRvIHByZXZpb3Vz
ID0gcGFyc2VQb3NzaWJsZVByZWZpeCgpOworICAgIGlmICghcHJldmlvdXMpCisgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPihwcmV2aW91cy5lcnJvcigpKTsKKworICAgIHN3aXRjaCAo
cHJlZml4LT50eXBlKSB7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlBsdXNQbHVzOiB7
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uOjpj
cmVhdGUoTGV4ZXI6OlRva2VuKCpwcmVmaXgpLCBXVEZNb3ZlKCpwcmV2aW91cykpOworICAgICAg
ICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGNhbGxBcmd1bWVudHM7CisgICAg
ICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKHJlc3VsdC0+b2xkVmFyaWFibGVSZWZlcmVuY2UoKSk7
CisgICAgICAgIHJlc3VsdC0+c2V0TmV3VmFsdWVFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNU
OjpDYWxsRXhwcmVzc2lvbj4oV1RGTW92ZSgqcHJlZml4KSwgU3RyaW5nKCJvcGVyYXRvcisrIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpKTsK
KyAgICAgICAgcmVzdWx0LT5zZXRSZXN1bHRFeHByZXNzaW9uKHJlc3VsdC0+bmV3VmFyaWFibGVS
ZWZlcmVuY2UoKSk7CisgICAgICAgIHJldHVybiB7IFdURk1vdmUocmVzdWx0KSB9OworICAgIH0K
KyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TWludXNNaW51czogeworICAgICAgICBhdXRv
IHJlc3VsdCA9IEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6Y3JlYXRlKExleGVyOjpU
b2tlbigqcHJlZml4KSwgV1RGTW92ZSgqcHJldmlvdXMpKTsKKyAgICAgICAgVmVjdG9yPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOworICAgICAgICBjYWxsQXJndW1l
bnRzLmFwcGVuZChyZXN1bHQtPm9sZFZhcmlhYmxlUmVmZXJlbmNlKCkpOworICAgICAgICByZXN1
bHQtPnNldE5ld1ZhbHVlRXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Np
b24+KFdURk1vdmUoKnByZWZpeCksIFN0cmluZygib3BlcmF0b3ItLSIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhbGxBcmd1bWVudHMpKSk7CisgICAgICAgIHJlc3Vs
dC0+c2V0UmVzdWx0RXhwcmVzc2lvbihyZXN1bHQtPm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCkpOwor
ICAgICAgICByZXR1cm4geyBXVEZNb3ZlKHJlc3VsdCkgfTsKKyAgICB9CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihFcnJvcihTdHJpbmcoIlNvbWV0aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKTsKKyAgICB9Cit9CisKK2F1dG8gUGFyc2VyOjpw
YXJzZUVmZmVjdGZ1bFN1ZmZpeCgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+LCBFcnJvcj4geworICAgIGF1dG8gZWZmZWN0ZnVsU3VmZml4ID0gYmFja3RyYWNraW5nU2Nv
cGU8RXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPj4oWyZdKCkgLT4g
RXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiB7CisgICAgICAgIGF1
dG8gcHJldmlvdXMgPSBwYXJzZVBvc3NpYmxlU3VmZml4KCk7CisgICAgICAgIGlmICghcHJldmlv
dXMpCisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocHJldmlvdXMuZXJyb3Io
KSk7CisKKyAgICAgICAgYXV0byBzdWZmaXggPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46
OlR5cGU6OlBsdXNQbHVzLCBMZXhlcjo6VG9rZW46OlR5cGU6Ok1pbnVzTWludXMgfSk7CisgICAg
ICAgIGlmICghc3VmZml4KQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHN1
ZmZpeC5lcnJvcigpKTsKKworICAgICAgICBzd2l0Y2ggKHN1ZmZpeC0+dHlwZSkgeworICAgICAg
ICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6UGx1c1BsdXM6IHsKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0ID0gQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uOjpjcmVhdGUoTGV4ZXI6OlRv
a2VuKCpzdWZmaXgpLCBXVEZNb3ZlKCpwcmV2aW91cykpOworICAgICAgICAgICAgVmVjdG9yPFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOworICAgICAgICAgICAgY2Fs
bEFyZ3VtZW50cy5hcHBlbmQocmVzdWx0LT5vbGRWYXJpYWJsZVJlZmVyZW5jZSgpKTsKKyAgICAg
ICAgICAgIHJlc3VsdC0+c2V0TmV3VmFsdWVFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNUOjpD
YWxsRXhwcmVzc2lvbj4oV1RGTW92ZSgqc3VmZml4KSwgU3RyaW5nKCJvcGVyYXRvcisrIiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpKTsKKyAg
ICAgICAgICAgIHJlc3VsdC0+c2V0UmVzdWx0RXhwcmVzc2lvbihyZXN1bHQtPm9sZFZhcmlhYmxl
UmVmZXJlbmNlKCkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPihXVEZNb3ZlKHJlc3VsdCkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgTGV4ZXI6
OlRva2VuOjpUeXBlOjpNaW51c01pbnVzOiB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IEFT
VDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6Y3JlYXRlKExleGVyOjpUb2tlbigqc3VmZml4
KSwgV1RGTW92ZSgqcHJldmlvdXMpKTsKKyAgICAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPj4gY2FsbEFyZ3VtZW50czsKKyAgICAgICAgICAgIGNhbGxBcmd1bWVudHMu
YXBwZW5kKHJlc3VsdC0+b2xkVmFyaWFibGVSZWZlcmVuY2UoKSk7CisgICAgICAgICAgICByZXN1
bHQtPnNldE5ld1ZhbHVlRXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Np
b24+KFdURk1vdmUoKnN1ZmZpeCksIFN0cmluZygib3BlcmF0b3ItLSIsIFN0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhbGxBcmd1bWVudHMpKSk7CisgICAgICAgICAgICBy
ZXN1bHQtPnNldFJlc3VsdEV4cHJlc3Npb24ocmVzdWx0LT5vbGRWYXJpYWJsZVJlZmVyZW5jZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4oV1RG
TW92ZShyZXN1bHQpKTsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4oRXJyb3IoU3RyaW5nKCJTb21ldGhpbmcgcmVhbGx5IGJhZCBoYXBwZW5lZCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpKSk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBpZiAoZWZm
ZWN0ZnVsU3VmZml4KQorICAgICAgICByZXR1cm4gZWZmZWN0ZnVsU3VmZml4OworCisgICAgZWZm
ZWN0ZnVsU3VmZml4ID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4sIEVycm9yPj4oWyZdKCkgeworICAgICAgICByZXR1cm4gcGFyc2VDYWxsRXhw
cmVzc2lvbigpOworICAgIH0pOworICAgIGlmIChlZmZlY3RmdWxTdWZmaXgpCisgICAgICAgIHJl
dHVybiBlZmZlY3RmdWxTdWZmaXg7CisKKyAgICBlZmZlY3RmdWxTdWZmaXggPSBiYWNrdHJhY2tp
bmdTY29wZTxFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+PihbJl0o
KSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHsKKyAgICAg
ICAgYXV0byBsZWZ0UGFyZW50aGVzaXMgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6
OkxlZnRQYXJlbnRoZXNpcyk7CisgICAgICAgIGlmICghbGVmdFBhcmVudGhlc2lzKQorICAgICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGxlZnRQYXJlbnRoZXNpcy5lcnJvcigpKTsK
KworICAgICAgICBhdXRvIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAgICAgICAg
aWYgKCFleHByZXNzaW9uKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGV4
cHJlc3Npb24uZXJyb3IoKSk7CisKKyAgICAgICAgYXV0byByaWdodFBhcmVudGhlc2lzID0gY29u
c3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodFBhcmVudGhlc2lzKTsKKyAgICAgICAg
aWYgKCFyaWdodFBhcmVudGhlc2lzKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KHJpZ2h0UGFyZW50aGVzaXMuZXJyb3IoKSk7CisKKyAgICAgICAgcmV0dXJuIHsgV1RGTW92
ZSgqZXhwcmVzc2lvbikgfTsKKyAgICB9KTsKKyAgICBpZiAoZWZmZWN0ZnVsU3VmZml4KQorICAg
ICAgICByZXR1cm4gZWZmZWN0ZnVsU3VmZml4OworCisgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KGVmZmVjdGZ1bFN1ZmZpeC5lcnJvcigpKTsKK30KKworYXV0byBQYXJzZXI6OnBhcnNlTGlt
aXRlZFN1ZmZpeE9wZXJhdG9yKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgcHJldmlvdXMp
IC0+IFN1ZmZpeEV4cHJlc3Npb24KK3sKKyAgICBhdXRvIHR5cGUgPSBjb25zdW1lVHlwZXMoeyBM
ZXhlcjo6VG9rZW46OlR5cGU6OkZ1bGxTdG9wLCBMZXhlcjo6VG9rZW46OlR5cGU6OkFycm93LCBM
ZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0IH0pOworICAgIGlmICghdHlwZSkK
KyAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24oV1RGTW92ZShwcmV2aW91cyksIGZhbHNl
KTsKKworICAgIHN3aXRjaCAodHlwZS0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpU
eXBlOjpGdWxsU3RvcDogeworICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBjb25zdW1lVHlwZShM
ZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIpOworICAgICAgICBpZiAoIWlkZW50aWZpZXIp
CisgICAgICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihXVEZNb3ZlKHByZXZpb3VzKSwg
ZmFsc2UpOworICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFT
VDo6RG90RXhwcmVzc2lvbj4oV1RGTW92ZSgqdHlwZSksIFdURk1vdmUocHJldmlvdXMpLCBpZGVu
dGlmaWVyLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCkpLCB0cnVlKTsKKyAgICB9CisgICAgY2FzZSBM
ZXhlcjo6VG9rZW46OlR5cGU6OkFycm93OiB7CisgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IGNv
bnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CisgICAgICAgIGlmICgh
aWRlbnRpZmllcikKKyAgICAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUo
cHJldmlvdXMpLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VV
bmlxdWVSZWY8QVNUOjpEb3RFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKnR5cGUpLCBtYWtlVW5p
cXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihXVEZNb3ZlKCp0eXBlKSwgV1RGTW92
ZShwcmV2aW91cykpLCBpZGVudGlmaWVyLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCkpLCB0cnVlKTsK
KyAgICB9CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0OiB7
CisgICAgICAgIGF1dG8gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICBp
ZiAoIWV4cHJlc3Npb24pCisgICAgICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihXVEZN
b3ZlKHByZXZpb3VzKSwgZmFsc2UpOworICAgICAgICBpZiAoIWNvbnN1bWVUeXBlKExleGVyOjpU
b2tlbjo6VHlwZTo6UmlnaHRTcXVhcmVCcmFja2V0KSkKKyAgICAgICAgICAgIHJldHVybiBTdWZm
aXhFeHByZXNzaW9uKFdURk1vdmUocHJldmlvdXMpLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBT
dWZmaXhFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNUOjpJbmRleEV4cHJlc3Npb24+KFdURk1v
dmUoKnR5cGUpLCBXVEZNb3ZlKHByZXZpb3VzKSwgV1RGTW92ZSgqZXhwcmVzc2lvbikpLCB0cnVl
KTsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUocHJldmlvdXMpLCBmYWxzZSk7
CisgICAgfQorfQorCithdXRvIFBhcnNlcjo6cGFyc2VTdWZmaXhPcGVyYXRvcihVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPiYmIHByZXZpb3VzKSAtPiBTdWZmaXhFeHByZXNzaW9uCit7CisgICAg
YXV0byBzdWZmaXggPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OkZ1bGxTdG9w
LCBMZXhlcjo6VG9rZW46OlR5cGU6OkFycm93LCBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTcXVh
cmVCcmFja2V0LCBMZXhlcjo6VG9rZW46OlR5cGU6OlBsdXNQbHVzLCBMZXhlcjo6VG9rZW46OlR5
cGU6Ok1pbnVzTWludXMgfSk7CisgICAgaWYgKCFzdWZmaXgpCisgICAgICAgIHJldHVybiBTdWZm
aXhFeHByZXNzaW9uKFdURk1vdmUocHJldmlvdXMpLCBmYWxzZSk7CisKKyAgICBzd2l0Y2ggKHN1
ZmZpeC0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpGdWxsU3RvcDogewor
ICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6
OklkZW50aWZpZXIpOworICAgICAgICBpZiAoIWlkZW50aWZpZXIpCisgICAgICAgICAgICByZXR1
cm4gU3VmZml4RXhwcmVzc2lvbihXVEZNb3ZlKHByZXZpb3VzKSwgZmFsc2UpOworICAgICAgICBy
ZXR1cm4gU3VmZml4RXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6RG90RXhwcmVzc2lvbj4o
V1RGTW92ZSgqc3VmZml4KSwgV1RGTW92ZShwcmV2aW91cyksIGlkZW50aWZpZXItPnN0cmluZ1Zp
ZXcudG9TdHJpbmcoKSksIHRydWUpOworICAgIH0KKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlw
ZTo6QXJyb3c6IHsKKyAgICAgICAgYXV0byBpZGVudGlmaWVyID0gY29uc3VtZVR5cGUoTGV4ZXI6
OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKKyAgICAgICAgaWYgKCFpZGVudGlmaWVyKQorICAg
ICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24oV1RGTW92ZShwcmV2aW91cyksIGZhbHNl
KTsKKyAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24obWFrZVVuaXF1ZVJlZjxBU1Q6OkRv
dEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqc3VmZml4KSwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkRl
cmVmZXJlbmNlRXhwcmVzc2lvbj4oV1RGTW92ZSgqc3VmZml4KSwgV1RGTW92ZShwcmV2aW91cykp
LCBpZGVudGlmaWVyLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCkpLCB0cnVlKTsKKyAgICB9CisgICAg
Y2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0OiB7CisgICAgICAgIGF1
dG8gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICBpZiAoIWV4cHJlc3Np
b24pCisgICAgICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihXVEZNb3ZlKHByZXZpb3Vz
KSwgZmFsc2UpOworICAgICAgICBpZiAoIWNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6
UmlnaHRTcXVhcmVCcmFja2V0KSkKKyAgICAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9u
KFdURk1vdmUocHJldmlvdXMpLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNz
aW9uKG1ha2VVbmlxdWVSZWY8QVNUOjpJbmRleEV4cHJlc3Npb24+KFdURk1vdmUoKnN1ZmZpeCks
IFdURk1vdmUocHJldmlvdXMpLCBXVEZNb3ZlKCpleHByZXNzaW9uKSksIHRydWUpOworICAgIH0K
KyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6UGx1c1BsdXM6IHsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb246OmNyZWF0ZShMZXhlcjo6VG9r
ZW4oKnN1ZmZpeCksIFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgVmVjdG9yPFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOworICAgICAgICBjYWxsQXJndW1lbnRz
LmFwcGVuZChyZXN1bHQtPm9sZFZhcmlhYmxlUmVmZXJlbmNlKCkpOworICAgICAgICByZXN1bHQt
PnNldE5ld1ZhbHVlRXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+
KFdURk1vdmUoKnN1ZmZpeCksIFN0cmluZygib3BlcmF0b3IrKyIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhbGxBcmd1bWVudHMpKSk7CisgICAgICAgIHJlc3VsdC0+
c2V0UmVzdWx0RXhwcmVzc2lvbihyZXN1bHQtPm9sZFZhcmlhYmxlUmVmZXJlbmNlKCkpOworICAg
ICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihXVEZNb3ZlKHJlc3VsdCksIHRydWUpOworICAg
IH0KKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TWludXNNaW51czogeworICAgICAgICBh
dXRvIHJlc3VsdCA9IEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbjo6Y3JlYXRlKExleGVy
OjpUb2tlbigqc3VmZml4KSwgV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICBWZWN0b3I8VW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGNhbGxBcmd1bWVudHM7CisgICAgICAgIGNhbGxBcmd1
bWVudHMuYXBwZW5kKHJlc3VsdC0+b2xkVmFyaWFibGVSZWZlcmVuY2UoKSk7CisgICAgICAgIHJl
c3VsdC0+c2V0TmV3VmFsdWVFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVz
c2lvbj4oV1RGTW92ZSgqc3VmZml4KSwgU3RyaW5nKCJvcGVyYXRvci0tIiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpKTsKKyAgICAgICAgcmVz
dWx0LT5zZXRSZXN1bHRFeHByZXNzaW9uKHJlc3VsdC0+b2xkVmFyaWFibGVSZWZlcmVuY2UoKSk7
CisgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUocmVzdWx0KSwgdHJ1ZSk7
CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihXVEZNb3ZlKHByZXZpb3VzKSwgZmFsc2UpOwor
ICAgIH0KK30KKworYXV0byBQYXJzZXI6OnBhcnNlRXhwcmVzc2lvbigpIC0+IEV4cGVjdGVkPFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4geworICAgIGF1dG8gb3JpZ2luID0gcGVl
aygpOworICAgIGlmICghb3JpZ2luKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
b3JpZ2luLmVycm9yKCkpOworCisgICAgYXV0byBmaXJzdCA9IHBhcnNlUG9zc2libGVUZXJuYXJ5
Q29uZGl0aW9uYWwoKTsKKyAgICBpZiAoIWZpcnN0KQorICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4oZmlyc3QuZXJyb3IoKSk7CisKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4+IGV4cHJlc3Npb25zOworICAgIGV4cHJlc3Npb25zLmFwcGVuZChXVEZNb3ZlKCpm
aXJzdCkpOworCisgICAgd2hpbGUgKHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpDb21tYSkp
IHsKKyAgICAgICAgYXV0byBleHByZXNzaW9uID0gcGFyc2VQb3NzaWJsZVRlcm5hcnlDb25kaXRp
b25hbCgpOworICAgICAgICBpZiAoIWV4cHJlc3Npb24pCisgICAgICAgICAgICByZXR1cm4gVW5l
eHBlY3RlZDxFcnJvcj4oZXhwcmVzc2lvbi5lcnJvcigpKTsKKyAgICAgICAgZXhwcmVzc2lvbnMu
YXBwZW5kKFdURk1vdmUoKmV4cHJlc3Npb24pKTsKKyAgICB9CisKKyAgICBpZiAoZXhwcmVzc2lv
bnMuc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiBXVEZNb3ZlKGV4cHJlc3Npb25zWzBdKTsK
KyAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6Q29tbWFFeHByZXNzaW9uPihXVEZNb3Zl
KCpvcmlnaW4pLCBXVEZNb3ZlKGV4cHJlc3Npb25zKSkgfTsKK30KKworYXV0byBQYXJzZXI6OnBh
cnNlVGVybmFyeUNvbmRpdGlvbmFsKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4sIEVycm9yPiB7CisgICAgYXV0byBvcmlnaW4gPSBwZWVrKCk7CisgICAgaWYgKCFvcmln
aW4pCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7CisK
KyAgICBhdXRvIHByZWRpY2F0ZSA9IHBhcnNlUG9zc2libGVMb2dpY2FsQmluYXJ5T3BlcmF0aW9u
KCk7CisgICAgaWYgKCFwcmVkaWNhdGUpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
PihwcmVkaWNhdGUuZXJyb3IoKSk7CisKKyAgICBhdXRvIHF1ZXN0aW9uTWFyayA9IGNvbnN1bWVU
eXBlKExleGVyOjpUb2tlbjo6VHlwZTo6UXVlc3Rpb25NYXJrKTsKKyAgICBpZiAoIXF1ZXN0aW9u
TWFyaykKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHF1ZXN0aW9uTWFyay5lcnJv
cigpKTsKKworICAgIGF1dG8gYm9keUV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKKyAg
ICBpZiAoIWJvZHlFeHByZXNzaW9uKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
Ym9keUV4cHJlc3Npb24uZXJyb3IoKSk7CisKKyAgICBhdXRvIGNvbG9uID0gY29uc3VtZVR5cGUo
TGV4ZXI6OlRva2VuOjpUeXBlOjpDb2xvbik7CisgICAgaWYgKCFjb2xvbikKKyAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGNvbG9uLmVycm9yKCkpOworCisgICAgYXV0byBlbHNlRXhw
cmVzc2lvbiA9IHBhcnNlUG9zc2libGVUZXJuYXJ5Q29uZGl0aW9uYWwoKTsKKyAgICBpZiAoIWVs
c2VFeHByZXNzaW9uKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZWxzZUV4cHJl
c3Npb24uZXJyb3IoKSk7CisKKyAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+
IGNhc3RBcmd1bWVudHM7CisgICAgY2FzdEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSgqcHJlZGlj
YXRlKSk7CisgICAgYXV0byBib29sQ2FzdCA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVz
c2lvbj4oTGV4ZXI6OlRva2VuKCpvcmlnaW4pLCBTdHJpbmcoImJvb2wiLCBTdHJpbmc6OkNvbnN0
cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYXN0QXJndW1lbnRzKSk7CisgICAgcmV0dXJuIHsg
bWFrZVVuaXF1ZVJlZjxBU1Q6OlRlcm5hcnlFeHByZXNzaW9uPihXVEZNb3ZlKCpvcmlnaW4pLCBX
VEZNb3ZlKGJvb2xDYXN0KSwgV1RGTW92ZSgqYm9keUV4cHJlc3Npb24pLCBXVEZNb3ZlKCplbHNl
RXhwcmVzc2lvbikpIH07Cit9CisKK2F1dG8gUGFyc2VyOjpwYXJzZUFzc2lnbm1lbnQoKSAtPiBF
eHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHsKKyAgICBhdXRvIG9y
aWdpbiA9IHBlZWsoKTsKKyAgICBpZiAoIW9yaWdpbikKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKKworICAgIGF1dG8gbGVmdCA9IHBhcnNlUG9zc2li
bGVQcmVmaXgoKTsKKyAgICBpZiAoIWxlZnQpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVy
cm9yPihsZWZ0LmVycm9yKCkpOworCisgICAgYXV0byBhc3NpZ25tZW50T3BlcmF0b3IgPSBjb25z
dW1lVHlwZXMoeworICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkVxdWFsc1NpZ24sCisgICAg
ICAgIExleGVyOjpUb2tlbjo6VHlwZTo6UGx1c0VxdWFscywKKyAgICAgICAgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpNaW51c0VxdWFscywKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaW1lc0Vx
dWFscywKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpEaXZpZGVFcXVhbHMsCisgICAgICAg
IExleGVyOjpUb2tlbjo6VHlwZTo6TW9kRXF1YWxzLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5
cGU6OlhvckVxdWFscywKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpBbmRFcXVhbHMsCisg
ICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6T3JFcXVhbHMsCisgICAgICAgIExleGVyOjpUb2tl
bjo6VHlwZTo6UmlnaHRTaGlmdEVxdWFscywKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpM
ZWZ0U2hpZnRFcXVhbHMKKyAgICB9KTsKKyAgICBpZiAoIWFzc2lnbm1lbnRPcGVyYXRvcikKKyAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFzc2lnbm1lbnRPcGVyYXRvci5lcnJvcigp
KTsKKworICAgIGF1dG8gcmlnaHQgPSBwYXJzZVBvc3NpYmxlVGVybmFyeUNvbmRpdGlvbmFsKCk7
CisgICAgaWYgKCFyaWdodCkKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHJpZ2h0
LmVycm9yKCkpOworCisgICAgaWYgKGFzc2lnbm1lbnRPcGVyYXRvci0+dHlwZSA9PSBMZXhlcjo6
VG9rZW46OlR5cGU6OkVxdWFsc1NpZ24pCisgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8
QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZSgqbGVm
dCksIFdURk1vdmUoKnJpZ2h0KSl9IDsKKworICAgIFN0cmluZyBuYW1lOworICAgIHN3aXRjaCAo
YXNzaWdubWVudE9wZXJhdG9yLT50eXBlKSB7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6
OlBsdXNFcXVhbHM6CisgICAgICAgIG5hbWUgPSBTdHJpbmcoIm9wZXJhdG9yKyIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpU
b2tlbjo6VHlwZTo6TWludXNFcXVhbHM6CisgICAgICAgIG5hbWUgPSBTdHJpbmcoIm9wZXJhdG9y
LSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VGltZXNFcXVhbHM6CisgICAgICAgIG5hbWUgPSBTdHJp
bmcoIm9wZXJhdG9yKiIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6RGl2aWRlRXF1YWxzOgorICAgICAg
ICBuYW1lID0gU3RyaW5nKCJvcGVyYXRvci8iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6Ok1vZEVxdWFs
czoKKyAgICAgICAgbmFtZSA9IFN0cmluZygib3BlcmF0b3IlIiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBl
OjpYb3JFcXVhbHM6CisgICAgICAgIG5hbWUgPSBTdHJpbmcoIm9wZXJhdG9yXiIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExleGVyOjpU
b2tlbjo6VHlwZTo6QW5kRXF1YWxzOgorICAgICAgICBuYW1lID0gU3RyaW5nKCJvcGVyYXRvciYi
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBMZXhlcjo6VG9rZW46OlR5cGU6Ok9yRXF1YWxzOgorICAgICAgICBuYW1lID0gU3RyaW5nKCJv
cGVyYXRvcnwiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0U2hpZnRFcXVhbHM6CisgICAgICAg
IG5hbWUgPSBTdHJpbmcoIm9wZXJhdG9yPj4iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTaGlm
dEVxdWFsczoKKyAgICAgICAgbmFtZSA9IFN0cmluZygib3BlcmF0b3I8PCIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+
KEVycm9yKFN0cmluZygiU29tZXRoaW5nIHJlYWxseSBiYWQgaGFwcGVuZWQiLCBTdHJpbmc6OkNv
bnN0cnVjdEZyb21MaXRlcmFsKSkpOworICAgIH0KKworICAgIGF1dG8gcmVzdWx0ID0gQVNUOjpS
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uOjpjcmVhdGUoTGV4ZXI6OlRva2VuKCpvcmlnaW4pLCBX
VEZNb3ZlKCpsZWZ0KSk7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBj
YWxsQXJndW1lbnRzOworICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKHJlc3VsdC0+b2xkVmFyaWFi
bGVSZWZlcmVuY2UoKSk7CisgICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSgqcmlnaHQp
KTsKKyAgICByZXN1bHQtPnNldE5ld1ZhbHVlRXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6
Q2FsbEV4cHJlc3Npb24+KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUobmFtZSksIFdURk1vdmUo
Y2FsbEFyZ3VtZW50cykpKTsKKyAgICByZXN1bHQtPnNldFJlc3VsdEV4cHJlc3Npb24ocmVzdWx0
LT5uZXdWYXJpYWJsZVJlZmVyZW5jZSgpKTsKKyAgICByZXR1cm4geyBXVEZNb3ZlKHJlc3VsdCkg
fTsKK30KKworYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVUZXJuYXJ5Q29uZGl0aW9uYWwoKSAt
PiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHsKKyAgICBhdXRv
IHRlcm5hcnlFeHByZXNzaW9uID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8VW5pcXVlUmVm
PEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPj4oWyZdKCkgeworICAgICAgICByZXR1cm4gcGFyc2VU
ZXJuYXJ5Q29uZGl0aW9uYWwoKTsKKyAgICB9KTsKKyAgICBpZiAodGVybmFyeUV4cHJlc3Npb24p
CisgICAgICAgIHJldHVybiB0ZXJuYXJ5RXhwcmVzc2lvbjsKKworICAgIGF1dG8gYXNzaWdubWVu
dEV4cHJlc3Npb24gPSBiYWNrdHJhY2tpbmdTY29wZTxFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPiwgRXJyb3I+PihbJl0oKSB7CisgICAgICAgIHJldHVybiBwYXJzZUFzc2lnbm1l
bnQoKTsKKyAgICB9KTsKKyAgICBpZiAoYXNzaWdubWVudEV4cHJlc3Npb24pCisgICAgICAgIHJl
dHVybiBhc3NpZ25tZW50RXhwcmVzc2lvbjsKKworICAgIGF1dG8gYmluYXJ5T3BlcmF0aW9uID0g
YmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVy
cm9yPj4oWyZdKCkgeworICAgICAgICByZXR1cm4gcGFyc2VQb3NzaWJsZUxvZ2ljYWxCaW5hcnlP
cGVyYXRpb24oKTsKKyAgICB9KTsKKyAgICBpZiAoYmluYXJ5T3BlcmF0aW9uKQorICAgICAgICBy
ZXR1cm4gYmluYXJ5T3BlcmF0aW9uOworCisgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGJp
bmFyeU9wZXJhdGlvbi5lcnJvcigpKTsKK30KKworYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVM
b2dpY2FsQmluYXJ5T3BlcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4sIEVycm9yPiB7CisgICAgYXV0byBwYXJzZWRQcmV2aW91cyA9IHBhcnNlUG9zc2libGVS
ZWxhdGlvbmFsQmluYXJ5T3BlcmF0aW9uKCk7CisgICAgaWYgKCFwYXJzZWRQcmV2aW91cykKKyAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHBhcnNlZFByZXZpb3VzLmVycm9yKCkpOwor
ICAgIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHByZXZpb3VzID0gV1RGTW92ZSgqcGFyc2Vk
UHJldmlvdXMpOworCisgICAgd2hpbGUgKGF1dG8gbG9naWNhbEJpbmFyeU9wZXJhdGlvbiA9IHRy
eVR5cGVzKHsKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpPck9yLAorICAgICAgICBMZXhl
cjo6VG9rZW46OlR5cGU6OkFuZEFuZCwKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpPciwK
KyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpYb3IsCisgICAgICAgIExleGVyOjpUb2tlbjo6
VHlwZTo6QW5kCisgICAgICAgIH0pKSB7CisgICAgICAgIGF1dG8gbmV4dCA9IHBhcnNlUG9zc2li
bGVSZWxhdGlvbmFsQmluYXJ5T3BlcmF0aW9uKCk7CisgICAgICAgIGlmICghbmV4dCkKKyAgICAg
ICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuZXh0LmVycm9yKCkpOworCisgICAgICAg
IHN3aXRjaCAobG9naWNhbEJpbmFyeU9wZXJhdGlvbi0+dHlwZSkgeworICAgICAgICBjYXNlIExl
eGVyOjpUb2tlbjo6VHlwZTo6T3JPcjoKKyAgICAgICAgICAgIHByZXZpb3VzID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uPihXVEZNb3ZlKCpsb2dpY2FsQmluYXJ5T3BlcmF0
aW9uKSwgQVNUOjpMb2dpY2FsRXhwcmVzc2lvbjo6VHlwZTo6T3IsIFdURk1vdmUocHJldmlvdXMp
LCBXVEZNb3ZlKCpuZXh0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMZXhl
cjo6VG9rZW46OlR5cGU6OkFuZEFuZDoKKyAgICAgICAgICAgIHByZXZpb3VzID0gbWFrZVVuaXF1
ZVJlZjxBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uPihXVEZNb3ZlKCpsb2dpY2FsQmluYXJ5T3BlcmF0
aW9uKSwgQVNUOjpMb2dpY2FsRXhwcmVzc2lvbjo6VHlwZTo6QW5kLCBXVEZNb3ZlKHByZXZpb3Vz
KSwgV1RGTW92ZSgqbmV4dCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTGV4
ZXI6OlRva2VuOjpUeXBlOjpPcjogeworICAgICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6
OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOworICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy5h
cHBlbmQoV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBl
bmQoV1RGTW92ZSgqbmV4dCkpOworICAgICAgICAgICAgcHJldmlvdXMgPSBtYWtlVW5pcXVlUmVm
PEFTVDo6Q2FsbEV4cHJlc3Npb24+KFdURk1vdmUoKmxvZ2ljYWxCaW5hcnlPcGVyYXRpb24pLCBT
dHJpbmcoIm9wZXJhdG9yfCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3Zl
KGNhbGxBcmd1bWVudHMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpYb3I6IHsKKyAgICAgICAgICAgIFZlY3RvcjxVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gY2FsbEFyZ3VtZW50czsKKyAgICAgICAgICAgIGNhbGxB
cmd1bWVudHMuYXBwZW5kKFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgICAgIGNhbGxBcmd1
bWVudHMuYXBwZW5kKFdURk1vdmUoKm5leHQpKTsKKyAgICAgICAgICAgIHByZXZpb3VzID0gbWFr
ZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihXVEZNb3ZlKCpsb2dpY2FsQmluYXJ5T3Bl
cmF0aW9uKSwgU3RyaW5nKCJvcGVyYXRvcl4iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwgV1RGTW92ZShjYWxsQXJndW1lbnRzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6QW5kOiB7CisgICAgICAgICAgICBW
ZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGNhbGxBcmd1bWVudHM7CisgICAgICAg
ICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAg
ICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpuZXh0KSk7CisgICAgICAgICAgICBwcmV2
aW91cyA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oV1RGTW92ZSgqbG9naWNh
bEJpbmFyeU9wZXJhdGlvbiksIFN0cmluZygib3BlcmF0b3ImIiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKFN0cmlu
ZygiU29tZXRoaW5nIHJlYWxseSBiYWQgaGFwcGVuZWQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21M
aXRlcmFsKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsgV1RGTW92ZShwcmV2
aW91cykgfTsKK30KKworYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVSZWxhdGlvbmFsQmluYXJ5
T3BlcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9y
PiB7CisgICAgYXV0byBwYXJzZWRQcmV2aW91cyA9IHBhcnNlUG9zc2libGVTaGlmdCgpOworICAg
IGlmICghcGFyc2VkUHJldmlvdXMpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihw
YXJzZWRQcmV2aW91cy5lcnJvcigpKTsKKyAgICBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiBw
cmV2aW91cyA9IFdURk1vdmUoKnBhcnNlZFByZXZpb3VzKTsKKworICAgIHdoaWxlIChhdXRvIHJl
bGF0aW9uYWxCaW5hcnlPcGVyYXRpb24gPSB0cnlUeXBlcyh7CisgICAgICAgIExleGVyOjpUb2tl
bjo6VHlwZTo6TGVzc1RoYW5TaWduLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkdyZWF0
ZXJUaGFuU2lnbiwKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpMZXNzVGhhbk9yRXF1YWxU
bywKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpHcmVhdGVyVGhhbk9yRXF1YWxUbywKKyAg
ICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpFcXVhbENvbXBhcmlzb24sCisgICAgICAgIExleGVy
OjpUb2tlbjo6VHlwZTo6Tm90RXF1YWwKKyAgICAgICAgfSkpIHsKKyAgICAgICAgYXV0byBuZXh0
ID0gcGFyc2VQb3NzaWJsZVNoaWZ0KCk7CisgICAgICAgIGlmICghbmV4dCkKKyAgICAgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuZXh0LmVycm9yKCkpOworCisgICAgICAgIHN3aXRj
aCAocmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbi0+dHlwZSkgeworICAgICAgICBjYXNlIExleGVy
OjpUb2tlbjo6VHlwZTo6TGVzc1RoYW5TaWduOiB7CisgICAgICAgICAgICBWZWN0b3I8VW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4+IGNhbGxBcmd1bWVudHM7CisgICAgICAgICAgICBjYWxsQXJn
dW1lbnRzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICBjYWxsQXJndW1l
bnRzLmFwcGVuZChXVEZNb3ZlKCpuZXh0KSk7CisgICAgICAgICAgICBwcmV2aW91cyA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oV1RGTW92ZSgqcmVsYXRpb25hbEJpbmFyeU9w
ZXJhdGlvbiksIFN0cmluZygib3BlcmF0b3I8IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkdyZWF0ZXJUaGFuU2lnbjogewor
ICAgICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1l
bnRzOworICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShwcmV2aW91cykp
OworICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSgqbmV4dCkpOworICAg
ICAgICAgICAgcHJldmlvdXMgPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KFdU
Rk1vdmUoKnJlbGF0aW9uYWxCaW5hcnlPcGVyYXRpb24pLCBTdHJpbmcoIm9wZXJhdG9yPiIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhbGxBcmd1bWVudHMpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpU
eXBlOjpMZXNzVGhhbk9yRXF1YWxUbzogeworICAgICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOworICAgICAgICAgICAgY2FsbEFyZ3VtZW50
cy5hcHBlbmQoV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy5h
cHBlbmQoV1RGTW92ZSgqbmV4dCkpOworICAgICAgICAgICAgcHJldmlvdXMgPSBtYWtlVW5pcXVl
UmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KFdURk1vdmUoKnJlbGF0aW9uYWxCaW5hcnlPcGVyYXRp
b24pLCBTdHJpbmcoIm9wZXJhdG9yPD0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwg
V1RGTW92ZShjYWxsQXJndW1lbnRzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6R3JlYXRlclRoYW5PckVxdWFsVG86IHsK
KyAgICAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gY2FsbEFyZ3Vt
ZW50czsKKyAgICAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUocHJldmlvdXMp
KTsKKyAgICAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKm5leHQpKTsKKyAg
ICAgICAgICAgIHByZXZpb3VzID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihX
VEZNb3ZlKCpyZWxhdGlvbmFsQmluYXJ5T3BlcmF0aW9uKSwgU3RyaW5nKCJvcGVyYXRvcj49Iiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46
OlR5cGU6OkVxdWFsQ29tcGFyaXNvbjogeworICAgICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOworICAgICAgICAgICAgY2FsbEFyZ3VtZW50
cy5hcHBlbmQoV1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy5h
cHBlbmQoV1RGTW92ZSgqbmV4dCkpOworICAgICAgICAgICAgcHJldmlvdXMgPSBtYWtlVW5pcXVl
UmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KFdURk1vdmUoKnJlbGF0aW9uYWxCaW5hcnlPcGVyYXRp
b24pLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwg
V1RGTW92ZShjYWxsQXJndW1lbnRzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6Tm90RXF1YWw6IHsKKyAgICAgICAgICAg
IFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gY2FsbEFyZ3VtZW50czsKKyAgICAg
ICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAg
ICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKm5leHQpKTsKKyAgICAgICAgICAgIHBy
ZXZpb3VzID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4o
KnJlbGF0aW9uYWxCaW5hcnlPcGVyYXRpb24pLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6
OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYWxsQXJndW1lbnRzKSk7CisgICAgICAg
ICAgICBwcmV2aW91cyA9IG1ha2VVbmlxdWVSZWY8QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4o
V1RGTW92ZSgqcmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbiksIFdURk1vdmUocHJldmlvdXMpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPihFcnJvcihTdHJpbmcoIlNvbWV0aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiBXVEZNb3ZlKHByZXZpb3VzKTsKK30KKworYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVT
aGlmdCgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gewor
ICAgIGF1dG8gcGFyc2VkUHJldmlvdXMgPSBwYXJzZVBvc3NpYmxlQWRkKCk7CisgICAgaWYgKCFw
YXJzZWRQcmV2aW91cykKKyAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHBhcnNlZFBy
ZXZpb3VzLmVycm9yKCkpOworICAgIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+IHByZXZpb3Vz
ID0gV1RGTW92ZSgqcGFyc2VkUHJldmlvdXMpOworCisgICAgd2hpbGUgKGF1dG8gc2hpZnQgPSB0
cnlUeXBlcyh7CisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNoaWZ0LAorICAgICAg
ICBMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0U2hpZnQKKyAgICAgICAgfSkpIHsKKyAgICAgICAg
YXV0byBuZXh0ID0gcGFyc2VQb3NzaWJsZUFkZCgpOworICAgICAgICBpZiAoIW5leHQpCisgICAg
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmV4dC5lcnJvcigpKTsKKworICAgICAg
ICBzd2l0Y2ggKHNoaWZ0LT50eXBlKSB7CisgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBl
OjpMZWZ0U2hpZnQ6IHsKKyAgICAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNz
aW9uPj4gY2FsbEFyZ3VtZW50czsKKyAgICAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdU
Rk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdURk1v
dmUoKm5leHQpKTsKKyAgICAgICAgICAgIHByZXZpb3VzID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OkNh
bGxFeHByZXNzaW9uPihXVEZNb3ZlKCpzaGlmdCksIFN0cmluZygib3BlcmF0b3I8PCIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhbGxBcmd1bWVudHMpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBl
OjpSaWdodFNoaWZ0OiB7CisgICAgICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4+IGNhbGxBcmd1bWVudHM7CisgICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChX
VEZNb3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZN
b3ZlKCpuZXh0KSk7CisgICAgICAgICAgICBwcmV2aW91cyA9IG1ha2VVbmlxdWVSZWY8QVNUOjpD
YWxsRXhwcmVzc2lvbj4oV1RGTW92ZSgqc2hpZnQpLCBTdHJpbmcoIm9wZXJhdG9yPj4iLCBTdHJp
bmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYWxsQXJndW1lbnRzKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4oRXJyb3IoU3RyaW5nKCJTb21ldGhpbmcgcmVhbGx5IGJhZCBoYXBwZW5lZCIsIFN0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
V1RGTW92ZShwcmV2aW91cyk7Cit9CisKK2F1dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlQWRkKCkg
LT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiB7CisgICAgYXV0
byBwYXJzZWRQcmV2aW91cyA9IHBhcnNlUG9zc2libGVNdWx0aXBseSgpOworICAgIGlmICghcGFy
c2VkUHJldmlvdXMpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihwYXJzZWRQcmV2
aW91cy5lcnJvcigpKTsKKyAgICBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiBwcmV2aW91cyA9
IFdURk1vdmUoKnBhcnNlZFByZXZpb3VzKTsKKworICAgIHdoaWxlIChhdXRvIGFkZCA9IHRyeVR5
cGVzKHsKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpQbHVzLAorICAgICAgICBMZXhlcjo6
VG9rZW46OlR5cGU6Ok1pbnVzCisgICAgICAgIH0pKSB7CisgICAgICAgIGF1dG8gbmV4dCA9IHBh
cnNlUG9zc2libGVNdWx0aXBseSgpOworICAgICAgICBpZiAoIW5leHQpCisgICAgICAgICAgICBy
ZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4obmV4dC5lcnJvcigpKTsKKworICAgICAgICBzd2l0Y2gg
KGFkZC0+dHlwZSkgeworICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6UGx1czogewor
ICAgICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1l
bnRzOworICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZShwcmV2aW91cykp
OworICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSgqbmV4dCkpOworICAg
ICAgICAgICAgcHJldmlvdXMgPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KFdU
Rk1vdmUoKmFkZCksIFN0cmluZygib3BlcmF0b3IrIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0
ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6Ok1pbnVzOiB7CisgICAgICAg
ICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGNhbGxBcmd1bWVudHM7Cisg
ICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKHByZXZpb3VzKSk7CisgICAg
ICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpuZXh0KSk7CisgICAgICAgICAg
ICBwcmV2aW91cyA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oV1RGTW92ZSgq
YWRkKSwgU3RyaW5nKCJvcGVyYXRvci0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwg
V1RGTW92ZShjYWxsQXJndW1lbnRzKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oRXJyb3IoU3RyaW5nKCJTb21ldGhpbmcg
cmVhbGx5IGJhZCBoYXBwZW5lZCIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gV1RGTW92ZShwcmV2aW91cyk7Cit9CisKK2F1
dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlTXVsdGlwbHkoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHsKKyAgICBhdXRvIHBhcnNlZFByZXZpb3VzID0gcGFy
c2VQb3NzaWJsZVByZWZpeCgpOworICAgIGlmICghcGFyc2VkUHJldmlvdXMpCisgICAgICAgIHJl
dHVybiBVbmV4cGVjdGVkPEVycm9yPihwYXJzZWRQcmV2aW91cy5lcnJvcigpKTsKKyAgICBVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPiBwcmV2aW91cyA9IFdURk1vdmUoKnBhcnNlZFByZXZpb3Vz
KTsKKworICAgIHdoaWxlIChhdXRvIG11bHRpcGx5ID0gdHJ5VHlwZXMoeworICAgICAgICBMZXhl
cjo6VG9rZW46OlR5cGU6OlN0YXIsCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6RGl2aWRl
LAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6Ok1vZAorICAgICAgICB9KSkgeworICAgICAg
ICBhdXRvIG5leHQgPSBwYXJzZVBvc3NpYmxlUHJlZml4KCk7CisgICAgICAgIGlmICghbmV4dCkK
KyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuZXh0LmVycm9yKCkpOworCisg
ICAgICAgIHN3aXRjaCAobXVsdGlwbHktPnR5cGUpIHsKKyAgICAgICAgY2FzZSBMZXhlcjo6VG9r
ZW46OlR5cGU6OlN0YXI6IHsKKyAgICAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPj4gY2FsbEFyZ3VtZW50czsKKyAgICAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5k
KFdURk1vdmUocHJldmlvdXMpKTsKKyAgICAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKFdU
Rk1vdmUoKm5leHQpKTsKKyAgICAgICAgICAgIHByZXZpb3VzID0gbWFrZVVuaXF1ZVJlZjxBU1Q6
OkNhbGxFeHByZXNzaW9uPihXVEZNb3ZlKCptdWx0aXBseSksIFN0cmluZygib3BlcmF0b3IqIiwg
U3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46
OlR5cGU6OkRpdmlkZTogeworICAgICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+PiBjYWxsQXJndW1lbnRzOworICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQo
V1RGTW92ZShwcmV2aW91cykpOworICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RG
TW92ZSgqbmV4dCkpOworICAgICAgICAgICAgcHJldmlvdXMgPSBtYWtlVW5pcXVlUmVmPEFTVDo6
Q2FsbEV4cHJlc3Npb24+KFdURk1vdmUoKm11bHRpcGx5KSwgU3RyaW5nKCJvcGVyYXRvci8iLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShjYWxsQXJndW1lbnRzKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6
VHlwZTo6TW9kOiB7CisgICAgICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4+IGNhbGxBcmd1bWVudHM7CisgICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZN
b3ZlKHByZXZpb3VzKSk7CisgICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChXVEZNb3Zl
KCpuZXh0KSk7CisgICAgICAgICAgICBwcmV2aW91cyA9IG1ha2VVbmlxdWVSZWY8QVNUOjpDYWxs
RXhwcmVzc2lvbj4oV1RGTW92ZSgqbXVsdGlwbHkpLCBTdHJpbmcoIm9wZXJhdG9yJSIsIFN0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhbGxBcmd1bWVudHMpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
PihFcnJvcihTdHJpbmcoIlNvbWV0aGluZyByZWFsbHkgYmFkIGhhcHBlbmVkIiwgU3RyaW5nOjpD
b25zdHJ1Y3RGcm9tTGl0ZXJhbCkpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBX
VEZNb3ZlKHByZXZpb3VzKTsKK30KKworYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVQcmVmaXgo
KSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHsKKyAgICBp
ZiAoYXV0byBwcmVmaXggPSB0cnlUeXBlcyh7CisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6
UGx1c1BsdXMsCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TWludXNNaW51cywKKyAgICAg
ICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpQbHVzLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6
Ok1pbnVzLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlRpbGRlLAorICAgICAgICBMZXhl
cjo6VG9rZW46OlR5cGU6OkV4Y2xhbWF0aW9uUG9pbnQsCisgICAgICAgIExleGVyOjpUb2tlbjo6
VHlwZTo6QW5kLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkF0LAorICAgICAgICBMZXhl
cjo6VG9rZW46OlR5cGU6OlN0YXIKKyAgICB9KSkgeworICAgICAgICBhdXRvIG5leHQgPSBwYXJz
ZVBvc3NpYmxlUHJlZml4KCk7CisgICAgICAgIGlmICghbmV4dCkKKyAgICAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihuZXh0LmVycm9yKCkpOworCisgICAgICAgIHN3aXRjaCAocHJl
Zml4LT50eXBlKSB7CisgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpQbHVzUGx1czog
eworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b246OmNyZWF0ZShMZXhlcjo6VG9rZW4oKnByZWZpeCksIFdURk1vdmUoKm5leHQpKTsKKyAgICAg
ICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gY2FsbEFyZ3VtZW50czsK
KyAgICAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5kKHJlc3VsdC0+b2xkVmFyaWFibGVSZWZl
cmVuY2UoKSk7CisgICAgICAgICAgICByZXN1bHQtPnNldE5ld1ZhbHVlRXhwcmVzc2lvbihtYWtl
VW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwgU3Ry
aW5nKCJvcGVyYXRvcisrIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUo
Y2FsbEFyZ3VtZW50cykpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0UmVzdWx0RXhwcmVzc2lv
bihyZXN1bHQtPm5ld1ZhcmlhYmxlUmVmZXJlbmNlKCkpOworICAgICAgICAgICAgcmV0dXJuIHsg
V1RGTW92ZShyZXN1bHQpIH07CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46
OlR5cGU6Ok1pbnVzTWludXM6IHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gQVNUOjpSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uOjpjcmVhdGUoTGV4ZXI6OlRva2VuKCpwcmVmaXgpLCBXVEZN
b3ZlKCpuZXh0KSk7CisgICAgICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4+IGNhbGxBcmd1bWVudHM7CisgICAgICAgICAgICBjYWxsQXJndW1lbnRzLmFwcGVuZChyZXN1
bHQtPm9sZFZhcmlhYmxlUmVmZXJlbmNlKCkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXROZXdW
YWx1ZUV4cHJlc3Npb24obWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9uPihMZXhlcjo6
VG9rZW4oKnByZWZpeCksIFN0cmluZygib3BlcmF0b3ItLSIsIFN0cmluZzo6Q29uc3RydWN0RnJv
bUxpdGVyYWwpLCBXVEZNb3ZlKGNhbGxBcmd1bWVudHMpKSk7CisgICAgICAgICAgICByZXN1bHQt
PnNldFJlc3VsdEV4cHJlc3Npb24ocmVzdWx0LT5uZXdWYXJpYWJsZVJlZmVyZW5jZSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiB7IFdURk1vdmUocmVzdWx0KSB9OworICAgICAgICB9CisgICAgICAg
IGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpQbHVzOiB7CisgICAgICAgICAgICBWZWN0b3I8VW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGNhbGxBcmd1bWVudHM7CisgICAgICAgICAgICBjYWxs
QXJndW1lbnRzLmFwcGVuZChXVEZNb3ZlKCpuZXh0KSk7CisgICAgICAgICAgICByZXR1cm4geyBt
YWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Npb24+KExleGVyOjpUb2tlbigqcHJlZml4KSwg
U3RyaW5nKCJvcGVyYXRvcisiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92
ZShjYWxsQXJndW1lbnRzKSkgfTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExleGVyOjpUb2tl
bjo6VHlwZTo6TWludXM6IHsKKyAgICAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPj4gY2FsbEFyZ3VtZW50czsKKyAgICAgICAgICAgIGNhbGxBcmd1bWVudHMuYXBwZW5k
KFdURk1vdmUoKm5leHQpKTsKKyAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNU
OjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpwcmVmaXgpLCBTdHJpbmcoIm9wZXJhdG9y
LSIsIFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKGNhbGxBcmd1bWVudHMp
KSB9OworICAgICAgICB9CisgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaWxkZTog
eworICAgICAgICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJn
dW1lbnRzOworICAgICAgICAgICAgY2FsbEFyZ3VtZW50cy5hcHBlbmQoV1RGTW92ZSgqbmV4dCkp
OworICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHByZXNzaW9u
PihMZXhlcjo6VG9rZW4oKnByZWZpeCksIFN0cmluZygib3BlcmF0b3J+IiwgU3RyaW5nOjpDb25z
dHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FsbEFyZ3VtZW50cykpIH07CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkV4Y2xhbWF0aW9uUG9pbnQ6IHsKKyAg
ICAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gY2FzdEFyZ3VtZW50
czsKKyAgICAgICAgICAgIGNhc3RBcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKm5leHQpKTsKKyAg
ICAgICAgICAgIGF1dG8gYm9vbENhc3QgPSBtYWtlVW5pcXVlUmVmPEFTVDo6Q2FsbEV4cHJlc3Np
b24+KExleGVyOjpUb2tlbigqcHJlZml4KSwgU3RyaW5nKCJib29sIiwgU3RyaW5nOjpDb25zdHJ1
Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUoY2FzdEFyZ3VtZW50cykpOworICAgICAgICAgICAgcmV0
dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uPihMZXhlcjo6VG9r
ZW4oKnByZWZpeCksIFdURk1vdmUoYm9vbENhc3QpKSB9OworICAgICAgICB9CisgICAgICAgIGNh
c2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpBbmQ6CisgICAgICAgICAgICByZXR1cm4geyBtYWtlVW5p
cXVlUmVmPEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKnByZWZpeCks
IFdURk1vdmUoKm5leHQpKSB9OworICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6QXQ6
CisgICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6TWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpwcmVmaXgpLCBXVEZNb3ZlKCpuZXh0KSkgfTsK
KyAgICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlN0YXI6CisgICAgICAgICAgICByZXR1
cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihMZXhlcjo6VG9r
ZW4oKnByZWZpeCksIFdURk1vdmUoKm5leHQpKSB9OworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3Rl
ZDxFcnJvcj4oRXJyb3IoU3RyaW5nKCJTb21ldGhpbmcgcmVhbGx5IGJhZCBoYXBwZW5lZCIsIFN0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gcGFyc2VQb3NzaWJsZVN1ZmZpeCgpOworfQorCithdXRvIFBhcnNlcjo6cGFyc2VQb3Nz
aWJsZVN1ZmZpeCgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJv
cj4geworICAgIGF1dG8gc3VmZml4ID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8VW5pcXVl
UmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPj4oWyZdKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVm
PEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiB7CisgICAgICAgIGF1dG8gZXhwcmVzc2lvbiA9IHBh
cnNlQ2FsbEV4cHJlc3Npb24oKTsKKyAgICAgICAgaWYgKCFleHByZXNzaW9uKQorICAgICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGV4cHJlc3Npb24uZXJyb3IoKSk7CisKKyAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gYmFja3RyYWNraW5n
U2NvcGU8U3VmZml4RXhwcmVzc2lvbj4oWyZdKCkgLT4gU3VmZml4RXhwcmVzc2lvbiB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlTGltaXRlZFN1ZmZpeE9wZXJhdG9yKFdURk1vdmUoKmV4
cHJlc3Npb24pKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgZXhwcmVzc2lvbiA9IFdU
Rk1vdmUocmVzdWx0LnJlc3VsdCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZXhwcmVzc2lvbjsKKyAg
ICB9KTsKKyAgICBpZiAoc3VmZml4KQorICAgICAgICByZXR1cm4gc3VmZml4OworCisgICAgc3Vm
Zml4ID0gYmFja3RyYWNraW5nU2NvcGU8RXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lv
bj4sIEVycm9yPj4oWyZdKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4s
IEVycm9yPiB7CisgICAgICAgIGF1dG8gZXhwcmVzc2lvbiA9IHBhcnNlVGVybSgpOworICAgICAg
ICBpZiAoIWV4cHJlc3Npb24pCisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
ZXhwcmVzc2lvbi5lcnJvcigpKTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBiYWNrdHJhY2tpbmdTY29wZTxTdWZmaXhFeHByZXNzaW9uPihbJl0o
KSAtPiBTdWZmaXhFeHByZXNzaW9uIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VTdWZm
aXhPcGVyYXRvcihXVEZNb3ZlKCpleHByZXNzaW9uKSk7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIGV4cHJlc3Npb24gPSBXVEZNb3ZlKHJlc3VsdC5yZXN1bHQpOworICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIGV4cHJlc3Npb247CisgICAgfSk7CisgICAgaWYgKHN1ZmZpeCkKKyAgICAgICAgcmV0
dXJuIHN1ZmZpeDsKKworICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihzdWZmaXguZXJyb3Io
KSk7Cit9CisKK2F1dG8gUGFyc2VyOjpwYXJzZUNhbGxFeHByZXNzaW9uKCkgLT4gRXhwZWN0ZWQ8
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiB7CisgICAgYXV0byBuYW1lID0gY29u
c3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKKyAgICBpZiAoIW5hbWUp
CisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihuYW1lLmVycm9yKCkpOworICAgIGF1
dG8gY2FsbE5hbWUgPSBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCk7CisKKyAgICBhdXRvIGxl
ZnRQYXJlbnRoZXNpcyA9IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFBhcmVu
dGhlc2lzKTsKKyAgICBpZiAoIWxlZnRQYXJlbnRoZXNpcykKKyAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KGxlZnRQYXJlbnRoZXNpcy5lcnJvcigpKTsKKworICAgIFZlY3RvcjxVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPj4gYXJndW1lbnRzOworICAgIGlmICh0cnlUeXBlKExleGVy
OjpUb2tlbjo6VHlwZTo6UmlnaHRQYXJlbnRoZXNpcykpCisgICAgICAgIHJldHVybiB7IG1ha2VV
bmlxdWVSZWY8QVNUOjpDYWxsRXhwcmVzc2lvbj4oV1RGTW92ZSgqbmFtZSksIFdURk1vdmUoY2Fs
bE5hbWUpLCBXVEZNb3ZlKGFyZ3VtZW50cykpIH07CisKKyAgICBhdXRvIGZpcnN0QXJndW1lbnQg
PSBwYXJzZVBvc3NpYmxlVGVybmFyeUNvbmRpdGlvbmFsKCk7CisgICAgaWYgKCFmaXJzdEFyZ3Vt
ZW50KQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZmlyc3RBcmd1bWVudC5lcnJv
cigpKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKmZpcnN0QXJndW1lbnQpKTsKKyAg
ICB3aGlsZSAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkgeworICAgICAgICBh
dXRvIGFyZ3VtZW50ID0gcGFyc2VQb3NzaWJsZVRlcm5hcnlDb25kaXRpb25hbCgpOworICAgICAg
ICBpZiAoIWFyZ3VtZW50KQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFy
Z3VtZW50LmVycm9yKCkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKFdURk1vdmUoKmFyZ3Vt
ZW50KSk7CisgICAgfQorCisgICAgYXV0byByaWdodFBhcmVudGhlc2lzID0gY29uc3VtZVR5cGUo
TGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodFBhcmVudGhlc2lzKTsKKyAgICBpZiAoIXJpZ2h0UGFy
ZW50aGVzaXMpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyaWdodFBhcmVudGhl
c2lzLmVycm9yKCkpOworCisgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkNhbGxFeHBy
ZXNzaW9uPihXVEZNb3ZlKCpuYW1lKSwgV1RGTW92ZShjYWxsTmFtZSksIFdURk1vdmUoYXJndW1l
bnRzKSkgfTsKK30KKworYXV0byBQYXJzZXI6OnBhcnNlVGVybSgpIC0+IEV4cGVjdGVkPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4geworICAgIGF1dG8gdHlwZSA9IGNvbnN1bWVU
eXBlcyh7CisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6SW50TGl0ZXJhbCwKKyAgICAgICAg
TGV4ZXI6OlRva2VuOjpUeXBlOjpVaW50TGl0ZXJhbCwKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpU
eXBlOjpGbG9hdExpdGVyYWwsCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TnVsbCwKKyAg
ICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpUcnVlLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5
cGU6OkZhbHNlLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIsCisgICAg
ICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFBhcmVudGhlc2lzCisgICAgfSk7CisgICAgaWYg
KCF0eXBlKQorICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odHlwZS5lcnJvcigpKTsK
KworICAgIHN3aXRjaCAodHlwZS0+dHlwZSkgeworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBl
OjpJbnRMaXRlcmFsOiB7CisgICAgICAgIGF1dG8gdmFsdWUgPSBpbnRMaXRlcmFsVG9JbnQodHlw
ZS0+c3RyaW5nVmlldyk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4g
VW5leHBlY3RlZDxFcnJvcj4odmFsdWUuZXJyb3IoKSk7CisgICAgICAgIHJldHVybiB7IG1ha2VV
bmlxdWVSZWY8QVNUOjpJbnRlZ2VyTGl0ZXJhbD4oV1RGTW92ZSgqdHlwZSksICp2YWx1ZSkgfTsK
KyAgICB9CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlVpbnRMaXRlcmFsOiB7CisgICAg
ICAgIGF1dG8gdmFsdWUgPSB1aW50TGl0ZXJhbFRvVWludCh0eXBlLT5zdHJpbmdWaWV3KTsKKyAg
ICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih2
YWx1ZS5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWw+KFdURk1vdmUoKnR5cGUpLCAqdmFsdWUpIH07CisgICAgfQorICAg
IGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpGbG9hdExpdGVyYWw6IHsKKyAgICAgICAgYXV0byB2
YWx1ZSA9IGZsb2F0TGl0ZXJhbFRvRmxvYXQodHlwZS0+c3RyaW5nVmlldyk7CisgICAgICAgIGlm
ICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFsdWUuZXJy
b3IoKSk7CisgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpGbG9hdExpdGVyYWw+
KFdURk1vdmUoKnR5cGUpLCAqdmFsdWUpIH07CisgICAgfQorICAgIGNhc2UgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpOdWxsOgorICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6TnVsbExp
dGVyYWw+KFdURk1vdmUoKnR5cGUpKSB9OworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpU
cnVlOgorICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6Qm9vbGVhbkxpdGVyYWw+
KFdURk1vdmUoKnR5cGUpLCB0cnVlKSB9OworICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpG
YWxzZToKKyAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkJvb2xlYW5MaXRlcmFs
PihXVEZNb3ZlKCp0eXBlKSwgZmFsc2UpIH07CisgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6
OklkZW50aWZpZXI6IHsKKyAgICAgICAgYXV0byBuYW1lID0gdHlwZS0+c3RyaW5nVmlldy50b1N0
cmluZygpOworICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZl
cmVuY2U+KFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKG5hbWUpKSB9OworICAgIH0KKyAgICBjYXNl
IExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFBhcmVudGhlc2lzOiB7CisgICAgICAgIGF1dG8gZXhw
cmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigpOworICAgICAgICBpZiAoIWV4cHJlc3Npb24pCisg
ICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZXhwcmVzc2lvbi5lcnJvcigpKTsK
KworICAgICAgICBhdXRvIHJpZ2h0UGFyZW50aGVzaXMgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9r
ZW46OlR5cGU6OlJpZ2h0UGFyZW50aGVzaXMpOworICAgICAgICBpZiAoIXJpZ2h0UGFyZW50aGVz
aXMpCisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocmlnaHRQYXJlbnRoZXNp
cy5lcnJvcigpKTsKKworICAgICAgICByZXR1cm4geyBXVEZNb3ZlKCpleHByZXNzaW9uKSB9Owor
ICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKFN0cmluZygiU29tZXRoaW5nIHJlYWxs
eSBiYWQgaGFwcGVuZWQiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSkpOworICAgIH0K
K30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUGFyc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjA3ZjU5ZjQ2Y2U5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaApAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldI
TFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNp
bmNsdWRlICJXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xCYXNl
RnVuY3Rpb25BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTEJhc2VTZW1hbnRpYy5oIgorI2lu
Y2x1ZGUgIldITFNMQmxvY2suaCIKKyNpbmNsdWRlICJXSExTTEJvb2xlYW5MaXRlcmFsLmgiCisj
aW5jbHVkZSAiV0hMU0xCcmVhay5oIgorI2luY2x1ZGUgIldITFNMQnVpbHRJblNlbWFudGljLmgi
CisjaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29tbWFF
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKKyNpbmNs
dWRlICJXSExTTENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgi
CisjaW5jbHVkZSAiV0hMU0xDb250aW51ZS5oIgorI2luY2x1ZGUgIldITFNMRGVyZWZlcmVuY2VF
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgorI2luY2x1ZGUgIldI
TFNMRG90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0
YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oIgorI2luY2x1ZGUgIldITFNMRXhwcmVzc2lv
bi5oIgorI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIKKyNpbmNsdWRlICJXSExTTEZsb2F0
TGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRnVu
Y3Rpb25BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIK
KyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSWZT
dGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEluZGV4RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUg
IldITFNMSW50ZWdlckxpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVk
ZSAiV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbE5vdEV4
cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24u
aCIKKyNpbmNsdWRlICJXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlw
ZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOb2RlLmgiCisjaW5jbHVkZSAiV0hMU0xO
dWxsTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRl
LmgiCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUHJvZ3Jh
bS5oIgorI2luY2x1ZGUgIldITFNMUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xRdWFsaWZpZXIuaCIKKyNpbmNsdWRlICJXSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExT
TFJlc291cmNlU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFJldHVybi5oIgorI2luY2x1ZGUg
IldITFNMU2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRT
ZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3RhZ2VJbk91dFNlbWFudGljLmgiCisjaW5jbHVk
ZSAiV0hMU0xTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24u
aCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFN3
aXRjaENhc2UuaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaFN0YXRlbWVudC5oIgorI2luY2x1ZGUg
IldITFNMVGVybmFyeUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFRyYXAuaCIKKyNpbmNs
dWRlICJXSExTTFR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFR5cGVBcmd1bWVudC5oIgorI2luY2x1
ZGUgIldITFNMVHlwZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2Uu
aCIKKyNpbmNsdWRlICJXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaCIKKyNpbmNsdWRlICJX
SExTTFZhbHVlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5oIgorI2luY2x1ZGUgIldI
TFNMVmFyaWFibGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJXSExTTFdoaWxlTG9vcC5oIgorI2lu
Y2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFBhcnNlciB7Citw
dWJsaWM6CisgICAgZW51bSBjbGFzcyBNb2RlIHsKKyAgICAgICAgU3RhbmRhcmRMaWJyYXJ5LAor
ICAgICAgICBVc2VyCisgICAgfTsKKworICAgIHN0cnVjdCBFcnJvciB7CisgICAgICAgIEVycm9y
KFN0cmluZyYmIGVycm9yKQorICAgICAgICAgICAgOiBlcnJvcihXVEZNb3ZlKGVycm9yKSkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIGVycm9yOworICAgIH07CisKKyAg
ICBQYXJzZXIoKTsKKworICAgIE9wdGlvbmFsPEVycm9yPiBwYXJzZShQcm9ncmFtJiwgU3RyaW5n
VmlldywgTW9kZSk7CisKK3ByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBiYWNr
dHJhY2tpbmdTY29wZShzdGQ6OmZ1bmN0aW9uPFQoKT4gY2FsbGJhY2spCisgICAgeworICAgICAg
ICBhdXRvIHN0YXRlID0gbV9sZXhlci5zdGF0ZSgpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGNh
bGxiYWNrKCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICBtX2xleGVyLnNldFN0YXRlKFdURk1vdmUoc3RhdGUpKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBVbmV4cGVjdGVkPEVycm9yPiBmYWlsKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSk7CisgICAgRXhwZWN0ZWQ8TGV4ZXI6OlRva2VuLCBFcnJvcj4gcGVlaygp
OworICAgIE9wdGlvbmFsPExleGVyOjpUb2tlbj4gdHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGUp
OworICAgIE9wdGlvbmFsPExleGVyOjpUb2tlbj4gdHJ5VHlwZXMoVmVjdG9yPExleGVyOjpUb2tl
bjo6VHlwZT4pOworICAgIEV4cGVjdGVkPExleGVyOjpUb2tlbiwgRXJyb3I+IGNvbnN1bWVUeXBl
KExleGVyOjpUb2tlbjo6VHlwZSk7CisgICAgRXhwZWN0ZWQ8TGV4ZXI6OlRva2VuLCBFcnJvcj4g
Y29uc3VtZVR5cGVzKFZlY3RvcjxMZXhlcjo6VG9rZW46OlR5cGU+KTsKKworICAgIEV4cGVjdGVk
PFZhcmlhbnQ8aW50LCB1bnNpZ25lZD4sIEVycm9yPiBjb25zdW1lSW50ZWdyYWxMaXRlcmFsKCk7
CisgICAgRXhwZWN0ZWQ8dW5zaWduZWQsIEVycm9yPiBjb25zdW1lTm9uTmVnYXRpdmVJbnRlZ3Jh
bExpdGVyYWwoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiwgRXJyb3I+
IHBhcnNlQ29uc3RhbnRFeHByZXNzaW9uKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpUeXBlQXJndW1l
bnQsIEVycm9yPiBwYXJzZVR5cGVBcmd1bWVudCgpOworICAgIEV4cGVjdGVkPEFTVDo6VHlwZUFy
Z3VtZW50cywgRXJyb3I+IHBhcnNlVHlwZUFyZ3VtZW50cygpOworICAgIHN0cnVjdCBUeXBlU3Vm
Zml4QWJicmV2aWF0ZWQgeworICAgICAgICBMZXhlcjo6VG9rZW4gdG9rZW47CisgICAgICAgIE9w
dGlvbmFsPHVuc2lnbmVkPiBudW1FbGVtZW50czsKKyAgICB9OworICAgIEV4cGVjdGVkPFR5cGVT
dWZmaXhBYmJyZXZpYXRlZCwgRXJyb3I+IHBhcnNlVHlwZVN1ZmZpeEFiYnJldmlhdGVkKCk7Cisg
ICAgc3RydWN0IFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCB7CisgICAgICAgIExleGVyOjpUb2tl
biB0b2tlbjsKKyAgICAgICAgT3B0aW9uYWw8QVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3Bh
Y2U+IGFkZHJlc3NTcGFjZTsKKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG51bUVsZW1lbnRz
OworICAgIH07CisgICAgRXhwZWN0ZWQ8VHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLCBFcnJvcj4g
cGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQoKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZUFkZHJlc3NTcGFjZVR5cGUoKTsKKyAgICBF
eHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPiBwYXJzZU5vbkFkZHJl
c3NTcGFjZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4s
IEVycm9yPiBwYXJzZVR5cGUoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlR5cGVEZWZpbml0aW9uLCBF
cnJvcj4gcGFyc2VUeXBlRGVmaW5pdGlvbigpOworICAgIEV4cGVjdGVkPEFTVDo6QnVpbHRJblNl
bWFudGljLCBFcnJvcj4gcGFyc2VCdWlsdEluU2VtYW50aWMoKTsKKyAgICBFeHBlY3RlZDxBU1Q6
OlJlc291cmNlU2VtYW50aWMsIEVycm9yPiBwYXJzZVJlc291cmNlU2VtYW50aWMoKTsKKyAgICBF
eHBlY3RlZDxBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYywgRXJyb3I+IHBhcnNl
U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpTdGFn
ZUluT3V0U2VtYW50aWMsIEVycm9yPiBwYXJzZVN0YWdlSW5PdXRTZW1hbnRpYygpOworICAgIEV4
cGVjdGVkPEFTVDo6U2VtYW50aWMsIEVycm9yPiBwYXJzZVNlbWFudGljKCk7CisgICAgQVNUOjpR
dWFsaWZpZXJzIHBhcnNlUXVhbGlmaWVycygpOworICAgIEV4cGVjdGVkPEFTVDo6U3RydWN0dXJl
RWxlbWVudCwgRXJyb3I+IHBhcnNlU3RydWN0dXJlRWxlbWVudCgpOworICAgIEV4cGVjdGVkPEFT
VDo6U3RydWN0dXJlRGVmaW5pdGlvbiwgRXJyb3I+IHBhcnNlU3RydWN0dXJlRGVmaW5pdGlvbigp
OworICAgIEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uLCBFcnJvcj4gcGFyc2VF
bnVtZXJhdGlvbkRlZmluaXRpb24oKTsKKyAgICBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uTWVt
YmVyLCBFcnJvcj4gcGFyc2VFbnVtZXJhdGlvbk1lbWJlcigpOworICAgIEV4cGVjdGVkPEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VOYXRpdmVUeXBlRGVjbGFyYXRpb24o
KTsKKyAgICBFeHBlY3RlZDxBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSwgRXJyb3I+
IHBhcnNlTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpB
dHRyaWJ1dGVCbG9jaywgRXJyb3I+IHBhcnNlQXR0cmlidXRlQmxvY2soKTsKKyAgICBFeHBlY3Rl
ZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24sIEVycm9yPiBwYXJzZVBhcmFtZXRlcigpOworICAg
IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMsIEVycm9yPiBwYXJzZVBhcmFtZXRl
cnMoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24sIEVycm9yPiBwYXJz
ZUVudHJ5UG9pbnRGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpGdW5j
dGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigp
OworICAgIEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+IHBhcnNlT3Bl
cmF0b3JGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CisgICAgRXhwZWN0
ZWQ8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24sIEVycm9yPiBwYXJzZUZ1bmN0aW9uRGVmaW5pdGlv
bigpOworICAgIEV4cGVjdGVkPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+
IHBhcnNlTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbigpOworCisgICAgRXhwZWN0ZWQ8QVNUOjpC
bG9jaywgRXJyb3I+IHBhcnNlQmxvY2soKTsKKyAgICBBU1Q6OkJsb2NrIHBhcnNlQmxvY2tCb2R5
KExleGVyOjpUb2tlbiYmIG9yaWdpbik7CisgICAgRXhwZWN0ZWQ8QVNUOjpJZlN0YXRlbWVudCwg
RXJyb3I+IHBhcnNlSWZTdGF0ZW1lbnQoKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlN3aXRjaFN0YXRl
bWVudCwgRXJyb3I+IHBhcnNlU3dpdGNoU3RhdGVtZW50KCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpT
d2l0Y2hDYXNlLCBFcnJvcj4gcGFyc2VTd2l0Y2hDYXNlKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpG
b3JMb29wLCBFcnJvcj4gcGFyc2VGb3JMb29wKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpXaGlsZUxv
b3AsIEVycm9yPiBwYXJzZVdoaWxlTG9vcCgpOworICAgIEV4cGVjdGVkPEFTVDo6RG9XaGlsZUxv
b3AsIEVycm9yPiBwYXJzZURvV2hpbGVMb29wKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPiYmKTsKKyAgICBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b25zU3RhdGVtZW50LCBFcnJvcj4gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpOworICAgIEV4
cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OlN0YXRlbWVudD4sIEVycm9yPiBwYXJzZVN0YXRlbWVudCgp
OworCisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJz
ZUVmZmVjdGZ1bEV4cHJlc3Npb24oKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPiwgRXJyb3I+IHBhcnNlRWZmZWN0ZnVsQXNzaWdubWVudCgpOworICAgIEV4cGVjdGVk
PFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VFZmZlY3RmdWxQcmVmaXgo
KTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+IHBhcnNl
RWZmZWN0ZnVsU3VmZml4KCk7CisgICAgc3RydWN0IFN1ZmZpeEV4cHJlc3Npb24geworICAgICAg
ICBTdWZmaXhFeHByZXNzaW9uKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgcmVzdWx0LCBi
b29sIHN1Y2Nlc3MpCisgICAgICAgICAgICA6IHJlc3VsdChXVEZNb3ZlKHJlc3VsdCkpCisgICAg
ICAgICAgICAsIHN1Y2Nlc3Moc3VjY2VzcykKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4gcmVzdWx0OworICAgICAgICBib29sIHN1Y2Nl
c3M7CisgICAgICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBzdWNjZXNzOyB9Cisg
ICAgfTsKKyAgICBTdWZmaXhFeHByZXNzaW9uIHBhcnNlTGltaXRlZFN1ZmZpeE9wZXJhdG9yKFVu
aXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYpOworICAgIFN1ZmZpeEV4cHJlc3Npb24gcGFyc2VT
dWZmaXhPcGVyYXRvcihVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmKTsKKworICAgIEV4cGVj
dGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VFeHByZXNzaW9uKCk7
CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZVRl
cm5hcnlDb25kaXRpb25hbCgpOworICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+LCBFcnJvcj4gcGFyc2VBc3NpZ25tZW50KCk7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZVBvc3NpYmxlVGVybmFyeUNvbmRpdGlvbmFsKCk7
CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZVBv
c3NpYmxlTG9naWNhbEJpbmFyeU9wZXJhdGlvbigpOworICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VQb3NzaWJsZVJlbGF0aW9uYWxCaW5hcnlPcGVy
YXRpb24oKTsKKyAgICBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+
IHBhcnNlUG9zc2libGVTaGlmdCgpOworICAgIEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+LCBFcnJvcj4gcGFyc2VQb3NzaWJsZUFkZCgpOworICAgIEV4cGVjdGVkPFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4gcGFyc2VQb3NzaWJsZU11bHRpcGx5KCk7CisgICAg
RXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZVBvc3NpYmxl
UHJlZml4KCk7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9y
PiBwYXJzZVBvc3NpYmxlU3VmZml4KCk7CisgICAgRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4sIEVycm9yPiBwYXJzZUNhbGxFeHByZXNzaW9uKCk7CisgICAgRXhwZWN0ZWQ8VW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPiBwYXJzZVRlcm0oKTsKKworICAgIExleGVy
IG1fbGV4ZXI7CisgICAgTW9kZSBtX21vZGU7Cit9OworCit9CisKK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDYwZTk0NmZkZGEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByZXBhcmUuY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdF
QkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMUHJlcGFyZS5oIgor
CisjaW5jbHVkZSAiV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIldI
TFNMQ2hlY2tlci5oIgorI2luY2x1ZGUgIldITFNMTmFtZVJlc29sdmVyLmgiCisjaW5jbHVkZSAi
V0hMU0xQYXJzZXIuaCIKKyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExT
TFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgiCisjaW5jbHVkZSAiV0hMU0xTdGFuZGFyZExpYnJhcnku
aCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmgiCisjaW5j
bHVkZSAiV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50
aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVT
dHJ1Y3R1cmVBY2Nlc3NvcnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ug
V0hMU0wgeworCitPcHRpb25hbDxQcmVwYXJhdGlvblJlc3VsdD4gcHJlcGFyZShTdHJpbmdWaWV3
IHNvdXJjZSkKK3sKKyAgICBQcm9ncmFtIHByb2dyYW07CisKKyAgICBQYXJzZXIgcGFyc2VyOwor
ICAgIGF1dG8gc3RhbmRhcmRMaWJyYXJ5ID0gU3RyaW5nOjpmcm9tVVRGOChXSExTTFN0YW5kYXJk
TGlicmFyeSwgc2l6ZW9mKFdITFNMU3RhbmRhcmRMaWJyYXJ5KSk7CisgICAgYm9vbCBzdWNjZXNz
ID0gc3RhdGljX2Nhc3Q8Ym9vbD4ocGFyc2VyLnBhcnNlKHByb2dyYW0sIHN0YW5kYXJkTGlicmFy
eSwgV0hMU0w6OlBhcnNlcjo6TW9kZTo6U3RhbmRhcmRMaWJyYXJ5KSk7CisgICAgaWYgKCFzdWNj
ZXNzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHN1Y2Nlc3MgPSBzdGF0aWNf
Y2FzdDxib29sPihwYXJzZXIucGFyc2UocHJvZ3JhbSwgc291cmNlLCBXSExTTDo6UGFyc2VyOjpN
b2RlOjpVc2VyKSk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgTmFtZVJlc29sdmVyIG5hbWVSZXNvbHZlcihwcm9ncmFtLm5hbWVDb250ZXh0
KCkpOworICAgIGlmICghcmVzb2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIp
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmICghY2hlY2tSZWN1cnNpdmVU
eXBlcyhwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBzeW50aGVz
aXplU3RydWN0dXJlQWNjZXNzb3JzKHByb2dyYW0pOworICAgIHN5bnRoZXNpemVFbnVtZXJhdGlv
bkZ1bmN0aW9ucyhwcm9ncmFtKTsKKyAgICBzeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aChw
cm9ncmFtKTsKKyAgICBzeW50aGVzaXplQ29uc3RydWN0b3JzKHByb2dyYW0pOworICAgIGlmICgh
Y2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMocHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgaWYgKCFyZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhwcm9ncmFtLCBuYW1lUmVz
b2x2ZXIpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisKKyAgICBpZiAoY2hlY2so
cHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFByZXBh
cmF0aW9uUmVzdWx0KCk7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA5NDkyNjcyNGY2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z1ZpZXcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitz
dHJ1Y3QgUHJlcGFyYXRpb25SZXN1bHQKK3sKKyAgICAvLyBNZXRhbCBzaGFkaW5nIGxhbmd1YWdl
IGNvZGUKKyAgICAvLyBNYXBwaW5nIG9mIGF0dHJpYnV0ZSBJRHMKKyAgICAvLyBldGMuCit9Owor
CitPcHRpb25hbDxQcmVwYXJhdGlvblJlc3VsdD4gcHJlcGFyZShTdHJpbmdWaWV3IHNvdXJjZSk7
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUHJvZ3JhbS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjBkODIwN2RiMGUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9ncmFtLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJX
SExTTEVudW1lcmF0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWZp
bml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xO
YW1lQ29udGV4dC5oIgorI2luY2x1ZGUgIldITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5o
IgorI2luY2x1ZGUgIldITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlRGVmaW5pdGlvbi5o
IgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1l
c3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtIHsKK3B1YmxpYzoKKyAgICBQcm9ncmFtKCkg
PSBkZWZhdWx0OworICAgIFByb2dyYW0oUHJvZ3JhbSYmKSA9IGRlZmF1bHQ7CisKKyAgICBib29s
IGFwcGVuZChBU1Q6OlR5cGVEZWZpbml0aW9uJiYgdHlwZURlZmluaXRpb24pCisgICAgeworICAg
ICAgICBtX3R5cGVEZWZpbml0aW9ucy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6OlR5cGVEZWZp
bml0aW9uPihXVEZNb3ZlKHR5cGVEZWZpbml0aW9uKSkpOworICAgICAgICByZXR1cm4gbV9uYW1l
Q29udGV4dC5hZGQoc3RhdGljX2Nhc3Q8QVNUOjpUeXBlRGVmaW5pdGlvbiY+KG1fdHlwZURlZmlu
aXRpb25zLmxhc3QoKSkpOworICAgIH0KKworICAgIGJvb2wgYXBwZW5kKEFTVDo6U3RydWN0dXJl
RGVmaW5pdGlvbiYmIHN0cnVjdHVyZURlZmluaXRpb24pCisgICAgeworICAgICAgICBtX3N0cnVj
dHVyZURlZmluaXRpb25zLmFwcGVuZChtYWtlVW5pcXVlUmVmPEFTVDo6U3RydWN0dXJlRGVmaW5p
dGlvbj4oV1RGTW92ZShzdHJ1Y3R1cmVEZWZpbml0aW9uKSkpOworICAgICAgICByZXR1cm4gbV9u
YW1lQ29udGV4dC5hZGQoc3RhdGljX2Nhc3Q8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJj4obV9z
dHJ1Y3R1cmVEZWZpbml0aW9ucy5sYXN0KCkpKTsKKyAgICB9CisKKyAgICBib29sIGFwcGVuZChB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYmIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKKyAgICB7
CisgICAgICAgIG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShlbnVtZXJhdGlvbkRlZmluaXRpb24p
KSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZChzdGF0aWNfY2FzdDxBU1Q6OkVu
dW1lcmF0aW9uRGVmaW5pdGlvbiY+KG1fZW51bWVyYXRpb25EZWZpbml0aW9ucy5sYXN0KCkpKTsK
KyAgICB9CisKKyAgICBib29sIGFwcGVuZChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYmIGZ1bmN0
aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIG1fZnVuY3Rpb25EZWZpbml0aW9ucy5hcHBl
bmQobWFrZVVuaXF1ZVJlZjxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbj4oV1RGTW92ZShmdW5jdGlv
bkRlZmluaXRpb24pKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZChzdGF0aWNf
Y2FzdDxBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiY+KG1fZnVuY3Rpb25EZWZpbml0aW9ucy5sYXN0
KCkpKTsKKyAgICB9CisKKyAgICBib29sIGFwcGVuZChBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24mJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKQorICAgIHsKKyAgICAgICAgbV9uYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24+KFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpKTsK
KyAgICAgICAgbV9pbnRyaW5zaWNzLmFkZChzdGF0aWNfY2FzdDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9u
RGVjbGFyYXRpb24mPihtX25hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zLmxhc3QoKSkpOworICAg
ICAgICByZXR1cm4gbV9uYW1lQ29udGV4dC5hZGQoc3RhdGljX2Nhc3Q8QVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uJj4obV9uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucy5sYXN0KCkpKTsK
KyAgICB9CisKKyAgICBib29sIGFwcGVuZChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYmIG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbikKKyAgICB7CisgICAgICAgIG1fbmF0aXZlVHlwZURlY2xhcmF0
aW9ucy5hcHBlbmQobWFrZVVuaXF1ZVJlZjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oV1RG
TW92ZShuYXRpdmVUeXBlRGVjbGFyYXRpb24pKSk7CisgICAgICAgIG1faW50cmluc2ljcy5hZGQo
c3RhdGljX2Nhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mPihtX25hdGl2ZVR5cGVEZWNs
YXJhdGlvbnMubGFzdCgpKSk7CisgICAgICAgIHJldHVybiBtX25hbWVDb250ZXh0LmFkZChzdGF0
aWNfY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiY+KG1fbmF0aXZlVHlwZURlY2xhcmF0
aW9ucy5sYXN0KCkpKTsKKyAgICB9CisKKyAgICBOYW1lQ29udGV4dCYgbmFtZUNvbnRleHQoKSB7
IHJldHVybiBtX25hbWVDb250ZXh0OyB9CisgICAgSW50cmluc2ljcyYgaW50cmluc2ljcygpIHsg
cmV0dXJuIG1faW50cmluc2ljczsgfQorICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpUeXBlRGVm
aW5pdGlvbj4+JiB0eXBlRGVmaW5pdGlvbnMoKSB7IHJldHVybiBtX3R5cGVEZWZpbml0aW9uczsg
fQorICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uPj4mIHN0cnVj
dHVyZURlZmluaXRpb25zKCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVEZWZpbml0aW9uczsgfQorICAg
IFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+PiYgZW51bWVyYXRp
b25EZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uczsgfQorICAg
IGNvbnN0IFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+PiYgZnVuY3Rp
b25EZWZpbml0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZnVuY3Rpb25EZWZpbml0aW9uczsgfQor
ICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+PiYgZnVuY3Rpb25E
ZWZpbml0aW9ucygpIHsgcmV0dXJuIG1fZnVuY3Rpb25EZWZpbml0aW9uczsgfQorICAgIGNvbnN0
IFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPj4mIG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9uYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uczsgfQorICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uPj4mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkgeyByZXR1cm4gbV9uYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uczsgfQorICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24+PiYgbmF0aXZlVHlwZURlY2xhcmF0aW9ucygpIHsgcmV0dXJuIG1f
bmF0aXZlVHlwZURlY2xhcmF0aW9uczsgfQorCitwcml2YXRlOgorICAgIE5hbWVDb250ZXh0IG1f
bmFtZUNvbnRleHQ7CisgICAgSW50cmluc2ljcyBtX2ludHJpbnNpY3M7CisgICAgVmVjdG9yPFVu
aXF1ZVJlZjxBU1Q6OlR5cGVEZWZpbml0aW9uPj4gbV90eXBlRGVmaW5pdGlvbnM7CisgICAgVmVj
dG9yPFVuaXF1ZVJlZjxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24+PiBtX3N0cnVjdHVyZURlZmlu
aXRpb25zOworICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+
PiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbnM7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbj4+IG1fZnVuY3Rpb25EZWZpbml0aW9uczsKKyAgICBWZWN0b3I8VW5p
cXVlUmVmPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4+IG1fbmF0aXZlRnVuY3Rpb25E
ZWNsYXJhdGlvbnM7CisgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4+IG1fbmF0aXZlVHlwZURlY2xhcmF0aW9uczsKK307CisKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVj
dXJzaXZlVHlwZUNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAuLmQ2YjFiNGE5ODM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAK
QEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCIK
KworI2luY2x1ZGUgIldITFNMVmlzaXRvci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUmVjdXJz
aXZlVHlwZUNoZWNrZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgflJlY3Vyc2l2
ZVR5cGVDaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZp
bml0aW9uJiB0eXBlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV90eXBlcy5hZGQoJnR5cGVEZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKGFkZFJl
c3VsdC5pc05ld0VudHJ5KSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVEZWZp
bml0aW9uKTsKKworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmdHlwZURl
ZmluaXRpb24pOworICAgICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MpOworICAg
IH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVE
ZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5
cGVzLmFkZCgmc3RydWN0dXJlRGVmaW5pdGlvbik7CisgICAgICAgIGlmIChhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVEZWZpbml0
aW9uKTsKKworICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBtX3R5cGVzLnJlbW92ZSgmc3RydWN0dXJl
RGVmaW5pdGlvbik7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2Vzcyk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2Up
IG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZXMuYWRkKCZ0
eXBlUmVmZXJlbmNlKTsKKyAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CisgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgZm9yIChhdXRvJiB0eXBlQXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVu
dHMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlQXJndW1lbnQpOworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwor
CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IG1fdHlwZXMucmVtb3ZlKCZ0eXBlUmVmZXJlbmNlKTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBIYXNoU2V0PEFTVDo6VHlwZSo+IG1fdHlwZXM7Cit9OworCitib29sIGNo
ZWNrUmVjdXJzaXZlVHlwZXMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBSZWN1cnNpdmVUeXBl
Q2hlY2tlciByZWN1cnNpdmVUeXBlQ2hlY2tlcjsKKyAgICByZWN1cnNpdmVUeXBlQ2hlY2tlci5j
aGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAgcmV0dXJuIHJlY3Vyc2l2ZVR5cGVDaGVj
a2VyLmVycm9yKCk7Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNo
ZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWEzYTE5ZGNl
MjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK2Jvb2wgY2hl
Y2tSZWN1cnNpdmVUeXBlcyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJs
b2FkSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJl
c29sdmVPdmVybG9hZEltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5lZTI1MWM2N2YwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5jcHAKQEAgLTAsMCArMSwx
MTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oIgorCisjaW5jbHVkZSAi
V0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlZmlu
aXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlIDxsaW1pdHM+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworc3RhdGljIHVu
c2lnbmVkIGNvbnZlcnNpb25Db3N0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgY2FuZGlkYXRl
LCBjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIGFy
Z3VtZW50VHlwZXMpCit7CisgICAgdW5zaWduZWQgY29udmVyc2lvbkNvc3QgPSAwOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FuZGlkYXRlLnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkg
eworICAgICAgICBjb252ZXJzaW9uQ29zdCArPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYpIC0+IHVuc2lnbmVkIHsKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
PiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IHVuc2lnbmVkIHsKKyAgICAgICAgICAgIHJl
dHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5jb252ZXJzaW9u
Q29zdCgqY2FuZGlkYXRlLnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpOworICAgICAgICB9KSwgYXJn
dW1lbnRUeXBlc1tpXS5nZXQoKSk7CisgICAgfQorICAgIC8vIFRoZSByZXR1cm4gdHlwZSBjYW4g
bmV2ZXIgYmUgYSBsaXRlcmFsIHR5cGUsIHNvIGl0cyBjb252ZXJzaW9uIGNvc3QgaXMgYWx3YXlz
IDAuCisgICAgcmV0dXJuIGNvbnZlcnNpb25Db3N0OworfQorCitBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24qIHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiYgcG9zc2libGVGdW5jdGlvbnMs
IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgYXJndW1lbnRU
eXBlcywgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+JiBj
YXN0UmV0dXJuVHlwZSkKK3sKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBjYW5kaWRhdGVzOworICAgIGZvciAoYXV0byYgcG9z
c2libGVGdW5jdGlvbiA6IHBvc3NpYmxlRnVuY3Rpb25zKSB7CisgICAgICAgIGlmIChwb3NzaWJs
ZUZ1bmN0aW9uLmdldCgpLmVudHJ5UG9pbnRUeXBlKCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKGluZmVyVHlwZXNGb3JDYWxsKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCksIGFy
Z3VtZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKSkKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMuYXBw
ZW5kKHBvc3NpYmxlRnVuY3Rpb24uZ2V0KCkpOworICAgIH0KKworICAgIHVuc2lnbmVkIG1pbmlt
dW1Db252ZXJzaW9uQ29zdCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsK
KyAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZXMpCisgICAgICAgIG1pbmltdW1D
b252ZXJzaW9uQ29zdCA9IHN0ZDo6bWluKG1pbmltdW1Db252ZXJzaW9uQ29zdCwgY29udmVyc2lv
bkNvc3QoY2FuZGlkYXRlLmdldCgpLCBhcmd1bWVudFR5cGVzKSk7CisKKyAgICBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24+LCAxPiBtaW5pbXVt
Q29zdENhbmRpZGF0ZXM7CisgICAgZm9yIChhdXRvJiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVzKSB7
CisgICAgICAgIGlmIChjb252ZXJzaW9uQ29zdChjYW5kaWRhdGUuZ2V0KCksIGFyZ3VtZW50VHlw
ZXMpID09IG1pbmltdW1Db252ZXJzaW9uQ29zdCkKKyAgICAgICAgICAgIG1pbmltdW1Db3N0Q2Fu
ZGlkYXRlcy5hcHBlbmQoY2FuZGlkYXRlKTsKKyAgICB9CisKKyAgICBib29sIHJlc3RyaWN0ZWRD
YW5kaWRhdGVFeGlzdHMgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGNhbmRpZGF0ZSA6IG1pbmlt
dW1Db3N0Q2FuZGlkYXRlcykgeworICAgICAgICBpZiAoaXM8QVNUOjpGdW5jdGlvbkRlZmluaXRp
b24+KGNhbmRpZGF0ZS5nZXQoKSkgJiYgZG93bmNhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+
KGNhbmRpZGF0ZS5nZXQoKSkucmVzdHJpY3RlZCgpKSB7CisgICAgICAgICAgICByZXN0cmljdGVk
Q2FuZGlkYXRlRXhpc3RzID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorCisgICAgY2FuZGlkYXRlcy5jbGVhcigpOworICAgIGlmIChyZXN0cmljdGVkQ2FuZGlk
YXRlRXhpc3RzKSB7CisgICAgICAgIGZvciAoYXV0byYgY2FuZGlkYXRlIDogbWluaW11bUNvc3RD
YW5kaWRhdGVzKSB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+
KGNhbmRpZGF0ZS5nZXQoKSkgJiYgZG93bmNhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24+KGNh
bmRpZGF0ZS5nZXQoKSkucmVzdHJpY3RlZCgpKQorICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMu
YXBwZW5kKGNhbmRpZGF0ZS5nZXQoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAg
Y2FuZGlkYXRlcyA9IG1pbmltdW1Db3N0Q2FuZGlkYXRlczsKKworICAgIGlmIChjYW5kaWRhdGVz
LnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gJmNhbmRpZGF0ZXNbMF0uZ2V0KCk7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK0FTVDo6TmFtZWRUeXBlKiByZXNvbHZlVHlwZU92ZXJsb2Fk
SW1wbChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4sIDE+JiBw
b3NzaWJsZVR5cGVzLCBBU1Q6OlR5cGVBcmd1bWVudHMmIHR5cGVBcmd1bWVudHMpCit7CisgICAg
QVNUOjpOYW1lZFR5cGUqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgZm9yIChhdXRvJiBwb3NzaWJs
ZVR5cGUgOiBwb3NzaWJsZVR5cGVzKSB7CisgICAgICAgIGlmIChpbmZlclR5cGVzRm9yVHlwZUFy
Z3VtZW50cyhwb3NzaWJsZVR5cGUsIHR5cGVBcmd1bWVudHMpKSB7CisgICAgICAgICAgICBpZiAo
cmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmVz
dWx0ID0gJnN0YXRpY19jYXN0PEFTVDo6TmFtZWRUeXBlJj4ocG9zc2libGVUeXBlKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30KKworfQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUmVz
b2x2ZU92ZXJsb2FkSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmFjNzkwM2JhZmMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmgKQEAgLTAsMCAr
MSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkK
KworI2luY2x1ZGUgIldITFNMUmVzb2x2aW5nVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZUFy
Z3VtZW50LmgiCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNl
IEFTVCB7CisKK2NsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFzcyBOYW1lZFR5cGU7CisK
K30KKworQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiByZXNvbHZlRnVuY3Rpb25PdmVybG9hZElt
cGwoVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9u
PiwgMT4mIHBvc3NpYmxlRnVuY3Rpb25zLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxS
ZXNvbHZpbmdUeXBlPj4mIGFyZ3VtZW50VHlwZXMsIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8QVNUOjpOYW1lZFR5cGU+PiYgY2FzdFJldHVyblR5cGUpOworQVNUOjpOYW1lZFR5cGUq
IHJlc29sdmVUeXBlT3ZlcmxvYWRJbXBsKFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFT
VDo6TmFtZWRUeXBlPiwgMT4mLCBBU1Q6OlR5cGVBcmd1bWVudHMmKTsKKworfQorCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xSZXNvbHZpbmdUeXBlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFJlc29sdmluZ1R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MC4uOTdjMGViYWU4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTFJlc29sdmluZ1R5cGUuaApAQCAtMCwwICsxLDY5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSA8
bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgorI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK25hbWVzcGFjZSBB
U1QgeworCitjbGFzcyBSZXNvbHZhYmxlVHlwZTsKK2NsYXNzIFVubmFtZWRUeXBlOworCit9CisK
K2NsYXNzIFJlc29sdmFibGVUeXBlUmVmZXJlbmNlIDogcHVibGljIFJlZkNvdW50ZWQ8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+IHsKK3B1YmxpYzoKKyAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZShBU1Q6OlJlc29sdmFibGVUeXBlJiByZXNvbHZhYmxlVHlwZSkKKyAgICAgICAgOiBtX3Jlc29s
dmFibGVUeXBlKCZyZXNvbHZhYmxlVHlwZSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2UoY29uc3QgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UmKSA9IGRlbGV0ZTsK
KyAgICBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSYmKSA9
IGRlbGV0ZTsKKworICAgIEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJlc29sdmFibGVUeXBlKCkgeyBy
ZXR1cm4gKm1fcmVzb2x2YWJsZVR5cGU7IH0KKworcHJpdmF0ZToKKyAgICBBU1Q6OlJlc29sdmFi
bGVUeXBlKiBtX3Jlc29sdmFibGVUeXBlOworfTsKKwordXNpbmcgUmVzb2x2aW5nVHlwZSA9IFZh
cmlhbnQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBSZWY8UmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2U+PjsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0IGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41NzA3NDdiMjNiNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRh
cmRMaWJyYXJ5LnR4dApAQCAtMCwwICsxLDQ3MSBAQAorLy8gaHR0cHM6Ly9naXRodWIuY29tL2dw
dXdlYi9XSExTTC9ibG9iLzk1MjhmMTlhYWE3MWZkNWMzYzcwNmQyODczZjRiOGM4Y2NlODU3YjUv
U3BlYy9zb3VyY2UvR2VuZXJhdGVfU3RhbmRhcmRfTGlicmFyeS5qcworLy8gVGhpcyB3YXMgYXV0
b2dlbmVyYXRlZCBmcm9tIEdlbmVyYXRlX1N0YW5kYXJkX0xpYnJhcnkuanMhIERvIG5vdCBlZGl0
ISEKKworbmF0aXZlIHR5cGVkZWYgdm9pZDsKK25hdGl2ZSB0eXBlZGVmIGJvb2w7CituYXRpdmUg
dHlwZWRlZiB1Y2hhcjsKK25hdGl2ZSB0eXBlZGVmIHVzaG9ydDsKK25hdGl2ZSB0eXBlZGVmIHVp
bnQ7CituYXRpdmUgdHlwZWRlZiBjaGFyOworbmF0aXZlIHR5cGVkZWYgc2hvcnQ7CituYXRpdmUg
dHlwZWRlZiBpbnQ7CituYXRpdmUgdHlwZWRlZiBoYWxmOworbmF0aXZlIHR5cGVkZWYgZmxvYXQ7
CituYXRpdmUgdHlwZWRlZiBhdG9taWNfaW50OworbmF0aXZlIHR5cGVkZWYgYXRvbWljX3VpbnQ7
CituYXRpdmUgdHlwZWRlZiB2ZWN0b3I8Ym9vbCwgMj47Cit0eXBlZGVmIGJvb2wyID0gdmVjdG9y
PGJvb2wsIDI+OworbmF0aXZlIHR5cGVkZWYgdmVjdG9yPGJvb2wsIDM+OwordHlwZWRlZiBib29s
MyA9IHZlY3Rvcjxib29sLCAzPjsKK25hdGl2ZSB0eXBlZGVmIHZlY3Rvcjxib29sLCA0PjsKK3R5
cGVkZWYgYm9vbDQgPSB2ZWN0b3I8Ym9vbCwgND47CituYXRpdmUgdHlwZWRlZiB2ZWN0b3I8dWNo
YXIsIDI+OwordHlwZWRlZiB1Y2hhcjIgPSB2ZWN0b3I8dWNoYXIsIDI+OworbmF0aXZlIHR5cGVk
ZWYgdmVjdG9yPHVjaGFyLCAzPjsKK3R5cGVkZWYgdWNoYXIzID0gdmVjdG9yPHVjaGFyLCAzPjsK
K25hdGl2ZSB0eXBlZGVmIHZlY3Rvcjx1Y2hhciwgND47Cit0eXBlZGVmIHVjaGFyNCA9IHZlY3Rv
cjx1Y2hhciwgND47CituYXRpdmUgdHlwZWRlZiB2ZWN0b3I8dXNob3J0LCAyPjsKK3R5cGVkZWYg
dXNob3J0MiA9IHZlY3Rvcjx1c2hvcnQsIDI+OworbmF0aXZlIHR5cGVkZWYgdmVjdG9yPHVzaG9y
dCwgMz47Cit0eXBlZGVmIHVzaG9ydDMgPSB2ZWN0b3I8dXNob3J0LCAzPjsKK25hdGl2ZSB0eXBl
ZGVmIHZlY3Rvcjx1c2hvcnQsIDQ+OwordHlwZWRlZiB1c2hvcnQ0ID0gdmVjdG9yPHVzaG9ydCwg
ND47CituYXRpdmUgdHlwZWRlZiB2ZWN0b3I8dWludCwgMj47Cit0eXBlZGVmIHVpbnQyID0gdmVj
dG9yPHVpbnQsIDI+OworbmF0aXZlIHR5cGVkZWYgdmVjdG9yPHVpbnQsIDM+OwordHlwZWRlZiB1
aW50MyA9IHZlY3Rvcjx1aW50LCAzPjsKK25hdGl2ZSB0eXBlZGVmIHZlY3Rvcjx1aW50LCA0PjsK
K3R5cGVkZWYgdWludDQgPSB2ZWN0b3I8dWludCwgND47CituYXRpdmUgdHlwZWRlZiB2ZWN0b3I8
Y2hhciwgMj47Cit0eXBlZGVmIGNoYXIyID0gdmVjdG9yPGNoYXIsIDI+OworbmF0aXZlIHR5cGVk
ZWYgdmVjdG9yPGNoYXIsIDM+OwordHlwZWRlZiBjaGFyMyA9IHZlY3RvcjxjaGFyLCAzPjsKK25h
dGl2ZSB0eXBlZGVmIHZlY3RvcjxjaGFyLCA0PjsKK3R5cGVkZWYgY2hhcjQgPSB2ZWN0b3I8Y2hh
ciwgND47CituYXRpdmUgdHlwZWRlZiB2ZWN0b3I8c2hvcnQsIDI+OwordHlwZWRlZiBzaG9ydDIg
PSB2ZWN0b3I8c2hvcnQsIDI+OworbmF0aXZlIHR5cGVkZWYgdmVjdG9yPHNob3J0LCAzPjsKK3R5
cGVkZWYgc2hvcnQzID0gdmVjdG9yPHNob3J0LCAzPjsKK25hdGl2ZSB0eXBlZGVmIHZlY3Rvcjxz
aG9ydCwgND47Cit0eXBlZGVmIHNob3J0NCA9IHZlY3RvcjxzaG9ydCwgND47CituYXRpdmUgdHlw
ZWRlZiB2ZWN0b3I8aW50LCAyPjsKK3R5cGVkZWYgaW50MiA9IHZlY3RvcjxpbnQsIDI+OworbmF0
aXZlIHR5cGVkZWYgdmVjdG9yPGludCwgMz47Cit0eXBlZGVmIGludDMgPSB2ZWN0b3I8aW50LCAz
PjsKK25hdGl2ZSB0eXBlZGVmIHZlY3RvcjxpbnQsIDQ+OwordHlwZWRlZiBpbnQ0ID0gdmVjdG9y
PGludCwgND47CituYXRpdmUgdHlwZWRlZiB2ZWN0b3I8aGFsZiwgMj47Cit0eXBlZGVmIGhhbGYy
ID0gdmVjdG9yPGhhbGYsIDI+OworbmF0aXZlIHR5cGVkZWYgdmVjdG9yPGhhbGYsIDM+OwordHlw
ZWRlZiBoYWxmMyA9IHZlY3RvcjxoYWxmLCAzPjsKK25hdGl2ZSB0eXBlZGVmIHZlY3RvcjxoYWxm
LCA0PjsKK3R5cGVkZWYgaGFsZjQgPSB2ZWN0b3I8aGFsZiwgND47CituYXRpdmUgdHlwZWRlZiB2
ZWN0b3I8ZmxvYXQsIDI+OwordHlwZWRlZiBmbG9hdDIgPSB2ZWN0b3I8ZmxvYXQsIDI+OworbmF0
aXZlIHR5cGVkZWYgdmVjdG9yPGZsb2F0LCAzPjsKK3R5cGVkZWYgZmxvYXQzID0gdmVjdG9yPGZs
b2F0LCAzPjsKK25hdGl2ZSB0eXBlZGVmIHZlY3RvcjxmbG9hdCwgND47Cit0eXBlZGVmIGZsb2F0
NCA9IHZlY3RvcjxmbG9hdCwgND47CisKK25hdGl2ZSB0eXBlZGVmIG1hdHJpeDxoYWxmLCAyLCAy
PjsKK3R5cGVkZWYgaGFsZjJ4MiA9IG1hdHJpeDxoYWxmLCAyLCAyPjsKK25hdGl2ZSB0eXBlZGVm
IG1hdHJpeDxoYWxmLCAyLCAzPjsKK3R5cGVkZWYgaGFsZjJ4MyA9IG1hdHJpeDxoYWxmLCAyLCAz
PjsKK25hdGl2ZSB0eXBlZGVmIG1hdHJpeDxoYWxmLCAyLCA0PjsKK3R5cGVkZWYgaGFsZjJ4NCA9
IG1hdHJpeDxoYWxmLCAyLCA0PjsKK25hdGl2ZSB0eXBlZGVmIG1hdHJpeDxoYWxmLCAzLCAyPjsK
K3R5cGVkZWYgaGFsZjN4MiA9IG1hdHJpeDxoYWxmLCAzLCAyPjsKK25hdGl2ZSB0eXBlZGVmIG1h
dHJpeDxoYWxmLCAzLCAzPjsKK3R5cGVkZWYgaGFsZjN4MyA9IG1hdHJpeDxoYWxmLCAzLCAzPjsK
K25hdGl2ZSB0eXBlZGVmIG1hdHJpeDxoYWxmLCAzLCA0PjsKK3R5cGVkZWYgaGFsZjN4NCA9IG1h
dHJpeDxoYWxmLCAzLCA0PjsKK25hdGl2ZSB0eXBlZGVmIG1hdHJpeDxoYWxmLCA0LCAyPjsKK3R5
cGVkZWYgaGFsZjR4MiA9IG1hdHJpeDxoYWxmLCA0LCAyPjsKK25hdGl2ZSB0eXBlZGVmIG1hdHJp
eDxoYWxmLCA0LCAzPjsKK3R5cGVkZWYgaGFsZjR4MyA9IG1hdHJpeDxoYWxmLCA0LCAzPjsKK25h
dGl2ZSB0eXBlZGVmIG1hdHJpeDxoYWxmLCA0LCA0PjsKK3R5cGVkZWYgaGFsZjR4NCA9IG1hdHJp
eDxoYWxmLCA0LCA0PjsKK25hdGl2ZSB0eXBlZGVmIG1hdHJpeDxmbG9hdCwgMiwgMj47Cit0eXBl
ZGVmIGZsb2F0MngyID0gbWF0cml4PGZsb2F0LCAyLCAyPjsKK25hdGl2ZSB0eXBlZGVmIG1hdHJp
eDxmbG9hdCwgMiwgMz47Cit0eXBlZGVmIGZsb2F0MngzID0gbWF0cml4PGZsb2F0LCAyLCAzPjsK
K25hdGl2ZSB0eXBlZGVmIG1hdHJpeDxmbG9hdCwgMiwgND47Cit0eXBlZGVmIGZsb2F0Mng0ID0g
bWF0cml4PGZsb2F0LCAyLCA0PjsKK25hdGl2ZSB0eXBlZGVmIG1hdHJpeDxmbG9hdCwgMywgMj47
Cit0eXBlZGVmIGZsb2F0M3gyID0gbWF0cml4PGZsb2F0LCAzLCAyPjsKK25hdGl2ZSB0eXBlZGVm
IG1hdHJpeDxmbG9hdCwgMywgMz47Cit0eXBlZGVmIGZsb2F0M3gzID0gbWF0cml4PGZsb2F0LCAz
LCAzPjsKK25hdGl2ZSB0eXBlZGVmIG1hdHJpeDxmbG9hdCwgMywgND47Cit0eXBlZGVmIGZsb2F0
M3g0ID0gbWF0cml4PGZsb2F0LCAzLCA0PjsKK25hdGl2ZSB0eXBlZGVmIG1hdHJpeDxmbG9hdCwg
NCwgMj47Cit0eXBlZGVmIGZsb2F0NHgyID0gbWF0cml4PGZsb2F0LCA0LCAyPjsKK25hdGl2ZSB0
eXBlZGVmIG1hdHJpeDxmbG9hdCwgNCwgMz47Cit0eXBlZGVmIGZsb2F0NHgzID0gbWF0cml4PGZs
b2F0LCA0LCAzPjsKK25hdGl2ZSB0eXBlZGVmIG1hdHJpeDxmbG9hdCwgNCwgND47Cit0eXBlZGVm
IGZsb2F0NHg0ID0gbWF0cml4PGZsb2F0LCA0LCA0PjsKK25hdGl2ZSB0eXBlZGVmIHNhbXBsZXI7
CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMUQ8dWNoYXI+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVy
ZTFEPHVjaGFyMj47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMUQ8dWNoYXIzPjsKK25hdGl2ZSB0
eXBlZGVmIFRleHR1cmUxRDx1Y2hhcjQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTFEPHVzaG9y
dD47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMUQ8dXNob3J0Mj47CituYXRpdmUgdHlwZWRlZiBU
ZXh0dXJlMUQ8dXNob3J0Mz47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMUQ8dXNob3J0ND47Citu
YXRpdmUgdHlwZWRlZiBUZXh0dXJlMUQ8dWludD47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMUQ8
dWludDI+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTFEPHVpbnQzPjsKK25hdGl2ZSB0eXBlZGVm
IFRleHR1cmUxRDx1aW50ND47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMUQ8Y2hhcj47CituYXRp
dmUgdHlwZWRlZiBUZXh0dXJlMUQ8Y2hhcjI+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTFEPGNo
YXIzPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUxRDxjaGFyND47CituYXRpdmUgdHlwZWRlZiBU
ZXh0dXJlMUQ8c2hvcnQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTFEPHNob3J0Mj47CituYXRp
dmUgdHlwZWRlZiBUZXh0dXJlMUQ8c2hvcnQzPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUxRDxz
aG9ydDQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTFEPGludD47CituYXRpdmUgdHlwZWRlZiBU
ZXh0dXJlMUQ8aW50Mj47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMUQ8aW50Mz47CituYXRpdmUg
dHlwZWRlZiBUZXh0dXJlMUQ8aW50ND47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMUQ8aGFsZj47
CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMUQ8aGFsZjI+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVy
ZTFEPGhhbGYzPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUxRDxoYWxmND47CituYXRpdmUgdHlw
ZWRlZiBUZXh0dXJlMUQ8ZmxvYXQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTFEPGZsb2F0Mj47
CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMUQ8ZmxvYXQzPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1
cmUxRDxmbG9hdDQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMUQ8dWNoYXI+OworbmF0aXZl
IHR5cGVkZWYgUldUZXh0dXJlMUQ8dWNoYXIyPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFE
PHVjaGFyMz47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUxRDx1Y2hhcjQ+OworbmF0aXZlIHR5
cGVkZWYgUldUZXh0dXJlMUQ8dXNob3J0PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFEPHVz
aG9ydDI+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMUQ8dXNob3J0Mz47CituYXRpdmUgdHlw
ZWRlZiBSV1RleHR1cmUxRDx1c2hvcnQ0PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFEPHVp
bnQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMUQ8dWludDI+OworbmF0aXZlIHR5cGVkZWYg
UldUZXh0dXJlMUQ8dWludDM+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMUQ8dWludDQ+Owor
bmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMUQ8Y2hhcj47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1
cmUxRDxjaGFyMj47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUxRDxjaGFyMz47CituYXRpdmUg
dHlwZWRlZiBSV1RleHR1cmUxRDxjaGFyND47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUxRDxz
aG9ydD47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUxRDxzaG9ydDI+OworbmF0aXZlIHR5cGVk
ZWYgUldUZXh0dXJlMUQ8c2hvcnQzPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFEPHNob3J0
ND47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUxRDxpbnQ+OworbmF0aXZlIHR5cGVkZWYgUldU
ZXh0dXJlMUQ8aW50Mj47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUxRDxpbnQzPjsKK25hdGl2
ZSB0eXBlZGVmIFJXVGV4dHVyZTFEPGludDQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMUQ8
aGFsZj47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUxRDxoYWxmMj47CituYXRpdmUgdHlwZWRl
ZiBSV1RleHR1cmUxRDxoYWxmMz47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUxRDxoYWxmND47
CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUxRDxmbG9hdD47CituYXRpdmUgdHlwZWRlZiBSV1Rl
eHR1cmUxRDxmbG9hdDI+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMUQ8ZmxvYXQzPjsKK25h
dGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFEPGZsb2F0ND47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJl
MURBcnJheTx1Y2hhcj47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMURBcnJheTx1Y2hhcjI+Owor
bmF0aXZlIHR5cGVkZWYgVGV4dHVyZTFEQXJyYXk8dWNoYXIzPjsKK25hdGl2ZSB0eXBlZGVmIFRl
eHR1cmUxREFycmF5PHVjaGFyND47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMURBcnJheTx1c2hv
cnQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTFEQXJyYXk8dXNob3J0Mj47CituYXRpdmUgdHlw
ZWRlZiBUZXh0dXJlMURBcnJheTx1c2hvcnQzPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUxREFy
cmF5PHVzaG9ydDQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTFEQXJyYXk8dWludD47CituYXRp
dmUgdHlwZWRlZiBUZXh0dXJlMURBcnJheTx1aW50Mj47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJl
MURBcnJheTx1aW50Mz47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMURBcnJheTx1aW50ND47Citu
YXRpdmUgdHlwZWRlZiBUZXh0dXJlMURBcnJheTxjaGFyPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1
cmUxREFycmF5PGNoYXIyPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUxREFycmF5PGNoYXIzPjsK
K25hdGl2ZSB0eXBlZGVmIFRleHR1cmUxREFycmF5PGNoYXI0PjsKK25hdGl2ZSB0eXBlZGVmIFRl
eHR1cmUxREFycmF5PHNob3J0PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUxREFycmF5PHNob3J0
Mj47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMURBcnJheTxzaG9ydDM+OworbmF0aXZlIHR5cGVk
ZWYgVGV4dHVyZTFEQXJyYXk8c2hvcnQ0PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUxREFycmF5
PGludD47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMURBcnJheTxpbnQyPjsKK25hdGl2ZSB0eXBl
ZGVmIFRleHR1cmUxREFycmF5PGludDM+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTFEQXJyYXk8
aW50ND47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMURBcnJheTxoYWxmPjsKK25hdGl2ZSB0eXBl
ZGVmIFRleHR1cmUxREFycmF5PGhhbGYyPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUxREFycmF5
PGhhbGYzPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUxREFycmF5PGhhbGY0PjsKK25hdGl2ZSB0
eXBlZGVmIFRleHR1cmUxREFycmF5PGZsb2F0PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUxREFy
cmF5PGZsb2F0Mj47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMURBcnJheTxmbG9hdDM+OworbmF0
aXZlIHR5cGVkZWYgVGV4dHVyZTFEQXJyYXk8ZmxvYXQ0PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4
dHVyZTFEQXJyYXk8dWNoYXI+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMURBcnJheTx1Y2hh
cjI+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMURBcnJheTx1Y2hhcjM+OworbmF0aXZlIHR5
cGVkZWYgUldUZXh0dXJlMURBcnJheTx1Y2hhcjQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJl
MURBcnJheTx1c2hvcnQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMURBcnJheTx1c2hvcnQy
PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFEQXJyYXk8dXNob3J0Mz47CituYXRpdmUgdHlw
ZWRlZiBSV1RleHR1cmUxREFycmF5PHVzaG9ydDQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJl
MURBcnJheTx1aW50PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFEQXJyYXk8dWludDI+Owor
bmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMURBcnJheTx1aW50Mz47CituYXRpdmUgdHlwZWRlZiBS
V1RleHR1cmUxREFycmF5PHVpbnQ0PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFEQXJyYXk8
Y2hhcj47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUxREFycmF5PGNoYXIyPjsKK25hdGl2ZSB0
eXBlZGVmIFJXVGV4dHVyZTFEQXJyYXk8Y2hhcjM+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJl
MURBcnJheTxjaGFyND47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUxREFycmF5PHNob3J0PjsK
K25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFEQXJyYXk8c2hvcnQyPjsKK25hdGl2ZSB0eXBlZGVm
IFJXVGV4dHVyZTFEQXJyYXk8c2hvcnQzPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFEQXJy
YXk8c2hvcnQ0PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFEQXJyYXk8aW50PjsKK25hdGl2
ZSB0eXBlZGVmIFJXVGV4dHVyZTFEQXJyYXk8aW50Mj47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1
cmUxREFycmF5PGludDM+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMURBcnJheTxpbnQ0PjsK
K25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFEQXJyYXk8aGFsZj47CituYXRpdmUgdHlwZWRlZiBS
V1RleHR1cmUxREFycmF5PGhhbGYyPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFEQXJyYXk8
aGFsZjM+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMURBcnJheTxoYWxmND47CituYXRpdmUg
dHlwZWRlZiBSV1RleHR1cmUxREFycmF5PGZsb2F0PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVy
ZTFEQXJyYXk8ZmxvYXQyPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFEQXJyYXk8ZmxvYXQz
PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTFEQXJyYXk8ZmxvYXQ0PjsKK25hdGl2ZSB0eXBl
ZGVmIFRleHR1cmUyRDx1Y2hhcj47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMkQ8dWNoYXIyPjsK
K25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyRDx1Y2hhcjM+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVy
ZTJEPHVjaGFyND47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMkQ8dXNob3J0PjsKK25hdGl2ZSB0
eXBlZGVmIFRleHR1cmUyRDx1c2hvcnQyPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyRDx1c2hv
cnQzPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyRDx1c2hvcnQ0PjsKK25hdGl2ZSB0eXBlZGVm
IFRleHR1cmUyRDx1aW50PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyRDx1aW50Mj47CituYXRp
dmUgdHlwZWRlZiBUZXh0dXJlMkQ8dWludDM+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJEPHVp
bnQ0PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyRDxjaGFyPjsKK25hdGl2ZSB0eXBlZGVmIFRl
eHR1cmUyRDxjaGFyMj47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMkQ8Y2hhcjM+OworbmF0aXZl
IHR5cGVkZWYgVGV4dHVyZTJEPGNoYXI0PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyRDxzaG9y
dD47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMkQ8c2hvcnQyPjsKK25hdGl2ZSB0eXBlZGVmIFRl
eHR1cmUyRDxzaG9ydDM+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJEPHNob3J0ND47CituYXRp
dmUgdHlwZWRlZiBUZXh0dXJlMkQ8aW50PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyRDxpbnQy
PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyRDxpbnQzPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1
cmUyRDxpbnQ0PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyRDxoYWxmPjsKK25hdGl2ZSB0eXBl
ZGVmIFRleHR1cmUyRDxoYWxmMj47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMkQ8aGFsZjM+Owor
bmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJEPGhhbGY0PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUy
RDxmbG9hdD47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMkQ8ZmxvYXQyPjsKK25hdGl2ZSB0eXBl
ZGVmIFRleHR1cmUyRDxmbG9hdDM+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJEPGZsb2F0ND47
CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUyRDx1Y2hhcj47CituYXRpdmUgdHlwZWRlZiBSV1Rl
eHR1cmUyRDx1Y2hhcjI+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMkQ8dWNoYXIzPjsKK25h
dGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTJEPHVjaGFyND47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1
cmUyRDx1c2hvcnQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMkQ8dXNob3J0Mj47CituYXRp
dmUgdHlwZWRlZiBSV1RleHR1cmUyRDx1c2hvcnQzPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVy
ZTJEPHVzaG9ydDQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMkQ8dWludD47CituYXRpdmUg
dHlwZWRlZiBSV1RleHR1cmUyRDx1aW50Mj47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUyRDx1
aW50Mz47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUyRDx1aW50ND47CituYXRpdmUgdHlwZWRl
ZiBSV1RleHR1cmUyRDxjaGFyPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTJEPGNoYXIyPjsK
K25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTJEPGNoYXIzPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4
dHVyZTJEPGNoYXI0PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTJEPHNob3J0PjsKK25hdGl2
ZSB0eXBlZGVmIFJXVGV4dHVyZTJEPHNob3J0Mj47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUy
RDxzaG9ydDM+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMkQ8c2hvcnQ0PjsKK25hdGl2ZSB0
eXBlZGVmIFJXVGV4dHVyZTJEPGludD47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUyRDxpbnQy
PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTJEPGludDM+OworbmF0aXZlIHR5cGVkZWYgUldU
ZXh0dXJlMkQ8aW50ND47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUyRDxoYWxmPjsKK25hdGl2
ZSB0eXBlZGVmIFJXVGV4dHVyZTJEPGhhbGYyPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTJE
PGhhbGYzPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTJEPGhhbGY0PjsKK25hdGl2ZSB0eXBl
ZGVmIFJXVGV4dHVyZTJEPGZsb2F0PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTJEPGZsb2F0
Mj47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUyRDxmbG9hdDM+OworbmF0aXZlIHR5cGVkZWYg
UldUZXh0dXJlMkQ8ZmxvYXQ0PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyREFycmF5PHVjaGFy
PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyREFycmF5PHVjaGFyMj47CituYXRpdmUgdHlwZWRl
ZiBUZXh0dXJlMkRBcnJheTx1Y2hhcjM+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJEQXJyYXk8
dWNoYXI0PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyREFycmF5PHVzaG9ydD47CituYXRpdmUg
dHlwZWRlZiBUZXh0dXJlMkRBcnJheTx1c2hvcnQyPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUy
REFycmF5PHVzaG9ydDM+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJEQXJyYXk8dXNob3J0ND47
CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMkRBcnJheTx1aW50PjsKK25hdGl2ZSB0eXBlZGVmIFRl
eHR1cmUyREFycmF5PHVpbnQyPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyREFycmF5PHVpbnQz
PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyREFycmF5PHVpbnQ0PjsKK25hdGl2ZSB0eXBlZGVm
IFRleHR1cmUyREFycmF5PGNoYXI+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJEQXJyYXk8Y2hh
cjI+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJEQXJyYXk8Y2hhcjM+OworbmF0aXZlIHR5cGVk
ZWYgVGV4dHVyZTJEQXJyYXk8Y2hhcjQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJEQXJyYXk8
c2hvcnQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJEQXJyYXk8c2hvcnQyPjsKK25hdGl2ZSB0
eXBlZGVmIFRleHR1cmUyREFycmF5PHNob3J0Mz47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMkRB
cnJheTxzaG9ydDQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJEQXJyYXk8aW50PjsKK25hdGl2
ZSB0eXBlZGVmIFRleHR1cmUyREFycmF5PGludDI+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJE
QXJyYXk8aW50Mz47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlMkRBcnJheTxpbnQ0PjsKK25hdGl2
ZSB0eXBlZGVmIFRleHR1cmUyREFycmF5PGhhbGY+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJE
QXJyYXk8aGFsZjI+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJEQXJyYXk8aGFsZjM+OworbmF0
aXZlIHR5cGVkZWYgVGV4dHVyZTJEQXJyYXk8aGFsZjQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVy
ZTJEQXJyYXk8ZmxvYXQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTJEQXJyYXk8ZmxvYXQyPjsK
K25hdGl2ZSB0eXBlZGVmIFRleHR1cmUyREFycmF5PGZsb2F0Mz47CituYXRpdmUgdHlwZWRlZiBU
ZXh0dXJlMkRBcnJheTxmbG9hdDQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMkRBcnJheTx1
Y2hhcj47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUyREFycmF5PHVjaGFyMj47CituYXRpdmUg
dHlwZWRlZiBSV1RleHR1cmUyREFycmF5PHVjaGFyMz47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1
cmUyREFycmF5PHVjaGFyND47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUyREFycmF5PHVzaG9y
dD47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUyREFycmF5PHVzaG9ydDI+OworbmF0aXZlIHR5
cGVkZWYgUldUZXh0dXJlMkRBcnJheTx1c2hvcnQzPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVy
ZTJEQXJyYXk8dXNob3J0ND47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUyREFycmF5PHVpbnQ+
OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMkRBcnJheTx1aW50Mj47CituYXRpdmUgdHlwZWRl
ZiBSV1RleHR1cmUyREFycmF5PHVpbnQzPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTJEQXJy
YXk8dWludDQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMkRBcnJheTxjaGFyPjsKK25hdGl2
ZSB0eXBlZGVmIFJXVGV4dHVyZTJEQXJyYXk8Y2hhcjI+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0
dXJlMkRBcnJheTxjaGFyMz47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUyREFycmF5PGNoYXI0
PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTJEQXJyYXk8c2hvcnQ+OworbmF0aXZlIHR5cGVk
ZWYgUldUZXh0dXJlMkRBcnJheTxzaG9ydDI+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMkRB
cnJheTxzaG9ydDM+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMkRBcnJheTxzaG9ydDQ+Owor
bmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMkRBcnJheTxpbnQ+OworbmF0aXZlIHR5cGVkZWYgUldU
ZXh0dXJlMkRBcnJheTxpbnQyPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTJEQXJyYXk8aW50
Mz47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUyREFycmF5PGludDQ+OworbmF0aXZlIHR5cGVk
ZWYgUldUZXh0dXJlMkRBcnJheTxoYWxmPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTJEQXJy
YXk8aGFsZjI+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMkRBcnJheTxoYWxmMz47CituYXRp
dmUgdHlwZWRlZiBSV1RleHR1cmUyREFycmF5PGhhbGY0PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4
dHVyZTJEQXJyYXk8ZmxvYXQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMkRBcnJheTxmbG9h
dDI+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlMkRBcnJheTxmbG9hdDM+OworbmF0aXZlIHR5
cGVkZWYgUldUZXh0dXJlMkRBcnJheTxmbG9hdDQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTNE
PHVjaGFyPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUzRDx1Y2hhcjI+OworbmF0aXZlIHR5cGVk
ZWYgVGV4dHVyZTNEPHVjaGFyMz47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlM0Q8dWNoYXI0PjsK
K25hdGl2ZSB0eXBlZGVmIFRleHR1cmUzRDx1c2hvcnQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVy
ZTNEPHVzaG9ydDI+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTNEPHVzaG9ydDM+OworbmF0aXZl
IHR5cGVkZWYgVGV4dHVyZTNEPHVzaG9ydDQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTNEPHVp
bnQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTNEPHVpbnQyPjsKK25hdGl2ZSB0eXBlZGVmIFRl
eHR1cmUzRDx1aW50Mz47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlM0Q8dWludDQ+OworbmF0aXZl
IHR5cGVkZWYgVGV4dHVyZTNEPGNoYXI+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTNEPGNoYXIy
PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUzRDxjaGFyMz47CituYXRpdmUgdHlwZWRlZiBUZXh0
dXJlM0Q8Y2hhcjQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTNEPHNob3J0PjsKK25hdGl2ZSB0
eXBlZGVmIFRleHR1cmUzRDxzaG9ydDI+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTNEPHNob3J0
Mz47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlM0Q8c2hvcnQ0PjsKK25hdGl2ZSB0eXBlZGVmIFRl
eHR1cmUzRDxpbnQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTNEPGludDI+OworbmF0aXZlIHR5
cGVkZWYgVGV4dHVyZTNEPGludDM+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTNEPGludDQ+Owor
bmF0aXZlIHR5cGVkZWYgVGV4dHVyZTNEPGhhbGY+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTNE
PGhhbGYyPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmUzRDxoYWxmMz47CituYXRpdmUgdHlwZWRl
ZiBUZXh0dXJlM0Q8aGFsZjQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTNEPGZsb2F0PjsKK25h
dGl2ZSB0eXBlZGVmIFRleHR1cmUzRDxmbG9hdDI+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZTNE
PGZsb2F0Mz47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlM0Q8ZmxvYXQ0PjsKK25hdGl2ZSB0eXBl
ZGVmIFJXVGV4dHVyZTNEPHVjaGFyPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTNEPHVjaGFy
Mj47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUzRDx1Y2hhcjM+OworbmF0aXZlIHR5cGVkZWYg
UldUZXh0dXJlM0Q8dWNoYXI0PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTNEPHVzaG9ydD47
CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUzRDx1c2hvcnQyPjsKK25hdGl2ZSB0eXBlZGVmIFJX
VGV4dHVyZTNEPHVzaG9ydDM+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlM0Q8dXNob3J0ND47
CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUzRDx1aW50PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4
dHVyZTNEPHVpbnQyPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTNEPHVpbnQzPjsKK25hdGl2
ZSB0eXBlZGVmIFJXVGV4dHVyZTNEPHVpbnQ0PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTNE
PGNoYXI+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlM0Q8Y2hhcjI+OworbmF0aXZlIHR5cGVk
ZWYgUldUZXh0dXJlM0Q8Y2hhcjM+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlM0Q8Y2hhcjQ+
OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlM0Q8c2hvcnQ+OworbmF0aXZlIHR5cGVkZWYgUldU
ZXh0dXJlM0Q8c2hvcnQyPjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTNEPHNob3J0Mz47Citu
YXRpdmUgdHlwZWRlZiBSV1RleHR1cmUzRDxzaG9ydDQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0
dXJlM0Q8aW50PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTNEPGludDI+OworbmF0aXZlIHR5
cGVkZWYgUldUZXh0dXJlM0Q8aW50Mz47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUzRDxpbnQ0
PjsKK25hdGl2ZSB0eXBlZGVmIFJXVGV4dHVyZTNEPGhhbGY+OworbmF0aXZlIHR5cGVkZWYgUldU
ZXh0dXJlM0Q8aGFsZjI+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlM0Q8aGFsZjM+OworbmF0
aXZlIHR5cGVkZWYgUldUZXh0dXJlM0Q8aGFsZjQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJl
M0Q8ZmxvYXQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJlM0Q8ZmxvYXQyPjsKK25hdGl2ZSB0
eXBlZGVmIFJXVGV4dHVyZTNEPGZsb2F0Mz47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1cmUzRDxm
bG9hdDQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZUN1YmU8dWNoYXI+OworbmF0aXZlIHR5cGVk
ZWYgVGV4dHVyZUN1YmU8dWNoYXIyPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmVDdWJlPHVjaGFy
Mz47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlQ3ViZTx1Y2hhcjQ+OworbmF0aXZlIHR5cGVkZWYg
VGV4dHVyZUN1YmU8dXNob3J0PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmVDdWJlPHVzaG9ydDI+
OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZUN1YmU8dXNob3J0Mz47CituYXRpdmUgdHlwZWRlZiBU
ZXh0dXJlQ3ViZTx1c2hvcnQ0PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmVDdWJlPHVpbnQ+Owor
bmF0aXZlIHR5cGVkZWYgVGV4dHVyZUN1YmU8dWludDI+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVy
ZUN1YmU8dWludDM+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZUN1YmU8dWludDQ+OworbmF0aXZl
IHR5cGVkZWYgVGV4dHVyZUN1YmU8Y2hhcj47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlQ3ViZTxj
aGFyMj47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlQ3ViZTxjaGFyMz47CituYXRpdmUgdHlwZWRl
ZiBUZXh0dXJlQ3ViZTxjaGFyND47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlQ3ViZTxzaG9ydD47
CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlQ3ViZTxzaG9ydDI+OworbmF0aXZlIHR5cGVkZWYgVGV4
dHVyZUN1YmU8c2hvcnQzPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmVDdWJlPHNob3J0ND47Citu
YXRpdmUgdHlwZWRlZiBUZXh0dXJlQ3ViZTxpbnQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZUN1
YmU8aW50Mj47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlQ3ViZTxpbnQzPjsKK25hdGl2ZSB0eXBl
ZGVmIFRleHR1cmVDdWJlPGludDQ+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZUN1YmU8aGFsZj47
CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlQ3ViZTxoYWxmMj47CituYXRpdmUgdHlwZWRlZiBUZXh0
dXJlQ3ViZTxoYWxmMz47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlQ3ViZTxoYWxmND47CituYXRp
dmUgdHlwZWRlZiBUZXh0dXJlQ3ViZTxmbG9hdD47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlQ3Vi
ZTxmbG9hdDI+OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZUN1YmU8ZmxvYXQzPjsKK25hdGl2ZSB0
eXBlZGVmIFRleHR1cmVDdWJlPGZsb2F0ND47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlRGVwdGgy
RDxmbG9hdD47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlRGVwdGgyRDxoYWxmPjsKK25hdGl2ZSB0
eXBlZGVmIFJXVGV4dHVyZURlcHRoMkQ8ZmxvYXQ+OworbmF0aXZlIHR5cGVkZWYgUldUZXh0dXJl
RGVwdGgyRDxoYWxmPjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmVEZXB0aDJEQXJyYXk8ZmxvYXQ+
OworbmF0aXZlIHR5cGVkZWYgVGV4dHVyZURlcHRoMkRBcnJheTxoYWxmPjsKK25hdGl2ZSB0eXBl
ZGVmIFJXVGV4dHVyZURlcHRoMkRBcnJheTxmbG9hdD47CituYXRpdmUgdHlwZWRlZiBSV1RleHR1
cmVEZXB0aDJEQXJyYXk8aGFsZj47CituYXRpdmUgdHlwZWRlZiBUZXh0dXJlRGVwdGhDdWJlPGZs
b2F0PjsKK25hdGl2ZSB0eXBlZGVmIFRleHR1cmVEZXB0aEN1YmU8aGFsZj47CisKKy8vIEZJWE1F
OiBJbnNlcnQgdGhlIHJlc3Qgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkgb25jZSB0aGUgcGFyc2Vy
IGlzIGZhc3QgZW5vdWdoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JM
ZW5ndGguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MTMxNDNi
ZDFlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCkBAIC0wLDAgKzEsODEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaCIKKworI2lu
Y2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5j
bHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgRmluZEFy
cmF5VHlwZXMgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgfkZpbmRBcnJheVR5cGVz
KCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBl
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9hcnJheVR5cGVzLmFwcGVuZChhcnJheVR5cGUp
OworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlUeXBlKTsKKyAgICB9CisKKyAgICBW
ZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkFycmF5VHlwZT4+JiYgdGFrZUFycmF5
VHlwZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUobV9hcnJheVR5cGVzKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpB
cnJheVR5cGU+PiBtX2FycmF5VHlwZXM7Cit9OworCit2b2lkIHN5bnRoZXNpemVBcnJheU9wZXJh
dG9yTGVuZ3RoKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgRmluZEFycmF5VHlwZXMgZmluZEFy
cmF5VHlwZXM7CisgICAgZmluZEFycmF5VHlwZXMuY2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0p
OworICAgIGF1dG8gYXJyYXlUeXBlcyA9IGZpbmRBcnJheVR5cGVzLnRha2VBcnJheVR5cGVzKCk7
CisKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGJvb2wgaXNSZXN0cmljdGVkID0g
ZmFsc2U7CisKKyAgICBmb3IgKGF1dG8mIGFycmF5VHlwZSA6IGFycmF5VHlwZXMpIHsKKyAgICAg
ICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRv
a2VuKGFycmF5VHlwZS5nZXQoKS5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGFycmF5
VHlwZS5nZXQoKS5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCk7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAg
ICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0
aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgp
Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlw
ZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oYXJyYXlUeXBlLmdldCgpLm9yaWdpbigpKSwg
cHJvZ3JhbS5pbnRyaW5zaWNzKCkudWludFR5cGUoKSksIFN0cmluZygib3BlcmF0b3IubGVuZ3Ro
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdU
Rjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgIHByb2dyYW0u
YXBwZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgIH0KK30KKwor
fQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxl
bmd0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lOWE5YTExNGYy
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguaApAQCAtMCwwICsxLDQyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK3Zv
aWQgc3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGgoUHJvZ3JhbSYpOworCit9CisKK30KKwor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzdlNmM3OGNhNmUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVDb25z
dHJ1Y3RvcnMuY3BwCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJMRShX
RUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFN5bnRoZXNpemVD
b25zdHJ1Y3RvcnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wg
eworCitjbGFzcyBGaW5kQWxsVHlwZXMgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAg
fkZpbmRBbGxUeXBlcygpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVy
VHlwZSYgcG9pbnRlclR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3VubmFtZWRUeXBl
cy5hcHBlbmQocG9pbnRlclR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQocG9pbnRl
clR5cGUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUm
IGFycmF5UmVmZXJlbmNlVHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fdW5uYW1lZFR5
cGVzLmFwcGVuZChhcnJheVJlZmVyZW5jZVR5cGUpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoYXJyYXlSZWZlcmVuY2VUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJy
YXlUeXBlJiBhcnJheVR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3VubmFtZWRUeXBl
cy5hcHBlbmQoYXJyYXlUeXBlKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFycmF5VHlw
ZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYg
ZW51bWVyYXRpb25EZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV9uYW1lZFR5
cGVzLmFwcGVuZChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFT
VDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIG1fbmFtZWRUeXBlcy5hcHBlbmQoc3RydWN0dXJlRGVmaW5pdGlvbik7Cisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICB9CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBtX25hbWVkVHlwZXMuYXBwZW5kKG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbik7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChuYXRpdmVU
eXBlRGVjbGFyYXRpb24pOworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPEFTVDo6VW5uYW1lZFR5cGU+PiYmIHRha2VVbm5hbWVkVHlwZXMoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFdURk1vdmUobV91bm5hbWVkVHlwZXMpOworICAgIH0KKworICAgIFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4mJiB0YWtlTmFtZWRUeXBlcygp
CisgICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX25hbWVkVHlwZXMpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OlVubmFtZWRU
eXBlPj4gbV91bm5hbWVkVHlwZXM7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpOYW1lZFR5cGU+PiBtX25hbWVkVHlwZXM7Cit9OworCit2b2lkIHN5bnRoZXNpemVDb25z
dHJ1Y3RvcnMoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBGaW5kQWxsVHlwZXMgZmluZEFsbFR5
cGVzOworICAgIGZpbmRBbGxUeXBlcy5jaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbSk7CisgICAg
YXV0byBtX3VubmFtZWRUeXBlcyA9IGZpbmRBbGxUeXBlcy50YWtlVW5uYW1lZFR5cGVzKCk7Cisg
ICAgYXV0byBtX25hbWVkVHlwZXMgPSBmaW5kQWxsVHlwZXMudGFrZU5hbWVkVHlwZXMoKTsKKwor
ICAgIGJvb2wgaXNPcGVyYXRvciA9IHRydWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxz
ZTsKKworICAgIGZvciAoYXV0byYgdW5uYW1lZFR5cGUgOiBtX3VubmFtZWRUeXBlcykgeworICAg
ICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4odW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyB1
bm5hbWVkVHlwZS5nZXQoKS5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCk7CisgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsK
KyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7
CisgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3Io
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbih1bm5hbWVkVHlwZS5nZXQoKS5v
cmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCB1bm5hbWVkVHlw
ZS5nZXQoKS5jbG9uZSgpLCBTdHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJh
dG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShjb3B5
Q29uc3RydWN0b3IpKTsKKworICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
ZGVmYXVsdENvbnN0cnVjdG9yKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4o
dW5uYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6
bnVsbG9wdCwgdW5uYW1lZFR5cGUuZ2V0KCkuY2xvbmUoKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0
IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
bnMoKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAg
cHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShkZWZhdWx0Q29uc3RydWN0b3IpKTsKKyAgICB9CisKKyAg
ICBmb3IgKGF1dG8mIG5hbWVkVHlwZSA6IG1fbmFtZWRUeXBlcykgeworICAgICAgICBBU1Q6OlZh
cmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4obmFtZWRU
eXBlLmdldCgpLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJl
bmNlOjp3cmFwKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5
cGUuZ2V0KCkpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgcGFyYW1l
dGVycy5hcHBlbmQoV1RGTW92ZSh2YXJpYWJsZURlY2xhcmF0aW9uKSk7CisgICAgICAgIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBjb3B5Q29uc3RydWN0b3IoQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBBU1Q6OkF0
dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihuYW1lZFR5cGUuZ2V0KCkub3JpZ2luKCkpLCBuYW1lZFR5cGUuZ2V0KCkpLCBT
dHJpbmcoIm9wZXJhdG9yIGNhc3QiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RG
TW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVk
KTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShjb3B5Q29uc3RydWN0b3IpKTsKKwor
ICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24gZGVmYXVsdENvbnN0cnVjdG9y
KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9y
aWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6VHlwZVJl
ZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obmFtZWRUeXBlLmdldCgpLm9yaWdpbigpKSwgbmFt
ZWRUeXBlLmdldCgpKSwgU3RyaW5nKCJvcGVyYXRvciBjYXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMoKSwgV1RGOjpudWxsb3B0LCBp
c09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92
ZShkZWZhdWx0Q29uc3RydWN0b3IpKTsKKyAgICB9Cit9CisKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZUNvbnN0cnVjdG9ycy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjgwMDIwZGQ3YzcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmgKQEAg
LTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFz
cyBQcm9ncmFtOworCit2b2lkIHN5bnRoZXNpemVDb25zdHJ1Y3RvcnMoUHJvZ3JhbSYpOworCit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1
bmN0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjFkZGNm
ZWNmYzA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xTeW50aGVzaXplRW51bWVyYXRpb25GdW5jdGlvbnMuY3BwCkBAIC0wLDAgKzEs
ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmgiCisK
KyNpbmNsdWRlICJXSExTTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2Uu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCit2b2lkIHN5
bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIGJv
b2wgaXNPcGVyYXRvciA9IHRydWU7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBmYWxzZTsKKyAg
ICBmb3IgKGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA6IHByb2dyYW0uZW51bWVyYXRpb25E
ZWZpbml0aW9ucygpKSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMShMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IEFTVDo6VHlwZVJlZmVyZW5j
ZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIHN0
YXRpY19jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJj4oZW51bWVyYXRpb25EZWZpbml0
aW9uKSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAg
ICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uMihMZXhlcjo6
VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygp
LCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZp
bml0aW9uLT5vcmlnaW4oKSksIHN0YXRpY19jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9u
Jj4oZW51bWVyYXRpb25EZWZpbml0aW9uKSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RG
OjpudWxsb3B0KTsKKyAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1l
dGVyczsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNs
YXJhdGlvbjEpKTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFi
bGVEZWNsYXJhdGlvbjIpKTsKKyAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmli
dXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBwcm9ncmFtLmludHJpbnNp
Y3MoKS5ib29sVHlwZSgpKSwgU3RyaW5nKCJvcGVyYXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RG
cm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRv
ciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPnR5cGUoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRs
ZSBhIG51bGwgYmFzZSB0eXBlLgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTVDo6
VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihlbnVt
ZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpU
eXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9y
aWdpbigpKSwgc3RhdGljX2Nhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mPihlbnVtZXJh
dGlvbkRlZmluaXRpb24pKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQp
OworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFy
YXRpb24pKTsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24g
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJs
b2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCktPmNsb25l
KCksIFN0cmluZygib3BlcmF0b3IudmFsdWUiLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0
cmljdGVkKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChXVEZNb3ZlKG5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZURlY2xhcmF0aW9u
KExleGVyOjpUb2tlbihlbnVtZXJhdGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgQVNUOjpRdWFs
aWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJh
dGlvbkRlZmluaXRpb24tPm9yaWdpbigpKSwgc3RhdGljX2Nhc3Q8QVNUOjpFbnVtZXJhdGlvbkRl
ZmluaXRpb24mPihlbnVtZXJhdGlvbkRlZmluaXRpb24pKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbnMgcGFyYW1ldGVyczsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZN
b3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3JpZ2luKCkp
LCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgZW51bWVyYXRpb25EZWZpbml0
aW9uLT50eXBlKCktPmNsb25lKCksIFN0cmluZygib3BlcmF0b3IgY2FzdCIsIFN0cmluZzo6Q29u
c3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlz
T3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAgICAgICAgIHByb2dyYW0uYXBwZW5k
KFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uIHZh
cmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGVudW1lcmF0aW9uRGVmaW5pdGlvbi0+b3Jp
Z2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgZW51bWVyYXRpb25EZWZpbml0aW9uLT50eXBlKCkt
PmNsb25lKCksIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAg
ICAgICAgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOwor
ICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oZW51
bWVyYXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RG
OjpudWxsb3B0LCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oZW51bWVy
YXRpb25EZWZpbml0aW9uLT5vcmlnaW4oKSksIHN0YXRpY19jYXN0PEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uJj4oZW51bWVyYXRpb25EZWZpbml0aW9uKSkgfSwgU3RyaW5nKCJvcGVyYXRvciBj
YXN0IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVycyks
IFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAgICAg
ICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhl
c2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hYzEwNzg3MmVmOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVu
dW1lcmF0aW9uRnVuY3Rpb25zLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCit2b2lkIHN5bnRoZXNpemVFbnVt
ZXJhdGlvbkZ1bmN0aW9ucyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0
cnVjdHVyZUFjY2Vzc29ycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jMjJkNWRiMGRiNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVy
ZUFjY2Vzc29ycy5jcHAKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBFTkFCTEUo
V0VCR1BVKQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xTeW50aGVzaXpl
U3RydWN0dXJlQWNjZXNzb3JzLmgiCisKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisj
aW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZWZlcmVuY2VUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJs
ZURlY2xhcmF0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNM
IHsKKwordm9pZCBzeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzKFByb2dyYW0mIHByb2dyYW0p
Cit7CisgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKKyAgICBib29sIGlzUmVzdHJpY3RlZCA9
IGZhbHNlOworICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3Ry
dWN0dXJlRGVmaW5pdGlvbnMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1l
bnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLT5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGdldHRlcjogb3BlcmF0b3IuZmllbGQKKyAg
ICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlv
bihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVy
cygpLCB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxl
bWVudC5vcmlnaW4oKSksIHN0YXRpY19jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiY+KHN0
cnVjdHVyZURlZmluaXRpb24pKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpOworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVy
czsKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVj
bGFyYXRpb24pKTsKKyAgICAgICAgICAgICAgICBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24gbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2Nr
KCksIFdURjo6bnVsbG9wdCwgc3RydWN0dXJlRWxlbWVudC50eXBlKCkuY2xvbmUoKSwgU3RyaW5n
Ojpmb3JtYXQoIm9wZXJhdG9yLiVzIiwgc3RydWN0dXJlRWxlbWVudC5uYW1lKCkudXRmOCgpLmRh
dGEoKSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlz
UmVzdHJpY3RlZCk7CisgICAgICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoV1RGTW92ZShuYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9uKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBUaGUgc2V0dGVyOiBvcGVyYXRvci5maWVsZD0KKyAgICAgICAg
ICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJhdGlvbjEoTGV4
ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwg
eyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQu
b3JpZ2luKCkpLCBzdGF0aWNfY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mPihzdHJ1Y3R1
cmVEZWZpbml0aW9uKSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KTsK
KyAgICAgICAgICAgICAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVEZWNsYXJh
dGlvbjIoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBBU1Q6OlF1YWxp
ZmllcnMoKSwgeyBzdHJ1Y3R1cmVFbGVtZW50LnR5cGUoKS5jbG9uZSgpIH0sIFN0cmluZygpLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbjEpKTsKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZChXVEZNb3ZlKHZhcmlhYmxlRGVjbGFyYXRpb24yKSk7CisgICAgICAgICAg
ICAgICAgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIG5hdGl2ZUZ1bmN0aW9uRGVjbGFy
YXRpb24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVt
ZW50Lm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIEFTVDo6
VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4o
KSksIHN0YXRpY19jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiY+KHN0cnVjdHVyZURlZmlu
aXRpb24pKSwgU3RyaW5nOjpmb3JtYXQoIm9wZXJhdG9yLiVzPSIsIHN0cnVjdHVyZUVsZW1lbnQu
bmFtZSgpLnV0ZjgoKS5kYXRhKCkpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQs
IGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworICAgICAgICAgICAgICAgIHByb2dyYW0uYXBw
ZW5kKFdURk1vdmUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBUaGUgYW5kZXI6IG9wZXJhdG9yJi5maWVsZAorICAgICAgICAgICAg
YXV0byBjcmVhdGVBbmRlciA9IFsmXShBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZSBh
ZGRyZXNzU3BhY2UpIC0+IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiB7CisgICAgICAg
ICAgICAgICAgYXV0byBhcmd1bWVudFR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5
cGU+KExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdpbigpKSwgYWRkcmVzc1NwYWNl
LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQu
b3JpZ2luKCkpLCBzdGF0aWNfY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mPihzdHJ1Y3R1
cmVEZWZpbml0aW9uKSkpOworICAgICAgICAgICAgICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlv
biB2YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihzdHJ1Y3R1cmVFbGVtZW50Lm9yaWdp
bigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgV1RGTW92ZShhcmd1bWVudFR5cGUpIH0sIFN0cmlu
ZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICAgICAgQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgICAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKFdURk1vdmUodmFyaWFibGVEZWNsYXJhdGlvbikpOworICAgICAgICAgICAgICAg
IGF1dG8gcmV0dXJuVHlwZSA9IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6
OlRva2VuKHN0cnVjdHVyZUVsZW1lbnQub3JpZ2luKCkpLCBhZGRyZXNzU3BhY2UsIHN0cnVjdHVy
ZUVsZW1lbnQudHlwZSgpLmNsb25lKCkpOworICAgICAgICAgICAgICAgIEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oc3RydWN0dXJlRWxlbWVudC5vcmlnaW4oKSksIEFTVDo6
QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5cGUpLCBTdHJp
bmc6OmZvcm1hdCgib3BlcmF0b3ImLiVzIiwgc3RydWN0dXJlRWxlbWVudC5uYW1lKCkudXRmOCgp
LmRhdGEoKSksIFdURk1vdmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciks
IGlzUmVzdHJpY3RlZCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5hdGl2ZUZ1bmN0aW9uRGVj
bGFyYXRpb247CisgICAgICAgICAgICB9OworICAgICAgICAgICAgcHJvZ3JhbS5hcHBlbmQoY3Jl
YXRlQW5kZXIoQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkNvbnN0YW50KSk7Cisg
ICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChjcmVhdGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6
OkFkZHJlc3NTcGFjZTo6RGV2aWNlKSk7CisgICAgICAgICAgICBwcm9ncmFtLmFwcGVuZChjcmVh
dGVBbmRlcihBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkZ3JvdXApKTsK
KyAgICAgICAgICAgIHByb2dyYW0uYXBwZW5kKGNyZWF0ZUFuZGVyKEFTVDo6UmVmZXJlbmNlVHlw
ZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWQpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGU5YjlmZjcwYzAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5
bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK3ZvaWQgc3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycyhQcm9ncmFtJik7CisKK30KKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3Iu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5iYTZhZTUzY2I3ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMVmlzaXRvci5jcHAKQEAgLTAsMCArMSwxMDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIEVOQUJM
RShXRUJHUFUpCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3Iu
aCIKKworI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlSZWZl
cmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExT
TEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xCYXNlRnVuY3Rpb25BdHRy
aWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTEJhc2VTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNM
QmxvY2suaCIKKyNpbmNsdWRlICJXSExTTEJvb2xlYW5MaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hM
U0xCcmVhay5oIgorI2luY2x1ZGUgIldITFNMQnVpbHRJblNlbWFudGljLmgiCisjaW5jbHVkZSAi
V0hMU0xDYWxsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ29tbWFFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlLmgiCisjaW5jbHVkZSAi
V0hMU0xDb250aW51ZS5oIgorI2luY2x1ZGUgIldITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRG90RXhwcmVz
c2lvbi5oIgorI2luY2x1ZGUgIldITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oIgor
I2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xF
bnVtZXJhdGlvbk1lbWJlci5oIgorI2luY2x1ZGUgIldITFNMRXhwcmVzc2lvbi5oIgorI2luY2x1
ZGUgIldITFNMRmFsbHRocm91Z2guaCIKKyNpbmNsdWRlICJXSExTTEZsb2F0TGl0ZXJhbC5oIgor
I2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRnVuY3Rpb25BdHRyaWJ1
dGUuaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJX
SExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIK
KyNpbmNsdWRlICJXSExTTEluZGV4RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMSW50ZWdl
ckxpdGVyYWwuaCIKKyNpbmNsdWRlICJXSExTTExvZ2ljYWxFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTWFrZVBvaW50ZXJFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTE5vZGUu
aCIKKyNpbmNsdWRlICJXSExTTE51bGxMaXRlcmFsLmgiCisjaW5jbHVkZSAiV0hMU0xOdW1UaHJl
YWRzRnVuY3Rpb25BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgiCisj
aW5jbHVkZSAiV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TFF1YWxpZmllci5oIgorI2luY2x1ZGUgIldITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMUmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUmVzb3Vy
Y2VTZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMUmV0dXJuLmgiCisjaW5jbHVkZSAiV0hMU0xT
ZW1hbnRpYy5oIgorI2luY2x1ZGUgIldITFNMU3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGlj
LmgiCisjaW5jbHVkZSAiV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuaCIKKyNpbmNsdWRlICJXSExT
TFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgorI2lu
Y2x1ZGUgIldITFNMU3RydWN0dXJlRWxlbWVudC5oIgorI2luY2x1ZGUgIldITFNMU3dpdGNoQ2Fz
ZS5oIgorI2luY2x1ZGUgIldITFNMU3dpdGNoU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xU
ZXJuYXJ5RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMVHJhcC5oIgorI2luY2x1ZGUgIldI
TFNMVHlwZS5oIgorI2luY2x1ZGUgIldITFNMVHlwZUFyZ3VtZW50LmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorI2lu
Y2x1ZGUgIldITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oIgorI2luY2x1ZGUgIldITFNMVmFs
dWUuaCIKKyNpbmNsdWRlICJXSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJX
SExTTFZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xWYXJp
YWJsZVJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKwordm9pZCBWaXNpdG9yOjp2aXNpdChQ
cm9ncmFtJiBwcm9ncmFtKQoreworICAgIC8vIFRoZXNlIHZpc2l0aW5nIGZ1bmN0aW9ucyBtaWdo
dCBhZGQgbmV3IGdsb2JhbCBzdGF0ZW1lbnRzLCBzbyBkb24ndCB1c2UgZm9yZWFjaCBzeW50YXgu
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpLnNp
emUoKTsgKytpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpU
eXBlRGVmaW5pdGlvbiY+KHByb2dyYW0udHlwZURlZmluaXRpb25zKClbaV0pKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKS5zaXplKCk7
ICsraSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6U3RydWN0
dXJlRGVmaW5pdGlvbiY+KHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKVtpXSkpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCku
c2l6ZSgpOyArK2kpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbiY+KHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygp
W2ldKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5p
dGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19j
YXN0PEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJj4ocHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25z
KClbaV0pKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2dyYW0ubmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHN0YXRpY19jYXN0PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiY+KHByb2dyYW0ubmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKVtpXSkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biY+KHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpW2ldKSk7Cit9CisKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCit7CisgICAgaWYgKGlz
PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpOworICAgIGVs
c2UgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSk7Cisg
ICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
Pih1bm5hbWVkVHlwZSkpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoaXM8QVNUOjpBcnJh
eVR5cGU+KHVubmFtZWRUeXBlKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2Fz
dDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKK3sKKyAgICBpZiAoaXM8QVNUOjpU
eXBlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRv
d25jYXN0PEFTVDo6VHlwZURlZmluaXRpb24+KG5hbWVkVHlwZSkpOworICAgIGVsc2UgaWYgKGlz
PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbj4obmFtZWRUeXBlKSk7
CisgICAgZWxzZSBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KG5hbWVkVHlwZSkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbj4obmFtZWRUeXBlKSk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChpczxBU1Q6
Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSk7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKSk7
CisgICAgfQorfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5
cGVEZWZpbml0aW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlRGVmaW5pdGlvbi50
eXBlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlv
biYgc3RydWN0dXJlRGVmaW5pdGlvbikKK3sKKyAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVsZW1l
bnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uKQor
eworICAgIGlmIChlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KCplbnVtZXJhdGlvbkRl
ZmluaXRpb24udHlwZSgpKSk7CisgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1lbWJlcnMoKSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGVudW1lcmF0aW9uTWVtYmVyKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mPihm
dW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZp
bml0aW9uLmJsb2NrKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbiYgbmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikKK3sKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJj4obmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbikpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6
TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCit7CisgICAgZm9y
IChhdXRvJiB0eXBlQXJndW1lbnQgOiBuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50
cygpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZUFyZ3VtZW50KTsKK30KKwordm9p
ZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCit7Cisg
ICAgZm9yIChhdXRvJiB0eXBlQXJndW1lbnQgOiB0eXBlUmVmZXJlbmNlLnR5cGVBcmd1bWVudHMo
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVBcmd1bWVudCk7CisgICAgaWYgKHR5
cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkgJiYgaXM8QVNUOjpUeXBlRGVmaW5pdGlvbj4oKnR5
cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpKSB7CisgICAgICAgIGF1dG8mIHR5cGVEZWZpbml0
aW9uID0gZG93bmNhc3Q8QVNUOjpUeXBlRGVmaW5pdGlvbj4oKnR5cGVSZWZlcmVuY2UucmVzb2x2
ZWRUeXBlKCkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZURlZmluaXRpb24udHlw
ZSgpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpQb2ludGVyVHlwZSYg
cG9pbnRlclR5cGUpCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6
UmVmZXJlbmNlVHlwZSY+KHBvaW50ZXJUeXBlKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlwZSkKK3sKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlJj4oYXJyYXlSZWZl
cmVuY2VUeXBlKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpBcnJheVR5cGUmIGFy
cmF5VHlwZSkKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXJyYXlUeXBlLnR5cGUoKSk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTdHJ1Y3R1cmVFbGVtZW50JiBzdHJ1Y3R1cmVF
bGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVFbGVtZW50LnR5cGUo
KSk7CisgICAgaWYgKHN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KCpzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkpOworfQorCit2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQor
eworICAgIGlmIChlbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKmVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpOworfQorCit2b2lkIFZpc2l0b3I6
OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNsYXJhdGlvbikKK3sK
KyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbi5hdHRyaWJ1dGVCbG9j
aygpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkp
OworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0
ZXJzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChwYXJhbWV0ZXIpOworICAgIGlmIChm
dW5jdGlvbkRlY2xhcmF0aW9uLnNlbWFudGljKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCgqZnVuY3Rpb25EZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2
aXNpdChBU1Q6OlR5cGVBcmd1bWVudCYgdHlwZUFyZ3VtZW50KQoreworICAgIFdURjo6dmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhw
cmVzc2lvbikgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoY29uc3RhbnRFeHByZXNzaW9u
KTsKKyAgICB9LCBbJl0oVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4mIHR5cGVSZWZlcmVu
Y2UpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6VHlwZVJl
ZmVyZW5jZSY+KHR5cGVSZWZlcmVuY2UpKTsKKyAgICB9KSwgdHlwZUFyZ3VtZW50KTsKK30KKwor
dm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlJlZmVyZW5jZVR5cGUmIHJlZmVyZW5jZVR5cGUpCit7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlZmVyZW5jZVR5cGUuZWxlbWVudFR5cGUoKSk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMpCit7CisgICAg
V1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYgYnVp
bHRJblNlbWFudGljKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChidWlsdEluU2VtYW50
aWMpOworICAgIH0sIFsmXShBU1Q6OlJlc291cmNlU2VtYW50aWMmIHJlc291cmNlU2VtYW50aWMp
IHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlc291cmNlU2VtYW50aWMpOworICAgIH0s
IFsmXShBU1Q6OlNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyYgc3BlY2lhbGl6YXRpb25D
b25zdGFudFNlbWFudGljKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMpOworICAgIH0sIFsmXShBU1Q6OlN0YWdlSW5PdXRTZW1hbnRp
YyYgc3RhZ2VJbk91dFNlbWFudGljKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGFn
ZUluT3V0U2VtYW50aWMpOworICAgIH0pLCBzZW1hbnRpYyk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
dmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikKK3sKKyAg
ICBjb25zdGFudEV4cHJlc3Npb24udmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRl
Z2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGludGVnZXJMaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
JiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh1
bnNpZ25lZEludGVnZXJMaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmIGZs
b2F0TGl0ZXJhbCkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZmxvYXRMaXRlcmFsKTsK
KyAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIHsKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KG51bGxMaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0
ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGJvb2xl
YW5MaXRlcmFsKTsKKyAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZl
cmVuY2UpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGNvbnN0YW50RXhwcmVzc2lvbkVu
dW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKTsKKyAgICB9KSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
dmlzaXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYgYXR0cmlidXRlQmxvY2spCit7CisgICAgZm9yIChh
dXRvJiBmdW5jdGlvbkF0dHJpYnV0ZSA6IGF0dHJpYnV0ZUJsb2NrKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQoZnVuY3Rpb25BdHRyaWJ1dGUpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0
KEFTVDo6QnVpbHRJblNlbWFudGljJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OlJlc291cmNlU2VtYW50aWMmKQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3Bl
Y2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjp2aXNp
dChBU1Q6OlN0YWdlSW5PdXRTZW1hbnRpYyYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpCit7CisgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KGludGVnZXJMaXRlcmFsLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKQorewor
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnR5cGUoKSk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkK
K3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZmxvYXRMaXRlcmFsLnR5cGUoKSk7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpCit7CisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KG51bGxMaXRlcmFsLnR5cGUoKSk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGUmIGludGVnZXJMaXRlcmFsVHlwZSkKK3sKKyAgICBp
ZiAoaW50ZWdlckxpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKmludGVnZXJMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGludGVnZXJMaXRlcmFsVHlwZS5wcmVmZXJyZWRUeXBlKCkpOworfQorCit2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmIHVuc2ln
bmVkSW50ZWdlckxpdGVyYWxUeXBlKQoreworICAgIGlmICh1bnNpZ25lZEludGVnZXJMaXRlcmFs
VHlwZS5yZXNvbHZlZFR5cGUoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp1bnNpZ25l
ZEludGVnZXJMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0KHVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGbG9hdExpdGVyYWxUeXBlJiBmbG9hdExpdGVyYWxUeXBl
KQoreworICAgIGlmIChmbG9hdExpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoKmZsb2F0TGl0ZXJhbFR5cGUucmVzb2x2ZWRUeXBlKCkpOworICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChmbG9hdExpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUoKSk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbFR5cGUmIG51bGxMaXRlcmFs
VHlwZSkKK3sKKyAgICBpZiAobnVsbExpdGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoKm51bGxMaXRlcmFsVHlwZS5yZXNvbHZlZFR5cGUoKSk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZSYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGdW5j
dGlvbkF0dHJpYnV0ZSYgZnVuY3Rpb25BdHRyaWJ1dGUpCit7CisgICAgV1RGOjp2aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYgbnVtVGhy
ZWFkc0Z1bmN0aW9uQXR0cmlidXRlKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChudW1U
aHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUpOworICAgIH0pLCBmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9
CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUm
KQoreworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6QmxvY2smIGJsb2NrKQoreworICAg
IGZvciAoYXV0byYgc3RhdGVtZW50IDogYmxvY2suc3RhdGVtZW50cygpKQorICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpTdGF0ZW1lbnQmPihzdGF0ZW1lbnQpKTsK
K30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlN0YXRlbWVudCYgc3RhdGVtZW50KQorewor
ICAgIGlmIChpczxBU1Q6OkJsb2NrPihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpCbG9jaz4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8
QVNUOjpCcmVhaz4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25j
YXN0PEFTVDo6QnJlYWs+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6Q29udGlu
dWU+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6
OkNvbnRpbnVlPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkRvV2hpbGVMb29w
PihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpE
b1doaWxlTG9vcD4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpFZmZlY3RmdWxF
eHByZXNzaW9uU3RhdGVtZW50PihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoZG93bmNhc3Q8QVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50PihzdGF0ZW1lbnQp
KTsKKyAgICBlbHNlIGlmIChpczxBU1Q6OkZhbGx0aHJvdWdoPihzdGF0ZW1lbnQpKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpGYWxsdGhyb3VnaD4oc3RhdGVtZW50
KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpGb3JMb29wPihzdGF0ZW1lbnQpKQorICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpGb3JMb29wPihzdGF0ZW1lbnQpKTsKKyAg
ICBlbHNlIGlmIChpczxBU1Q6OklmU3RhdGVtZW50PihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpJZlN0YXRlbWVudD4oc3RhdGVtZW50KSk7Cisg
ICAgZWxzZSBpZiAoaXM8QVNUOjpSZXR1cm4+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlJldHVybj4oc3RhdGVtZW50KSk7CisgICAgZWxzZSBp
ZiAoaXM8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1lbnQpKQorICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpTd2l0Y2hDYXNlPihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIGlm
IChpczxBU1Q6OlN3aXRjaFN0YXRlbWVudD4oc3RhdGVtZW50KSkKKyAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6U3dpdGNoU3RhdGVtZW50PihzdGF0ZW1lbnQpKTsKKyAg
ICBlbHNlIGlmIChpczxBU1Q6OlRyYXA+KHN0YXRlbWVudCkpCisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChkb3duY2FzdDxBU1Q6OlRyYXA+KHN0YXRlbWVudCkpOworICAgIGVsc2UgaWYgKGlz
PEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQ+KHN0YXRlbWVudCkpCisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3Rh
dGVtZW50PihzdGF0ZW1lbnQpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGlzPEFTVDo6
V2hpbGVMb29wPihzdGF0ZW1lbnQpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25j
YXN0PEFTVDo6V2hpbGVMb29wPihzdGF0ZW1lbnQpKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRv
cjo6dmlzaXQoQVNUOjpCcmVhayYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpD
b250aW51ZSYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9vcCYg
ZG9XaGlsZUxvb3ApCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmJvZHko
KSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOwor
fQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikKK3sK
KyAgICBpZiAoaXM8QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9u
PihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpCb29sZWFuTGl0ZXJhbD4oZXhw
cmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkJvb2xl
YW5MaXRlcmFsPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpDYWxsRXhwcmVz
c2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxB
U1Q6OkNhbGxFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpD
b21tYUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZG93bmNhc3Q8QVNUOjpDb21tYUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIGlm
IChpczxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oZXhw
cmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6RmxvYXRMaXRlcmFsPihleHByZXNzaW9u
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RmxvYXRMaXRlcmFs
PihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpJbnRlZ2VyTGl0ZXJhbD4oZXhw
cmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkludGVn
ZXJMaXRlcmFsPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpMb2dpY2FsRXhw
cmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2Fz
dDxBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8
QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uPihleHByZXNzaW9u
KSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uPihl
eHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6TWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlz
PEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uPihleHByZXNz
aW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpOdWxsTGl0ZXJhbD4oZXhwcmVzc2lvbikpCisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6Ok51bGxMaXRlcmFsPihleHBy
ZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpEb3RFeHByZXNzaW9uPihleHByZXNzaW9u
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RG90RXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6SW5kZXhFeHByZXNzaW9uPihl
eHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6SW5k
ZXhFeHByZXNzaW9uPihleHByZXNzaW9uKSk7CisgICAgZWxzZSBpZiAoaXM8QVNUOjpSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uPihleHByZXNzaW9uKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGRvd25jYXN0PEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbj4oZXhwcmVzc2lvbikp
OworICAgIGVsc2UgaWYgKGlzPEFTVDo6VGVybmFyeUV4cHJlc3Npb24+KGV4cHJlc3Npb24pKQor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpUZXJuYXJ5RXhwcmVzc2lv
bj4oZXhwcmVzc2lvbikpOworICAgIGVsc2UgaWYgKGlzPEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbD4oZXhwcmVzc2lvbikpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxB
U1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWw+KGV4cHJlc3Npb24pKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgQVNTRVJUKGlzPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGV4cHJlc3Npb24pKTsKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+
KGV4cHJlc3Npb24pKTsKKyAgICB9Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpEb3RF
eHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0
aWNfY2FzdDxBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiY+KGRvdEV4cHJlc3Npb24pKTsK
K30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHBy
ZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpbmRleEV4cHJlc3Npb24uaW5kZXhF
eHByZXNzaW9uKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OlBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbiY+KGluZGV4RXhwcmVzc2lvbikpOworfQorCit2b2lkIFZp
c2l0b3I6OnZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBleHByZXNzaW9uKQor
eworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uLmJhc2UoKSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50JiBlZmZlY3Rm
dWxFeHByZXNzaW9uU3RhdGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlZmZlY3Rm
dWxFeHByZXNzaW9uU3RhdGVtZW50LmVmZmVjdGZ1bEV4cHJlc3Npb24oKSk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6dmlzaXQoQVNUOjpGYWxsdGhyb3VnaCYpCit7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKQoreworICAgIFdURjo6dmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHZhcmlh
YmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKKyAgICB9LCBbJl0oVW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4mIGV4cHJlc3Npb24pIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRp
Y19jYXN0PEFTVDo6RXhwcmVzc2lvbiY+KGV4cHJlc3Npb24pKTsKKyAgICB9KSwgZm9yTG9vcC5p
bml0aWFsaXphdGlvbigpKTsKKyAgICBpZiAoZm9yTG9vcC5jb25kaXRpb24oKSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KCpmb3JMb29wLmNvbmRpdGlvbigpKTsKKyAgICBpZiAoZm9yTG9v
cC5pbmNyZW1lbnQoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmb3JMb29wLmluY3Jl
bWVudCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZm9yTG9vcC5ib2R5KCkpOworfQorCit2
b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVtZW50KQoreworICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKKyAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKKyAgICBpZiAoaWZTdGF0ZW1lbnQu
ZWxzZUJvZHkoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6
U3RhdGVtZW50Jj4oKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpKTsKK30KKwordm9pZCBWaXNpdG9y
Ojp2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJuU3RhdGVtZW50KQoreworICAgIGlmIChyZXR1cm5T
dGF0ZW1lbnQudmFsdWUoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpyZXR1cm5TdGF0
ZW1lbnQudmFsdWUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpTd2l0Y2hDYXNl
JiBzd2l0Y2hDYXNlKQoreworICAgIGlmIChzd2l0Y2hDYXNlLnZhbHVlKCkpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCgqc3dpdGNoQ2FzZS52YWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5k
VmlzaXQoc3dpdGNoQ2FzZS5ibG9jaygpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OlN3aXRjaFN0YXRlbWVudCYgc3dpdGNoU3RhdGVtZW50KQoreworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNl
IDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChzd2l0Y2hDYXNlKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlRyYXAmKQor
eworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQoreworICAgIGZvciAoYXV0byYg
dmFyaWFibGVEZWNsYXJhdGlvbiA6IHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50LnZhcmlh
YmxlRGVjbGFyYXRpb25zKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURl
Y2xhcmF0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hp
bGVMb29wKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuY29uZGl0aW9uYWwo
KSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5KCkpOworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJh
dGlvbikKK3sKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgIGlmICh2
YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCgqdmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKTsKKyAgICBpZiAodmFyaWFibGVEZWNs
YXJhdGlvbi5pbml0aWFsaXplcigpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlh
YmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCit7CisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOworfQorCit2b2lk
IFZpc2l0b3I6OnZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKQorewor
ICAgIGZvciAoYXV0byYgYXJndW1lbnQgOiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RXhwcmVzc2lvbiY+KGFy
Z3VtZW50KSk7CisgICAgaWYgKGNhbGxFeHByZXNzaW9uLmNhc3RSZXR1cm5UeXBlKCkpCisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdChjYWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpLT5n
ZXQoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNv
bW1hRXhwcmVzc2lvbikKK3sKKyAgICBmb3IgKGF1dG8mIGV4cHJlc3Npb24gOiBjb21tYUV4cHJl
c3Npb24ubGlzdCgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNU
OjpFeHByZXNzaW9uJj4oZXhwcmVzc2lvbikpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkpOworfQor
Cit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHBy
ZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0
KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5yaWdodCgpKTsK
K30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dp
Y2FsTm90RXhwcmVzc2lvbikKK3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbE5vdEV4
cHJlc3Npb24ub3BlcmFuZCgpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6Ok1ha2VB
cnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pCit7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZh
bHVlKCkpOworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNz
aW9uJiBtYWtlUG9pbnRlckV4cHJlc3Npb24pCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KG1h
a2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6dmlzaXQo
QVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9u
KQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxW
YWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5vbGRWYWx1ZSgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQocmVhZE1vZGlmeVdyaXRlRXhw
cmVzc2lvbi5uZXdWYWx1ZSgpKTsKKyAgICBpZiAocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5u
ZXdWYWx1ZUV4cHJlc3Npb24oKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpyZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKTsKKyAgICBpZiAocmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHByZXNzaW9uKCkpCisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHByZXNzaW9uKCkp
OworfQorCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mIHRlcm5h
cnlFeHByZXNzaW9uKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVzc2lv
bi5wcmVkaWNhdGUoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9u
LmJvZHlFeHByZXNzaW9uKCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0ZXJuYXJ5RXhwcmVz
c2lvbi5lbHNlRXhwcmVzc2lvbigpKTsKK30KKwordm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OlZh
cmlhYmxlUmVmZXJlbmNlJikKK3sKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlz
aXQoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0
KHByb2dyYW0pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlVu
bmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZp
c2l0KHVubmFtZWRUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAg
IHZpc2l0KG5hbWVkVHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKQoreworICAgIGlmICghZXJyb3Io
KSkKKyAgICAgICAgdmlzaXQodHlwZURlZmluaXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmlu
aXRpb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzdHJ1Y3R1cmVEZWZp
bml0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5j
dGlvbkRlZmluaXRpb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChmdW5j
dGlvbkRlZmluaXRpb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mIG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24p
Cit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHZpc2l0KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVy
ZW5jZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHR5cGVSZWZlcmVuY2Up
OworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlBvaW50ZXJUeXBl
JiBwb2ludGVyVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHBvaW50
ZXJUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBcnJh
eVJlZmVyZW5jZVR5cGUmIGFycmF5UmVmZXJlbmNlVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkp
CisgICAgICAgIHZpc2l0KGFycmF5UmVmZXJlbmNlVHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCit7CisgICAgaWYg
KCFlcnJvcigpKQorICAgICAgICB2aXNpdChhcnJheVR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6
OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1lbnQmIHN0cnVjdHVyZUVsZW1l
bnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChzdHJ1Y3R1cmVFbGVtZW50
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpFbnVtZXJhdGlv
bk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAg
ICB2aXNpdChlbnVtZXJhdGlvbk1lbWJlcik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVuY3Rpb25EZWNsYXJhdGlvbikK
K3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZ1bmN0aW9uRGVjbGFyYXRpb24p
OworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5cGVBcmd1bWVu
dCYgdHlwZUFyZ3VtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodHlw
ZUFyZ3VtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpS
ZWZlcmVuY2VUeXBlJiByZWZlcmVuY2VUeXBlKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAg
ICAgdmlzaXQocmVmZXJlbmNlVHlwZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6U2VtYW50aWMmIHNlbWFudGljKQoreworICAgIGlmICghZXJyb3IoKSkKKyAg
ICAgICAgdmlzaXQoc2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYgY29uc3RhbnRFeHByZXNzaW9uKQoreworICAg
IGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoY29uc3RhbnRFeHByZXNzaW9uKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYgYXR0
cmlidXRlQmxvY2spCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChhdHRyaWJ1
dGVCbG9jayk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QnVp
bHRJblNlbWFudGljJiBidWlsdEluU2VtYW50aWMpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAg
ICAgICB2aXNpdChidWlsdEluU2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmIHJlc291cmNlU2VtYW50aWMpCit7Cisg
ICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChyZXNvdXJjZVNlbWFudGljKTsKK30KKwor
dm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0
YW50U2VtYW50aWMmIHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYykKK3sKKyAgICBpZiAo
IWVycm9yKCkpCisgICAgICAgIHZpc2l0KHNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYyk7
Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RhZ2VJbk91dFNl
bWFudGljJiBzdGFnZUluT3V0U2VtYW50aWMpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAg
ICB2aXNpdChzdGFnZUluT3V0U2VtYW50aWMpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkKK3sKKyAgICBp
ZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGludGVnZXJMaXRlcmFsKTsKK30KKwordm9pZCBW
aXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1
bnNpZ25lZEludGVnZXJMaXRlcmFsKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlz
aXQodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVyYWwpCit7CisgICAgaWYgKCFl
cnJvcigpKQorICAgICAgICB2aXNpdChmbG9hdExpdGVyYWwpOworfQorCit2b2lkIFZpc2l0b3I6
OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkKK3sKKyAg
ICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KG51bGxMaXRlcmFsKTsKK30KKwordm9pZCBW
aXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYgYm9vbGVhbkxp
dGVyYWwpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChib29sZWFuTGl0ZXJh
bCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SW50ZWdlckxp
dGVyYWxUeXBlJiBpbnRlZ2VyTGl0ZXJhbFR5cGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAg
ICAgICB2aXNpdChpbnRlZ2VyTGl0ZXJhbFR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlJiB1bnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHVu
c2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpGbG9hdExpdGVyYWxUeXBlJiBmbG9hdExpdGVyYWxUeXBlKQoreworICAg
IGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoZmxvYXRMaXRlcmFsVHlwZSk7Cit9CisKK3Zv
aWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TnVsbExpdGVyYWxUeXBlJiBudWxs
TGl0ZXJhbFR5cGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChudWxsTGl0
ZXJhbFR5cGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJl
c3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisg
ICAgICAgIHZpc2l0KGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNl
KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpGdW5jdGlvbkF0
dHJpYnV0ZSYgZnVuY3Rpb25BdHRyaWJ1dGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAg
ICB2aXNpdChmdW5jdGlvbkF0dHJpYnV0ZSk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6TnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlJiBudW1UaHJlYWRzRnVu
Y3Rpb25BdHRyaWJ1dGUpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChudW1U
aHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkJsb2NrJiBibG9jaykKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAg
IHZpc2l0KGJsb2NrKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpTdGF0ZW1lbnQmIHN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZp
c2l0KHN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6QnJlYWsmIGJyZWFrU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAg
dmlzaXQoYnJlYWtTdGF0ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OkNvbnRpbnVlJiBjb250aW51ZVN0YXRlbWVudCkKK3sKKyAgICBpZiAoIWVycm9y
KCkpCisgICAgICAgIHZpc2l0KGNvbnRpbnVlU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9y
OjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGlsZUxvb3ApCit7Cisg
ICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChkb1doaWxlTG9vcCk7Cit9CisKK3ZvaWQg
VmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikK
K3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGV4cHJlc3Npb24pOworfQorCit2
b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4
cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChkb3RFeHByZXNz
aW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpJbmRleEV4
cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAg
IHZpc2l0KGluZGV4RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQmIGVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1l
bnQpCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICB2aXNpdChlZmZlY3RmdWxFeHByZXNz
aW9uU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpGYWxsdGhyb3VnaCYgZmFsbHRocm91Z2hTdGF0ZW1lbnQpCit7CisgICAgaWYgKCFlcnJvcigp
KQorICAgICAgICB2aXNpdChmYWxsdGhyb3VnaFN0YXRlbWVudCk7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKK3sKKyAgICBpZiAo
IWVycm9yKCkpCisgICAgICAgIHZpc2l0KGZvckxvb3ApOworfQorCit2b2lkIFZpc2l0b3I6OmNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OklmU3RhdGVtZW50JiBpZlN0YXRlbWVudCkKK3sKKyAgICBp
ZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGlmU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNp
dG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpSZXR1cm4mIHJldHVyblN0YXRlbWVudCkKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHJldHVyblN0YXRlbWVudCk7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3dpdGNoQ2FzZSYgc3dpdGNo
Q2FzZSkKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHN3aXRjaENhc2UpOwor
fQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVu
dCYgc3dpdGNoU3RhdGVtZW50KQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQo
c3dpdGNoU3RhdGVtZW50KTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpUcmFwJiB0cmFwKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodHJh
cCk7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VmFyaWFibGVE
ZWNsYXJhdGlvbnNTdGF0ZW1lbnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KQorewor
ICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0
ZW1lbnQpOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OldoaWxl
TG9vcCYgd2hpbGVMb29wKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQod2hp
bGVMb29wKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQoreworICAgIGlmICghZXJyb3Io
KSkKKyAgICAgICAgdmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbik7Cit9CisKK3ZvaWQgVmlzaXRv
cjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1l
bnRFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQoYXNzaWdu
bWVudEV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNrRXJyb3JBbmRWaXNpdChB
U1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkp
CisgICAgICAgIHZpc2l0KGNhbGxFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVj
a0Vycm9yQW5kVmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikKK3sK
KyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGNvbW1hRXhwcmVzc2lvbik7Cit9CisK
K3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNz
aW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAg
ICB2aXNpdChkZXJlZmVyZW5jZUV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikK
K3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KGxvZ2ljYWxFeHByZXNzaW9uKTsK
K30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpMb2dpY2FsTm90RXhw
cmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCit7CisgICAgaWYgKCFlcnJvcigpKQorICAg
ICAgICB2aXNpdChsb2dpY2FsTm90RXhwcmVzc2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hl
Y2tFcnJvckFuZFZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbikKK3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZp
c2l0KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJF
eHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQobWFrZVBvaW50
ZXJFeHByZXNzaW9uKTsKK30KKwordm9pZCBWaXNpdG9yOjpjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKQor
eworICAgIGlmICghZXJyb3IoKSkKKyAgICAgICAgdmlzaXQocmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbik7Cit9CisKK3ZvaWQgVmlzaXRvcjo6Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6VGVybmFy
eUV4cHJlc3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKQoreworICAgIGlmICghZXJyb3IoKSkKKyAg
ICAgICAgdmlzaXQodGVybmFyeUV4cHJlc3Npb24pOworfQorCit2b2lkIFZpc2l0b3I6OmNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVyZW5jZSkK
K3sKKyAgICBpZiAoIWVycm9yKCkpCisgICAgICAgIHZpc2l0KHZhcmlhYmxlUmVmZXJlbmNlKTsK
K30KKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uODVlNzhmZjU5OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuaApAQCAtMCwwICsxLDI2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUg
IldITFNMRnVuY3Rpb25BdHRyaWJ1dGUuaCIKKyNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCisj
aW5jbHVkZSAiV0hMU0xUeXBlQXJndW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCituYW1lc3BhY2UgQVNUIHsKKwor
Y2xhc3MgVHlwZURlZmluaXRpb247CitjbGFzcyBTdHJ1Y3R1cmVEZWZpbml0aW9uOworY2xhc3Mg
RW51bWVyYXRpb25EZWZpbml0aW9uOworY2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworY2xhc3Mg
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbjsKK2NsYXNzIE5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsK
K2NsYXNzIFR5cGVSZWZlcmVuY2U7CitjbGFzcyBQb2ludGVyVHlwZTsKK2NsYXNzIEFycmF5UmVm
ZXJlbmNlVHlwZTsKK2NsYXNzIEFycmF5VHlwZTsKK2NsYXNzIFN0cnVjdHVyZUVsZW1lbnQ7Citj
bGFzcyBFbnVtZXJhdGlvbk1lbWJlcjsKK2NsYXNzIEZ1bmN0aW9uRGVjbGFyYXRpb247CitjbGFz
cyBSZWZlcmVuY2VUeXBlOworY2xhc3MgQ29uc3RhbnRFeHByZXNzaW9uOworY2xhc3MgQnVpbHRJ
blNlbWFudGljOworY2xhc3MgUmVzb3VyY2VTZW1hbnRpYzsKK2NsYXNzIFNwZWNpYWxpemF0aW9u
Q29uc3RhbnRTZW1hbnRpYzsKK2NsYXNzIFN0YWdlSW5PdXRTZW1hbnRpYzsKK2NsYXNzIEludGVn
ZXJMaXRlcmFsOworY2xhc3MgVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbDsKK2NsYXNzIEZsb2F0TGl0
ZXJhbDsKK2NsYXNzIE51bGxMaXRlcmFsOworY2xhc3MgQm9vbGVhbkxpdGVyYWw7CitjbGFzcyBD
b25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZTsKK2NsYXNzIE51bVRo
cmVhZHNGdW5jdGlvbkF0dHJpYnV0ZTsKK2NsYXNzIEJsb2NrOworY2xhc3MgU3RhdGVtZW50Owor
Y2xhc3MgQnJlYWs7CitjbGFzcyBDb250aW51ZTsKK2NsYXNzIERvV2hpbGVMb29wOworY2xhc3Mg
RXhwcmVzc2lvbjsKK2NsYXNzIERvdEV4cHJlc3Npb247CitjbGFzcyBJbmRleEV4cHJlc3Npb247
CitjbGFzcyBQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb247CitjbGFzcyBFZmZlY3RmdWxFeHByZXNz
aW9uU3RhdGVtZW50OworY2xhc3MgRmFsbHRocm91Z2g7CitjbGFzcyBGb3JMb29wOworY2xhc3Mg
SWZTdGF0ZW1lbnQ7CitjbGFzcyBSZXR1cm47CitjbGFzcyBTd2l0Y2hDYXNlOworY2xhc3MgU3dp
dGNoU3RhdGVtZW50OworY2xhc3MgVHJhcDsKK2NsYXNzIFZhcmlhYmxlRGVjbGFyYXRpb25zU3Rh
dGVtZW50OworY2xhc3MgV2hpbGVMb29wOworY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbjsKK2Ns
YXNzIEFzc2lnbm1lbnRFeHByZXNzaW9uOworY2xhc3MgQ2FsbEV4cHJlc3Npb247CitjbGFzcyBD
b21tYUV4cHJlc3Npb247CitjbGFzcyBEZXJlZmVyZW5jZUV4cHJlc3Npb247CitjbGFzcyBMb2dp
Y2FsRXhwcmVzc2lvbjsKK2NsYXNzIExvZ2ljYWxOb3RFeHByZXNzaW9uOworY2xhc3MgTWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbjsKK2NsYXNzIE1ha2VQb2ludGVyRXhwcmVzc2lvbjsKK2Ns
YXNzIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb247CitjbGFzcyBUZXJuYXJ5RXhwcmVzc2lvbjsK
K2NsYXNzIFZhcmlhYmxlUmVmZXJlbmNlOworY2xhc3MgVW5uYW1lZFR5cGU7CitjbGFzcyBOYW1l
ZFR5cGU7CisKK30KKworY2xhc3MgVmlzaXRvciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+Vmlz
aXRvcigpID0gZGVmYXVsdDsKKworICAgIC8vIEZJWE1FOiBBZGQgYSB3YXkgdG8gdmlzaXQgYSBj
b25zdCBQcm9ncmFtCisKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoUHJvZ3JhbSYpOworICAgIHZv
aWQgdmlzaXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpOworICAgIHZvaWQgdmlzaXQo
QVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSk7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
VHlwZURlZmluaXRpb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVE
ZWZpbml0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9u
Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
biYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiYp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNp
dChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkFycmF5VHlwZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZUVsZW1l
bnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYpOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24mKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUeXBlQXJndW1lbnQmKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpSZWZlcmVuY2VUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6
U2VtYW50aWMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb25zdGFudEV4cHJlc3Np
b24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpBdHRyaWJ1dGVCbG9jayYpOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYpOworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6OlJlc291cmNlU2VtYW50aWMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpTcGVjaWFsaXphdGlvbkNvbnN0YW50U2VtYW50aWMmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlz
aXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlVu
c2lnbmVkSW50ZWdlckxpdGVyYWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGbG9h
dExpdGVyYWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYpOwor
ICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkJvb2xlYW5MaXRlcmFsJik7CisgICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWxUeXBlJik7CisgICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmKTsKKyAgICB2aXJ0dWFsIHZv
aWQgdmlzaXQoQVNUOjpGbG9hdExpdGVyYWxUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6TnVsbExpdGVyYWxUeXBlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6Q29u
c3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkF0dHJpYnV0ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYpOworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdChBU1Q6OkJsb2NrJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3RhdGVt
ZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6QnJlYWsmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdmlzaXQoQVNUOjpDb250aW51ZSYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6
OkRvV2hpbGVMb29wJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6RXhwcmVzc2lvbiYp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6RmFsbHRocm91Z2gmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNU
OjpGb3JMb29wJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpSZXR1cm4mKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dmlzaXQoQVNUOjpTd2l0Y2hDYXNlJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6U3dp
dGNoU3RhdGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6VHJhcCYpOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Jik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6V2hpbGVMb29wJik7CisgICAgdmlydHVhbCB2
b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYpOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
KEFTVDo6Q2FsbEV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpDb21t
YUV4cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4
cHJlc3Npb24mKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lv
biYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJik7
CisgICAgdmlydHVhbCB2b2lkIHZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
biYpOworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYp
OworICAgIHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYpOworICAg
IHZpcnR1YWwgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJik7CisKKyAgICB2b2lk
IGNoZWNrRXJyb3JBbmRWaXNpdChQcm9ncmFtJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpOworICAgIHZvaWQgY2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpOworICAgIHZvaWQgY2hlY2tFcnJvckFu
ZFZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OlBvaW50ZXJUeXBlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNU
OjpBcnJheVJlZmVyZW5jZVR5cGUmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OkFycmF5VHlwZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U3RydWN0dXJl
RWxlbWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RW51bWVyYXRpb25N
ZW1iZXImKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlR5cGVBcmd1bWVudCYp
OworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmVmZXJlbmNlVHlwZSYpOworICAg
IHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6U2VtYW50aWMmKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6QXR0cmlidXRlQmxvY2smKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JB
bmRWaXNpdChBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6UmVzb3VyY2VTZW1hbnRpYyYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0
KEFTVDo6U3BlY2lhbGl6YXRpb25Db25zdGFudFNlbWFudGljJik7CisgICAgdm9pZCBjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpTdGFnZUluT3V0U2VtYW50aWMmKTsKKyAgICB2b2lkIGNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJik7CisgICAgdm9pZCBjaGVja0Vycm9y
QW5kVmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6Ok51bGxMaXRlcmFsJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpC
b29sZWFuTGl0ZXJhbCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6SW50ZWdl
ckxpdGVyYWxUeXBlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpVbnNpZ25l
ZEludGVnZXJMaXRlcmFsVHlwZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
RmxvYXRMaXRlcmFsVHlwZSYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6TnVs
bExpdGVyYWxUeXBlJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpOworICAgIHZvaWQgY2hlY2tF
cnJvckFuZFZpc2l0KEFTVDo6RnVuY3Rpb25BdHRyaWJ1dGUmKTsKKyAgICB2b2lkIGNoZWNrRXJy
b3JBbmRWaXNpdChBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6QmxvY2smKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OlN0YXRlbWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
QnJlYWsmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6OkNvbnRpbnVlJik7Cisg
ICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpEb1doaWxlTG9vcCYpOworICAgIHZvaWQg
Y2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6SW5kZXhFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQo
QVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRW
aXNpdChBU1Q6OkVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQmKTsKKyAgICB2b2lkIGNoZWNr
RXJyb3JBbmRWaXNpdChBU1Q6OkZhbGx0aHJvdWdoJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpGb3JMb29wJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpJ
ZlN0YXRlbWVudCYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6UmV0dXJuJik7
CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTd2l0Y2hDYXNlJik7CisgICAgdm9p
ZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmKTsKKyAgICB2b2lkIGNo
ZWNrRXJyb3JBbmRWaXNpdChBU1Q6OlRyYXAmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50Jik7CisgICAgdm9pZCBjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpXaGlsZUxvb3AmKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNp
dChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlz
aXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFT
VDo6Q29tbWFFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpE
ZXJlZmVyZW5jZUV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGNoZWNrRXJyb3JBbmRWaXNpdChBU1Q6
OkxvZ2ljYWxFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5kVmlzaXQoQVNUOjpM
b2dpY2FsTm90RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZpc2l0KEFTVDo6
TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJvckFuZFZp
c2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vycm9yQW5k
VmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJik7CisgICAgdm9pZCBjaGVja0Vy
cm9yQW5kVmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVzc2lvbiYpOworICAgIHZvaWQgY2hlY2tFcnJv
ckFuZFZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmKTsKKworICAgIHZvaWQgc2V0RXJyb3Io
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2Vycm9yKTsKKyAgICAgICAgbV9lcnJvciA9IHRy
dWU7CisgICAgfQorCisgICAgYm9vbCBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0K
KworcHJpdmF0ZToKKyAgICBib29sIG1fZXJyb3IgeyBmYWxzZSB9OyAvLyBGSVhNRTogTWlncmF0
ZSB0aGlzIHRvIGJlIHNvbWUgc29ydCBvZiBkZXNjcmlwdGl2ZSBzdHJpbmcuCit9OworCit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGU3ZDkzNGFkMjdmLi5kNDBjMzRmMDRkZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKQEAgLTMwNCw2ICszMDQsMzQgQEAgTW9kdWxlcy93ZWJzb2NrZXRzL1dv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcAogCiBNb2R1bGVzL3dlYmdwdS9ET01X
aW5kb3dXZWJHUFUuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcAorTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFByZXBhcmUuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEludHJpbnNpY3MuY3Bw
CitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTEluZmVyVHlwZXMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVS
ZXNvbHZlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZUNvbnRleHQuY3BwCitN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcAorTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKK01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAKK01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmNwcAor
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5j
cHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAK
K01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dI
TFNML0FTVC9XSExTTFR5cGVBcmd1bWVudC5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9X
SExTTEJ1aWx0SW5TZW1hbnRpYy5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJl
c291cmNlU2VtYW50aWMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xTcGVjaWFs
aXphdGlvbkNvbnN0YW50U2VtYW50aWMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hM
U0xTdGFnZUluT3V0U2VtYW50aWMuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xG
bG9hdExpdGVyYWxUeXBlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMSW50ZWdl
ckxpdGVyYWxUeXBlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMTnVsbExpdGVy
YWxUeXBlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbFR5cGUuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBlUmVmZXJl
bmNlLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZXNvbHZlT3ZlcmxvYWRJbXBsLmNw
cAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwCitN
b2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHAKK01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwCiBNb2R1bGVz
L3dlYmdwdS9XZWJHUFUuY3BwCiBNb2R1bGVzL3dlYmdwdS9XZWJHUFVBZGFwdGVyLmNwcAogTW9k
dWxlcy93ZWJncHUvV2ViR1BVQmluZEdyb3VwTGF5b3V0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGRlNDUyYzA2MmE2Li40
ZjA1NmJiMWEzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtNjQwMyw5ICs2NDAzLDIwIEBACiAJCTFDMjRFRUE3MUM3MkE3QjQw
MDgwRjhGQyAvKiBKU0ZvbnRGYWNlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEpTRm9udEZhY2VTZXQuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNGb250
RmFjZVNldC5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQkxQzI2NDk3
OTBEN0UyNDhBMDBCRDEwRjIgLyogRG9jdW1lbnRMb2FkZXJNYWMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1lbnRMb2FkZXJNYWMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQzMyNDkxMDFDNkQ2QTNCMDA3RURCMzIgLyogRm9udFZhcmlh
bnRCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRW
YXJpYW50QnVpbGRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzZD
MjFDRURBNDIwMDBEQzlGMiAvKiBXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQzMzMjc2RTIxQ0VGRjc0MDAwREM5RjIgLyogV0hMU0xSZXNvbHZl
T3ZlcmxvYWRJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc2RjIxQ0YwMTMxMDAwREM5RjIg
LyogV0hMU0xJbmZlclR5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMSW5mZXJUeXBlcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3MTIxQ0YwQkUxMDAwREM5RjIgLyog
V0hMU0xOYW1lZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1lZFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzIyMUNGMEQyRTAwMERDOUYyIC8qIFdITFNM
VW5uYW1lZFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xVbm5hbWVkVHlwZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkxQzMzMjc3NDIxRDVBNzA2MDAwREM5RjIgLyogV0hMU0xS
ZWN1cnNpdmVUeXBlQ2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlY3Vyc2l2ZVR5cGVD
aGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc1MjFENUIwRjgw
MDBEQzlGMiAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMUMzMzI3NzYyMUQ1QzA3RTAwMERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZVN0cnVjdHVy
ZUFjY2Vzc29ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nl
c3NvcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUMzMzI3NzcyMUQ1Q0E4MzAw
MERDOUYyIC8qIFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTFDMzMyNzc4MjFENUNFRDQwMDBEQzlGMiAvKiBXSExTTFN5bnRo
ZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3ludGhlc2l6
ZUFycmF5T3BlcmF0b3JMZW5ndGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMz
OTY5Q0YxQjc0MjExRTAwMkJDRkE3IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRDYWNoZUNvcmVUZXh0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2NjI2MEUxQzZFN0NBNjAwQUI1MjdDIC8qIEZvbnRG
YWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRGYWNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM2NjI2MEYxQzZFN0NBNjAwQUI1MjdD
IC8qIEZvbnRGYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRGYWNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDN0NDMjFEMjFDREUxOTgwMEMxRkEy
QyAvKiBXSExTTE5hbWVDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTmFtZUNvbnRleHQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3
IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW5zcGVjdG9yQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
QzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDb250cm9sbGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8q
IEluc3BlY3RvckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNw
ZWN0b3JDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0MTUsNiArNjQy
NiwxOCBAQAogCQkxQ0FGMzQ3RTBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNjcmlwdE9iamVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ3RjBBNkM0MDUyMDBBQkUwNkUgLyogV2Vi
U2NyaXB0T2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViU2NyaXB0T2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0FGMzQ4
MDBBNkM0MDUyMDBBQkUwNkUgLyogV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJTY3JpcHRPYmplY3RQcml2YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjJDMjFERDk2RUYwMDZFODQ2QSAvKiBXSExTTEdh
dGhlckVudHJ5UG9pbnRJdGVtcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEdhdGhlckVu
dHJ5UG9pbnRJdGVtcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjJE
MjFERDk2RUYwMDZFODQ2QSAvKiBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQ0I2OUIzMjIxREVENDBCMDA2RTg0NkEgLyogV0hMU0xSZXNvbHZhYmxlVHlw
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFJlc29sdmFibGVUeXBlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTFDQjY5QjM0MjFERUQ2M0EwMDZFODQ2QSAvKiBXSExTTEZsb2F0TGl0
ZXJhbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xGbG9hdExpdGVyYWxUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjM1MjFERUQ2NDkwMDZFODQ2QSAvKiBXSExT
TEludGVnZXJMaXRlcmFsVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEludGVnZXJMaXRlcmFs
VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIzNjIxREVENjU3MDA2
RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJhbFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOdWxs
TGl0ZXJhbFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUNCNjlCMzcyMURF
RDY2QjAwNkU4NDZBIC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQ0I2OUIzODIxREYwM0UxMDA2RTg0NkEgLyogV0hMU0xGbG9hdExp
dGVyYWxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMRmxvYXRMaXRlcmFsVHlwZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDQjY5QjM5MjFERjAzRjMwMDZFODQ2
QSAvKiBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExT
TEludGVnZXJMaXRlcmFsVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFD
QjY5QjNBMjFERjA0MDMwMDZFODQ2QSAvKiBXSExTTE51bGxMaXRlcmFsVHlwZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXSExTTE51bGxMaXRlcmFsVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTFDQjY5QjNCMjFERjA0MUUwMDZFODQ2QSAvKiBXSExTTFVuc2lnbmVkSW50
ZWdlckxpdGVyYWxUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQ0I2OUIz
RTIxRTAzNUYzMDA2RTg0NkEgLyogV0hMU0xSZXNvbHZpbmdUeXBlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMUmVzb2x2aW5nVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQ0I2
QjRGODIxN0I4MzkzMDA5M0I5Q0QgLyogVGV4dERlY29yYXRpb25UaGlja25lc3MuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVGV4dERlY29yYXRpb25UaGlja25lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMUNCNkI0RkIyMTdCODM5NDAwOTNCOUNEIC8qIFRleHRVbmRlcmxpbmVPZmZzZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGV4dFVuZGVybGluZU9mZnNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQ0NERjVCQjE5OTAzMzI0MDBCQ0VCQUQgLyogU1ZHVG9PVEZGb250Q29u
dmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUb09U
RkZvbnRDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjE0
LDkgKzEzMjM3LDkwIEBACiAJCUMxMUE5RUNEMjE0MDNBNUMwMENGQjIwQSAvKiBTd2l0Y2hpbmdH
UFVDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3dpdGNoaW5nR1BVQ2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMxMUE5RUQyMjE0MDU3OEIwMENGQjIwQSAvKiBTd2l0Y2hp
bmdHUFVDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3dpdGNoaW5nR1BVQ2xpZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzFFMUQyMzUyMDNERjE1NDAwNTg0NjY1
IC8qIFNjcmVlblByb3BlcnRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyZWVuUHJvcGVydGllcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjAxMzM0NDIxREFDMDk1MDBCNjBDMjcg
LyogV0hMU0xJbnRyaW5zaWNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMSW50cmluc2ljcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjAxMzM0NjIxREFFRTZFMDBCNjBDMjcgLyog
V0hMU0xJbnRyaW5zaWNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMSW50cmluc2ljcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMDEzMzQ3MjFEQjQzNjMwMEI2MEMy
NyAvKiBXSExTTFN5bnRoZXNpemVDb25zdHJ1Y3RvcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xT
eW50aGVzaXplQ29uc3RydWN0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
MDE1QzA5MUJFNkZFMkMwMDgyMjM4OSAvKiBGb250VmFyaWFudEJ1aWxkZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRm9udFZhcmlhbnRCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMEY0RjY0MjFERkJFNUMwMDcwQzQ1QSAvKiBXSExTTFR5cGVSZWZlcmVuY2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0hMU0xUeXBlUmVmZXJlbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzIwRjRGNjYyMURGRjIzNjAwNzBDNDVBIC8qIFdITFNMSW50ZWdlckxpdGVy
YWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbnRlZ2VyTGl0ZXJhbC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMEY0RjY3MjFERkYzQTcwMDcwQzQ1QSAvKiBXSExT
TFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xVbnNp
Z25lZEludGVnZXJMaXRlcmFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIx
MEU5MTEyMUI0QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0hMU0xMZXhlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMTBFOTEy
MjFCNEJEMTAwMEI3RjgzRCAvKiBXSExTTExleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTGV4
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzhBMTMyMURERUNEMzAwRjUx
NkJBIC8qIFdITFNMQnVpbHRJblNlbWFudGljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNM
QnVpbHRJblNlbWFudGljLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxMzhB
MTUyMURERUNFOTAwRjUxNkJBIC8qIFdITFNMUmVzb3VyY2VTZW1hbnRpYy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXSExTTFJlc291cmNlU2VtYW50aWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMjEzOEExNjIxRERFQ0ZCMDBGNTE2QkEgLyogV0hMU0xTcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MjEzOEExNzIxRERFRDBEMDBGNTE2QkEgLyogV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xTdGFnZUluT3V0U2VtYW50aWMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDMjFCRjZGMzIxQ0Q4OUFEMDAyMjc5NzkgLyogV0hMU0xUcmFw
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVHJhcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMjFCRjZGNDIxQ0Q4OUIzMDAyMjc5NzkgLyogV0hMU0xGdW5jdGlvbkRlZmluaXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY2RjUyMUNEODlCNTAwMjI3OTc5IC8qIFdITFNMQ29udGlu
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xDb250aW51ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMjFCRjZGNjIxQ0Q4OUI3MDAyMjc5NzkgLyogV0hMU0xCb29sZWFuTGl0ZXJh
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEJvb2xlYW5MaXRlcmFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyMUJGNkY3MjFDRDg5QjkwMDIyNzk3OSAvKiBXSExTTEluZGV4RXhw
cmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEluZGV4RXhwcmVzc2lvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjFCRjZGODIxQ0Q4OUJCMDAyMjc5NzkgLyogV0hMU0xJ
bnRlZ2VyTGl0ZXJhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEludGVnZXJMaXRlcmFsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNkY5MjFDRDg5QkQwMDIyNzk3OSAvKiBX
SExTTFNlbWFudGljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU2VtYW50aWMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY2RkEyMUNEODlCRTAwMjI3OTc5IC8qIFdITFNMQmFz
ZVNlbWFudGljLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQmFzZVNlbWFudGljLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNkZCMjFDRDg5QkUwMDIyNzk3OSAvKiBXSExTTERv
V2hpbGVMb29wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRG9XaGlsZUxvb3AuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY2RkMyMUNEODlCRjAwMjI3OTc5IC8qIFdITFNMVmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDMjFCRjZGRDIxQ0Q4OUMwMDAyMjc5NzkgLyogV0hMU0xGdW5jdGlvbkRlY2xhcmF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRnVuY3Rpb25EZWNsYXJhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjFCRjZGRTIxQ0Q4OUMxMDAyMjc5NzkgLyogV0hMU0xT
dHJ1Y3R1cmVFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMU3RydWN0dXJlRWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjFCRjZGRjIxQ0Q4OUMyMDAyMjc5Nzkg
LyogV0hMU0xJZlN0YXRlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTElmU3RhdGVtZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNzAwMjFDRDg5QzIwMDIyNzk3OSAv
KiBXSExTTEZhbGx0aHJvdWdoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRmFsbHRocm91Z2guaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY3MDEyMUNEODlDNDAwMjI3OTc5IC8q
IFdITFNMRGVyZWZlcmVuY2VFeHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRGVyZWZl
cmVuY2VFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNzAy
MjFDRDg5QzQwMDIyNzk3OSAvKiBXSExTTENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVt
YmVyUmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIxQkY3MDMyMUNEODlDNTAwMjI3OTc5IC8qIFdITFNMUmV0dXJuLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMUmV0dXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNzA0MjFD
RDg5QzYwMDIyNzk3OSAvKiBXSExTTFdoaWxlTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFdo
aWxlTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjFCRjcwNTIxQ0Q4OUM3
MDAyMjc5NzkgLyogV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExT
TEZ1bmN0aW9uQXR0cmlidXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJG
NzA2MjFDRDg5QzcwMDIyNzk3OSAvKiBXSExTTENvbW1hRXhwcmVzc2lvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTENvbW1hRXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMjFCRjcwNzIxQ0Q4OUM4MDAyMjc5NzkgLyogV0hMU0xOdWxsTGl0ZXJhbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTE51bGxMaXRlcmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMUJGNzA4MjFDRDg5QzkwMDIyNzk3OSAvKiBXSExTTFJlc291cmNlU2VtYW50aWMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xSZXNvdXJjZVNlbWFudGljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUMyMUJGNzA5MjFDRDg5Q0EwMDIyNzk3OSAvKiBXSExTTEFycmF5VHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXSExTTEFycmF5VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDMjFCRjcwQTIxQ0Q4OUNCMDAyMjc5NzkgLyogV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xCYXNlRnVuY3Rpb25BdHRyaWJ1dGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY3MEIyMUNEODlDQzAwMjI3OTc5IC8qIFdITFNM
UXVhbGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUXVhbGlmaWVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNzBDMjFDRDg5Q0MwMDIyNzk3OSAvKiBXSExTTEV4cHJl
c3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyMUJGNzBEMjFDRDg5Q0QwMDIyNzk3OSAvKiBXSExTTFJlZmVyZW5j
ZVR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xSZWZlcmVuY2VUeXBlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNzBFMjFDRDg5Q0UwMDIyNzk3OSAvKiBXSExTTFN0YWdl
SW5PdXRTZW1hbnRpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN0YWdlSW5PdXRTZW1hbnRpYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjFCRjcxMDIxQ0Q4OUQwMDAyMjc5Nzkg
LyogV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVmFyaWFi
bGVEZWNsYXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjFCRjcxMTIx
Q0Q4OUQxMDAyMjc5NzkgLyogV0hMU0xUeXBlQXJndW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xUeXBlQXJndW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY3MTIy
MUNEODlEMTAwMjI3OTc5IC8qIFdITFNMU3RhdGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
U3RhdGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNzEzMjFDRDg5
RDIwMDIyNzk3OSAvKiBXSExTTFZhcmlhYmxlUmVmZXJlbmNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdI
TFNMVmFyaWFibGVSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIx
QkY3MTQyMUNEODlEMzAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjFCRjcxNTIxQ0Q4OUQ0MDAyMjc5Nzkg
LyogV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTExvZ2lj
YWxOb3RFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNzE2
MjFDRDg5RDUwMDIyNzk3OSAvKiBXSExTTENhbGxFeHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMQ2FsbEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIx
QkY3MTgyMUNEODlENzAwMjI3OTc5IC8qIFdITFNMRG90RXhwcmVzc2lvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTERvdEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIxQkY3MTkyMUNEODlENzAwMjI3OTc5IC8qIFdITFNMU3dpdGNoQ2FzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXSExTTFN3aXRjaENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIx
QkY3MUEyMUNEODlEODAwMjI3OTc5IC8qIFdITFNMQnJlYWsuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xCcmVhay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjFCRjcxQjIxQ0Q4OUQ5
MDAyMjc5NzkgLyogV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMjFCRjcxQzIxQ0Q4OURBMDAyMjc5NzkgLyogV0hMU0xUZXJuYXJ5RXhwcmVz
c2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFRlcm5hcnlFeHByZXNzaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNzFEMjFDRDg5REIwMDIyNzk3OSAvKiBXSExTTFR5
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyMUJGNzFFMjFDRDg5REMwMDIyNzk3OSAvKiBXSExTTEJsb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY3
MUYyMUNEODlEQzAwMjI3OTc5IC8qIFdITFNMVHlwZVJlZmVyZW5jZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTFR5cGVSZWZlcmVuY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIx
QkY3MjAyMUNEODlERDAwMjI3OTc5IC8qIFdITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMRW51bWVyYXRpb25EZWZpbml0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUMyMUJGNzIxMjFDRDg5REUwMDIyNzk3OSAvKiBXSExTTE51bVRocmVh
ZHNGdW5jdGlvbkF0dHJpYnV0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE51bVRocmVhZHNGdW5j
dGlvbkF0dHJpYnV0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjFCRjcyMjIx
Q0Q4OURGMDAyMjc5NzkgLyogV0hMU0xCdWlsdEluU2VtYW50aWMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xCdWlsdEluU2VtYW50aWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIx
QkY3MjMyMUNEODlFMTAwMjI3OTc5IC8qIFdITFNMTmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTE5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY3MjQyMUNEODlFMTAwMjI3OTc5IC8qIFdITFNM
Tm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzIxQkY3MjUyMUNEODlFMjAwMjI3OTc5IC8qIFdITFNMQXJyYXlSZWZlcmVuY2VU
eXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNzI2MjFDRDg5RTMwMDIyNzk3OSAvKiBXSExTTEVu
dW1lcmF0aW9uTWVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMRW51bWVyYXRpb25NZW1iZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY3MjcyMUNEODlFNDAwMjI3OTc5
IC8qIFdITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFN0cnVj
dHVyZURlZmluaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY3Mjgy
MUNEODlFNTAwMjI3OTc5IC8qIFdITFNMRWZmZWN0ZnVsRXhwcmVzc2lvblN0YXRlbWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXSExTTEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY3MjkyMUNEODlFNjAwMjI3OTc5IC8qIFdITFNM
VHlwZURlZmluaXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xUeXBlRGVmaW5pdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjFCRjcyQTIxQ0Q4OUU3MDAyMjc5NzkgLyog
V0hMU0xOYXRpdmVUeXBlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYXRpdmVU
eXBlRGVjbGFyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY3MkIy
MUNEODlFODAwMjI3OTc5IC8qIFdITFNMVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzIxQkY3MkMyMUNEODlFOTAwMjI3OTc5IC8qIFdITFNMTWFrZVBvaW50ZXJF
eHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMTWFrZVBvaW50ZXJFeHByZXNzaW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNzJEMjFDRDg5RTkwMDIyNzk3OSAv
KiBXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyMUJGNzJFMjFDRDg5RUEwMDIyNzk3OSAvKiBXSExTTFByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjFCRjcyRjIxQ0Q4OUVDMDAyMjc5Nzkg
LyogV0hMU0xQb2ludGVyVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFBvaW50ZXJUeXBlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNzMwMjFDRDg5RUQwMDIyNzk3OSAv
KiBXSExTTEFzc2lnbm1lbnRFeHByZXNzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQXNzaWdu
bWVudEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY3MzEy
MUNEODlFRTAwMjI3OTc5IC8qIFdITFNMU3dpdGNoU3RhdGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMU3dpdGNoU3RhdGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
MUJGNzMyMjFDRDg5RUYwMDIyNzk3OSAvKiBXSExTTExvZ2ljYWxFeHByZXNzaW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMTG9naWNhbEV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzIxQkY3MzMyMUNEODlGMDAwMjI3OTc5IC8qIFdITFNMQ29uc3RhbnRFeHByZXNz
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ29uc3RhbnRFeHByZXNzaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNzM0MjFDRDg5RjEwMDIyNzk3OSAvKiBXSExTTEZv
ckxvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xGb3JMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUMyMUJGNzM1MjFDRDg5RjIwMDIyNzk3OSAvKiBXSExTTEZsb2F0TGl0ZXJh
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEZsb2F0TGl0ZXJhbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMjFCRjczNjIxQ0Q4OUYzMDAyMjc5NzkgLyogV0hMU0xTcGVjaWFsaXph
dGlvbkNvbnN0YW50U2VtYW50aWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xTcGVjaWFsaXphdGlv
bkNvbnN0YW50U2VtYW50aWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY3
MzcyMUNEOEEwMjAwMjI3OTc5IC8qIFdITFNMUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdITFNMUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxQkY3Mzgy
MUNEOEEwMzAwMjI3OTc5IC8qIFdITFNMUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUGFy
c2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNzNBMjFDRDhENzAwMDIy
Nzk3OSAvKiBXSExTTFByb2dyYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xQcm9ncmFtLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMUJGNzQyMjFDRDk2M0IwMDIyNzk3OSAvKiBX
SExTTFN0YW5kYXJkTGlicmFyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXSExTTFN0YW5kYXJkTGlicmFy
eS5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9XSExTTFN0YW5kYXJkTGlicmFyeS5o
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQlDMjFCRjc0NTIxQ0Q5Njk4
MDAyMjc5NzkgLyogV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0ICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdITFNMU3RhbmRhcmRM
aWJyYXJ5LnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxREYyRTcxRDlFNEU5
OTAwRjVCMjRDIC8qIENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250VmFyaWF0aW9uVmFsdWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlDMjFERjJFODFEOUU0RTk5MDBGNUIyNEMgLyogQ1NTRm9udFZh
cmlhdGlvblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZvbnRW
YXJpYXRpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjQ1OEU2MTFG
RTg5NzlFMDA1OTQ3NTkgLyogRm9udENhY2hlQ29yZVRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9u
dENhY2hlQ29yZVRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjI2LDkg
KzEzMzMwLDI3IEBACiAJCUMyODA4MzNEMUM2REMyMkMwMDE0NTFCNiAvKiBKU0ZvbnRGYWNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEpTRm9udEZhY2UuY3BwOyBw
YXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ZvbnRGYWNlLmNwcDsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJQzI4MDgzM0UxQzZEQzIyQzAwMTQ1MUI2IC8qIEpT
Rm9udEZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSlNGb250RmFjZS5o
OyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ZvbnRGYWNlLmg7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUMyODBCM0ZEMUVGNDYwODkwMEQzNTEzNSAvKiBG
b250RmFtaWx5U3BlY2lmaWNhdGlvbk51bGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gRm9udEZhbWlseVNwZWNpZmljYXRpb25OdWxsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzI4NkVEOUUyMURCNUFCQTAwNzEzQzQwIC8qIFdITFNMUmVzb2x2
ZU92ZXJsb2FkSW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFJlc29sdmVPdmVybG9h
ZEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjg4QzcyNzIxQzhDNkVG
MDAyREY1Q0EgLyogV0hMU0xWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVmlzaXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjg4QzcyOTIxQzhDQTUwMDAyREY1Q0Eg
LyogV0hMU0xQcmVwYXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMUHJlcGFyZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyODhDNzJBMjFDOENBNTAwMDJERjVDQSAv
KiBXSExTTFByZXBhcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xQcmVwYXJlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyODhDNzJDMjFDOENDQzIwMDJERjVDQSAvKiBXSExTTE5h
bWVSZXNvbHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTE5hbWVSZXNvbHZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjg4QzcyRDIxQzk5MURBMDAyREY1Q0EgLyogV0hMU0xU
eXBlQXJndW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xUeXBlQXJndW1lbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkFCMEFGNDFFNkIzQzZDMDAxMzQ4QzUg
LyogRm9udFNlbGVjdGlvbkFsZ29yaXRobS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBGb250U2VsZWN0aW9uQWxnb3JpdGhtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQzJBQjBBRjUxRTZCM0M2QzAwMTM0OEM1IC8qIEZvbnRTZWxlY3Rpb25BbGdv
cml0aG0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udFNlbGVjdGlvbkFs
Z29yaXRobS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkFCMEIwMzFFNkRFOTJD
MDAxMzQ4QzUgLyogRm9udFNlbGVjdGlvblZhbHVlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
b250U2VsZWN0aW9uVmFsdWVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyQjU1MTcwMjFEQjRCNDgwMDRCRTI2RSAvKiBXSExTTENoZWNrZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0hMU0xDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzJCNTUxNzEyMURCNEI0ODAwNEJFMjZFIC8qIFdITFNMQ2hlY2tlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXSExTTENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzJCNTUxNzMy
MURCNEJCRDAwNEJFMjZFIC8qIFdITFNMTmFtZVJlc29sdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdITFNMTmFtZVJlc29sdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzJCNTUxNzQyMURCNTEwRjAwNEJFMjZFIC8qIFdITFNMTmFtZUNvbnRleHQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0hMU0xOYW1lQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUMyQjU1MTc1MjFEQjUyNjYwMDRCRTI2RSAvKiBXSExTTEluZmVyVHlwZXMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbmZlclR5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQzJCNTUxNzYyMURCNTM5NDAwNEJFMjZFIC8qIFdITFNMUmVjdXJzaXZlVHlw
ZUNoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTc3MjFEQjU0MEYwMDRC
RTI2RSAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDMkI1NTE3ODIxREI1NTc1MDA0QkUyNkUgLyogV0hMU0xTeW50aGVzaXplU3Ry
dWN0dXJlQWNjZXNzb3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZVN0
cnVjdHVyZUFjY2Vzc29ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1
MTc5MjFEQjU1OEYwMDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFN5bnRoZXNpemVFbnVtZXJhdGlvbkZ1bmN0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyQjU1MTdBMjFEQjU1OUUw
MDRCRTI2RSAvKiBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMkI1NTE3QjIxREI1NUFGMDA0QkUyNkUgLyogV0hM
U0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMU3lu
dGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMy
QjU1MTdDMjFEQjU3RUQwMDRCRTI2RSAvKiBXSExTTFZpc2l0b3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV0hMU0xWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJD
MkNGNTUxRUYzNzYxQTAwNDI4MUE4IC8qIEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uTnVsbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RmFtaWx5U3BlY2lmaWNhdGlvbk51
bGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJFMzhFRkIxRTgzOTZGRDAwQ0Ez
QURGIC8qIENTU0ZvbnRTdHlsZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENTU0ZvbnRTdHlsZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzJFMzhFRkMxRTgzOTZGRDAwQ0EzQURGIC8qIENTU0ZvbnRTdHlsZVZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZvbnRTdHlsZVZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTU0Myw2ICsxOTY2NSw3IEBACiAJCTY1NjU4MEVD
MDlEMTJCMjAwMDBFNjFENyAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUMyMUJGNzQyMjFDRDk2M0IwMDIyNzk3OSAvKiBX
SExTTFN0YW5kYXJkTGlicmFyeS5oICovLAogCQkJCTUzOEVDN0VBMUY5NkE5NUIwMDREMjJBOCAv
KiB1bmlmaWVkLXNvdXJjZXMgKi8sCiAJCQkJOTkwOEIwRjMxQkNBQ0ZGRTAwRUQwRjY1IC8qIEJ5
dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlucy5jcHAgKi8sCiAJCQkJOTkwOEIwRjUxQkNB
RDA3RDAwRUQwRjY1IC8qIEJ5dGVMZW5ndGhRdWV1aW5nU3RyYXRlZ3lCdWlsdGlucy5oICovLApA
QCAtMjUyNDUsMTIgKzI1MzY4LDE0MSBAQAogCQlDMjEwRTkwRDIxQjRCQ0E0MDBCN0Y4M0QgLyog
V0hMU0wgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCUMy
MUJGNzQ1MjFDRDk2OTgwMDIyNzk3OSAvKiBXSExTTFN0YW5kYXJkTGlicmFyeS50eHQgKi8sCisJ
CQkJQzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5IC8qIEFTVCAqLywKIAkJCQlDMjEwRTkxMTIxQjRC
RDEwMDBCN0Y4M0QgLyogV0hMU0xMZXhlci5jcHAgKi8sCiAJCQkJQzIxMEU5MTIyMUI0QkQxMDAw
QjdGODNEIC8qIFdITFNMTGV4ZXIuaCAqLywKKwkJCQlDMjFCRjczNzIxQ0Q4QTAyMDAyMjc5Nzkg
LyogV0hMU0xQYXJzZXIuY3BwICovLAorCQkJCUMyMUJGNzM4MjFDRDhBMDMwMDIyNzk3OSAvKiBX
SExTTFBhcnNlci5oICovLAorCQkJCUMyMUJGNzNBMjFDRDhENzAwMDIyNzk3OSAvKiBXSExTTFBy
b2dyYW0uaCAqLywKKwkJCQlDMjg4QzcyNzIxQzhDNkVGMDAyREY1Q0EgLyogV0hMU0xWaXNpdG9y
LmggKi8sCisJCQkJQzJCNTUxN0MyMURCNTdFRDAwNEJFMjZFIC8qIFdITFNMVmlzaXRvci5jcHAg
Ki8sCisJCQkJQzI4OEM3MjkyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5jcHAgKi8s
CisJCQkJQzI4OEM3MkEyMUM4Q0E1MDAwMkRGNUNBIC8qIFdITFNMUHJlcGFyZS5oICovLAorCQkJ
CUMyODhDNzJDMjFDOENDQzIwMDJERjVDQSAvKiBXSExTTE5hbWVSZXNvbHZlci5oICovLAorCQkJ
CUMyQjU1MTczMjFEQjRCQkQwMDRCRTI2RSAvKiBXSExTTE5hbWVSZXNvbHZlci5jcHAgKi8sCisJ
CQkJMUM3Q0MyMUQyMUNERTE5ODAwQzFGQTJDIC8qIFdITFNMTmFtZUNvbnRleHQuaCAqLywKKwkJ
CQlDMkI1NTE3NDIxREI1MTBGMDA0QkUyNkUgLyogV0hMU0xOYW1lQ29udGV4dC5jcHAgKi8sCisJ
CQkJMUMzMzI3NkUyMUNFRkY3NDAwMERDOUYyIC8qIFdITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5o
ICovLAorCQkJCUMyODZFRDlFMjFEQjVBQkEwMDcxM0M0MCAvKiBXSExTTFJlc29sdmVPdmVybG9h
ZEltcGwuY3BwICovLAorCQkJCTFDMzMyNzZGMjFDRjAxMzEwMDBEQzlGMiAvKiBXSExTTEluZmVy
VHlwZXMuaCAqLywKKwkJCQlDMkI1NTE3NTIxREI1MjY2MDA0QkUyNkUgLyogV0hMU0xJbmZlclR5
cGVzLmNwcCAqLywKKwkJCQkxQzMzMjc3NDIxRDVBNzA2MDAwREM5RjIgLyogV0hMU0xSZWN1cnNp
dmVUeXBlQ2hlY2tlci5oICovLAorCQkJCUMyQjU1MTc2MjFEQjUzOTQwMDRCRTI2RSAvKiBXSExT
TFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcCAqLywKKwkJCQkxQzMzMjc3NTIxRDVCMEY4MDAwREM5
RjIgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5oICovLAorCQkJCUMyQjU1MTc3MjFE
QjU0MEYwMDRCRTI2RSAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcCAqLywKKwkJ
CQkxQzMzMjc3NjIxRDVDMDdFMDAwREM5RjIgLyogV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNj
ZXNzb3JzLmggKi8sCisJCQkJQzJCNTUxNzgyMURCNTU3NTAwNEJFMjZFIC8qIFdITFNMU3ludGhl
c2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5jcHAgKi8sCisJCQkJMUMzMzI3NzcyMUQ1Q0E4MzAwMERD
OUYyIC8qIFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rpb25zLmggKi8sCisJCQkJQzJC
NTUxNzkyMURCNTU4RjAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUVudW1lcmF0aW9uRnVuY3Rp
b25zLmNwcCAqLywKKwkJCQkxQzMzMjc3ODIxRDVDRUQ0MDAwREM5RjIgLyogV0hMU0xTeW50aGVz
aXplQXJyYXlPcGVyYXRvckxlbmd0aC5oICovLAorCQkJCUMyQjU1MTdBMjFEQjU1OUUwMDRCRTI2
RSAvKiBXSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcCAqLywKKwkJCQlDMjAx
MzM0NzIxREI0MzYzMDBCNjBDMjcgLyogV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmggKi8s
CisJCQkJQzJCNTUxN0IyMURCNTVBRjAwNEJFMjZFIC8qIFdITFNMU3ludGhlc2l6ZUNvbnN0cnVj
dG9ycy5jcHAgKi8sCisJCQkJQzIwMTMzNDQyMURBQzA5NTAwQjYwQzI3IC8qIFdITFNMSW50cmlu
c2ljcy5oICovLAorCQkJCUMyMDEzMzQ2MjFEQUVFNkUwMEI2MEMyNyAvKiBXSExTTEludHJpbnNp
Y3MuY3BwICovLAorCQkJCUMyQjU1MTcwMjFEQjRCNDgwMDRCRTI2RSAvKiBXSExTTENoZWNrZXIu
Y3BwICovLAorCQkJCUMyQjU1MTcxMjFEQjRCNDgwMDRCRTI2RSAvKiBXSExTTENoZWNrZXIuaCAq
LywKKwkJCQkxQ0I2OUIyQzIxREQ5NkVGMDA2RTg0NkEgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50
SXRlbXMuY3BwICovLAorCQkJCTFDQjY5QjJEMjFERDk2RUYwMDZFODQ2QSAvKiBXSExTTEdhdGhl
ckVudHJ5UG9pbnRJdGVtcy5oICovLAorCQkJCTFDQjY5QjNFMjFFMDM1RjMwMDZFODQ2QSAvKiBX
SExTTFJlc29sdmluZ1R5cGUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gV0hMU0w7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlDMjFCRjZGMTIxQ0Q4OThEMDAyMjc5NzkgLyog
QVNUICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDMjFC
RjcyNTIxQ0Q4OUUyMDAyMjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCAqLywKKwkJ
CQlDMjFCRjcwOTIxQ0Q4OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5cGUuaCAqLywKKwkJCQlD
MjFCRjczMDIxQ0Q4OUVEMDAyMjc5NzkgLyogV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oICov
LAorCQkJCUMyMUJGNzBBMjFDRDg5Q0IwMDIyNzk3OSAvKiBXSExTTEJhc2VGdW5jdGlvbkF0dHJp
YnV0ZS5oICovLAorCQkJCUMyMUJGNkZBMjFDRDg5QkUwMDIyNzk3OSAvKiBXSExTTEJhc2VTZW1h
bnRpYy5oICovLAorCQkJCUMyMUJGNzFFMjFDRDg5REMwMDIyNzk3OSAvKiBXSExTTEJsb2NrLmgg
Ki8sCisJCQkJQzIxQkY2RjYyMUNEODlCNzAwMjI3OTc5IC8qIFdITFNMQm9vbGVhbkxpdGVyYWwu
aCAqLywKKwkJCQlDMjFCRjcxQTIxQ0Q4OUQ4MDAyMjc5NzkgLyogV0hMU0xCcmVhay5oICovLAor
CQkJCUMyMUJGNzIyMjFDRDg5REYwMDIyNzk3OSAvKiBXSExTTEJ1aWx0SW5TZW1hbnRpYy5oICov
LAorCQkJCUMyMUJGNzE2MjFDRDg5RDUwMDIyNzk3OSAvKiBXSExTTENhbGxFeHByZXNzaW9uLmgg
Ki8sCisJCQkJQzIxQkY3MDYyMUNEODlDNzAwMjI3OTc5IC8qIFdITFNMQ29tbWFFeHByZXNzaW9u
LmggKi8sCisJCQkJQzIxQkY3MzMyMUNEODlGMDAwMjI3OTc5IC8qIFdITFNMQ29uc3RhbnRFeHBy
ZXNzaW9uLmggKi8sCisJCQkJQzIxQkY3MDIyMUNEODlDNDAwMjI3OTc5IC8qIFdITFNMQ29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuaCAqLywKKwkJCQlDMjFCRjZG
NTIxQ0Q4OUI1MDAyMjc5NzkgLyogV0hMU0xDb250aW51ZS5oICovLAorCQkJCUMyMUJGNzAxMjFD
RDg5QzQwMDIyNzk3OSAvKiBXSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oICovLAorCQkJCUMy
MUJGNzE4MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExTTERvdEV4cHJlc3Npb24uaCAqLywKKwkJCQlD
MjFCRjZGQjIxQ0Q4OUJFMDAyMjc5NzkgLyogV0hMU0xEb1doaWxlTG9vcC5oICovLAorCQkJCUMy
MUJGNzI4MjFDRDg5RTUwMDIyNzk3OSAvKiBXSExTTEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1l
bnQuaCAqLywKKwkJCQlDMjFCRjcyMDIxQ0Q4OUREMDAyMjc5NzkgLyogV0hMU0xFbnVtZXJhdGlv
bkRlZmluaXRpb24uaCAqLywKKwkJCQlDMjFCRjcyNjIxQ0Q4OUUzMDAyMjc5NzkgLyogV0hMU0xF
bnVtZXJhdGlvbk1lbWJlci5oICovLAorCQkJCUMyMUJGNzBDMjFDRDg5Q0MwMDIyNzk3OSAvKiBX
SExTTEV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcwMDIxQ0Q4OUMyMDAyMjc5NzkgLyogV0hM
U0xGYWxsdGhyb3VnaC5oICovLAorCQkJCUMyMUJGNzM1MjFDRDg5RjIwMDIyNzk3OSAvKiBXSExT
TEZsb2F0TGl0ZXJhbC5oICovLAorCQkJCUMyMUJGNzM0MjFDRDg5RjEwMDIyNzk3OSAvKiBXSExT
TEZvckxvb3AuaCAqLywKKwkJCQlDMjFCRjcwNTIxQ0Q4OUM3MDAyMjc5NzkgLyogV0hMU0xGdW5j
dGlvbkF0dHJpYnV0ZS5oICovLAorCQkJCUMyMUJGNkZEMjFDRDg5QzAwMDIyNzk3OSAvKiBXSExT
TEZ1bmN0aW9uRGVjbGFyYXRpb24uaCAqLywKKwkJCQlDMjFCRjZGNDIxQ0Q4OUIzMDAyMjc5Nzkg
LyogV0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCAqLywKKwkJCQlDMjFCRjZGRjIxQ0Q4OUMyMDAy
Mjc5NzkgLyogV0hMU0xJZlN0YXRlbWVudC5oICovLAorCQkJCUMyMUJGNkY3MjFDRDg5QjkwMDIy
Nzk3OSAvKiBXSExTTEluZGV4RXhwcmVzc2lvbi5oICovLAorCQkJCUMyMUJGNkY4MjFDRDg5QkIw
MDIyNzk3OSAvKiBXSExTTEludGVnZXJMaXRlcmFsLmggKi8sCisJCQkJQzIxQkY3MzIyMUNEODlF
RjAwMjI3OTc5IC8qIFdITFNMTG9naWNhbEV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcxNTIx
Q0Q4OUQ0MDAyMjc5NzkgLyogV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oICovLAorCQkJCUMy
MUJGNzJEMjFDRDg5RTkwMDIyNzk3OSAvKiBXSExTTE1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24uaCAqLywKKwkJCQlDMjFCRjcyQzIxQ0Q4OUU5MDAyMjc5NzkgLyogV0hMU0xNYWtlUG9pbnRl
ckV4cHJlc3Npb24uaCAqLywKKwkJCQlDMjFCRjcyMzIxQ0Q4OUUxMDAyMjc5NzkgLyogV0hMU0xO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uLmggKi8sCisJCQkJQzIxQkY3MkEyMUNEODlFNzAwMjI3
OTc5IC8qIFdITFNMTmF0aXZlVHlwZURlY2xhcmF0aW9uLmggKi8sCisJCQkJQzIxQkY3MjQyMUNE
ODlFMTAwMjI3OTc5IC8qIFdITFNMTm9kZS5oICovLAorCQkJCUMyMUJGNzA3MjFDRDg5QzgwMDIy
Nzk3OSAvKiBXSExTTE51bGxMaXRlcmFsLmggKi8sCisJCQkJQzIxQkY3MjEyMUNEODlERTAwMjI3
OTc5IC8qIFdITFNMTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmggKi8sCisJCQkJQzIxQkY3
MkYyMUNEODlFQzAwMjI3OTc5IC8qIFdITFNMUG9pbnRlclR5cGUuaCAqLywKKwkJCQlDMjFCRjcy
RTIxQ0Q4OUVBMDAyMjc5NzkgLyogV0hMU0xQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uaCAqLywK
KwkJCQlDMjFCRjcwQjIxQ0Q4OUNDMDAyMjc5NzkgLyogV0hMU0xRdWFsaWZpZXIuaCAqLywKKwkJ
CQlDMjFCRjcxQjIxQ0Q4OUQ5MDAyMjc5NzkgLyogV0hMU0xSZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLmggKi8sCisJCQkJQzIxQkY3MEQyMUNEODlDRDAwMjI3OTc5IC8qIFdITFNMUmVmZXJlbmNl
VHlwZS5oICovLAorCQkJCUMyMUJGNzA4MjFDRDg5QzkwMDIyNzk3OSAvKiBXSExTTFJlc291cmNl
U2VtYW50aWMuaCAqLywKKwkJCQlDMjFCRjcwMzIxQ0Q4OUM1MDAyMjc5NzkgLyogV0hMU0xSZXR1
cm4uaCAqLywKKwkJCQlDMjFCRjZGOTIxQ0Q4OUJEMDAyMjc5NzkgLyogV0hMU0xTZW1hbnRpYy5o
ICovLAorCQkJCUMyMUJGNzM2MjFDRDg5RjMwMDIyNzk3OSAvKiBXSExTTFNwZWNpYWxpemF0aW9u
Q29uc3RhbnRTZW1hbnRpYy5oICovLAorCQkJCUMyMUJGNzBFMjFDRDg5Q0UwMDIyNzk3OSAvKiBX
SExTTFN0YWdlSW5PdXRTZW1hbnRpYy5oICovLAorCQkJCUMyMUJGNzEyMjFDRDg5RDEwMDIyNzk3
OSAvKiBXSExTTFN0YXRlbWVudC5oICovLAorCQkJCUMyMUJGNzI3MjFDRDg5RTQwMDIyNzk3OSAv
KiBXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCAqLywKKwkJCQlDMjFCRjZGRTIxQ0Q4OUMxMDAy
Mjc5NzkgLyogV0hMU0xTdHJ1Y3R1cmVFbGVtZW50LmggKi8sCisJCQkJQzIxQkY3MTkyMUNEODlE
NzAwMjI3OTc5IC8qIFdITFNMU3dpdGNoQ2FzZS5oICovLAorCQkJCUMyMUJGNzMxMjFDRDg5RUUw
MDIyNzk3OSAvKiBXSExTTFN3aXRjaFN0YXRlbWVudC5oICovLAorCQkJCUMyMUJGNzFDMjFDRDg5
REEwMDIyNzk3OSAvKiBXSExTTFRlcm5hcnlFeHByZXNzaW9uLmggKi8sCisJCQkJQzIxQkY2RjMy
MUNEODlBRDAwMjI3OTc5IC8qIFdITFNMVHJhcC5oICovLAorCQkJCUMyMUJGNzFEMjFDRDg5REIw
MDIyNzk3OSAvKiBXSExTTFR5cGUuaCAqLywKKwkJCQlDMjFCRjcxMTIxQ0Q4OUQxMDAyMjc5Nzkg
LyogV0hMU0xUeXBlQXJndW1lbnQuaCAqLywKKwkJCQlDMjFCRjcyOTIxQ0Q4OUU2MDAyMjc5Nzkg
LyogV0hMU0xUeXBlRGVmaW5pdGlvbi5oICovLAorCQkJCUMyMUJGNzFGMjFDRDg5REMwMDIyNzk3
OSAvKiBXSExTTFR5cGVSZWZlcmVuY2UuaCAqLywKKwkJCQlDMjFCRjcyQjIxQ0Q4OUU4MDAyMjc5
NzkgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsLmggKi8sCisJCQkJQzIxQkY2RkMyMUNE
ODlCRjAwMjI3OTc5IC8qIFdITFNMVmFsdWUuaCAqLywKKwkJCQlDMjFCRjcxMDIxQ0Q4OUQwMDAy
Mjc5NzkgLyogV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmggKi8sCisJCQkJQzIxQkY3MTQyMUNE
ODlEMzAwMjI3OTc5IC8qIFdITFNMVmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQuaCAqLywK
KwkJCQlDMjFCRjcxMzIxQ0Q4OUQyMDAyMjc5NzkgLyogV0hMU0xWYXJpYWJsZVJlZmVyZW5jZS5o
ICovLAorCQkJCUMyMUJGNzA0MjFDRDg5QzYwMDIyNzk3OSAvKiBXSExTTFdoaWxlTG9vcC5oICov
LAorCQkJCUMyODhDNzJEMjFDOTkxREEwMDJERjVDQSAvKiBXSExTTFR5cGVBcmd1bWVudC5jcHAg
Ki8sCisJCQkJMUMzMzI3NkMyMUNFREE0MjAwMERDOUYyIC8qIFdITFNMRW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFsLmggKi8sCisJCQkJMUMzMzI3NzEyMUNGMEJFMTAwMERDOUYyIC8qIFdITFNMTmFt
ZWRUeXBlLmggKi8sCisJCQkJMUMzMzI3NzIyMUNGMEQyRTAwMERDOUYyIC8qIFdITFNMVW5uYW1l
ZFR5cGUuaCAqLywKKwkJCQlDMjEzOEExMzIxRERFQ0QzMDBGNTE2QkEgLyogV0hMU0xCdWlsdElu
U2VtYW50aWMuY3BwICovLAorCQkJCUMyMTM4QTE1MjFEREVDRTkwMEY1MTZCQSAvKiBXSExTTFJl
c291cmNlU2VtYW50aWMuY3BwICovLAorCQkJCUMyMTM4QTE2MjFEREVDRkIwMEY1MTZCQSAvKiBX
SExTTFNwZWNpYWxpemF0aW9uQ29uc3RhbnRTZW1hbnRpYy5jcHAgKi8sCisJCQkJQzIxMzhBMTcy
MURERUQwRDAwRjUxNkJBIC8qIFdITFNMU3RhZ2VJbk91dFNlbWFudGljLmNwcCAqLywKKwkJCQkx
Q0I2OUIzMjIxREVENDBCMDA2RTg0NkEgLyogV0hMU0xSZXNvbHZhYmxlVHlwZS5oICovLAorCQkJ
CTFDQjY5QjM0MjFERUQ2M0EwMDZFODQ2QSAvKiBXSExTTEZsb2F0TGl0ZXJhbFR5cGUuaCAqLywK
KwkJCQkxQ0I2OUIzNTIxREVENjQ5MDA2RTg0NkEgLyogV0hMU0xJbnRlZ2VyTGl0ZXJhbFR5cGUu
aCAqLywKKwkJCQkxQ0I2OUIzNjIxREVENjU3MDA2RTg0NkEgLyogV0hMU0xOdWxsTGl0ZXJhbFR5
cGUuaCAqLywKKwkJCQkxQ0I2OUIzNzIxREVENjZCMDA2RTg0NkEgLyogV0hMU0xVbnNpZ25lZElu
dGVnZXJMaXRlcmFsVHlwZS5oICovLAorCQkJCTFDQjY5QjM4MjFERjAzRTEwMDZFODQ2QSAvKiBX
SExTTEZsb2F0TGl0ZXJhbFR5cGUuY3BwICovLAorCQkJCTFDQjY5QjM5MjFERjAzRjMwMDZFODQ2
QSAvKiBXSExTTEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8sCisJCQkJMUNCNjlCM0EyMURGMDQw
MzAwNkU4NDZBIC8qIFdITFNMTnVsbExpdGVyYWxUeXBlLmNwcCAqLywKKwkJCQkxQ0I2OUIzQjIx
REYwNDFFMDA2RTg0NkEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8s
CisJCQkJQzIwRjRGNjQyMURGQkU1QzAwNzBDNDVBIC8qIFdITFNMVHlwZVJlZmVyZW5jZS5jcHAg
Ki8sCisJCQkJQzIwRjRGNjYyMURGRjIzNjAwNzBDNDVBIC8qIFdITFNMSW50ZWdlckxpdGVyYWwu
Y3BwICovLAorCQkJCUMyMEY0RjY3MjFERkYzQTcwMDcwQzQ1QSAvKiBXSExTTFVuc2lnbmVkSW50
ZWdlckxpdGVyYWwuY3BwICovLAorCQkJKTsKKwkJCXBhdGggPSBBU1Q7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OwogCQlDOTZGNUVCRjFCNTg3MjI2MDA5MUVBOUQgLyogbWVkaWFz
ZXNzaW9uICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>358936</attachid>
            <date>2019-01-11 13:37:20 -0800</date>
            <delta_ts>2019-01-12 23:52:32 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>bug-193080-20190111133719.patch</filename>
            <type>text/plain</type>
            <size>90023</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5ODY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGUyYzg5ZWVmNDBlZGE4
NmJhNTg0Mjg5ZWMzMTU3NGE0NDFmMjY2NC4uZDFjZDYwMWE5NzkwZTFlZjRkZGQyNDNkM2NlNDc1
MWVhM2NkM2MzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE5LTAxLTExICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgdGhlIFR5cGUgQ2hlY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkzMDgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpyZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpyZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpyZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OnJlc29sdmVCeUluc3RhbnRpYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkNoZWNrZXI6OkNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmNoZWNrU2hhZGVyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6
Y2hlY2tTZW1hbnRpY3MpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmNoZWNr
T3BlcmF0b3JPdmVybG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6aXNC
b29sVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Y2hlY2spOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkdhdGhlcmVyOjpHYXRoZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6R2F0aGVyZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpHYXRoZXJlcjo6dGFrZUVudHJ5UG9pbnRJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6R2F0aGVyZXI6OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpnYXRoZXJFbnRy
eVBvaW50SXRlbXMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVy
RW50cnlQb2ludEl0ZW1zLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkVudHJ5
UG9pbnRJdGVtOjpFbnRyeVBvaW50SXRlbSk6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTAxLTExICBX
ZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIEludHJvZHVj
ZSBJREwgZmlsZXMgZm9yIHJ1bnRpbWUtZW5hYmxlZCBVbmRvTWFuYWdlciBhbmQgVW5kb0l0ZW0g
SmF2YVNjcmlwdCBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTENoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1YmMzZDk1MjJlNTMwZGY3MTYyMzlm
YzBkODcwMmI0YTI5NmI3MDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC0wLDAgKzEsMTQ5MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTENoZWNrZXIuaCIK
KworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlw
ZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBc3NpZ25t
ZW50RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIKKyNpbmNs
dWRlICJXSExTTENvbW1hRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRGVyZWZlcmVuY2VF
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgorI2luY2x1ZGUgIldI
TFNMRG90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgorI2luY2x1ZGUg
IldITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgiCisjaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVu
dC5oIgorI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgIldITFNMTG9naWNh
bEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAi
V0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBl
LmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorI2lu
Y2x1ZGUgIldITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2
aW5nVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUmV0dXJuLmgiCisjaW5jbHVkZSAiV0hMU0xTd2l0
Y2hTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFRlcm5hcnlFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgewor
CitjbGFzcyBQT0RDaGVja2VyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIFBPRENo
ZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5QT0RDaGVja2VyKCkgPSBkZWZhdWx0
OworCisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRp
b25EZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoZW51
bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc051bWJlcigpCisgICAgICAgICAg
ICAmJiAhbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzVmVjdG9yKCkKKyAgICAgICAgICAgICYmICFu
YXRpdmVUeXBlRGVjbGFyYXRpb24uaXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHNldEVycm9yKCk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVj
dHVyZURlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdChz
dHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZURl
ZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRv
cjo6dmlzaXQodHlwZURlZmluaXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpB
cnJheVR5cGUmIGFycmF5VHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZp
c2l0KGFycmF5VHlwZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBl
Jikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgfQorCisgICAgdm9p
ZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBzZXRFcnJvcigpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNl
JiB0eXBlUmVmZXJlbmNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZl
cmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnR5cGVS
ZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgIH0KK307CisKK3N0YXRpYyBPcHRpb25hbDxB
U1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlcklu
ZGV4ZXIoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24sIEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlJiBmaXJzdEFyZ3VtZW50LCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQor
eworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisgICAgYm9vbCBpc09wZXJhdG9yID0g
dHJ1ZTsKKyAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5
cGU+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGZpcnN0QXJndW1lbnQu
YWRkcmVzc1NwYWNlKCksIGZpcnN0QXJndW1lbnQuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAg
ICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5h
cHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lv
bi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGZpcnN0QXJndW1lbnQuY2xvbmUoKSB9
LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJz
LmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNz
aW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MudWlu
dFR5cGUoKSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAg
cmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1
dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3Bl
cmF0b3ImW10iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0
ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKK30KKworc3Rh
dGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZVdpdGhP
cGVyYXRvckxlbmd0aChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbiwgQVNUOjpV
bm5hbWVkVHlwZSYgZmlyc3RBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykK
K3sKKyAgICBib29sIGlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgIGJvb2wgaXNPcGVyYXRvciA9
IHRydWU7CisgICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MudWludFR5cGUo
KSk7CisgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgIHBhcmFt
ZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4
cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBmaXJzdEFyZ3VtZW50LmNs
b25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcmV0
dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVC
bG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0
b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1l
dGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7Cit9CisKK3N0
YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVXaXRo
UmVmZXJlbmNlQ29tcGFyYXRvcihBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbiwg
UmVzb2x2aW5nVHlwZSYgZmlyc3RBcmd1bWVudCwgUmVzb2x2aW5nVHlwZSYgc2Vjb25kQXJndW1l
bnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7CisgICAgYm9vbCBpc1Jlc3RyaWN0
ZWQgPSBmYWxzZTsKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGF1dG8gcmV0dXJu
VHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOworICAgIGF1dG8gYXJndW1lbnRU
eXBlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7Cisg
ICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKKyAgICB9LCBbJl0oUmVmPFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlPiYpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7Cisg
ICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+IHsKKyAgICAgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKKyAgICAgICAg
fSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4geworICAgICAgICAgICAgLy8gV2UgZW5jb3VudGVyZWQgIm51bGwgPT0gbnVs
bCIuCisgICAgICAgICAgICAvLyBUaGUgdHlwZSBpc24ndCBvYnNlcnZhYmxlLCBzbyB3ZSBjYW4g
cGljayB3aGF0ZXZlciB3ZSB3YW50LgorICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2FuIHBy
b2JhYmx5IGJlIGdlbmVyYWxpemVkLCB1c2luZyB0aGUgInByZWZlcnJlZCB0eXBlIiBpbmZyYXN0
cnVjdHVyZSB1c2VkIGJ5IGdlbmVyaWMgbGl0ZXJhbHMKKyAgICAgICAgICAgIHJldHVybiBBU1Q6
OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigp
KSwgaW50cmluc2ljcy5pbnRUeXBlKCkpOworICAgICAgICB9KSwgc2Vjb25kQXJndW1lbnQpOwor
ICAgIH0pLCBmaXJzdEFyZ3VtZW50KTsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBh
cmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9u
KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygp
LCB7IGFyZ3VtZW50VHlwZS0+Y2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJz
KCksIHsgV1RGTW92ZShhcmd1bWVudFR5cGUpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCkpOworICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24o
QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmln
aW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVy
blR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFs
KSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0
cmljdGVkKTsKK30KKworc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbj4gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhw
cmVzc2lvbiwgY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlw
ZT4+JiB0eXBlcywgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3sKKyAgICBpZiAoY2Fs
bEV4cHJlc3Npb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIgJiYgdHlwZXMuc2l6ZSgpID09IDIp
IHsKKyAgICAgICAgYXV0byogZmlyc3RBcmd1bWVudEFycmF5UmVmID0gV1RGOjp2aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUp
IC0+IEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlKiB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVk
VHlwZSkpKQorICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVy
ZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0sIFtdKFJlZjxSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZT4mKSAtPiBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSogeworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0pLCB0eXBlc1swXS5nZXQoKSk7CisgICAgICAg
IGJvb2wgc2Vjb25kQXJndW1lbnRJc1VpbnQgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgewor
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+
KHVubmFtZWRUeXBlKSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICAgICAgfSwgWyZdKFJl
ZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBi
b29sIHsKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2
YWJsZVR5cGUoKS5jYW5SZXNvbHZlKGludHJpbnNpY3MudWludFR5cGUoKSk7CisgICAgICAgIH0p
LCB0eXBlc1sxXS5nZXQoKSk7CisgICAgICAgIGlmIChmaXJzdEFyZ3VtZW50QXJyYXlSZWYgJiYg
c2Vjb25kQXJndW1lbnRJc1VpbnQpCisgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhPcGVy
YXRvckFuZGVySW5kZXhlcihjYWxsRXhwcmVzc2lvbiwgKmZpcnN0QXJndW1lbnRBcnJheVJlZiwg
aW50cmluc2ljcyk7CisgICAgfSBlbHNlIGlmIChjYWxsRXhwcmVzc2lvbi5uYW1lKCkgPT0gIm9w
ZXJhdG9yLmxlbmd0aCIgJiYgdHlwZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgYXV0byogZmly
c3RBcmd1bWVudFJlZmVyZW5jZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBl
KiB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19j
YXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpIHx8IGlzPEFTVDo6QXJyYXlUeXBl
PihzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5cGUpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlw
ZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfSwgW10oUmVmPFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlPiYpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICB9KSwgdHlwZXNbMF0uZ2V0KCkpOworICAgICAgICBp
ZiAoZmlyc3RBcmd1bWVudFJlZmVyZW5jZSkKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZlV2l0
aE9wZXJhdG9yTGVuZ3RoKGNhbGxFeHByZXNzaW9uLCAqZmlyc3RBcmd1bWVudFJlZmVyZW5jZSwg
aW50cmluc2ljcyk7CisgICAgfSBlbHNlIGlmIChjYWxsRXhwcmVzc2lvbi5uYW1lKCkgPT0gIm9w
ZXJhdG9yPT0iICYmIHR5cGVzLnNpemUoKSA9PSAyKSB7CisgICAgICAgIGF1dG8gaXNBY2NlcHRh
YmxlID0gW10oUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSkgLT4gYm9vbCB7CisgICAgICAg
ICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJl
dHVybiBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUm
Pih1bm5hbWVkVHlwZSkpOworICAgICAgICAgICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAgICAgICAgICAg
ICAgIHJldHVybiBpczxBU1Q6Ok51bGxMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2UtPnJlc29sdmFibGVUeXBlKCkpOworICAgICAgICAgICAgfSksIHJlc29sdmluZ1R5cGUpOwor
ICAgICAgICB9OworICAgICAgICBpZiAoaXNBY2NlcHRhYmxlKHR5cGVzWzBdLmdldCgpKSAmJiBp
c0FjY2VwdGFibGUodHlwZXNbMV0uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVX
aXRoUmVmZXJlbmNlQ29tcGFyYXRvcihjYWxsRXhwcmVzc2lvbiwgdHlwZXNbMF0uZ2V0KCksIHR5
cGVzWzFdLmdldCgpLCBpbnRyaW5zaWNzKTsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKK30KKworY2xhc3MgQ2hlY2tlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBD
aGVja2VyKGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MsIFByb2dyYW0mIHByb2dyYW0pCisg
ICAgICAgIDogbV9pbnRyaW5zaWNzKGludHJpbnNpY3MpCisgICAgICAgICwgbV9wcm9ncmFtKHBy
b2dyYW0pCisgICAgeworICAgIH0KKworICAgIH5DaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAg
dm9pZCB2aXNpdChQcm9ncmFtJiBwcm9ncmFtKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZm9y
IChhdXRvJiB0eXBlRGVmaW5pdGlvbiA6IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpCisgICAg
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpUeXBlRGVmaW5pdGlv
biY+KHR5cGVEZWZpbml0aW9uKSk7CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5p
dGlvbiA6IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mPihzdHJ1
Y3R1cmVEZWZpbml0aW9uKSk7CisgICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0
aW9uIDogcHJvZ3JhbS5lbnVtZXJhdGlvbkRlZmluaXRpb25zKCkpCisgICAgICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mPihl
bnVtZXJhdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVj
bGFyYXRpb24gOiBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biY+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikpOworCisgICAgICAgIGZvciAoYXV0byYgZnVuY3Rp
b25EZWZpbml0aW9uIDogcHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25zKCkpCisgICAgICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24m
PihmdW5jdGlvbkRlZmluaXRpb24pKTsKKyAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9uIDogcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKQorICAg
ICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6TmF0aXZlRnVuY3Rp
b25EZWNsYXJhdGlvbiY+KG5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgYm9vbCBjaGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoKmZ1bmN0
aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CisgICAgICAgIGNhc2UgQVNUOjpGdW5j
dGlvbkRlZmluaXRpb246OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgICAgICByZXR1
cm4gIW1fdmVydGV4RW50cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpLmlz
TmV3RW50cnk7CisgICAgICAgIGNhc2UgQVNUOjpGdW5jdGlvbkRlZmluaXRpb246OkVudHJ5UG9p
bnRUeXBlOjpGcmFnbWVudDoKKyAgICAgICAgICAgIHJldHVybiAhbV9mcmFnbWVudEVudHJ5UG9p
bnRzLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKS5pc05ld0VudHJ5OworICAgICAgICBj
YXNlIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZToKKyAg
ICAgICAgICAgIHJldHVybiAhbV9jb21wdXRlRW50cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkpLmlzTmV3RW50cnk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNo
ZWNrU2VtYW50aWNzKEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24p
CisgICAgeworICAgICAgICBhdXRvIGVudHJ5UG9pbnRJdGVtcyA9IGdhdGhlckVudHJ5UG9pbnRJ
dGVtcyhtX2ludHJpbnNpY3MsIGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIGlmICghZW50
cnlQb2ludEl0ZW1zKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvIGlu
cHV0SXRlbXMgPSBXVEZNb3ZlKGVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzKTsKKyAgICAgICAgYXV0
byBvdXRwdXRJdGVtcyA9IFdURk1vdmUoZW50cnlQb2ludEl0ZW1zLT5vdXRwdXRzKTsKKworICAg
ICAgICB7CisgICAgICAgICAgICBhdXRvIGNoZWNrRHVwbGljYXRlU2VtYW50aWNzID0gWyZdKGNv
bnN0IFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGl0ZW1zKSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGl0ZW1zLnNpemUoKTsgKytq
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXNbaV0uc2VtYW50aWMgPT0gaXRl
bXNbal0uc2VtYW50aWMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICghY2hlY2tE
dXBsaWNhdGVTZW1hbnRpY3MoaW5wdXRJdGVtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaWYgKCFjaGVja0R1cGxpY2F0ZVNlbWFudGljcyhvdXRwdXRJdGVt
cykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
eworICAgICAgICAgICAgYXV0byBjaGVja1NlbWFudGljVHlwZXMgPSBbJl0oY29uc3QgVmVjdG9y
PEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGZvciAo
YXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWNjZXB0YWJs
ZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgQVNUOjpCYXNlU2VtYW50
aWMmIHNlbWFudGljKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBz
ZW1hbnRpYy5pc0FjY2VwdGFibGVUeXBlKGl0ZW0udW5uYW1lZFR5cGUsIG1faW50cmluc2ljcyk7
CisgICAgICAgICAgICAgICAgICAgIH0pLCBpdGVtLnNlbWFudGljKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFhY2NlcHRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNUeXBlcyhpbnB1dEl0
ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWNo
ZWNrU2VtYW50aWNUeXBlcyhvdXRwdXRJdGVtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBjaGVja1NlbWFu
dGljRm9yU2hhZGVyVHlwZSA9IFsmXShjb25zdCBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpdGVt
cywgQVNUOjpCYXNlU2VtYW50aWM6OlNoYWRlckl0ZW1EaXJlY3Rpb24gZGlyZWN0aW9uKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtcykgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvIGFjY2VwdGFibGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKGNvbnN0IEFTVDo6QmFzZVNlbWFudGljJiBzZW1hbnRpYykgLT4gYm9vbCB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VtYW50aWMuaXNBY2NlcHRhYmxlRm9yU2hhZGVy
SXRlbURpcmVjdGlvbihkaXJlY3Rpb24sIGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgICAg
ICAgICAgICAgIH0pLCBpdGVtLnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFh
Y2NlcHRhYmxlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNGb3JTaGFkZXJUeXBlKGlucHV0SXRlbXMs
IEFTVDo6QmFzZVNlbWFudGljOjpTaGFkZXJJdGVtRGlyZWN0aW9uOjpJbnB1dCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFjaGVja1NlbWFudGljRm9y
U2hhZGVyVHlwZShvdXRwdXRJdGVtcywgQVNUOjpCYXNlU2VtYW50aWM6OlNoYWRlckl0ZW1EaXJl
Y3Rpb246Ok91dHB1dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBjaGVja1BPRERhdGEgPSBbJl0oY29uc3Qg
VmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAg
IGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgICAgICAgICAgICAgIFBPRENoZWNr
ZXIgcG9kQ2hlY2tlcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5
cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tl
ci5jaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oaXRlbS51bm5h
bWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlz
PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihpdGVtLnVubmFtZWRUeXBlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPihpdGVtLnVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KGl0ZW0udW5uYW1l
ZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVja0Vycm9yQW5k
VmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpLnR5cGUoKSk7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICBpZiAocG9kQ2hlY2tlci5lcnJvcigpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAo
IWNoZWNrUE9ERGF0YShpbnB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBpZiAoIWNoZWNrUE9ERGF0YShvdXRwdXRJdGVtcykpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIGVudW0gY2xh
c3MgQ2hlY2tLaW5kIHsKKyAgICAgICAgICAgIEluZGV4LAorICAgICAgICAgICAgRG90CisgICAg
ICAgIH07CisKKyAgICAgICAgYXV0byBjaGVja0dldHRlciA9IFsmXShDaGVja0tpbmQga2luZCkg
LT4gYm9vbCB7CisgICAgICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2lu
ZCA9PSBDaGVja0tpbmQ6OkluZGV4ID8gMiA6IDE7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25E
ZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9k
ZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5v
ZGUoKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJU
eXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAg
ICAgIGF1dG8gY2hlY2tTZXR0ZXIgPSBbJl0oQ2hlY2tLaW5kIGtpbmQpIC0+IGJvb2wgeworICAg
ICAgICAgICAgc2l6ZV90IG51bUV4cGVjdGVkUGFyYW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5k
OjpJbmRleCA/IDMgOiAyOworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50VW5pZnlOb2Rl
ID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSktPnVuaWZ5Tm9k
ZSgpOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0QXJndW1lbnRV
bmlmeU5vZGUpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2Fz
dDxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1h
dGNoZXMoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSwgKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMF0udHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBhdXRvJiB2YWx1ZVR5cGUgPSAqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KVtudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxXS50eXBlKCk7CisgICAgICAgICAgICBhdXRvIGdl
dHRlck5hbWUgPSBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLnN1YnN0cmluZygwLCBmdW5jdGlv
bkRlZmluaXRpb24ubmFtZSgpLmxlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICBhdXRvKiBnZXR0
ZXJGdW5jcyA9IG1fcHJvZ3JhbS5uYW1lQ29udGV4dCgpLmdldEZ1bmN0aW9ucyhnZXR0ZXJOYW1l
KTsKKyAgICAgICAgICAgIGlmICghZ2V0dGVyRnVuY3MpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgVmVjdG9yPFJlc29sdmluZ1R5cGU+IGFyZ3VtZW50VHlwZXM7
CisgICAgICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4gYXJndW1lbnRUeXBlUmVmZXJlbmNlczsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMTsgKytpKQorICAgICAgICAgICAgICAgIGFy
Z3VtZW50VHlwZXMuYXBwZW5kKCgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50
eXBlKCkpLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgYXJndW1lbnRUeXBlIDog
YXJndW1lbnRUeXBlcykKKyAgICAgICAgICAgICAgICBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLmFw
cGVuZChhcmd1bWVudFR5cGUpOworICAgICAgICAgICAgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxBU1Q6Ok5hbWVkVHlwZT4+IGNhc3RSZXR1cm5UeXBlID0gV1RGOjpudWxsb3B0Owor
ICAgICAgICAgICAgYXV0byogb3ZlcmxvYWQgPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwo
KmdldHRlckZ1bmNzLCBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLCBjYXN0UmV0dXJuVHlwZSk7Cisg
ICAgICAgICAgICBpZiAoIW92ZXJsb2FkKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGF1dG8mIHJlc3VsdFR5cGUgPSBvdmVybG9hZC0+dHlwZSgpOworICAgICAg
ICAgICAgaWYgKCFtYXRjaGVzKHJlc3VsdFR5cGUsIHZhbHVlVHlwZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisK
KyAgICAgICAgYXV0byBjaGVja0FuZGVyID0gWyZdKENoZWNrS2luZCBraW5kKSAtPiBib29sIHsK
KyAgICAgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNr
S2luZDo6SW5kZXggPyAyIDogMTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24u
cGFyYW1ldGVycygpLnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8m
IHVuaWZ5Tm9kZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgYXV0byYgdW5uYW1l
ZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAg
ICAgICAgIGlmICghaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpWzBdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICgh
aXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzPEFT
VDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSAmJiAhaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfTsKKworICAgICAgICBpZiAoIWZ1bmN0aW9uRGVmaW5pdGlvbi5pc09wZXJhdG9yKCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5p
c0Nhc3QoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoZnVuY3Rpb25E
ZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IrKyIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9u
RGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLS0iKSB7CisgICAgICAgICAgICBpZiAoZnVu
Y3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMoKmZ1bmN0aW9uRGVmaW5p
dGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpLCBmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3IrIgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3ItIikgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJz
KCkuc2l6ZSgpICE9IDEKKyAgICAgICAgICAgICAgICAmJiBmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpLnNpemUoKSAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcioiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvci8iCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvciUiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvciYiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcnwiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcl4iCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcjw8IgorICAgICAgICAgICAgfHwgZnVuY3Rpb25E
ZWZpbml0aW9uLm5hbWUoKSA9PSAib3ByZWF0b3I+PiIpIHsKKyAgICAgICAgICAgIGlmIChmdW5j
dGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSAyKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcn4iKSB7CisgICAg
ICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3I9PSIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9w
ZXJhdG9yPCIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9w
ZXJhdG9yPD0iCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJv
cGVyYXRvcj4iCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJv
cGVyYXRvcj49IikgeworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpICE9IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgaWYgKCFtYXRjaGVzKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCksIG1faW50cmluc2lj
cy5ib29sVHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9u
Lm5hbWUoKSA9PSAib3BlcmF0b3JbXSIpIHsKKyAgICAgICAgICAgIGlmICghY2hlY2tHZXR0ZXIo
Q2hlY2tLaW5kOjpJbmRleCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yW109IikgeworICAgICAgICAgICAgaWYgKCFjaGVja1Nl
dHRlcihDaGVja0tpbmQ6OkluZGV4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25E
ZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ImW10iKSB7CisgICAgICAgICAgICBpZiAoIWNo
ZWNrQW5kZXIoQ2hlY2tLaW5kOjpJbmRleCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0
aW9uRGVmaW5pdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgib3BlcmF0b3IuIikpIHsKKyAgICAgICAg
ICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWNoZWNrU2V0dGVyKENoZWNrS2luZDo6RG90KSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpZiAoIWNoZWNrR2V0dGVyKENoZWNrS2luZDo6RG90KSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkuc3RhcnRz
V2l0aCgib3BlcmF0b3ImLiIpKSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrQW5kZXIoQ2hlY2tL
aW5kOjpEb3QpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24p
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9p
bnRUeXBlKCkpIHsKKyAgICAgICAgICAgIGlmICghY2hlY2tTaGFkZXJUeXBlKGZ1bmN0aW9uRGVm
aW5pdGlvbikpIHsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY3Mo
ZnVuY3Rpb25EZWZpbml0aW9uKSkgeworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
ICghY2hlY2tPcGVyYXRvck92ZXJsb2FkKGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKKyAgICAgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRp
b24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIWVudW1lcmF0aW9uRGVmaW5pdGlvbi50
eXBlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgYSBudWxsIGJhc2UgdHlwZS4K
KyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUm
PigqZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSkpOworCisgICAgICAgIGF1dG8mIGJhc2VU
eXBlID0gc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KCplbnVtZXJhdGlvbkRlZmluaXRp
b24udHlwZSgpKS51bmlmeU5vZGUoKTsKKworICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5
cGU+KGJhc2VUeXBlKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvJiB1bm5hbWVkQmFzZSA9IGRvd25jYXN0PEFT
VDo6VW5uYW1lZFR5cGU+KGJhc2VUeXBlKTsKKyAgICAgICAgaWYgKCFpczxBU1Q6OlR5cGVSZWZl
cmVuY2U+KHVubmFtZWRCYXNlKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlQmFzZSA9
IGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZEJhc2UpOworICAgICAgICBBU1NF
UlQodHlwZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBpZiAoIWlzPEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBl
KCkpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGF1dG8mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBl
KCkpOworICAgICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc0ludCgpKSB7CisgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBlbnVtZXJhdGlvbk1lbWJlcnMgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24uZW51
bWVyYXRpb25NZW1iZXJzKCk7CisKKyAgICAgICAgZm9yIChhdXRvJiBtZW1iZXIgOiBlbnVtZXJh
dGlvbk1lbWJlcnMpIHsKKyAgICAgICAgICAgIGlmICghbWVtYmVyLmdldCgpLnZhbHVlKCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGJvb2wgc3VjY2VzczsKKyAg
ICAgICAgICAgIG1lbWJlci5nZXQoKS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsm
XShhdXRvJiB2YWx1ZSkgeworICAgICAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YWx1
ZSk7CisgICAgICAgICAgICAgICAgYXV0byBpdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZ2YWx1
ZSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7
CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKHN0YXRpY19jYXN0PEFTVDo6VW5uYW1l
ZFR5cGUmPih1bm5hbWVkVHlwZSksIGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAgICAg
ICAgICAgfSwgWyZdKFJlc29sdmFibGVUeXBlUmVmZXJlbmNlJiByZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxi
b29sPihtYXRjaEFuZENvbW1pdChlbnVtZXJhdGlvbkRlZmluaXRpb24sIHJlc29sdmFibGVUeXBl
UmVmZXJlbmNlLnJlc29sdmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9KSwgaXRlcmF0
b3ItPnZhbHVlKTsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIGlmICghc3VjY2Vzcykg
eworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50NjRfdCBuZXh0VmFsdWUgPSAw
OworICAgICAgICBmb3IgKGF1dG8mIG1lbWJlciA6IGVudW1lcmF0aW9uTWVtYmVycykgeworICAg
ICAgICAgICAgaWYgKG1lbWJlci5nZXQoKS52YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgaW50
NjRfdCB2YWx1ZTsKKyAgICAgICAgICAgICAgICBtZW1iZXIuZ2V0KCkudmFsdWUoKS0+dmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwp
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZUZvclNl
bGVjdGVkVHlwZSgpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdl
ckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFsdWUgPSB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCk7Cisg
ICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNU
OjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0s
IFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikg
eworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICB9KSk7CisgICAgICAgICAgICAgICAgbmV4dFZhbHVlID0gbmF0aXZlVHlwZURlY2xhcmF0
aW9uLnN1Y2Nlc3NvcigpKHZhbHVlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgbWVtYmVyLmdldCgpLnNldFZhbHVlKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKEFTVDo6
SW50ZWdlckxpdGVyYWwoTGV4ZXI6OlRva2VuKG1lbWJlci5nZXQoKS5vcmlnaW4oKSksIG5leHRW
YWx1ZSkpKTsKKyAgICAgICAgICAgICAgICBuZXh0VmFsdWUgPSBuYXRpdmVUeXBlRGVjbGFyYXRp
b24uc3VjY2Vzc29yKCkobmV4dFZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW51bWVyYXRpb25NZW1iZXJzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBhdXRvJiBtZW1iZXIgPSBlbnVtZXJhdGlvbk1lbWJlcnNbaV0u
Z2V0KCk7CisgICAgICAgICAgICBBU1NFUlQobWVtYmVyLnZhbHVlKCkpOworICAgICAgICAgICAg
aW50NjRfdCB2YWx1ZTsKKyAgICAgICAgICAgIG1lbWJlci52YWx1ZSgpLT52aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAg
ICAgICAgICAgICAgIHZhbHVlID0gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAg
IH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVy
YWwpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFs
dWUoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYpIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51
bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4
cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGogPSBpICsgMTsgaiA8IGVudW1lcmF0aW9uTWVtYmVycy5zaXplKCk7ICsraikgewor
ICAgICAgICAgICAgICAgIGF1dG8mIG90aGVyTWVtYmVyID0gZW51bWVyYXRpb25NZW1iZXJzW2pd
LmdldCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChvdGhlck1lbWJlci52YWx1ZSgpKTsKKyAg
ICAgICAgICAgICAgICBib29sIGZhaWwgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBvdGhlck1l
bWJlci52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRl
cmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICBmYWlsID0gdmFsdWUg
PT0gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpV
bnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZhaWwgPSB2YWx1ZSA9PSB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVl
KCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9LCBb
Jl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlJikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAgaWYgKGZhaWwpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZm91
bmRaZXJvID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgbWVtYmVyIDogZW51bWVyYXRpb25N
ZW1iZXJzKSB7CisgICAgICAgICAgICBBU1NFUlQobWVtYmVyLmdldCgpLnZhbHVlKCkpOworICAg
ICAgICAgICAgbWVtYmVyLmdldCgpLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZd
KEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAg
aWYgKCFpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICBmb3VuZFpl
cm8gPSB0cnVlOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIGlmICghdW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICBmb3VuZFplcm8g
PSB0cnVlOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6
TnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikgeworICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSkpOworICAgICAgICB9CisgICAg
ICAgIGlmICghZm91bmRaZXJvKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVS
ZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQo
dHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KHR5cGVSZWZlcmVuY2UpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7IC8vIEZJ
WE1FOiBNYWtlIHRoaXMgd29yayB3aXRoIGFub255bW91cyB2YXJpYWJsZXMgd2hpY2ggZG9uJ3Qg
aGF2ZSB0eXBlcy4KKyAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIo
KSkgeworICAgICAgICAgICAgYXV0byYgbGhzVHlwZSA9ICp2YXJpYWJsZURlY2xhcmF0aW9uLnR5
cGUoKTsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlv
bi5pbml0aWFsaXplcigpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX3R5cGVNYXAu
ZmluZCh2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpOworICAgICAgICAgICAgQVNT
RVJUKGl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgICAgICBhdXRvJiByaHMg
PSBpdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1l
ZFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKGxoc1R5cGUs
IHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpOworICAgICAgICAg
ICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9v
bD4obWF0Y2hBbmRDb21taXQobGhzVHlwZSwgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29s
dmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgIH0pLCByaHMpOworICAgICAgICAgICAgaWYgKCFz
dWNjZXNzKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6QXNzaWdubWVudEV4cHJlc3Npb24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9u
LmxlZnQoKSk7CisgICAgICAgIGF1dG8gbGVmdEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmFz
c2lnbm1lbnRFeHByZXNzaW9uLmxlZnQoKSk7CisgICAgICAgIEFTU0VSVChsZWZ0SXRlcmF0b3Ig
IT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgbGhzVHlwZSA9IGxlZnRJdGVyYXRv
ci0+dmFsdWU7CisgICAgICAgIC8vIEZJWE1FOiBIb3cgdG8gZG8gbHZhbHVlIGFuZCBhZGRyZXNz
IHNwYWNlIGFuYWx5c2lzPworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoYXNzaWdubWVudEV4
cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIGF1dG8gcmlnaHRJdGVyYXRvciA9IG1fdHlwZU1h
cC5maW5kKCZhc3NpZ25tZW50RXhwcmVzc2lvbi5yaWdodCgpKTsKKyAgICAgICAgQVNTRVJUKHJp
Z2h0SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgcmhzVHlwZSA9
IHJpZ2h0SXRlcmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvIHJlc3VsdFR5cGUgPSBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgbGVm
dCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAg
ICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4+IHsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyhzdGF0aWNfY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlJj4obGVmdCksIHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPihyaWdodCkpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC0+Y2xvbmUoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQoc3RhdGljX2Nh
c3Q8QVNUOjpVbm5hbWVkVHlwZSY+KGxlZnQpLCByaWdodC0+cmVzb2x2YWJsZVR5cGUoKSk7Cisg
ICAgICAgICAgICB9KSwgcmhzVHlwZSk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4+IHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZd
KFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmlnaHQpIC0+IE9wdGlvbmFsPFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENv
bW1pdChzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4ocmlnaHQpLCBsZWZ0LT5yZXNvbHZh
YmxlVHlwZSgpKTsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2U+JiByaWdodCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KGxlZnQtPnJlc29sdmFibGVUeXBl
KCksIHJpZ2h0LT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAgICAgIH0pLCByaHNUeXBlKTsK
KyAgICAgICAgfSksIGxoc1R5cGUpOworICAgICAgICBpZiAoIXJlc3VsdFR5cGUpIHsKKyAgICAg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZhc3NpZ25tZW50RXhwcmVzc2lvbiwg
V1RGTW92ZSgqcmVzdWx0VHlwZSkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24ubFZhbHVlKCkpOworICAgICAgICBhdXRvIGxWYWx1ZUl0ZXJhdG9yID0gbV90eXBlTWFw
LmZpbmQoJnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgICAgICBBU1NF
UlQobFZhbHVlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgbGhz
VHlwZSA9IGxWYWx1ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgLy8gRklYTUU6IEhvdyB0byBk
byBsdmFsdWUgYW5kIGFkZHJlc3Mgc3BhY2UgYW5hbHlzaXM/CisgICAgICAgIC8vIEZJWE1FOiBG
aWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCB0aGUgUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbidz
IEFub255bW91c1ZhcmlhYmxlcy4KKyAgICAgICAgQVNTRVJUKHJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24ubmV3VmFsdWVFeHByZXNzaW9uKCkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
KnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHByZXNzaW9uKCkpOworICAgICAg
ICBhdXRvIG5ld1ZhbHVlSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZChyZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKTsKKyAgICAgICAgQVNTRVJUKG5ld1ZhbHVl
SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgbmV3VmFsdWVUeXBl
ID0gbmV3VmFsdWVJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBs
ZWZ0KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmlnaHQpIC0+IGJvb2wgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5
cGUmPihsZWZ0KSwgc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHJpZ2h0KSk7CisgICAg
ICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmlnaHQpIC0+IGJv
b2wgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENv
bW1pdChzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4obGVmdCksIHJpZ2h0LT5yZXNvbHZh
YmxlVHlwZSgpKSk7CisgICAgICAgICAgICB9KSwgbmV3VmFsdWVUeXBlKTsKKyAgICAgICAgfSwg
WyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxlZnQpIC0+IGJvb2wgeworICAgICAg
ICAgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiByaWdodCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1l
ZFR5cGUmPihyaWdodCksIGxlZnQtPnJlc29sdmFibGVUeXBlKCkpKTsKKyAgICAgICAgICAgIH0s
IFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdodCkgLT4gYm9vbCB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KGxlZnQt
PnJlc29sdmFibGVUeXBlKCksIHJpZ2h0LT5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgICAgICAg
ICB9KSwgbmV3VmFsdWVUeXBlKTsKKyAgICAgICAgfSksIGxoc1R5cGUpOworICAgICAgICBpZiAo
IXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ucmVz
dWx0RXhwcmVzc2lvbigpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpyZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLnJlc3VsdEV4cHJlc3Npb24oKSk7CisgICAgICAgIGF1dG8gcmVzdWx0
SXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZChyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLnJlc3Vs
dEV4cHJlc3Npb24oKSk7CisgICAgICAgIEFTU0VSVChyZXN1bHRJdGVyYXRvciAhPSBtX3R5cGVN
YXAuZW5kKCkpOworICAgICAgICBhdXRvJiByZXN1bHRUeXBlID0gcmVzdWx0SXRlcmF0b3ItPnZh
bHVlOworICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0KSB7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fdHlwZU1hcC5hZGQoJnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24sIHJlc3VsdC0+Y2xvbmUo
KSk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3
RW50cnkpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVz
dWx0KSB7CisgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJnJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24sIHJlc3VsdC5jb3B5UmVmKCkpOworICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgfSks
IHJlc3VsdFR5cGUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpEZXJlZmVyZW5jZUV4
cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChkZXJlZmVyZW5jZUV4cHJlc3Npb24ucG9pbnRlcigpKTsKKyAg
ICAgICAgYXV0byBwb2ludGVySXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmZGVyZWZlcmVuY2VF
eHByZXNzaW9uLnBvaW50ZXIoKSk7CisgICAgICAgIEFTU0VSVChwb2ludGVySXRlcmF0b3IgIT0g
bV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgdHlwZSA9IHBvaW50ZXJJdGVyYXRvci0+
dmFsdWU7CisgICAgICAgIGF1dG8qIHBvaW50ZXJUeXBlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VW
aXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdHlwZSkgLT4gQVNUOjpQb2lu
dGVyVHlwZSogeworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gdHlwZS0+dW5pZnlOb2Rl
KCk7CisgICAgICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBhdXRvJiB1bm5hbWVk
VHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAg
ICBpZiAoIWlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpQb2lu
dGVyVHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICB9LCBbXShSZWY8UmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2U+JiB0eXBlKSAtPiBBU1Q6OlBvaW50ZXJUeXBlKiB7CisgICAgICAgICAgICBhdXRv
KiByZXNvbHZlZFR5cGUgPSB0eXBlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpOwor
ICAgICAgICAgICAgaWYgKCFyZXNvbHZlZFR5cGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSByZXNvbHZlZFR5cGUtPnVuaWZ5
Tm9kZSgpOworICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUp
KQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgYXV0byYgdW5u
YW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAg
ICAgICAgaWYgKCFpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKTsKKyAgICAgICAgfSksIHR5cGUpOworICAgICAgICBp
ZiAoIXBvaW50ZXJUeXBlKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBIb3cgdG8gZG8gbHZhbHVlIGFu
ZCBhZGRyZXNzIHNwYWNlIGFuYWx5c2lzPworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlw
ZU1hcC5hZGQoJmRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9pbnRlclR5cGUtPmNsb25lKCkpOwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQ
b2ludGVyRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgICAgICBhdXRvIGxWYWx1
ZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJm1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUo
KSk7CisgICAgICAgIEFTU0VSVChsVmFsdWVJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOwor
ICAgICAgICBhdXRvJiBlbGVtZW50VHlwZSA9IGxWYWx1ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAg
ICAgYXV0byogbFZhbHVlVHlwZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAg
ICAgICAgICAgIHJldHVybiAmc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHR5cGUpOwor
ICAgICAgICB9LCBbXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiB0eXBlKSAtPiBBU1Q6
OlVubmFtZWRUeXBlKiB7CisgICAgICAgICAgICByZXR1cm4gdHlwZS0+cmVzb2x2YWJsZVR5cGUo
KS5yZXNvbHZlZFR5cGUoKTsKKyAgICAgICAgfSksIGVsZW1lbnRUeXBlKTsKKyAgICAgICAgaWYg
KCFsVmFsdWVUeXBlKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBIb3cgdG8gZG8gbHZhbHVlIGFuZCBh
ZGRyZXNzIHNwYWNlIGFuYWx5c2lzPworICAgICAgICBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJl
c3NTcGFjZSBhZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6
RGV2aWNlOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQoJm1ha2VQb2lu
dGVyRXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5
cGU+KExleGVyOjpUb2tlbihtYWtlUG9pbnRlckV4cHJlc3Npb24ub3JpZ2luKCkpLCBhZGRyZXNz
U3BhY2UsIGxWYWx1ZVR5cGUtPmNsb25lKCkpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChB
U1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFy
cmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgICAgIGF1dG8gbFZhbHVlSXRl
cmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFs
dWUoKSk7CisgICAgICAgIEFTU0VSVChsVmFsdWVJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkp
OworICAgICAgICBhdXRvJiBlbGVtZW50VHlwZSA9IGxWYWx1ZUl0ZXJhdG9yLT52YWx1ZTsKKyAg
ICAgICAgYXV0byogdW5uYW1lZFR5cGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10o
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7
CisgICAgICAgICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih0eXBl
KTsKKyAgICAgICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdHlwZSkgLT4g
QVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICAgICAgcmV0dXJuIHR5cGUtPnJlc29sdmFibGVU
eXBlKCkucmVzb2x2ZWRUeXBlKCk7CisgICAgICAgIH0pLCBlbGVtZW50VHlwZSk7CisgICAgICAg
IGlmICghdW5uYW1lZFR5cGUpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gdW5uYW1lZFR5
cGUtPnVuaWZ5Tm9kZSgpOworICAgICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlO
b2RlKSkgeworICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVu
bmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5
cGU+KHVubmFtZWRUeXBlKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHBvaW50ZXJUeXBlID0g
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBCZWNvbWUgYSBDb252ZXJ0UG9pbnRlclRvQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uCisgICAgICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZtYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlKG1ha2VVbmlxdWVSZWY8QVNU
OjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgcG9pbnRlclR5cGUuYWRkcmVzc1NwYWNlKCksIHBvaW50ZXJUeXBl
LmVsZW1lbnRUeXBlKCkuY2xvbmUoKSkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IEhvdyB0byBkbyBsdmFs
dWUgYW5kIGFkZHJlc3Mgc3BhY2UgYW5hbHlzaXM/CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpB
cnJheVR5cGU+KHVubmFtZWRUeXBlKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGFycmF5VHlw
ZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IEhvdyB0byBkbyBsdmFsdWUgYW5kIGFkZHJlc3Mgc3BhY2UgYW5hbHlzaXM/
CisgICAgICAgICAgICAgICAgQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2UgYWRkcmVz
c1NwYWNlID0gQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OkRldmljZTsKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogU2F2ZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgorICAgICAg
ICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmbWFrZUFycmF5UmVmZXJl
bmNlRXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmln
aW4oKSksIGFkZHJlc3NTcGFjZSwgYXJyYXlUeXBlLnR5cGUoKS5jbG9uZSgpKSkpOworICAgICAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8gRklYTUU6IEhvdyB0byBkbyBsdmFsdWUgYW5kIGFkZHJlc3Mgc3BhY2UgYW5hbHlz
aXM/CisgICAgICAgIEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFj
ZSA9IEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpEZXZpY2U7CisgICAgICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
biwgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihM
ZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksIGFkZHJl
c3NTcGFjZSwgdW5uYW1lZFR5cGUtPmNsb25lKCkpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2aXNp
dChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG90RXhwcmVzc2lvbi5iYXNlKCkpOworICAgICAgICBh
dXRvIGJhc2VJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZkb3RFeHByZXNzaW9uLmJhc2UoKSk7
CisgICAgICAgIEFTU0VSVChiYXNlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAg
ICAgYXV0byYgYmFzZVR5cGUgPSBiYXNlSXRlcmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvKiBi
YXNlVW5pZnlOb2RlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mIGJhc2VUeXBlKSAtPiBBU1Q6OlR5cGUqIHsKKyAgICAgICAgICAg
IHJldHVybiAmYmFzZVR5cGUtPnVuaWZ5Tm9kZSgpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29s
dmFibGVUeXBlUmVmZXJlbmNlPiYgYmFzZVR5cGUpIC0+IEFTVDo6VHlwZSogeworICAgICAgICAg
ICAgaWYgKCFiYXNlVHlwZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKSkgeworICAg
ICAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9vbD4oY29tbWl0KGJhc2VUeXBlLT5yZXNv
bHZhYmxlVHlwZSgpKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuICZiYXNlVHlwZS0+cmVzb2x2YWJsZVR5cGUo
KS5yZXNvbHZlZFR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgIH0pLCBiYXNlVHlwZSk7Cisg
ICAgICAgIGlmICghYmFzZVVuaWZ5Tm9kZSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIHdyYXBwZWRCYXNlVHlw
ZSA9IChbJl0oKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICAgICAg
aWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KCpiYXNlVW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4oKmJhc2VVbmlmeU5vZGUpLmNsb25l
KCk7CisgICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpOYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUp
KTsKKyAgICAgICAgICAgIHJldHVybiBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRv
a2VuKGRvdEV4cHJlc3Npb24ub3JpZ2luKCkpLCBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oKmJh
c2VVbmlmeU5vZGUpKTsKKyAgICAgICAgfSkoKTsKKworICAgICAgICBPcHRpb25hbDxzdGQ6OnJl
ZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4gY2FzdFJldHVyblR5cGU7CisKKyAgICAg
ICAgUmVzb2x2aW5nVHlwZSBnZXRBcmd1bWVudFR5cGUod3JhcHBlZEJhc2VUeXBlLT5jbG9uZSgp
KTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+
IGdldEFyZ3VtZW50VHlwZXM7CisgICAgICAgIGdldEFyZ3VtZW50VHlwZXMuYXBwZW5kKGdldEFy
Z3VtZW50VHlwZSk7CisgICAgICAgIGF1dG8qIGdldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9u
T3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVHZXRPdmVybG9hZHMoKSwgZ2V0QXJn
dW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUpOworICAgICAgICBBU1Q6OlVubmFtZWRUeXBlKiBn
ZXRSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGdldEZ1bmN0aW9uKQorICAgICAg
ICAgICAgZ2V0UmV0dXJuVHlwZSA9ICZnZXRGdW5jdGlvbi0+dHlwZSgpOworCisgICAgICAgIEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb24gPSBudWxscHRyOworICAgICAgICBB
U1Q6OlVubmFtZWRUeXBlKiBhbmRSZXR1cm5UeXBlID0gbnVsbHB0cjsKKyAgICAgICAgYXV0byBj
b21wdXRlQW5kQXJndW1lbnRUeXBlID0gWyZdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBl
KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyB1bm5hbWVkVHlwZS5jbG9uZSgpIH07CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVm
PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4oZG90RXhwcmVzc2lvbi5vcmln
aW4oKSksIEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGRvd25jYXN0
PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkudHlwZSgpLmNsb25lKCkpIH07CisgICAgICAg
ICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVl
UmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpUb2tlbihkb3RFeHByZXNzaW9uLm9yaWdpbigp
KSwgQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93bmNhc3Q8QVNU
OjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBlKCkuY2xvbmUoKSkgfTsKKyAgICAgICAgfTsK
KyAgICAgICAgYXV0byBjb21wdXRlQW5kUmV0dXJuVHlwZSA9IFsmXShBU1Q6OlVubmFtZWRUeXBl
JiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICAgICAgaWYgKGlz
PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
JmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH07CisgICAgICAgIGF1dG8gYW5k
QXJndW1lbnRUeXBlID0gY29tcHV0ZUFuZEFyZ3VtZW50VHlwZShzdGF0aWNfY2FzdDxBU1Q6OlVu
bmFtZWRUeXBlJj4od3JhcHBlZEJhc2VUeXBlKSk7CisgICAgICAgIGlmIChhbmRBcmd1bWVudFR5
cGUpIHsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmlu
Z1R5cGU+PiBhbmRBcmd1bWVudFR5cGVzOworICAgICAgICAgICAgYW5kQXJndW1lbnRUeXBlcy5h
cHBlbmQoKmFuZEFyZ3VtZW50VHlwZSk7CisgICAgICAgICAgICBhbmRGdW5jdGlvbiA9IHJlc29s
dmVGdW5jdGlvbk92ZXJsb2FkSW1wbChkb3RFeHByZXNzaW9uLnBvc3NpYmxlQW5kT3ZlcmxvYWRz
KCksIGFuZEFyZ3VtZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKTsKKyAgICAgICAgICAgIGlmIChh
bmRGdW5jdGlvbikKKyAgICAgICAgICAgICAgICBhbmRSZXR1cm5UeXBlID0gY29tcHV0ZUFuZFJl
dHVyblR5cGUoYW5kRnVuY3Rpb24tPnR5cGUoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IWdldFJldHVyblR5cGUgJiYgIWFuZFJldHVyblR5cGUpIHsKKyAgICAgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ2V0UmV0
dXJuVHlwZSAmJiBhbmRSZXR1cm5UeXBlICYmICFtYXRjaGVzKCpnZXRSZXR1cm5UeXBlLCAqYW5k
UmV0dXJuVHlwZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBSZXNvbHZpbmdUeXBlIHNldEFyZ3VtZW50MVR5cGUo
d3JhcHBlZEJhc2VUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgUmVzb2x2aW5nVHlwZSBzZXRBcmd1
bWVudDJUeXBlKGdldFJldHVyblR5cGUgPyBnZXRSZXR1cm5UeXBlLT5jbG9uZSgpIDogYW5kUmV0
dXJuVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PFJlc29sdmluZ1R5cGU+PiBzZXRBcmd1bWVudFR5cGVzOworICAgICAgICBzZXRBcmd1bWVudFR5
cGVzLmFwcGVuZChzZXRBcmd1bWVudDFUeXBlKTsKKyAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5h
cHBlbmQoc2V0QXJndW1lbnQyVHlwZSk7CisgICAgICAgIGF1dG8qIHNldEZ1bmN0aW9uID0gcmVz
b2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKGRvdEV4cHJlc3Npb24ucG9zc2libGVTZXRPdmVybG9h
ZHMoKSwgc2V0QXJndW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUpOworICAgICAgICBpZiAoc2V0
RnVuY3Rpb24pIHsKKyAgICAgICAgICAgIGlmICghbWF0Y2hlcyhzZXRGdW5jdGlvbi0+dHlwZSgp
LCBzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4od3JhcHBlZEJhc2VUeXBlKSkpIHsKKyAg
ICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBIb3cgdG8gZG8gbHZhbHVl
IGFuZCBhZGRyZXNzIHNwYWNlIGFuYWx5c2lzPworCisgICAgICAgIC8vIEZJWE1FOiBHZW5lcmF0
ZSB0aGUgY2FsbCBleHByZXNzaW9ucworICAgICAgICAvKlZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
QVNUOjpFeHByZXNzaW9uPj4gZ2V0QXJndW1lbnRzOworICAgICAgICBnZXRBcmd1bWVudHMuYXBw
ZW5kKGRvdEV4cHJlc3Npb24uYmFzZSgpKTsgLy8gRklYTUU6IFRoaXMgaGFzIHRvIGJlIHRoZSBz
YW1lIGJhc2UgYXMgZG90RXhwcmVzc2lvbi5iYXNlKCkuCisgICAgICAgIGF1dG8gY2FsbEZvckdl
dCA9IHN0ZDo6bWFrZV91bmlxdWU8QVNUOjpDYWxsRXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKGRv
dEV4cHJlc3Npb24ub3JpZ2luKCkpLCBkb3RFeHByZXNzaW9uLmdldEZ1bmN0aW9uTmFtZSgpLCBX
VEZNb3ZlKGdldEFyZ3VtZW50cykpOworICAgICAgICBjYWxsRm9yR2V0LT5zZXRGdW5jdGlvbigq
Z2V0RnVuY3Rpb24pOworICAgICAgICBhdXRvIGdldFJlc3VsdFR5cGUgPSBnZXRGdW5jdGlvbi0+
dHlwZSgpLmNsb25lKCk7Ki8KKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHBy
ZXNzaW9uJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUK
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxl
UmVmZXJlbmNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJl
bmNlLnZhcmlhYmxlKCkpOworICAgICAgICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFi
bGUoKS0+dHlwZSgpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZ2
YXJpYWJsZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlwZSgpLT5j
bG9uZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05l
d0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJiByZXR1cm5TdGF0
ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQocmV0dXJuU3RhdGVtZW50LmZ1
bmN0aW9uKCkpOworICAgICAgICBpZiAocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpIHsKKyAgICAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqcmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOworICAg
ICAgICAgICAgYXV0byB2YWx1ZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQocmV0dXJuU3RhdGVt
ZW50LnZhbHVlKCkpOworICAgICAgICAgICAgQVNTRVJUKHZhbHVlSXRlcmF0b3IgIT0gbV90eXBl
TWFwLmVuZCgpKTsKKyAgICAgICAgICAgIGF1dG8mIHJlc3VsdFR5cGUgPSB2YWx1ZUl0ZXJhdG9y
LT52YWx1ZTsKKyAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IFdURjo6dmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1bHRUeXBlKSAtPiBi
b29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhyZXR1cm5TdGF0ZW1lbnQuZnVu
Y3Rpb24oKS0+dHlwZSgpLCBzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4ocmVzdWx0VHlw
ZSkpOworICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJl
c3VsdFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxi
b29sPihtYXRjaEFuZENvbW1pdChyZXR1cm5TdGF0ZW1lbnQuZnVuY3Rpb24oKS0+dHlwZSgpLCBy
ZXN1bHRUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgICAgICAgICB9KSwgcmVzdWx0VHlw
ZSk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbWF0Y2hl
cyhyZXR1cm5TdGF0ZW1lbnQuZnVuY3Rpb24oKS0+dHlwZSgpLCBtX2ludHJpbnNpY3Mudm9pZFR5
cGUoKSkpCisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQo
QVNUOjpQb2ludGVyVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBGb2xsb3dpbmcg
cG9pbnRlciB0eXBlcyBjYW4gY2F1c2UgaW5maW5pdGUgbG9vcHMgYmVjYXVzZSBvZiBkYXRhIHN0
cnVjdHVyZXMKKyAgICAgICAgLy8gbGlrZSBsaW5rZWQgbGlzdHMuCisgICAgICAgIC8vIEZJWE1F
OiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW1wdHkKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIC8vIEZvbGxvd2luZyBhcnJheSByZWZlcmVuY2UgdHlwZXMgY2FuIGNhdXNlIGluZmluaXRl
IGxvb3BzIGJlY2F1c2Ugb2YgZGF0YQorICAgICAgICAvLyBzdHJ1Y3R1cmVzIGxpa2UgbGlua2Vk
IGxpc3RzLgorICAgICAgICAvLyBGSVhNRTogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gc2hvdWxk
IGJlIGVtcHR5CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJiBp
bnRlZ2VyTGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gcmVmID0gYWRvcHRS
ZWYoKm5ldyBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShpbnRlZ2VyTGl0ZXJhbC50eXBlKCkpKTsK
KyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZpbnRlZ2VyTGl0ZXJhbCwg
V1RGTW92ZShyZWYpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGF1dG8gcmVmID0gYWRvcHRSZWYoKm5ldyBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSh1bnNp
Z25lZEludGVnZXJMaXRlcmFsLnR5cGUoKSkpOworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
dHlwZU1hcC5hZGQoJnVuc2lnbmVkSW50ZWdlckxpdGVyYWwsIFdURk1vdmUocmVmKSk7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
fQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgYXV0byByZWYgPSBhZG9wdFJlZigqbmV3IFJlc29sdmFibGVU
eXBlUmVmZXJlbmNlKGZsb2F0TGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1
bHQgPSBtX3R5cGVNYXAuYWRkKCZmbG9hdExpdGVyYWwsIFdURk1vdmUocmVmKSk7CisgICAgICAg
IEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGF1dG8gcmVmID0gYWRvcHRSZWYoKm5ldyBSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZShudWxsTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X3R5cGVNYXAuYWRkKCZudWxsTGl0ZXJhbCwgV1RGTW92ZShyZWYpKTsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZib29sZWFuTGl0
ZXJhbCwgUmVzb2x2aW5nVHlwZShBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2Vu
KGJvb2xlYW5MaXRlcmFsLm9yaWdpbigpKSwgbV9pbnRyaW5zaWNzLmJvb2xUeXBlKCkpKSk7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9u
TWVtYmVyUmVmZXJlbmNlJiBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChjb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAg
ICAgIGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9ICpjb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbkRlZmluaXRpb24oKTsKKyAgICAgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZjb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZSwgUmVzb2x2aW5nVHlwZShBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAoTGV4ZXI6OlRva2VuKGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlLm9yaWdpbigpKSwgZW51bWVyYXRpb25EZWZpbml0aW9uKSkpOworICAgICAgICBBU1NFUlRf
VU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIGJv
b2wgaXNCb29sVHlwZShSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiBsZWZ0KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaGVz
KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPihsZWZ0KSwgbV9pbnRyaW5zaWNzLmJvb2xU
eXBlKCkpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGVm
dCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hB
bmRDb21taXQobV9pbnRyaW5zaWNzLmJvb2xUeXBlKCksIGxlZnQtPnJlc29sdmFibGVUeXBlKCkp
KTsKKyAgICAgICAgfSksIHJlc29sdmluZ1R5cGUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQo
QVNUOjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pIG92ZXJyaWRl
CisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbE5vdEV4cHJlc3Npb24u
b3BlcmFuZCgpKTsKKyAgICAgICAgYXV0byBvcGVyYW5kSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmlu
ZCgmbG9naWNhbE5vdEV4cHJlc3Npb24ub3BlcmFuZCgpKTsKKyAgICAgICAgQVNTRVJUKG9wZXJh
bmRJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBvcGVyYW5kVHlw
ZSA9IG9wZXJhbmRJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGlmICghaXNCb29sVHlwZShvcGVy
YW5kVHlwZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZsb2dp
Y2FsTm90RXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZShBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAo
TGV4ZXI6OlRva2VuKGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9yaWdpbigpKSwgbV9pbnRyaW5zaWNz
LmJvb2xUeXBlKCkpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1
bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxFeHBy
ZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOworICAgICAgICBhdXRvIGxl
ZnRJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZsb2dpY2FsRXhwcmVzc2lvbi5sZWZ0KCkpOwor
ICAgICAgICBBU1NFUlQobGVmdEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAg
IGF1dG8mIGxlZnRUeXBlID0gbGVmdEl0ZXJhdG9yLT52YWx1ZTsKKworICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQobG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIGF1dG8gcmln
aHRJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZsb2dpY2FsRXhwcmVzc2lvbi5yaWdodCgpKTsK
KyAgICAgICAgQVNTRVJUKHJpZ2h0SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAg
ICAgYXV0byYgcmlnaHRUeXBlID0gcmlnaHRJdGVyYXRvci0+dmFsdWU7CisKKyAgICAgICAgaWYg
KCFpc0Jvb2xUeXBlKGxlZnRUeXBlKSB8fCAhaXNCb29sVHlwZShyaWdodFR5cGUpKSB7CisgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmbG9naWNhbEV4cHJlc3Npb24sIFJl
c29sdmluZ1R5cGUoQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihsb2dpY2Fs
RXhwcmVzc2lvbi5vcmlnaW4oKSksIG1faW50cmluc2ljcy5ib29sVHlwZSgpKSkpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9u
YWwoKSk7CisgICAgICAgIGF1dG8gY29uZGl0aW9uYWxJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5k
KCZpZlN0YXRlbWVudC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAgQVNTRVJUKGNvbmRpdGlvbmFs
SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgY29uZGl0aW9uYWxU
eXBlID0gY29uZGl0aW9uYWxJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGlmICghaXNCb29sVHlw
ZShjb25kaXRpb25hbFR5cGUpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRl
bWVudC5ib2R5KCkpOworICAgICAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkKKyAgICAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNfY2FzdDxBU1Q6OlN0YXRlbWVudCY+KCpp
ZlN0YXRlbWVudC5lbHNlQm9keSgpKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Oldo
aWxlTG9vcCYgd2hpbGVMb29wKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAgYXV0byBjb25kaXRpb25h
bEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJndoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAg
ICAgICAgQVNTRVJUKGNvbmRpdGlvbmFsSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAg
ICAgICAgYXV0byYgY29uZGl0aW9uYWxUeXBlID0gY29uZGl0aW9uYWxJdGVyYXRvci0+dmFsdWU7
CisgICAgICAgIGlmICghaXNCb29sVHlwZShjb25kaXRpb25hbFR5cGUpKSB7CisgICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9keSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVMb29wKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7CisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAgYXV0byBj
b25kaXRpb25hbEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmRvV2hpbGVMb29wLmNvbmRpdGlv
bmFsKCkpOworICAgICAgICBBU1NFUlQoY29uZGl0aW9uYWxJdGVyYXRvciAhPSBtX3R5cGVNYXAu
ZW5kKCkpOworICAgICAgICBhdXRvJiBjb25kaXRpb25hbFR5cGUgPSBjb25kaXRpb25hbEl0ZXJh
dG9yLT52YWx1ZTsKKyAgICAgICAgaWYgKCFpc0Jvb2xUeXBlKGNvbmRpdGlvbmFsVHlwZSkpIHsK
KyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpWYXJp
YWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQp
IHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0
YXRlbWVudCk7CisgICAgICAgIH0sIFsmXShVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhw
cmVzc2lvbikgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFT
VDo6RXhwcmVzc2lvbiY+KGV4cHJlc3Npb24pKTsKKyAgICAgICAgfSksIGZvckxvb3AuaW5pdGlh
bGl6YXRpb24oKSk7CisgICAgICAgIGlmIChmb3JMb29wLmNvbmRpdGlvbigpKSB7CisgICAgICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZvckxvb3AuY29uZGl0aW9uKCkpOworICAgICAgICAg
ICAgYXV0byBjb25kaXRpb25JdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKGZvckxvb3AuY29uZGl0
aW9uKCkpOworICAgICAgICAgICAgQVNTRVJUKGNvbmRpdGlvbkl0ZXJhdG9yICE9IG1fdHlwZU1h
cC5lbmQoKSk7CisgICAgICAgICAgICBhdXRvJiBjb25kaXRpb25UeXBlID0gY29uZGl0aW9uSXRl
cmF0b3ItPnZhbHVlOworICAgICAgICAgICAgaWYgKCFpc0Jvb2xUeXBlKGNvbmRpdGlvblR5cGUp
KSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvckxvb3AuaW5jcmVtZW50
KCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZvckxvb3AuaW5jcmVtZW50KCkp
OworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoZm9yTG9vcC5ib2R5KCkpOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hTdGF0ZW1lbnQu
dmFsdWUoKSk7CisgICAgICAgIGF1dG8gdmFsdWVJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZz
d2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZUl0ZXJhdG9yICE9
IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIHZhbHVlVHlwZSA9IHZhbHVlSXRlcmF0
b3ItPnZhbHVlOworICAgICAgICBhdXRvIHZhbHVlVW5pZnlOb2RlID0gV1RGOjp2aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IEFT
VDo6VHlwZSogeworICAgICAgICAgICAgcmV0dXJuICZsZWZ0LT51bmlmeU5vZGUoKTsKKyAgICAg
ICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxlZnQpIC0+IEFTVDo6VHlw
ZSogeworICAgICAgICAgICAgaWYgKCFsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlw
ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxib29sPihjb21taXQobGVm
dC0+cmVzb2x2YWJsZVR5cGUoKSkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAmbGVmdC0+cmVzb2x2YWJsZVR5
cGUoKS5yZXNvbHZlZFR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgIH0pLCB2YWx1ZVR5cGUp
OworICAgICAgICBpZiAoIWlzPEFTVDo6TmFtZWRUeXBlPigqdmFsdWVVbmlmeU5vZGUpKSB7Cisg
ICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGF1dG8mIHZhbHVlTmFtZWRVbmlmeU5vZGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlw
ZT4oKnZhbHVlVW5pZnlOb2RlKTsKKyAgICAgICAgaWYgKCEoaXM8QVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KHZhbHVlTmFtZWRVbmlmeU5vZGUpICYmIGRvd25jYXN0PEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uPih2YWx1ZU5hbWVkVW5pZnlOb2RlKS5pc0ludCgpKQorICAgICAgICAgICAg
JiYgIWlzPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPih2YWx1ZU5hbWVkVW5pZnlOb2RlKSkg
eworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgaGFzRGVmYXVsdCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8m
IHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkgeworICAgICAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7CisgICAgICAgICAgICBp
ZiAoIXN3aXRjaENhc2UudmFsdWUoKSkgeworICAgICAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0
cnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYm9vbCBzdWNjZXNzOworICAgICAgICAgICAgc3dpdGNoQ2FzZS52YWx1ZSgpLT52aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkg
eworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0
KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih2YWx1ZVR5cGUpLCBpbnRlZ2VyTGl0ZXJh
bC50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHZhbHVlVHlwZS0+cmVzb2x2YWJsZVR5
cGUoKSwgaW50ZWdlckxpdGVyYWwudHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfSksIHZhbHVl
VHlwZSk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1
bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB2
YWx1ZVR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHZh
bHVlVHlwZSksIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudHlwZSgpKSk7CisgICAgICAgICAgICAg
ICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHZhbHVlVHlwZSkgLT4gYm9v
bCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFu
ZENvbW1pdCh2YWx1ZVR5cGUtPnJlc29sdmFibGVUeXBlKCksIHVuc2lnbmVkSW50ZWdlckxpdGVy
YWwudHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfSksIHZhbHVlVHlwZSk7CisgICAgICAgICAg
ICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0ZXJhbCkgeworICAgICAgICAgICAg
ICAgIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHN0YXRpY19jYXN0PEFT
VDo6VW5uYW1lZFR5cGUmPih2YWx1ZVR5cGUpLCBmbG9hdExpdGVyYWwudHlwZSgpKSk7CisgICAg
ICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHZhbHVlVHlw
ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29s
PihtYXRjaEFuZENvbW1pdCh2YWx1ZVR5cGUtPnJlc29sdmFibGVUeXBlKCksIGZsb2F0TGl0ZXJh
bC50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9KSwgdmFsdWVUeXBlKTsKKyAgICAgICAgICAg
IH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgeworICAgICAgICAgICAgICAg
IHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHN0YXRpY19jYXN0PEFTVDo6
VW5uYW1lZFR5cGUmPih2YWx1ZVR5cGUpLCBudWxsTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAg
ICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBlKSAt
PiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1h
dGNoQW5kQ29tbWl0KHZhbHVlVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSwgbnVsbExpdGVyYWwudHlw
ZSgpKSk7CisgICAgICAgICAgICAgICAgfSksIHZhbHVlVHlwZSk7CisgICAgICAgICAgICB9LCBb
Jl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gV1RG
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4m
IHZhbHVlVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVz
KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih2YWx1ZVR5cGUpLCBtX2ludHJpbnNpY3Mu
Ym9vbFR5cGUoKSk7CisgICAgICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJl
ZmVyZW5jZT4mIHZhbHVlVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdChtX2ludHJpbnNpY3MuYm9vbFR5cGUo
KSwgdmFsdWVUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfSksIHZh
bHVlVHlwZSk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVt
ZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1i
ZXJSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoY29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAg
ICAgICAgICAgICAgIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+
KHZhbHVlVHlwZSksICpjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5j
ZS5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgICAgICAgICAgfSwgWyZdKFJlZjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHZhbHVlVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdCgqY29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25EZWZpbml0
aW9uKCksIHZhbHVlVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSkpOworICAgICAgICAgICAgICAgIH0p
LCB2YWx1ZVR5cGUpOworICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNz
KSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBhdXRvJiBmaXJzdENhc2UgPSBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKVtpXTsK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IHN3aXRjaFN0YXRlbWVudC5z
d2l0Y2hDYXNlcygpLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2Vjb25k
Q2FzZSA9IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpW2pdOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxib29sPihmaXJzdENhc2UudmFsdWUo
KSkgIT0gc3RhdGljX2Nhc3Q8Ym9vbD4oc2Vjb25kQ2FzZS52YWx1ZSgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PGJv
b2w+KGZpcnN0Q2FzZS52YWx1ZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmaXJzdENh
c2UudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJh
bCYgZmlyc3RJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICBzZWNvbmRDYXNl
LnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwm
IHNlY29uZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNz
ID0gZmlyc3RJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpICE9IHNlY29uZEludGVnZXJMaXRlcmFsLnZh
bHVlKCk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxp
dGVyYWwmIHNlY29uZFVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN1Y2Nlc3MgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihmaXJzdEludGVnZXJMaXRlcmFs
LnZhbHVlKCkpICE9IHN0YXRpY19jYXN0PGludDY0X3Q+KHNlY29uZFVuc2lnbmVkSW50ZWdlckxp
dGVyYWwudmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0
ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7
CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJikgeworICAg
ICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlv
bk1lbWJlclJlZmVyZW5jZSYpIHsKKyAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAg
ICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIGZpcnN0VW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICBzZWNvbmRDYXNlLnZhbHVlKCkt
PnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIHNlY29uZElu
dGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gc3RhdGlj
X2Nhc3Q8aW50NjRfdD4oZmlyc3RVbnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCkpICE9IHN0
YXRpY19jYXN0PGludDY0X3Q+KHNlY29uZEludGVnZXJMaXRlcmFsLnZhbHVlKCkpOworICAgICAg
ICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiBzZWNvbmRV
bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNz
ID0gZmlyc3RVbnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCkgIT0gc2Vjb25kVW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpG
bG9hdExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRl
cmFsJikgeworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYp
IHsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51
bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAg
ICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmKSB7CisgICAgICAgICAgICAg
ICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFT
VDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGZpcnN0Q29uc3RhbnRFeHBy
ZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
c2Vjb25kQ2FzZS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVn
ZXJMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExp
dGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikg
eworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAg
ICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UmIHNlY29uZENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVt
YmVyUmVmZXJlbmNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmlyc3RD
b25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbk1l
bWJlcigpICE9IHNlY29uZENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJl
bmNlLmVudW1lcmF0aW9uTWVtYmVyKCk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAg
ICAgICAgICAgICB9KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
IWhhc0RlZmF1bHQpIHsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJh
dGlvbj4odmFsdWVOYW1lZFVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAgICAgICBIYXNoU2V0PGlu
dDY0X3Q+IHZhbHVlczsKKyAgICAgICAgICAgICAgICBib29sIHplcm9WYWx1ZUV4aXN0czsKKyAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dp
dGNoQ2FzZXMoKSkgeworICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2hDYXNlLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGludGVnZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCk7
CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwm
IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
ID0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZUZvclNlbGVjdGVkVHlwZSgpOworICAgICAg
ICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwg
WyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxp
dGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVy
YXRpb25NZW1iZXJSZWZlcmVuY2UmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgemVyb1ZhbHVlRXhpc3Rz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWVzLmFkZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAgICAgZG93bmNhc3Q8QVNUOjpOYXRp
dmVUeXBlRGVjbGFyYXRpb24+KHZhbHVlTmFtZWRVbmlmeU5vZGUpLml0ZXJhdGVBbGxWYWx1ZXMo
WyZdKGludDY0X3QgdmFsdWUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXZh
bHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXplcm9WYWx1ZUV4aXN0cykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcy5jb250YWlucyh2YWx1ZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
ICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uPih2YWx1ZU5hbWVkVW5pZnlOb2RlKSk7CisgICAgICAgICAgICAgICAgSGFzaFNldDxB
U1Q6OkVudW1lcmF0aW9uTWVtYmVyKj4gdmFsdWVzOworICAgICAgICAgICAgICAgIGZvciAoYXV0
byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHN3aXRjaENhc2UudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25l
ZEludGVnZXJMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9LCBb
Jl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFT
U0VSVChjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5lbnVtZXJh
dGlvbk1lbWJlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hZGQoY29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIo
KSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGRvd25jYXN0PEFTVDo6RW51
bWVyYXRpb25EZWZpbml0aW9uPih2YWx1ZU5hbWVkVW5pZnlOb2RlKS5lbnVtZXJhdGlvbk1lbWJl
cnMoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcy5jb250YWlucygmZW51bWVy
YXRpb25NZW1iZXIuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNvbW1hRXhwcmVzc2lvbi5saXN0KCkuc2l6ZSgp
ID4gMCk7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KGNvbW1hRXhwcmVzc2lvbik7CisgICAgICAg
IGF1dG8gbGFzdEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJnN0YXRpY19jYXN0PEFTVDo6RXhw
cmVzc2lvbiY+KGNvbW1hRXhwcmVzc2lvbi5saXN0KCkubGFzdCgpKSk7CisgICAgICAgIEFTU0VS
VChsYXN0SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgbGFzdFR5
cGUgPSBsYXN0SXRlcmF0b3ItPnZhbHVlOworICAgICAgICBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgbGFzdFR5cGUpIHsKKyAgICAg
ICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmY29tbWFFeHByZXNzaW9uLCBS
ZXNvbHZpbmdUeXBlKGxhc3RUeXBlLT5jbG9uZSgpKSk7CisgICAgICAgICAgICBBU1NFUlRfVU5V
U0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICB9LCBbJl0oUmVm
PFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGFzdFR5cGUpIHsKKyAgICAgICAgICAgIGF1dG8g
YWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmY29tbWFFeHByZXNzaW9uLCBSZXNvbHZpbmdUeXBl
KGxhc3RUeXBlLmNvcHlSZWYoKSkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1
bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgfSksIGxhc3RUeXBlKTsKKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Npb24mIHRlcm5hcnlFeHByZXNz
aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHRlcm5hcnlF
eHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKKyAgICAgICAgYXV0byBwcmVkaWNhdGVJdGVyYXRvciA9
IG1fdHlwZU1hcC5maW5kKCZ0ZXJuYXJ5RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7CisgICAgICAg
IEFTU0VSVChwcmVkaWNhdGVJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBh
dXRvJiBwcmVkaWNhdGVUeXBlID0gcHJlZGljYXRlSXRlcmF0b3ItPnZhbHVlOworICAgICAgICBp
ZiAoIWlzQm9vbFR5cGUocHJlZGljYXRlVHlwZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQodGVybmFyeUV4cHJlc3Npb24uYm9keUV4cHJlc3Npb24oKSk7CisgICAgICAgIGF1dG8g
Ym9keUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJnRlcm5hcnlFeHByZXNzaW9uLmJvZHlFeHBy
ZXNzaW9uKCkpOworICAgICAgICBBU1NFUlQoYm9keUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQo
KSk7CisgICAgICAgIGF1dG8mIGJvZHlUeXBlID0gYm9keUl0ZXJhdG9yLT52YWx1ZTsKKworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24uZWxzZUV4cHJlc3Npb24o
KSk7CisgICAgICAgIGF1dG8gZWxzZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJnRlcm5hcnlF
eHByZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkpOworICAgICAgICBBU1NFUlQoZWxzZUl0ZXJhdG9y
ICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIGVsc2VUeXBlID0gZWxzZUl0ZXJh
dG9yLT52YWx1ZTsKKworICAgICAgICBhdXRvIHJlc3VsdFR5cGUgPSBXVEY6OnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgYm9keVR5cGUpIC0+
IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICAgICAgcmV0
dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+JiBlbHNlVHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
PiB7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVk
VHlwZSY+KGJvZHlUeXBlKSwgc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KGVsc2VUeXBl
KSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBib2R5VHlwZS0+Y2xvbmUoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgfSwgWyZdKFJlZjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGVsc2VUeXBlKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21t
aXQoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KGJvZHlUeXBlKSwgZWxzZVR5cGUtPnJl
c29sdmFibGVUeXBlKCkpOworICAgICAgICAgICAgfSksIGVsc2VUeXBlKTsKKyAgICAgICAgfSwg
WyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGJvZHlUeXBlKSAtPiBPcHRpb25hbDxV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgZWxz
ZVR5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAg
ICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRU
eXBlJj4oZWxzZVR5cGUpLCBib2R5VHlwZS0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAgICAg
ICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgZWxzZVR5cGUpIC0+IE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICAgICAgICAgIHJldHVy
biBtYXRjaEFuZENvbW1pdChib2R5VHlwZS0+cmVzb2x2YWJsZVR5cGUoKSwgZWxzZVR5cGUtPnJl
c29sdmFibGVUeXBlKCkpOworICAgICAgICAgICAgfSksIGVsc2VUeXBlKTsKKyAgICAgICAgfSks
IGJvZHlUeXBlKTsKKyAgICAgICAgaWYgKCFyZXN1bHRUeXBlKSB7CisgICAgICAgICAgICBzZXRF
cnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmdGVybmFyeUV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUo
V1RGTW92ZSgqcmVzdWx0VHlwZSkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQs
IGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q2Fs
bEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZm9y
IChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygpKQorICAgICAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RXhwcmVzc2lvbiY+KGFyZ3Vt
ZW50KSk7CisgICAgICAgIGlmIChjYWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpKQorICAg
ICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGNhbGxFeHByZXNzaW9uLmNhc3RSZXR1cm5UeXBl
KCktPmdldCgpKTsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2
aW5nVHlwZT4+IHR5cGVzOworICAgICAgICB0eXBlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGNh
bGxFeHByZXNzaW9uLmFyZ3VtZW50cygpLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgYXJn
dW1lbnQgOiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkgeworICAgICAgICAgICAgYXV0byBp
dGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZzdGF0aWNfY2FzdDxBU1Q6OkV4cHJlc3Npb24mPihh
cmd1bWVudCkpOworICAgICAgICAgICAgQVNTRVJUKGl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQo
KSk7CisgICAgICAgICAgICB0eXBlcy51bmNoZWNrZWRBcHBlbmQoaXRlcmF0b3ItPnZhbHVlKTsK
KyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChjYWxsRXhwcmVzc2lvbi5oYXNPdmVybG9hZHMo
KSk7CisgICAgICAgIGF1dG8qIGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBs
KCpjYWxsRXhwcmVzc2lvbi5vdmVybG9hZHMoKSwgdHlwZXMsIGNhbGxFeHByZXNzaW9uLmNhc3RS
ZXR1cm5UeXBlKCkpOworICAgICAgICBpZiAoIWZ1bmN0aW9uKSB7CisgICAgICAgICAgICBpZiAo
YXV0byBuZXdGdW5jdGlvbiA9IHJlc29sdmVCeUluc3RhbnRpYXRpb24oY2FsbEV4cHJlc3Npb24s
IHR5cGVzLCBtX2ludHJpbnNpY3MpKSB7CisgICAgICAgICAgICAgICAgbV9wcm9ncmFtLmFwcGVu
ZChXVEZNb3ZlKCpuZXdGdW5jdGlvbikpOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gJnN0
YXRpY19jYXN0PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiY+KG1fcHJvZ3JhbS5uYXRp
dmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpLmxhc3QoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIWZ1bmN0aW9uKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBmdW5jdGlvbi0+cGFyYW1ldGVycygpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBhdXRvIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJl
c29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoKmZ1bmN0aW9uLT5wYXJhbWV0ZXJzKClb
aV0udHlwZSgpLCByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJsZVR5cGUoKSkpOwor
ICAgICAgICAgICAgfSksIHR5cGVzW2ldLmdldCgpKTsKKyAgICAgICAgICAgIGlmICghc3VjY2Vz
cykgeworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY2FsbEV4cHJlc3Npb24uc2V0
RnVuY3Rpb24oKmZ1bmN0aW9uKTsKKworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1h
cC5hZGQoJmNhbGxFeHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlKGZ1bmN0aW9uLT50eXBlKCkuY2xv
bmUoKSkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3
RW50cnkpOworICAgIH0KKworcHJpdmF0ZToKKworICAgIC8qY2xhc3MgUmVzb2x2aW5nVHlwZUhh
c2hUcmFpdHMgOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFJlc29sdmluZ1R5cGU+Cisg
ICAgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGljIFJlc29sdmluZ1R5cGUmIGVtcHR5VmFs
dWUoKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxSZXNvbHZpbmdUeXBlPiBlbXB0eVZhbHVlOwor
ICAgICAgICAgICAgcmV0dXJuIGVtcHR5VmFsdWUuZ2V0KCk7CisgICAgICAgIH0KKworICAgICAg
ICB0eXBlZGVmIFJlc29sdmluZ1R5cGUmIFBlZWtUeXBlOworICAgICAgICBzdGF0aWMgUGVla1R5
cGUgcGVlayhSZXNvbHZpbmdUeXBlJiB2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH0KKyAgICAgICAg
dHlwZWRlZiBSZXNvbHZpbmdUeXBlJiYgVGFrZVR5cGU7CisgICAgICAgIHN0YXRpYyBUYWtlVHlw
ZSB0YWtlKFJlc29sdmluZ1R5cGUmJiB2YWx1ZSkgeyByZXR1cm4gV1RGTW92ZSh2YWx1ZSk7IH0K
KyAgICB9OyovCisKKyAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIFJlc29sdmluZ1R5cGUg
LyosIFdURjo6UHRySGFzaDxBU1Q6OkV4cHJlc3Npb24qPiwgV1RGOjpIYXNoVHJhaXRzPEFTVDo6
RXhwcmVzc2lvbio+LCBSZXNvbHZpbmdUeXBlSGFzaFRyYWl0cyovPiBtX3R5cGVNYXA7CisgICAg
SGFzaFNldDxTdHJpbmc+IG1fdmVydGV4RW50cnlQb2ludHM7CisgICAgSGFzaFNldDxTdHJpbmc+
IG1fZnJhZ21lbnRFbnRyeVBvaW50czsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9jb21wdXRlRW50
cnlQb2ludHM7CisgICAgY29uc3QgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOworICAgIFByb2dy
YW0mIG1fcHJvZ3JhbTsKK307CisKK2Jvb2wgY2hlY2soUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAg
ICBDaGVja2VyIGNoZWNrZXIocHJvZ3JhbS5pbnRyaW5zaWNzKCksIHByb2dyYW0pOworICAgIGNo
ZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0pOworICAgIHJldHVybiAhY2hlY2tlci5l
cnJvcigpOworfQorCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2ZjA4NTc3ODE4
NGZlNTQ3NjcyMTAxZGZiZTAxMjBlNjM2YjlhODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuaApAQCAtMCwwICsxLDQy
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
CisKK2Jvb2wgY2hlY2soUHJvZ3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9p
bnRJdGVtcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdh
dGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWJkNTRjOWI5MTBkMWJhYWY2NzA1
MTg0NTc0YTE2OTZkNDE5NjljZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcApAQCAtMCww
ICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
SExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2lu
Y2x1ZGUgIldITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5
cGUuaCIKKyNpbmNsdWRlICJXSExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldI
TFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgorI2luY2x1ZGUg
IldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24u
aCIKKyNpbmNsdWRlICJXSExTTFR5cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBl
UmVmZXJlbmNlLmgiCisjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgR2F0aGVyZXIgOiBw
dWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgR2F0aGVyZXIoY29uc3QgSW50cmluc2ljcyYg
aW50cmluc2ljcywgQVNUOjpTZW1hbnRpYyogc2VtYW50aWMgPSBudWxscHRyKQorICAgICAgICA6
IG1faW50cmluc2ljcyhpbnRyaW5zaWNzKQorICAgICAgICAsIG1fY3VycmVudFNlbWFudGljKHNl
bWFudGljKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5HYXRoZXJlcigpID0gZGVmYXVs
dDsKKworICAgIHZvaWQgcmVzZXQoKQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50U2VtYW50aWMg
PSBudWxscHRyOworICAgIH0KKworICAgIFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mJiB0YWtlRW50
cnlQb2ludEl0ZW1zKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fZW50cnlQb2lu
dEl0ZW1zKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0
aW9uJikKKyAgICB7CisgICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
bV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKG1fdHlwZVJlZmVyZW5jZXMu
bGFzdCgpLmdldCgpLCAqbV9jdXJyZW50U2VtYW50aWMpKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCisg
ICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBzZXRF
cnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtYXRj
aGVzKG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiwgbV9pbnRyaW5zaWNzLnZvaWRUeXBlKCkpKSB7Cisg
ICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKG1fdHlwZVJl
ZmVyZW5jZXMubGFzdCgpLmdldCgpLCAqbV9jdXJyZW50U2VtYW50aWMpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlv
bikKKyAgICB7CisgICAgICAgIGlmIChtX2N1cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZv
ciAoYXV0byYgc3RydWN0dXJlRWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJl
RWxlbWVudHMoKSkgeworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMo
KSkKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRTZW1hbnRpYyA9ICYqc3RydWN0dXJlRWxlbWVu
dC5zZW1hbnRpYygpOworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0cnVjdHVyZUVs
ZW1lbnQpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZp
bml0aW9uJiB0eXBlRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dCh0eXBlRGVmaW5pdGlvbi50eXBlKCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpU
eXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVS
ZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBtX3R5cGVSZWZlcmVuY2VzLmFwcGVu
ZCh0eXBlUmVmZXJlbmNlKTsKKyAgICAgICAgYXV0byBkZXB0aCA9IG1fdHlwZVJlZmVyZW5jZXMu
c2l6ZSgpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnR5cGVSZWZlcmVuY2UucmVzb2x2
ZWRUeXBlKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGRlcHRoLCBtX3R5cGVSZWZlcmVuY2Vz
LnNpemUoKSA9PSBkZXB0aCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJU
eXBlJiBwb2ludGVyVHlwZSkKKyAgICB7CisgICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMp
IHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKHBvaW50
ZXJUeXBlLCAqbV9jdXJyZW50U2VtYW50aWMpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFT
VDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpCisgICAgeworICAgICAg
ICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFw
cGVuZChFbnRyeVBvaW50SXRlbShhcnJheVJlZmVyZW5jZVR5cGUsICptX2N1cnJlbnRTZW1hbnRp
YykpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkK
KyAgICB7CisgICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRy
eVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5VHlwZSwgKm1fY3VycmVudFNl
bWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoIW1fY3VycmVu
dFNlbWFudGljKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSkK
KyAgICAgICAgICAgIG1fY3VycmVudFNlbWFudGljID0gJip2YXJpYWJsZURlY2xhcmF0aW9uLnNl
bWFudGljKCk7CisgICAgICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSkKKyAgICAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7Cisg
ICAgQVNUOjpTZW1hbnRpYyogbV9jdXJyZW50U2VtYW50aWMgeyBudWxscHRyIH07CisgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpUeXBlUmVmZXJlbmNlPj4gbV90eXBlUmVm
ZXJlbmNlczsKKyAgICBWZWN0b3I8RW50cnlQb2ludEl0ZW0+IG1fZW50cnlQb2ludEl0ZW1zOwor
fTsKKworT3B0aW9uYWw8RW50cnlQb2ludEl0ZW1zPiBnYXRoZXJFbnRyeVBvaW50SXRlbXMoY29u
c3QgSW50cmluc2ljcyYgaW50cmluc2ljcywgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0
aW9uRGVmaW5pdGlvbikKK3sKKyAgICBBU1NFUlQoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9p
bnRUeXBlKCkpOworICAgIEdhdGhlcmVyIGlucHV0R2F0aGVyZXIoaW50cmluc2ljcyk7CisgICAg
Zm9yIChhdXRvJiBwYXJhbWV0ZXIgOiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpKSB7
CisgICAgICAgIGlucHV0R2F0aGVyZXIucmVzZXQoKTsKKyAgICAgICAgaW5wdXRHYXRoZXJlci5j
aGVja0Vycm9yQW5kVmlzaXQocGFyYW1ldGVyKTsKKyAgICAgICAgaWYgKGlucHV0R2F0aGVyZXIu
ZXJyb3IoKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorICAgIEdh
dGhlcmVyIG91dHB1dEdhdGhlcmVyKGludHJpbnNpY3MsIGZ1bmN0aW9uRGVmaW5pdGlvbi5zZW1h
bnRpYygpID8gJipmdW5jdGlvbkRlZmluaXRpb24uc2VtYW50aWMoKSA6IG51bGxwdHIpOworICAg
IG91dHB1dEdhdGhlcmVyLmNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24udHlw
ZSgpKTsKKyAgICBpZiAob3V0cHV0R2F0aGVyZXIuZXJyb3IoKSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7eyBpbnB1dEdhdGhlcmVyLnRha2VFbnRyeVBvaW50
SXRlbXMoKSwgb3V0cHV0R2F0aGVyZXIudGFrZUVudHJ5UG9pbnRJdGVtcygpIH19OworfQorCit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45ZDRmN2RkODQ0NTdmZWE2MDY5MWE2NWViM2YxZDdmM2E1NDg5MzA4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRy
eVBvaW50SXRlbXMuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgorI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKwor
Y2xhc3MgRnVuY3Rpb25EZWZpbml0aW9uOworCit9CisKK2NsYXNzIEludHJpbnNpY3M7CitjbGFz
cyBVbm5hbWVkVHlwZTsKKworc3RydWN0IEVudHJ5UG9pbnRJdGVtIHsKKyAgICBFbnRyeVBvaW50
SXRlbShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgQVNUOjpTZW1hbnRpYyYgc2VtYW50
aWMpCisgICAgICAgIDogdW5uYW1lZFR5cGUodW5uYW1lZFR5cGUpCisgICAgICAgICwgc2VtYW50
aWMoc2VtYW50aWMpCisgICAgeworICAgIH0KKworICAgIEFTVDo6VW5uYW1lZFR5cGUmIHVubmFt
ZWRUeXBlOworICAgIEFTVDo6U2VtYW50aWMmIHNlbWFudGljOworfTsKKworc3RydWN0IEVudHJ5
UG9pbnRJdGVtcyB7CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBpbnB1dHM7CisgICAgVmVj
dG9yPEVudHJ5UG9pbnRJdGVtPiBvdXRwdXRzOworfTsKKworT3B0aW9uYWw8RW50cnlQb2ludEl0
ZW1zPiBnYXRoZXJFbnRyeVBvaW50SXRlbXMoY29uc3QgSW50cmluc2ljcyYsIEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJik7CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNDkx
NDgyYWFjNWFhNWE5M2U4ZTcyOGRmZjFhNjVmZWNiOWRlMzA2Ni4uODIyMjhkMWUxZWNlMWZiZDll
MzE4NzlhYzUwMWM2ZDI0YTU1NzUwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTMwOCw2ICszMDgsOCBA
QCBNb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3Bw
CiBNb2R1bGVzL3dlYmdwdS9ET01XaW5kb3dXZWJHUFUuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTExleGVyLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCitN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFR5cGVBcmd1bWVudC5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEJ1
aWx0SW5TZW1hbnRpYy5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlc291cmNl
U2VtYW50aWMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggZmYzNWE4ODZlMTUzYmY0ZjFlMTdjNWNjNmQ2M2ZhNzZkNTNkMTM2
Ni4uZTEwZDI5MGJmM2IwMDdmNmE3MmQ3MzY1NGIyY2E4MWRjMzI5MjBiMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTMzMjUs
NiArMTMzMjUsMTAgQEAKIAkJQzIxQkY3NDUyMUNEOTY5ODAwMjI3OTc5IC8qIFdITFNMU3RhbmRh
cmRMaWJyYXJ5LnR4dCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBXSExTTFN0YW5kYXJkTGlicmFyeS50eHQ7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUMyMURGMkU3MUQ5RTRFOTkwMEY1QjI0QyAvKiBDU1NGb250VmFy
aWF0aW9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NT
Rm9udFZhcmlhdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIx
REYyRTgxRDlFNEU5OTAwRjVCMjRDIC8qIENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250VmFyaWF0aW9uVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5QkUyMUU5M0Y1MDAwM0M5ODREIC8qIFdITFNM
Q2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTENoZWNrZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTlDMDIxRTkzRjUxMDAzQzk4NEQgLyogV0hMU0xD
aGVja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlDMjM0QTlDMTIxRTkzRjUyMDAzQzk4NEQgLyogV0hMU0xHYXRoZXJFbnRy
eVBvaW50SXRlbXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50
SXRlbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTlDMjIxRTkzRjUy
MDAzQzk4NEQgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQzI0NThFNjExRkU4OTc5RTAwNTk0NzU5IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEZvbnRDYWNoZUNvcmVUZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUMyNjAxN0ExMUM3MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250RmFjZVNldC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNjAxN0EyMUM3MkRDOTkwMEY3NEExNiAvKiBDU1NG
b250RmFjZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250RmFj
ZVNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjUzODgsNiArMjUzOTIsMTAg
QEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQzIxQkY2RjEyMUNE
ODk4RDAwMjI3OTc5IC8qIEFTVCAqLywKKwkJCQlDMjM0QTlCRTIxRTkzRjUwMDAzQzk4NEQgLyog
V0hMU0xDaGVja2VyLmNwcCAqLywKKwkJCQlDMjM0QTlDMDIxRTkzRjUxMDAzQzk4NEQgLyogV0hM
U0xDaGVja2VyLmggKi8sCisJCQkJQzIzNEE5QzEyMUU5M0Y1MjAwM0M5ODREIC8qIFdITFNMR2F0
aGVyRW50cnlQb2ludEl0ZW1zLmNwcCAqLywKKwkJCQlDMjM0QTlDMjIxRTkzRjUyMDAzQzk4NEQg
LyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCAqLywKIAkJCQlDMjEwRTkxMTIxQjRCRDEw
MDBCN0Y4M0QgLyogV0hMU0xMZXhlci5jcHAgKi8sCiAJCQkJQzIxMEU5MTIyMUI0QkQxMDAwQjdG
ODNEIC8qIFdITFNMTGV4ZXIuaCAqLywKIAkJCQlDMjFCRjczNzIxQ0Q4QTAyMDAyMjc5NzkgLyog
V0hMU0xQYXJzZXIuY3BwICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359002</attachid>
            <date>2019-01-12 23:52:33 -0800</date>
            <delta_ts>2019-01-13 20:05:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193080-20190112235232.patch</filename>
            <type>text/plain</type>
            <size>127719</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5ODk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzU2NzMwYTdjNGM1ODli
NTM5NzVlMjVmZDNkNGVkNTYyMDI0NzlkZi4uMjY4ZWE2OGU3OTg0NzRjNDVjN2U4OTQ4NzgyMjJm
YjMyZGU5NDNlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDE5LTAxLTEyICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgdGhlIFR5cGUgQ2hlY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkzMDgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpyZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpyZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpyZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OnJlc29sdmVCeUluc3RhbnRpYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OkNoZWNrZXI6OkNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OmNoZWNrU2hhZGVyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6
Y2hlY2tTZW1hbnRpY3MpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmNoZWNr
T3BlcmF0b3JPdmVybG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6aXNC
b29sVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Y2hlY2spOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkdhdGhlcmVyOjpHYXRoZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6R2F0aGVyZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpHYXRoZXJlcjo6dGFrZUVudHJ5UG9pbnRJdGVtcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6R2F0aGVyZXI6OnZpc2l0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpnYXRoZXJFbnRy
eVBvaW50SXRlbXMpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVy
RW50cnlQb2ludEl0ZW1zLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkVudHJ5
UG9pbnRJdGVtOjpFbnRyeVBvaW50SXRlbSk6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5LTAxLTExICBN
eWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dITFNM
XSBJbXBsZW1lbnQgdGhlIE5hbWVSZXNvbHZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQ29uc3RhbnRFeHByZXNzaW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Np
b24uaAppbmRleCBkZjY4YzJhMTMzNGQyOWU5MTNiYWQ0NWZjYzQxYTI1NzkzMWMwODdhLi4zZDFh
ZTFjZWMzNTc4OTliZDg3ZmZmZDE0NTQwNmRiMzI5ZjA4NjRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25z
dGFudEV4cHJlc3Npb24uaApAQCAtMjgsNyArMjgsNyBAQAogI2lmIEVOQUJMRShXRUJHUFUpCiAK
ICNpbmNsdWRlICJXSExTTEJvb2xlYW5MaXRlcmFsLmgiCi0jaW5jbHVkZSAiV0hMU0xDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oIgorI2luY2x1ZGUgIldITFNM
RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmgiCiAjaW5jbHVkZSAiV0hMU0xGbG9hdExpdGVyYWwu
aCIKICNpbmNsdWRlICJXSExTTEludGVnZXJMaXRlcmFsLmgiCiAjaW5jbHVkZSAiV0hMU0xOdWxs
TGl0ZXJhbC5oIgpAQCAtNzEsOCArNzEsOCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAg
IENvbnN0YW50RXhwcmVzc2lvbihDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJl
ZmVyZW5jZSYmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKQot
ICAgICAgICA6IG1fdmFyaWFudChXVEZNb3ZlKGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9u
TWVtYmVyUmVmZXJlbmNlKSkKKyAgICBDb25zdGFudEV4cHJlc3Npb24oRW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFsJiYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKQorICAgICAgICA6IG1fdmFyaWFu
dChXVEZNb3ZlKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkpCiAgICAgewogICAgIH0KIApAQCAt
MTEwLDggKzExMCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBudWxsTGl0ZXJhbC5j
bG9uZSgpOwogICAgICAgICB9LCBbJl0oY29uc3QgQm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRl
cmFsKSAtPiBDb25zdGFudEV4cHJlc3Npb24gewogICAgICAgICAgICAgcmV0dXJuIGJvb2xlYW5M
aXRlcmFsLmNsb25lKCk7Ci0gICAgICAgIH0sIFsmXShjb25zdCBDb25zdGFudEV4cHJlc3Npb25F
bnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25N
ZW1iZXJSZWZlcmVuY2UpIC0+IENvbnN0YW50RXhwcmVzc2lvbiB7Ci0gICAgICAgICAgICByZXR1
cm4gY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuY2xvbmUoKTsK
KyAgICAgICAgfSwgWyZdKGNvbnN0IEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsKSAtPiBDb25zdGFudEV4cHJlc3Npb24geworICAgICAgICAgICAgcmV0
dXJuIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5jbG9uZSgpOwogICAgICAgICB9KSwgbV92YXJp
YW50KTsKICAgICB9CiAKQEAgLTEzMywxMCArMTMzLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBib29sZWFuTGl0ZXJhbC52YWx1ZSgpID09IG90aGVyQm9vbGVhbkxpdGVy
YWwudmFsdWUoKTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGZhbHNlOwotICAgICAgICB9LCBbJl0oY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRp
b25NZW1iZXJSZWZlcmVuY2UmIGNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVm
ZXJlbmNlKSB7Ci0gICAgICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZT4ob3RoZXIubV92YXJpYW50KSkg
ewotICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIG90aGVyTWVtYmVyUmVmZXJlbmNlID0gV1RG
OjpnZXQ8Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2U+KG90aGVy
Lm1fdmFyaWFudCk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29uc3RhbnRFeHByZXNzaW9u
RW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuZW51bWVyYXRpb25NZW1iZXIoKSA9PSBvdGhlck1l
bWJlclJlZmVyZW5jZS5lbnVtZXJhdGlvbk1lbWJlcigpOworICAgICAgICB9LCBbJl0oY29uc3Qg
RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIHsKKyAg
ICAgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbD4ob3RoZXIubV92YXJpYW50KSkgeworICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIG90
aGVyTWVtYmVyUmVmZXJlbmNlID0gV1RGOjpnZXQ8RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsPihv
dGhlci5tX3ZhcmlhbnQpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGVudW1lcmF0aW9uTWVt
YmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpID09IG90aGVyTWVtYmVyUmVmZXJlbmNlLmVu
dW1lcmF0aW9uTWVtYmVyKCk7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBmYWxzZTsKICAgICAgICAgfSkpOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICB9LCBbJl0oY29uc3QgQm9vbGVh
bkxpdGVyYWwmKSB7CiAgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgfSwgWyZd
KGNvbnN0IENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikgewor
ICAgICAgICB9LCBbJl0oY29uc3QgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJikgewogICAgICAg
ICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgIH0pKTsKIApAQCAtMTY5LDcgKzE2OSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIEZsb2F0TGl0ZXJhbCwKICAgICAgICAgTnVsbExpdGVyYWwsCiAg
ICAgICAgIEJvb2xlYW5MaXRlcmFsLAotICAgICAgICBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZQorICAgICAgICBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwKICAg
ICAgICAgPiBtX3ZhcmlhbnQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1l
bWJlclJlZmVyZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNU
L1dITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg1N2Q5NDcyODViOTY3YWQxMWQ5MTZlMGVlMDJm
YmE1ZjE1MGQwYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xDb25zdGFudEV4
cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShXRUJH
UFUpCi0KLSNpbmNsdWRlICJXSExTTExleGVyLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIFdITFNMIHsKLQotbmFt
ZXNwYWNlIEFTVCB7Ci0KLWNsYXNzIEVudW1lcmF0aW9uRGVmaW5pdGlvbjsKLWNsYXNzIEVudW1l
cmF0aW9uTWVtYmVyOwotCi1jbGFzcyBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJl
clJlZmVyZW5jZSA6IHB1YmxpYyBFeHByZXNzaW9uIHsKLXB1YmxpYzoKLSAgICBDb25zdGFudEV4
cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZShMZXhlcjo6VG9rZW4mJiBvcmlnaW4s
IFN0cmluZyYmIGxlZnQsIFN0cmluZyYmIHJpZ2h0KQotICAgICAgICA6IEV4cHJlc3Npb24oV1RG
TW92ZShvcmlnaW4pKQotICAgICAgICAsIG1fbGVmdChXVEZNb3ZlKGxlZnQpKQotICAgICAgICAs
IG1fcmlnaHQoV1RGTW92ZShyaWdodCkpCi0gICAgewotICAgIH0KLQotICAgIHZpcnR1YWwgfkNv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKCkgPSBkZWZhdWx0Owot
Ci0gICAgZXhwbGljaXQgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UoY29uc3QgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSA9
IGRlZmF1bHQ7Ci0gICAgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UoQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmJikgPSBkZWZh
dWx0OwotCi0gICAgQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2Um
IG9wZXJhdG9yPShjb25zdCBDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZSYpID0gZGVsZXRlOwotICAgIENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVy
UmVmZXJlbmNlJiBvcGVyYXRvcj0oQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJS
ZWZlcmVuY2UmJikgPSBkZWZhdWx0OwotCi0gICAgY29uc3QgU3RyaW5nJiBsZWZ0KCkgY29uc3Qg
eyByZXR1cm4gbV9sZWZ0OyB9Ci0gICAgY29uc3QgU3RyaW5nJiByaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmlnaHQ7IH0KLQotICAgIENvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVy
UmVmZXJlbmNlIGNsb25lKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gQ29u
c3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UoTGV4ZXI6OlRva2VuKG9y
aWdpbigpKSwgU3RyaW5nKG1fbGVmdCksIFN0cmluZyhtX3JpZ2h0KSk7Ci0gICAgICAgIHJlc3Vs
dC5tX2VudW1lcmF0aW9uTWVtYmVyID0gbV9lbnVtZXJhdGlvbk1lbWJlcjsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBFbnVtZXJhdGlvbkRlZmluaXRpb24qIGVudW1lcmF0
aW9uRGVmaW5pdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9lbnVtZXJhdGlvbkRlZmlu
aXRpb247Ci0gICAgfQotCi0gICAgRW51bWVyYXRpb25EZWZpbml0aW9uKiBlbnVtZXJhdGlvbkRl
ZmluaXRpb24oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZp
bml0aW9uOwotICAgIH0KLQotICAgIEVudW1lcmF0aW9uTWVtYmVyKiBlbnVtZXJhdGlvbk1lbWJl
cigpCi0gICAgewotICAgICAgICByZXR1cm4gbV9lbnVtZXJhdGlvbk1lbWJlcjsKLSAgICB9Ci0K
LSAgICBFbnVtZXJhdGlvbk1lbWJlciogZW51bWVyYXRpb25NZW1iZXIoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fZW51bWVyYXRpb25NZW1iZXI7Ci0gICAgfQotCi0gICAgdm9pZCBz
ZXRFbnVtZXJhdGlvbk1lbWJlcihFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVm
aW5pdGlvbiwgRW51bWVyYXRpb25NZW1iZXImIGVudW1lcmF0aW9uTWVtYmVyKQotICAgIHsKLSAg
ICAgICAgbV9lbnVtZXJhdGlvbkRlZmluaXRpb24gPSAmZW51bWVyYXRpb25EZWZpbml0aW9uOwot
ICAgICAgICBtX2VudW1lcmF0aW9uTWVtYmVyID0gJmVudW1lcmF0aW9uTWVtYmVyOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9sZWZ0OwotICAgIFN0cmluZyBtX3JpZ2h0OwotICAg
IEVudW1lcmF0aW9uRGVmaW5pdGlvbiogbV9lbnVtZXJhdGlvbkRlZmluaXRpb24geyBudWxscHRy
IH07Ci0gICAgRW51bWVyYXRpb25NZW1iZXIqIG1fZW51bWVyYXRpb25NZW1iZXIgeyBudWxscHRy
IH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBBU1QKLQotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaAppbmRleCBiYTY0MzAzODAyYjFi
NWE0MTk3ZDk5MTZjMWExNTIwYjIwZjYwY2M5Li5lZTc0NWU1NGJkMDU0MmYzN2JiM2Q5ODE0Mzc0
ZWIzZTYwZmNhNTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwuaApAQCAtMjcsOSArMjcsOCBAQAogCiAjaWYgRU5BQkxFKFdFQkdQVSkKIAotI2luY2x1ZGUg
IldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKLSNpbmNsdWRlICJXSExTTEV4cHJlc3Npb24uaCIK
ICNpbmNsdWRlICJXSExTTExleGVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMjUgKzM2LDc3IEBAIG5hbWVzcGFjZSBX
SExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCitjbGFzcyBFbnVtZXJhdGlvbkRlZmluaXRpb247
CitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlcjsKKwogY2xhc3MgRW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsIDogcHVibGljIEV4cHJlc3Npb24gewogcHVibGljOgotICAgIEVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbChMZXhlcjo6VG9rZW4mJiBvcmlnaW4sIEVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJh
dGlvbk1lbWJlcikKKyAgICBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoTGV4ZXI6OlRva2VuJiYg
b3JpZ2luLCBTdHJpbmcmJiBsZWZ0LCBTdHJpbmcmJiByaWdodCkKICAgICAgICAgOiBFeHByZXNz
aW9uKFdURk1vdmUob3JpZ2luKSkKLSAgICAgICAgLCBtX2VudW1lcmF0aW9uTWVtYmVyKGVudW1l
cmF0aW9uTWVtYmVyKQorICAgICAgICAsIG1fbGVmdChXVEZNb3ZlKGxlZnQpKQorICAgICAgICAs
IG1fcmlnaHQoV1RGTW92ZShyaWdodCkpCiAgICAgewogICAgIH0KIAogICAgIHZpcnR1YWwgfkVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCgpID0gZGVmYXVsdDsKIAotICAgIEVudW1lcmF0aW9uTWVt
YmVyTGl0ZXJhbChjb25zdCBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmKSA9IGRlbGV0ZTsKKyAg
ICBleHBsaWNpdCBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoY29uc3QgRW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFsJikgPSBkZWZhdWx0OwogICAgIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbChFbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwmJikgPSBkZWZhdWx0OwogCisgICAgRW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFsJiBvcGVyYXRvcj0oY29uc3QgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJikgPSBk
ZWxldGU7CisgICAgRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBvcGVyYXRvcj0oRW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsJiYpID0gZGVmYXVsdDsKKwogICAgIGJvb2wgaXNFbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICBFbnVt
ZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIoKSB7IHJldHVybiBtX2VudW1lcmF0aW9u
TWVtYmVyOyB9CisgICAgc3RhdGljIEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCB3cmFwKExleGVy
OjpUb2tlbiYmIG9yaWdpbiwgU3RyaW5nJiYgbGVmdCwgU3RyaW5nJiYgcmlnaHQsIEVudW1lcmF0
aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uLCBFbnVtZXJhdGlvbk1lbWJlciYg
ZW51bWVyYXRpb25NZW1iZXIpCisgICAgeworICAgICAgICBFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwgcmVzdWx0KFdURk1vdmUob3JpZ2luKSwgV1RGTW92ZShsZWZ0KSwgV1RGTW92ZShyaWdodCkp
OworICAgICAgICByZXN1bHQubV9lbnVtZXJhdGlvbkRlZmluaXRpb24gPSAmZW51bWVyYXRpb25E
ZWZpbml0aW9uOworICAgICAgICByZXN1bHQubV9lbnVtZXJhdGlvbk1lbWJlciA9ICZlbnVtZXJh
dGlvbk1lbWJlcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBjb25zdCBT
dHJpbmcmIGxlZnQoKSBjb25zdCB7IHJldHVybiBtX2xlZnQ7IH0KKyAgICBjb25zdCBTdHJpbmcm
IHJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9yaWdodDsgfQorCisgICAgRW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFsIGNsb25lKCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gRW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsKExleGVyOjpUb2tlbihvcmlnaW4oKSksIFN0cmluZyhtX2xl
ZnQpLCBTdHJpbmcobV9yaWdodCkpOworICAgICAgICByZXN1bHQubV9lbnVtZXJhdGlvbk1lbWJl
ciA9IG1fZW51bWVyYXRpb25NZW1iZXI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgRW51bWVyYXRpb25EZWZpbml0aW9uKiBlbnVtZXJhdGlvbkRlZmluaXRpb24oKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fZW51bWVyYXRpb25EZWZpbml0aW9uOworICAgIH0KKworICAg
IEVudW1lcmF0aW9uRGVmaW5pdGlvbiogZW51bWVyYXRpb25EZWZpbml0aW9uKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2VudW1lcmF0aW9uRGVmaW5pdGlvbjsKKyAgICB9CisKKyAg
ICBFbnVtZXJhdGlvbk1lbWJlciogZW51bWVyYXRpb25NZW1iZXIoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fZW51bWVyYXRpb25NZW1iZXI7CisgICAgfQorCisgICAgRW51bWVyYXRpb25NZW1i
ZXIqIGVudW1lcmF0aW9uTWVtYmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Vu
dW1lcmF0aW9uTWVtYmVyOworICAgIH0KKworICAgIHZvaWQgc2V0RW51bWVyYXRpb25NZW1iZXIo
RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24sIEVudW1lcmF0aW9u
TWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikKKyAgICB7CisgICAgICAgIG1fZW51bWVyYXRpb25E
ZWZpbml0aW9uID0gJmVudW1lcmF0aW9uRGVmaW5pdGlvbjsKKyAgICAgICAgbV9lbnVtZXJhdGlv
bk1lbWJlciA9ICZlbnVtZXJhdGlvbk1lbWJlcjsKKyAgICB9CiAKIHByaXZhdGU6Ci0gICAgRW51
bWVyYXRpb25NZW1iZXImIG1fZW51bWVyYXRpb25NZW1iZXI7CisgICAgU3RyaW5nIG1fbGVmdDsK
KyAgICBTdHJpbmcgbV9yaWdodDsKKyAgICBFbnVtZXJhdGlvbkRlZmluaXRpb24qIG1fZW51bWVy
YXRpb25EZWZpbml0aW9uIHsgbnVsbHB0ciB9OworICAgIEVudW1lcmF0aW9uTWVtYmVyKiBtX2Vu
dW1lcmF0aW9uTWVtYmVyIHsgbnVsbHB0ciB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xW
YXJpYWJsZURlY2xhcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9BU1QvV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgKaW5kZXggYjQ0OTQ2MDJjZmJhYWIxMTM1
ZDcxNjIzNTZhMGEyMDg3MDEyMmViZS4uOWJlYjc1OGNjMzg5YzQwODQxZWMwNDRmMjZkYTE5MmUw
MDUxNzgwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaApAQCAtNjgsNiAr
NjgsNyBAQCBwdWJsaWM6CiAgICAgVW5uYW1lZFR5cGUqIHR5cGUoKSB7IHJldHVybiBtX3R5cGUg
PyAmc3RhdGljX2Nhc3Q8VW5uYW1lZFR5cGUmPigqbV90eXBlKSA6IG51bGxwdHI7IH0KICAgICBP
cHRpb25hbDxTZW1hbnRpYz4mIHNlbWFudGljKCkgeyByZXR1cm4gbV9zZW1hbnRpYzsgfQogICAg
IEV4cHJlc3Npb24qIGluaXRpYWxpemVyKCkgeyByZXR1cm4gbV9pbml0aWFsaXplciA/ICZzdGF0
aWNfY2FzdDxFeHByZXNzaW9uJj4oKm1faW5pdGlhbGl6ZXIpIDogbnVsbHB0cjsgfQorICAgIGJv
b2wgaXNBbm9ueW1vdXMoKSBjb25zdCB7IHJldHVybiBtX25hbWUuaXNOdWxsKCk7IH0KIAogcHJp
dmF0ZToKICAgICBMZXhlcjo6VG9rZW4gbV9vcmlnaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MmEx
MjU1YjQzOWU3ZWVjNThjNGU0NDZmMzdhNTUzOTUxNzk4YjdmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApAQCAt
MCwwICsxLDE2NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV0hMU0xDaGVja2VyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hM
U0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2lu
Y2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTENhbGxF
eHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDb21tYUV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG9XaGlsZUxv
b3AuaCIKKyNpbmNsdWRlICJXSExTTERvdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTEZv
ckxvb3AuaCIKKyNpbmNsdWRlICJXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oIgorI2luY2x1
ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEluZGV4RXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgIldITFNMTG9naWNhbEV4
cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgiCisjaW5j
bHVkZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgorI2luY2x1
ZGUgIldITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2aW5n
VHlwZS5oIgorI2luY2x1ZGUgIldITFNMUmV0dXJuLmgiCisjaW5jbHVkZSAiV0hMU0xTd2l0Y2hT
dGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFRlcm5hcnlFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitj
bGFzcyBQT0RDaGVja2VyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIFBPRENoZWNr
ZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5QT0RDaGVja2VyKCkgPSBkZWZhdWx0Owor
CisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25E
ZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoZW51bWVy
YXRpb25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc051bWJlcigpCisgICAgICAgICAgICAm
JiAhbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzVmVjdG9yKCkKKyAgICAgICAgICAgICYmICFuYXRp
dmVUeXBlRGVjbGFyYXRpb24uaXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVy
ZURlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdChzdHJ1
Y3R1cmVEZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmlu
aXRpb24mIHR5cGVEZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6
dmlzaXQodHlwZURlZmluaXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJh
eVR5cGUmIGFycmF5VHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0
KGFycmF5VHlwZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJikg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgfQorCisgICAgdm9pZCB2
aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAgICAgICBz
ZXRFcnJvcigpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0
eXBlUmVmZXJlbmNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVu
Y2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnR5cGVSZWZl
cmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgIH0KK307CisKK3N0YXRpYyBPcHRpb25hbDxBU1Q6
Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4
ZXIoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24sIEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlJiBmaXJzdEFyZ3VtZW50LCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQorewor
ICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1
ZTsKKyAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+
KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGZpcnN0QXJndW1lbnQuYWRk
cmVzc1NwYWNlKCksIGZpcnN0QXJndW1lbnQuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5hcHBl
bmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5v
cmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGZpcnN0QXJndW1lbnQuY2xvbmUoKSB9LCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFw
cGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9u
Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MudWludFR5
cGUoKSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcmV0
dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVC
bG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0
b3ImW10iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJz
KSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKK30KKworc3RhdGlj
IE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZVdpdGhPcGVy
YXRvckxlbmd0aChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbiwgQVNUOjpVbm5h
bWVkVHlwZSYgZmlyc3RBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3sK
KyAgICBib29sIGlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgIGJvb2wgaXNPcGVyYXRvciA9IHRy
dWU7CisgICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVy
OjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MudWludFR5cGUoKSk7
CisgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgIHBhcmFtZXRl
cnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBmaXJzdEFyZ3VtZW50LmNsb25l
KCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcmV0dXJu
IEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24o
TGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9j
aygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3Iu
bGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFyYW1ldGVy
cyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7Cit9CisKK3N0YXRp
YyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVXaXRoUmVm
ZXJlbmNlQ29tcGFyYXRvcihBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbiwgUmVz
b2x2aW5nVHlwZSYgZmlyc3RBcmd1bWVudCwgUmVzb2x2aW5nVHlwZSYgc2Vjb25kQXJndW1lbnQs
IGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQg
PSBmYWxzZTsKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGF1dG8gcmV0dXJuVHlw
ZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24u
b3JpZ2luKCkpLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOworICAgIGF1dG8gYXJndW1lbnRUeXBl
ID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPiYgdW5uYW1lZFR5cGUpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAg
ICAgIHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKKyAgICB9LCBbJl0oUmVmPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAg
ICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
IHsKKyAgICAgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKKyAgICAgICAgfSwg
WyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4geworICAgICAgICAgICAgLy8gV2UgZW5jb3VudGVyZWQgIm51bGwgPT0gbnVsbCIu
CisgICAgICAgICAgICAvLyBUaGUgdHlwZSBpc24ndCBvYnNlcnZhYmxlLCBzbyB3ZSBjYW4gcGlj
ayB3aGF0ZXZlciB3ZSB3YW50LgorICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2FuIHByb2Jh
Ymx5IGJlIGdlbmVyYWxpemVkLCB1c2luZyB0aGUgInByZWZlcnJlZCB0eXBlIiBpbmZyYXN0cnVj
dHVyZSB1c2VkIGJ5IGdlbmVyaWMgbGl0ZXJhbHMKKyAgICAgICAgICAgIHJldHVybiBBU1Q6OlR5
cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwg
aW50cmluc2ljcy5pbnRUeXBlKCkpOworICAgICAgICB9KSwgc2Vjb25kQXJndW1lbnQpOworICAg
IH0pLCBmaXJzdEFyZ3VtZW50KTsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFt
ZXRlcnM7CisgICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExl
eGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7
IGFyZ3VtZW50VHlwZS0+Y2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51
bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24o
TGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCks
IHsgV1RGTW92ZShhcmd1bWVudFR5cGUpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCkpOworICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24oQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4o
KSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJldHVyblR5
cGUpLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwg
V1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmlj
dGVkKTsKK30KKworc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bj4gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVz
c2lvbiwgY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+
JiB0eXBlcywgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3sKKyAgICBpZiAoY2FsbEV4
cHJlc3Npb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIgJiYgdHlwZXMuc2l6ZSgpID09IDIpIHsK
KyAgICAgICAgYXV0byogZmlyc3RBcmd1bWVudEFycmF5UmVmID0gV1RGOjp2aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+
IEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlKiB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJh
eVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlw
ZSkpKQorICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpOworICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0sIFtdKFJlZjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mKSAtPiBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSogeworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0pLCB0eXBlc1swXS5nZXQoKSk7CisgICAgICAgIGJv
b2wgc2Vjb25kQXJndW1lbnRJc1VpbnQgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZd
KFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgeworICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoZXMoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVu
bmFtZWRUeXBlKSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICAgICAgfSwgWyZdKFJlZjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29s
IHsKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJs
ZVR5cGUoKS5jYW5SZXNvbHZlKGludHJpbnNpY3MudWludFR5cGUoKSk7CisgICAgICAgIH0pLCB0
eXBlc1sxXS5nZXQoKSk7CisgICAgICAgIGlmIChmaXJzdEFyZ3VtZW50QXJyYXlSZWYgJiYgc2Vj
b25kQXJndW1lbnRJc1VpbnQpCisgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhPcGVyYXRv
ckFuZGVySW5kZXhlcihjYWxsRXhwcmVzc2lvbiwgKmZpcnN0QXJndW1lbnRBcnJheVJlZiwgaW50
cmluc2ljcyk7CisgICAgfSBlbHNlIGlmIChjYWxsRXhwcmVzc2lvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yLmxlbmd0aCIgJiYgdHlwZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgYXV0byogZmlyc3RB
cmd1bWVudFJlZmVyZW5jZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7
CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0
PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpIHx8IGlzPEFTVDo6QXJyYXlUeXBlPihz
dGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5cGUpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSk7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfSwgW10oUmVmPFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlPiYpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICB9KSwgdHlwZXNbMF0uZ2V0KCkpOworICAgICAgICBpZiAo
Zmlyc3RBcmd1bWVudFJlZmVyZW5jZSkKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZlV2l0aE9w
ZXJhdG9yTGVuZ3RoKGNhbGxFeHByZXNzaW9uLCAqZmlyc3RBcmd1bWVudFJlZmVyZW5jZSwgaW50
cmluc2ljcyk7CisgICAgfSBlbHNlIGlmIChjYWxsRXhwcmVzc2lvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yPT0iICYmIHR5cGVzLnNpemUoKSA9PSAyKSB7CisgICAgICAgIGF1dG8gaXNBY2NlcHRhYmxl
ID0gW10oUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAg
ICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVy
biBpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1
bm5hbWVkVHlwZSkpOworICAgICAgICAgICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAgICAgICAgICAgICAg
IHJldHVybiBpczxBU1Q6Ok51bGxMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Ut
PnJlc29sdmFibGVUeXBlKCkpOworICAgICAgICAgICAgfSksIHJlc29sdmluZ1R5cGUpOworICAg
ICAgICB9OworICAgICAgICBpZiAoaXNBY2NlcHRhYmxlKHR5cGVzWzBdLmdldCgpKSAmJiBpc0Fj
Y2VwdGFibGUodHlwZXNbMV0uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVXaXRo
UmVmZXJlbmNlQ29tcGFyYXRvcihjYWxsRXhwcmVzc2lvbiwgdHlwZXNbMF0uZ2V0KCksIHR5cGVz
WzFdLmdldCgpLCBpbnRyaW5zaWNzKTsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
K30KKworLy8gRklYTUU6IFdlIG5lZWQgdG8gY2hlY2sgZXJyb3IoKSBiZWZvcmUgYWxsIHRoZSBB
U1NFUlQoaXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsgY2hlY2tzLgorY2xhc3MgQ2hlY2tl
ciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBDaGVja2VyKGNvbnN0IEludHJpbnNp
Y3MmIGludHJpbnNpY3MsIFByb2dyYW0mIHByb2dyYW0pCisgICAgICAgIDogbV9pbnRyaW5zaWNz
KGludHJpbnNpY3MpCisgICAgICAgICwgbV9wcm9ncmFtKHByb2dyYW0pCisgICAgeworICAgIH0K
KworICAgIH5DaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChQcm9ncmFtJiBw
cm9ncmFtKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvJiB0eXBlRGVmaW5pdGlv
biA6IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoc3RhdGljX2Nhc3Q8QVNUOjpUeXBlRGVmaW5pdGlvbiY+KHR5cGVEZWZpbml0aW9uKSk7
CisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJlRGVmaW5pdGlvbiA6IHByb2dyYW0uc3RydWN0
dXJlRGVmaW5pdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdGF0aWNf
Y2FzdDxBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mPihzdHJ1Y3R1cmVEZWZpbml0aW9uKSk7Cisg
ICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uIDogcHJvZ3JhbS5lbnVtZXJh
dGlvbkRlZmluaXRpb25zKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGlj
X2Nhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mPihlbnVtZXJhdGlvbkRlZmluaXRpb24p
KTsKKyAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gOiBwcm9ncmFtLm5h
dGl2ZVR5cGVEZWNsYXJhdGlvbnMoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChz
dGF0aWNfY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiY+KG5hdGl2ZVR5cGVEZWNsYXJh
dGlvbikpOworCisgICAgICAgIGZvciAoYXV0byYgZnVuY3Rpb25EZWZpbml0aW9uIDogcHJvZ3Jh
bS5mdW5jdGlvbkRlZmluaXRpb25zKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
c3RhdGljX2Nhc3Q8QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mPihmdW5jdGlvbkRlZmluaXRpb24p
KTsKKyAgICAgICAgZm9yIChhdXRvJiBuYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uIDogcHJvZ3Jh
bS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiY+KG5hdGl2
ZUZ1bmN0aW9uRGVjbGFyYXRpb24pKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBjaGVj
a1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5p
dGlvbikKKyAgICB7CisgICAgICAgIHN3aXRjaCAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBv
aW50VHlwZSgpKSB7CisgICAgICAgIGNhc2UgQVNUOjpGdW5jdGlvbkRlZmluaXRpb246OkVudHJ5
UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgICAgICByZXR1cm4gIW1fdmVydGV4RW50cnlQb2lu
dHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpLmlzTmV3RW50cnk7CisgICAgICAgIGNh
c2UgQVNUOjpGdW5jdGlvbkRlZmluaXRpb246OkVudHJ5UG9pbnRUeXBlOjpGcmFnbWVudDoKKyAg
ICAgICAgICAgIHJldHVybiAhbV9mcmFnbWVudEVudHJ5UG9pbnRzLmFkZChmdW5jdGlvbkRlZmlu
aXRpb24ubmFtZSgpKS5pc05ld0VudHJ5OworICAgICAgICBjYXNlIEFTVDo6RnVuY3Rpb25EZWZp
bml0aW9uOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZToKKyAgICAgICAgICAgIHJldHVybiAhbV9j
b21wdXRlRW50cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpLmlzTmV3RW50
cnk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGNoZWNrU2VtYW50aWNzKEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCisgICAgeworICAgICAgICBhdXRv
IGVudHJ5UG9pbnRJdGVtcyA9IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhtX2ludHJpbnNpY3MsIGZ1
bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgIGlmICghZW50cnlQb2ludEl0ZW1zKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvIGlucHV0SXRlbXMgPSBXVEZNb3ZlKGVu
dHJ5UG9pbnRJdGVtcy0+aW5wdXRzKTsKKyAgICAgICAgYXV0byBvdXRwdXRJdGVtcyA9IFdURk1v
dmUoZW50cnlQb2ludEl0ZW1zLT5vdXRwdXRzKTsKKworICAgICAgICB7CisgICAgICAgICAgICBh
dXRvIGNoZWNrRHVwbGljYXRlU2VtYW50aWNzID0gWyZdKGNvbnN0IFZlY3RvcjxFbnRyeVBvaW50
SXRlbT4mIGl0ZW1zKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGl0ZW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGogPSBpICsgMTsgaiA8IGl0ZW1zLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaXRlbXNbaV0uc2VtYW50aWMgPT0gaXRlbXNbal0uc2VtYW50aWMpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmICghY2hlY2tEdXBsaWNhdGVTZW1hbnRpY3MoaW5w
dXRJdGVtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYg
KCFjaGVja0R1cGxpY2F0ZVNlbWFudGljcyhvdXRwdXRJdGVtcykpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byBj
aGVja1NlbWFudGljVHlwZXMgPSBbJl0oY29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRl
bXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gYWNjZXB0YWJsZSA9IFdURjo6dmlzaXQoV1RGOjpt
YWtlVmlzaXRvcihbJl0oY29uc3QgQVNUOjpCYXNlU2VtYW50aWMmIHNlbWFudGljKSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZW1hbnRpYy5pc0FjY2VwdGFibGVU
eXBlKGl0ZW0udW5uYW1lZFR5cGUsIG1faW50cmluc2ljcyk7CisgICAgICAgICAgICAgICAgICAg
IH0pLCBpdGVtLnNlbWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhY2NlcHRhYmxl
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBpZiAoIWNoZWNrU2VtYW50aWNUeXBlcyhpbnB1dEl0ZW1zKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNUeXBlcyhvdXRw
dXRJdGVtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byBjaGVja1NlbWFudGljRm9yU2hhZGVyVHlwZSA9IFsm
XShjb25zdCBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpdGVtcywgQVNUOjpCYXNlU2VtYW50aWM6
OlNoYWRlckl0ZW1EaXJlY3Rpb24gZGlyZWN0aW9uKSAtPiBib29sIHsKKyAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtcykgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGFj
Y2VwdGFibGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEFTVDo6QmFz
ZVNlbWFudGljJiBzZW1hbnRpYykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc2VtYW50aWMuaXNBY2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihkaXJlY3Rp
b24sIGZ1bmN0aW9uRGVmaW5pdGlvbik7CisgICAgICAgICAgICAgICAgICAgIH0pLCBpdGVtLnNl
bWFudGljKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhY2NlcHRhYmxlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoIWNo
ZWNrU2VtYW50aWNGb3JTaGFkZXJUeXBlKGlucHV0SXRlbXMsIEFTVDo6QmFzZVNlbWFudGljOjpT
aGFkZXJJdGVtRGlyZWN0aW9uOjpJbnB1dCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgaWYgKCFjaGVja1NlbWFudGljRm9yU2hhZGVyVHlwZShvdXRwdXRJdGVt
cywgQVNUOjpCYXNlU2VtYW50aWM6OlNoYWRlckl0ZW1EaXJlY3Rpb246Ok91dHB1dCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgeworICAgICAg
ICAgICAgYXV0byBjaGVja1BPRERhdGEgPSBbJl0oY29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVt
PiYgaXRlbXMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGl0
ZW1zKSB7CisgICAgICAgICAgICAgICAgICAgIFBPRENoZWNrZXIgcG9kQ2hlY2tlcjsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KGl0ZW0udW5uYW1lZFR5cGUp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQo
ZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oaXRlbS51bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUo
KSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPihpdGVtLnVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvZENoZWNr
ZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihp
dGVtLnVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpB
cnJheVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICBpZiAocG9kQ2hlY2tlci5lcnJvcigpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAoIWNoZWNrUE9ERGF0YShpbnB1dEl0
ZW1zKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWNo
ZWNrUE9ERGF0YShvdXRwdXRJdGVtcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBjaGVj
a09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9u
RGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIGVudW0gY2xhc3MgQ2hlY2tLaW5kIHsKKyAgICAg
ICAgICAgIEluZGV4LAorICAgICAgICAgICAgRG90CisgICAgICAgIH07CisKKyAgICAgICAgYXV0
byBjaGVja0dldHRlciA9IFsmXShDaGVja0tpbmQga2luZCkgLT4gYm9vbCB7CisgICAgICAgICAg
ICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6OkluZGV4
ID8gMiA6IDE7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGlm
IChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKSB7CisgICAgICAgICAgICAgICAgYXV0
byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOwor
ICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAgIGF1dG8gY2hlY2tTZXR0ZXIg
PSBbJl0oQ2hlY2tLaW5kIGtpbmQpIC0+IGJvb2wgeworICAgICAgICAgICAgc2l6ZV90IG51bUV4
cGVjdGVkUGFyYW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCA/IDMgOiAyOworICAg
ICAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IG51
bUV4cGVjdGVkUGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBhdXRvJiBmaXJzdEFyZ3VtZW50VW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRp
b24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgaWYg
KGlzPEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0QXJndW1lbnRVbmlmeU5vZGUpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPihm
aXJzdEFyZ3VtZW50VW5pZnlOb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2lu
dGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25EZWZpbml0
aW9uLnR5cGUoKSwgKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBhdXRvJiB2YWx1ZVR5
cGUgPSAqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVtudW1FeHBlY3RlZFBhcmFtZXRl
cnMgLSAxXS50eXBlKCk7CisgICAgICAgICAgICBhdXRvIGdldHRlck5hbWUgPSBmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpLnN1YnN0cmluZygwLCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLmxl
bmd0aCgpIC0gMSk7CisgICAgICAgICAgICBhdXRvKiBnZXR0ZXJGdW5jcyA9IG1fcHJvZ3JhbS5u
YW1lQ29udGV4dCgpLmdldEZ1bmN0aW9ucyhnZXR0ZXJOYW1lKTsKKyAgICAgICAgICAgIGlmICgh
Z2V0dGVyRnVuY3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
VmVjdG9yPFJlc29sdmluZ1R5cGU+IGFyZ3VtZW50VHlwZXM7CisgICAgICAgICAgICBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gYXJndW1lbnRUeXBlUmVmZXJl
bmNlczsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtRXhwZWN0ZWRQYXJh
bWV0ZXJzIC0gMTsgKytpKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKCgq
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpLT5jbG9uZSgpKTsKKyAg
ICAgICAgICAgIGZvciAoYXV0byYgYXJndW1lbnRUeXBlIDogYXJndW1lbnRUeXBlcykKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLmFwcGVuZChhcmd1bWVudFR5cGUpOwor
ICAgICAgICAgICAgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5hbWVkVHlw
ZT4+IGNhc3RSZXR1cm5UeXBlID0gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgYXV0byogb3Zl
cmxvYWQgPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoKmdldHRlckZ1bmNzLCBhcmd1bWVu
dFR5cGVSZWZlcmVuY2VzLCBjYXN0UmV0dXJuVHlwZSk7CisgICAgICAgICAgICBpZiAoIW92ZXJs
b2FkKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8mIHJl
c3VsdFR5cGUgPSBvdmVybG9hZC0+dHlwZSgpOworICAgICAgICAgICAgaWYgKCFtYXRjaGVzKHJl
c3VsdFR5cGUsIHZhbHVlVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBjaGVja0Fu
ZGVyID0gWyZdKENoZWNrS2luZCBraW5kKSAtPiBib29sIHsKKyAgICAgICAgICAgIHNpemVfdCBu
dW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6SW5kZXggPyAyIDogMTsK
KyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAh
PSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGZ1bmN0aW9u
RGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFpczxB
U1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6
OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgICAgIGlmICghaXM8QVNUOjpQ
b2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXV0byYg
dW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSkt
PnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4o
dW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5p
ZnlOb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFt
ZWRUeXBlKSAmJiAhaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAo
IWZ1bmN0aW9uRGVmaW5pdGlvbi5pc09wZXJhdG9yKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5pc0Nhc3QoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3IrKyIKKyAgICAgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0g
Im9wZXJhdG9yLS0iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFt
ZXRlcnMoKS5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBpZiAoIW1hdGNoZXMoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0u
dHlwZSgpLCBmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IrIgorICAgICAgICAgICAg
fHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ItIikgeworICAgICAgICAg
ICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IDEKKyAgICAg
ICAgICAgICAgICAmJiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSAy
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJv
cGVyYXRvcioiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJv
cGVyYXRvci8iCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJv
cGVyYXRvciUiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJv
cGVyYXRvciYiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJv
cGVyYXRvcnwiCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJv
cGVyYXRvcl4iCisgICAgICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJv
cGVyYXRvcjw8IgorICAgICAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAi
b3ByZWF0b3I+PiIpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpLnNpemUoKSAhPSAyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmlu
aXRpb24ubmFtZSgpID09ICJvcGVyYXRvcn4iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rpb25E
ZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I9PSIKKyAgICAgICAgICAg
IHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPCIKKyAgICAgICAgICAg
IHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPD0iCisgICAgICAgICAg
ICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcj4iCisgICAgICAgICAg
ICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcj49IikgeworICAgICAg
ICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IDIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFtYXRjaGVzKGZ1
bmN0aW9uRGVmaW5pdGlvbi50eXBlKCksIG1faW50cmluc2ljcy5ib29sVHlwZSgpKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3Jb
XSIpIHsKKyAgICAgICAgICAgIGlmICghY2hlY2tHZXR0ZXIoQ2hlY2tLaW5kOjpJbmRleCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yW109IikgeworICAgICAgICAgICAgaWYgKCFjaGVja1NldHRlcihDaGVja0tpbmQ6OkluZGV4
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3ImW10iKSB7CisgICAgICAgICAgICBpZiAoIWNoZWNrQW5kZXIoQ2hlY2tLaW5kOjpJ
bmRleCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCku
c3RhcnRzV2l0aCgib3BlcmF0b3IuIikpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbkRlZmlu
aXRpb24ubmFtZSgpLmVuZHNXaXRoKCI9IikpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNr
U2V0dGVyKENoZWNrS2luZDo6RG90KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNoZWNrR2V0dGVy
KENoZWNrS2luZDo6RG90KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgib3BlcmF0b3ImLiIpKSB7
CisgICAgICAgICAgICBpZiAoIWNoZWNrQW5kZXIoQ2hlY2tLaW5kOjpEb3QpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVu
Y3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICAgICAg
ICAgIGlmICghY2hlY2tTaGFkZXJUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKKyAgICAgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY3MoZnVuY3Rpb25EZWZpbml0aW9uKSkg
eworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghY2hlY2tPcGVyYXRvck92ZXJs
b2FkKGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
ZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVy
YXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoIWVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpIHsKKyAgICAgICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgYSBudWxsIGJhc2UgdHlwZS4KKyAgICAgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tFcnJvckFu
ZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPigqZW51bWVyYXRpb25EZWZpbml0
aW9uLnR5cGUoKSkpOworCisgICAgICAgIGF1dG8mIGJhc2VUeXBlID0gc3RhdGljX2Nhc3Q8QVNU
OjpVbm5hbWVkVHlwZSY+KCplbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpKS51bmlmeU5vZGUo
KTsKKworICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VUeXBlKSkgeworICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBhdXRvJiB1bm5hbWVkQmFzZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VU
eXBlKTsKKyAgICAgICAgaWYgKCFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRCYXNlKSkg
eworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlQmFzZSA9IGRvd25jYXN0PEFTVDo6VHlwZVJl
ZmVyZW5jZT4odW5uYW1lZEJhc2UpOworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZUJhc2Uu
cmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBpZiAoIWlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uPigqdHlwZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpKSB7CisgICAgICAgICAgICBz
ZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8m
IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uPigqdHlwZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBpZiAoIW5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5pc0ludCgpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBlbnVtZXJhdGlv
bk1lbWJlcnMgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24uZW51bWVyYXRpb25NZW1iZXJzKCk7CisK
KyAgICAgICAgZm9yIChhdXRvJiBtZW1iZXIgOiBlbnVtZXJhdGlvbk1lbWJlcnMpIHsKKyAgICAg
ICAgICAgIGlmICghbWVtYmVyLmdldCgpLnZhbHVlKCkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIGJvb2wgc3VjY2VzczsKKyAgICAgICAgICAgIG1lbWJlci5nZXQo
KS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShhdXRvJiB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh2YWx1ZSk7CisgICAgICAgICAgICAgICAg
YXV0byBpdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZ2YWx1ZSk7CisgICAgICAgICAgICAgICAg
QVNTRVJUKGl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgICAgICAgICAgc3Vj
Y2VzcyA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBtYXRjaGVzKHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSks
IGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CisgICAgICAgICAgICAgICAgfSwgWyZdKFJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlJiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdChl
bnVtZXJhdGlvbkRlZmluaXRpb24sIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLnJlc29sdmFibGVU
eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9KSwgaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAg
ICAgIH0pKTsKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaW50NjRfdCBuZXh0VmFsdWUgPSAwOworICAgICAgICBmb3IgKGF1dG8m
IG1lbWJlciA6IGVudW1lcmF0aW9uTWVtYmVycykgeworICAgICAgICAgICAgaWYgKG1lbWJlci5n
ZXQoKS52YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAgICAgICAg
ICAgICAgICBtZW1iZXIuZ2V0KCkudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
QVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAg
ICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZUZvclNlbGVjdGVkVHlwZSgpOworICAgICAg
ICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50
ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bnNpZ25lZEludGVn
ZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCk7CisgICAgICAgICAgICAgICAgfSwgWyZd
KEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
fSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgIG5leHRWYWx1ZSA9IG5h
dGl2ZVR5cGVEZWNsYXJhdGlvbi5zdWNjZXNzb3IoKSh2YWx1ZSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIG1lbWJlci5nZXQoKS5zZXRWYWx1ZShBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbihBU1Q6OkludGVnZXJMaXRlcmFsKExleGVyOjpUb2tlbihtZW1iZXIuZ2V0KCku
b3JpZ2luKCkpLCBuZXh0VmFsdWUpKSk7CisgICAgICAgICAgICAgICAgbmV4dFZhbHVlID0gbmF0
aXZlVHlwZURlY2xhcmF0aW9uLnN1Y2Nlc3NvcigpKG5leHRWYWx1ZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudW1lcmF0aW9u
TWVtYmVycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byYgbWVtYmVyID0gZW51bWVy
YXRpb25NZW1iZXJzW2ldLmdldCgpOworICAgICAgICAgICAgQVNTRVJUKG1lbWJlci52YWx1ZSgp
KTsKKyAgICAgICAgICAgIGludDY0X3QgdmFsdWU7CisgICAgICAgICAgICBtZW1iZXIudmFsdWUo
KS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdl
ckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGludGVnZXJMaXRlcmFsLnZhbHVl
KCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNp
Z25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB1bnNpZ25lZElu
dGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVy
YWwmKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJikgewor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSwgWyZd
KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJikgeworICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaiA9IGkgKyAxOyBqIDwgZW51bWVyYXRpb25NZW1iZXJzLnNpemUoKTsgKytqKSB7CisgICAg
ICAgICAgICAgICAgYXV0byYgb3RoZXJNZW1iZXIgPSBlbnVtZXJhdGlvbk1lbWJlcnNbal0uZ2V0
KCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG90aGVyTWVtYmVyLnZhbHVlKCkpOworICAgICAg
ICAgICAgICAgIGJvb2wgZmFpbCA9IGZhbHNlOworICAgICAgICAgICAgICAgIG90aGVyTWVtYmVy
LnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwm
IGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgIGZhaWwgPSB2YWx1ZSA9PSBp
bnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZmFpbCA9IHZhbHVlID09IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsK
KyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmKSB7CisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0sIFsmXShB
U1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
fSwgWyZdKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJikgeworICAgICAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9KSk7CisgICAgICAg
ICAgICAgICAgaWYgKGZhaWwpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZm91bmRaZXJvID0gZmFsc2U7CisgICAgICAg
IGZvciAoYXV0byYgbWVtYmVyIDogZW51bWVyYXRpb25NZW1iZXJzKSB7CisgICAgICAgICAgICBB
U1NFUlQobWVtYmVyLmdldCgpLnZhbHVlKCkpOworICAgICAgICAgICAgbWVtYmVyLmdldCgpLnZh
bHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGlu
dGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpKQorICAgICAgICAgICAgICAgICAgICBmb3VuZFplcm8gPSB0cnVlOworICAgICAgICAgICAg
fSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCkgeworICAgICAgICAgICAgICAgIGlmICghdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgp
KQorICAgICAgICAgICAgICAgICAgICBmb3VuZFplcm8gPSB0cnVlOworICAgICAgICAgICAgfSwg
WyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpC
b29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0pKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWZvdW5kWmVybykgeworICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdmlz
aXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworCisgICAgICAgIGNo
ZWNrRXJyb3JBbmRWaXNpdCh0eXBlUmVmZXJlbmNlKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0
KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi50
eXBlKCkpOyAvLyBGSVhNRTogTWFrZSB0aGlzIHdvcmsgd2l0aCBhbm9ueW1vdXMgdmFyaWFibGVz
IHdoaWNoIGRvbid0IGhhdmUgdHlwZXMuCisgICAgICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9u
LmluaXRpYWxpemVyKCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGxoc1R5cGUgPSAqdmFyaWFibGVE
ZWNsYXJhdGlvbi50eXBlKCk7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlh
YmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSk7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9y
ID0gbV90eXBlTWFwLmZpbmQodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICAg
ICAgYXV0byYgcmhzID0gaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgYXV0byBzdWNjZXNz
ID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0
Y2hlcyhsaHNUeXBlLCBzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5cGUp
KTsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KGxoc1R5cGUsIHJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgICAgICAgICB9KSwgcmhzKTsKKyAgICAg
ICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVz
c2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChhc3NpZ25t
ZW50RXhwcmVzc2lvbi5sZWZ0KCkpOworICAgICAgICBhdXRvIGxlZnRJdGVyYXRvciA9IG1fdHlw
ZU1hcC5maW5kKCZhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCkpOworICAgICAgICBBU1NFUlQo
bGVmdEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIGxoc1R5cGUg
PSBsZWZ0SXRlcmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvIGFkZHJlc3NTcGFjZUl0ZXJhdG9y
ID0gbV9hZGRyZXNzU3BhY2VNYXAuZmluZCgmYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgpKTsK
KyAgICAgICAgQVNTRVJUKGFkZHJlc3NTcGFjZUl0ZXJhdG9yICE9IG1fYWRkcmVzc1NwYWNlTWFw
LmVuZCgpKTsKKyAgICAgICAgaWYgKCFhZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUpIHsKKyAg
ICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0KCkpOwor
ICAgICAgICBhdXRvIHJpZ2h0SXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmYXNzaWdubWVudEV4
cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIEFTU0VSVChyaWdodEl0ZXJhdG9yICE9IG1fdHlw
ZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIHJoc1R5cGUgPSByaWdodEl0ZXJhdG9yLT52YWx1
ZTsKKyAgICAgICAgYXV0byByZXN1bHRUeXBlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IE9wdGlvbmFsPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByaWdodCkg
LT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAgICAg
ICAgaWYgKG1hdGNoZXMoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KGxlZnQpLCBzdGF0
aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4ocmlnaHQpKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGxlZnQtPmNsb25lKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdo
dCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUm
PihsZWZ0KSwgcmlnaHQtPnJlc29sdmFibGVUeXBlKCkpOworICAgICAgICAgICAgfSksIHJoc1R5
cGUpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGVmdCkg
LT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQoc3RhdGljX2Nhc3Q8QVNU
OjpVbm5hbWVkVHlwZSY+KHJpZ2h0KSwgbGVmdC0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAg
ICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmlnaHQpIC0+IE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICAgICAgICAgIHJldHVy
biBtYXRjaEFuZENvbW1pdChsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpLCByaWdodC0+cmVzb2x2YWJs
ZVR5cGUoKSk7CisgICAgICAgICAgICB9KSwgcmhzVHlwZSk7CisgICAgICAgIH0pLCBsaHNUeXBl
KTsKKyAgICAgICAgaWYgKCFyZXN1bHRUeXBlKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV90eXBlTWFwLmFkZCgmYXNzaWdubWVudEV4cHJlc3Npb24sIFdURk1vdmUoKnJlc3VsdFR5cGUp
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5
KTsKKyAgICAgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1h
cC5hZGQoJmFzc2lnbm1lbnRFeHByZXNzaW9uLCBXVEY6Om51bGxvcHQpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0Lmlz
TmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uJiByZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVl
KCkpOworICAgICAgICBhdXRvIGxWYWx1ZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJnJlYWRN
b2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgICAgICBBU1NFUlQobFZhbHVlSXRl
cmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgbGhzVHlwZSA9IGxWYWx1
ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byBhZGRyZXNzU3BhY2VJdGVyYXRvciA9IG1f
YWRkcmVzc1NwYWNlTWFwLmZpbmQoJnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCkp
OworICAgICAgICBBU1NFUlQoYWRkcmVzc1NwYWNlSXRlcmF0b3IgIT0gbV9hZGRyZXNzU3BhY2VN
YXAuZW5kKCkpOworICAgICAgICBpZiAoIWFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZSkgewor
ICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggdGhlIFJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24ncyBBbm9ueW1vdXNWYXJpYWJsZXMuCisgICAgICAgIEFTU0VSVChy
ZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhwcmVzc2lvbigpKTsKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KCpyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVlRXhw
cmVzc2lvbigpKTsKKyAgICAgICAgYXV0byBuZXdWYWx1ZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZp
bmQocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSk7CisgICAg
ICAgIEFTU0VSVChuZXdWYWx1ZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAg
IGF1dG8mIG5ld1ZhbHVlVHlwZSA9IG5ld1ZhbHVlSXRlcmF0b3ItPnZhbHVlOworICAgICAgICBh
dXRvIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPiYgbGVmdCkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gV1RG
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4m
IHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyhzdGF0aWNf
Y2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4obGVmdCksIHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5
cGUmPihyaWdodCkpOworICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZT4mIHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KGxl
ZnQpLCByaWdodC0+cmVzb2x2YWJsZVR5cGUoKSkpOworICAgICAgICAgICAgfSksIG5ld1ZhbHVl
VHlwZSk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0
KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmlnaHQpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdChzdGF0
aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4ocmlnaHQpLCBsZWZ0LT5yZXNvbHZhYmxlVHlwZSgp
KSk7CisgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmln
aHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPiht
YXRjaEFuZENvbW1pdChsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpLCByaWdodC0+cmVzb2x2YWJsZVR5
cGUoKSkpOworICAgICAgICAgICAgfSksIG5ld1ZhbHVlVHlwZSk7CisgICAgICAgIH0pLCBsaHNU
eXBlKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChyZWFkTW9kaWZ5
V3JpdGVFeHByZXNzaW9uLnJlc3VsdEV4cHJlc3Npb24oKSk7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHByZXNzaW9uKCkpOwor
ICAgICAgICBhdXRvIHJlc3VsdEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQocmVhZE1vZGlmeVdy
aXRlRXhwcmVzc2lvbi5yZXN1bHRFeHByZXNzaW9uKCkpOworICAgICAgICBBU1NFUlQocmVzdWx0
SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgcmVzdWx0VHlwZSA9
IHJlc3VsdEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJlc3VsdCkgeworICAgICAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZyZWFkTW9kaWZ5V3JpdGVFeHByZXNz
aW9uLCByZXN1bHQtPmNsb25lKCkpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1
bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZT4mIHJlc3VsdCkgeworICAgICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X3R5cGVNYXAuYWRkKCZyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLCByZXN1bHQuY29weVJlZigp
KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdF
bnRyeSk7CisgICAgICAgIH0pLCByZXN1bHRUeXBlKTsKKyAgICAgICAgYXV0byBhZGRyZXNzU3Bh
Y2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJnJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24sIFdURjo6bnVsbG9wdCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNl
QWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVyZWZlcmVuY2VFeHBy
ZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRlcmVm
ZXJlbmNlRXhwcmVzc2lvbi5wb2ludGVyKCkpOworICAgICAgICBhdXRvIHBvaW50ZXJJdGVyYXRv
ciA9IG1fdHlwZU1hcC5maW5kKCZkZXJlZmVyZW5jZUV4cHJlc3Npb24ucG9pbnRlcigpKTsKKyAg
ICAgICAgQVNTRVJUKHBvaW50ZXJJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAg
ICBhdXRvJiB0eXBlID0gcG9pbnRlckl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgYXV0byogcG9p
bnRlclR5cGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiB0eXBlKSAtPiBBU1Q6OlBvaW50ZXJUeXBlKiB7CisgICAgICAgICAgICBh
dXRvJiB1bmlmeU5vZGUgPSB0eXBlLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGlmICghaXM8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5h
bWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgIGlmICghaXM8QVNUOjpQb2ludGVyVHlw
ZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAgICAgcmV0dXJuICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSk7Cisg
ICAgICAgIH0sIFtdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHR5cGUpIC0+IEFTVDo6
UG9pbnRlclR5cGUqIHsKKyAgICAgICAgICAgIGF1dG8qIHJlc29sdmVkVHlwZSA9IHR5cGUtPnJl
c29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCk7CisgICAgICAgICAgICBpZiAoIXJlc29sdmVk
VHlwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGF1dG8m
IHVuaWZ5Tm9kZSA9IHJlc29sdmVkVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBpZiAo
IWlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6
VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICBpZiAoIWlzPEFTVDo6UG9pbnRl
clR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUp
OworICAgICAgICB9KSwgdHlwZSk7CisgICAgICAgIGlmICghcG9pbnRlclR5cGUpIHsKKyAgICAg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZkZXJlZmVyZW5jZUV4cHJlc3Npb24s
IHBvaW50ZXJUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQs
IGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1
bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9pbnRl
clR5cGUtPmFkZHJlc3NTcGFjZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRyZXNzU3Bh
Y2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtlUG9pbnRlckV4
cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFr
ZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICAgICAgYXV0byBsVmFsdWVJdGVyYXRv
ciA9IG1fdHlwZU1hcC5maW5kKCZtYWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCkpOworICAg
ICAgICBBU1NFUlQobFZhbHVlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAg
YXV0byYgZWxlbWVudFR5cGUgPSBsVmFsdWVJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGF1dG8q
IGxWYWx1ZVR5cGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CisgICAgICAgICAg
ICByZXR1cm4gJnN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih0eXBlKTsKKyAgICAgICAg
fSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVk
VHlwZSogeworICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBjb21taXQoKSB0aGUgdHlw
ZT8KKyAgICAgICAgICAgIHJldHVybiB0eXBlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlw
ZSgpOworICAgICAgICB9KSwgZWxlbWVudFR5cGUpOworICAgICAgICBpZiAoIWxWYWx1ZVR5cGUp
IHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgYXV0byBhZGRyZXNzU3BhY2VJdGVyYXRvciA9IG1fYWRkcmVzc1NwYWNlTWFw
LmZpbmQoJm1ha2VQb2ludGVyRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgICAgIEFTU0VSVChh
ZGRyZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7CisgICAgICAg
IGlmICghYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlKSB7CisgICAgICAgICAgICBzZXRFcnJv
cigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8gYWRkUmVz
dWx0ID0gbV90eXBlTWFwLmFkZCgmbWFrZVBvaW50ZXJFeHByZXNzaW9uLCBSZXNvbHZpbmdUeXBl
KG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VQb2ludGVy
RXhwcmVzc2lvbi5vcmlnaW4oKSksICphZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUsIGxWYWx1
ZVR5cGUtPmNsb25lKCkpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0g
bV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZtYWtlUG9pbnRlckV4cHJlc3Npb24sIFdURjo6bnVsbG9w
dCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNz
U3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgICAgIGF1dG8gbFZhbHVlSXRlcmF0
b3IgPSBtX3R5cGVNYXAuZmluZCgmbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUo
KSk7CisgICAgICAgIEFTU0VSVChsVmFsdWVJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOwor
ICAgICAgICBhdXRvJiBlbGVtZW50VHlwZSA9IGxWYWx1ZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAg
ICAgYXV0byogdW5uYW1lZFR5cGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7Cisg
ICAgICAgICAgICByZXR1cm4gJnN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih0eXBlKTsK
KyAgICAgICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdHlwZSkgLT4gQVNU
OjpVbm5hbWVkVHlwZSogeworICAgICAgICAgICAgcmV0dXJuIHR5cGUtPnJlc29sdmFibGVUeXBl
KCkucmVzb2x2ZWRUeXBlKCk7CisgICAgICAgIH0pLCBlbGVtZW50VHlwZSk7CisgICAgICAgIGlm
ICghdW5uYW1lZFR5cGUpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gdW5uYW1lZFR5cGUt
PnVuaWZ5Tm9kZSgpOworICAgICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2Rl
KSkgeworICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+
KHVubmFtZWRUeXBlKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIHBvaW50ZXJUeXBlID0gZG93
bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBTYXZlIHRoZSBmYWN0IHRoYXQgd2UncmUgbm90IHRhcmdldHRpbmcgdGhlIGl0ZW07
IHdlJ3JlIHRhcmdldHRpbmcgdGhlIGl0ZW0ncyBpbm5lciBlbGVtZW50LgorICAgICAgICAgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmbWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbiwgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSks
IHBvaW50ZXJUeXBlLmFkZHJlc3NTcGFjZSgpLCBwb2ludGVyVHlwZS5lbGVtZW50VHlwZSgpLmNs
b25lKCkpKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgICAgICAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJl
c3VsdCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFkZCgmbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
biwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NT
cGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXV0byBhZGRy
ZXNzU3BhY2VJdGVyYXRvciA9IG1fYWRkcmVzc1NwYWNlTWFwLmZpbmQoJm1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgICAgICAgICAgQVNTRVJUKGFkZHJlc3NTcGFj
ZUl0ZXJhdG9yICE9IG1fYWRkcmVzc1NwYWNlTWFwLmVuZCgpKTsKKyAgICAgICAgICAgIGlmICgh
YWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKTsK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2F2ZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzLgor
ICAgICAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmbWFrZUFycmF5
UmVmZXJlbmNlRXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZShtYWtlVW5pcXVlUmVmPEFTVDo6QXJy
YXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lv
bi5vcmlnaW4oKSksICphZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUsIGFycmF5VHlwZS50eXBl
KCkuY2xvbmUoKSkpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwg
YWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICAgICAgICAgIGF1dG8gYWRkcmVzc1NwYWNl
QWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZtYWtlQXJyYXlSZWZlcmVuY2VFeHBy
ZXNzaW9uLCBXVEY6Om51bGxvcHQpOworICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRk
cmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgYXV0byBhZGRyZXNzU3BhY2VJdGVyYXRvciA9IG1fYWRkcmVzc1NwYWNlTWFwLmZpbmQoJm1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAgICAgICBBU1NFUlQoYWRk
cmVzc1NwYWNlSXRlcmF0b3IgIT0gbV9hZGRyZXNzU3BhY2VNYXAuZW5kKCkpOworICAgICAgICBp
ZiAoIWFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZSkgeworICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdHlwZU1hcC5hZGQoJm1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIFJlc29sdmlu
Z1R5cGUobWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2Vu
KG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ub3JpZ2luKCkpLCAqYWRkcmVzc1NwYWNlSXRl
cmF0b3ItPnZhbHVlLCB1bm5hbWVkVHlwZS0+Y2xvbmUoKSkpKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgYXV0byBhZGRy
ZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJm1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24sIFdURjo6bnVsbG9wdCk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRk
cmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cisg
ICAgfQorCisgICAgdm9pZCBmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKEFTVDo6UHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIEFTVDo6VW5uYW1l
ZFR5cGUmIHdyYXBwZWRCYXNlVHlwZSwgQVNUOjpVbm5hbWVkVHlwZSogZXh0cmFBcmd1bWVudFR5
cGUgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxBU1Q6Ok5hbWVkVHlwZT4+IGNhc3RSZXR1cm5UeXBlOworICAgICAgICB1c2luZyBPdmVy
bG9hZFJlc29sdXRpb24gPSBzdGQ6OnR1cGxlPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIEFT
VDo6VW5uYW1lZFR5cGUqPjsKKworICAgICAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIGdl
dEZ1bmN0aW9uOworICAgICAgICBBU1Q6OlVubmFtZWRUeXBlKiBnZXRSZXR1cm5UeXBlOworICAg
ICAgICBzdGQ6OnRpZShnZXRGdW5jdGlvbiwgZ2V0UmV0dXJuVHlwZSkgPSAoWyZdKCkgLT4gT3Zl
cmxvYWRSZXNvbHV0aW9uIHsKKyAgICAgICAgICAgIFJlc29sdmluZ1R5cGUgZ2V0QXJndW1lbnRU
eXBlMSh3cmFwcGVkQmFzZVR5cGUuY2xvbmUoKSk7CisgICAgICAgICAgICBPcHRpb25hbDxSZXNv
bHZpbmdUeXBlPiBnZXRBcmd1bWVudFR5cGUyOworICAgICAgICAgICAgaWYgKGV4dHJhQXJndW1l
bnRUeXBlKQorICAgICAgICAgICAgICAgIGdldEFyZ3VtZW50VHlwZTIgPSBSZXNvbHZpbmdUeXBl
KGV4dHJhQXJndW1lbnRUeXBlLT5jbG9uZSgpKTsKKworICAgICAgICAgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGdldEFyZ3VtZW50VHlwZXM7CisgICAg
ICAgICAgICBnZXRBcmd1bWVudFR5cGVzLmFwcGVuZChnZXRBcmd1bWVudFR5cGUxKTsKKyAgICAg
ICAgICAgIGlmIChnZXRBcmd1bWVudFR5cGUyKQorICAgICAgICAgICAgICAgIGdldEFyZ3VtZW50
VHlwZXMuYXBwZW5kKCpnZXRBcmd1bWVudFR5cGUyKTsKKworICAgICAgICAgICAgYXV0byogZ2V0
RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLnBvc3NpYmxlR2V0T3ZlcmxvYWRzKCksIGdldEFyZ3VtZW50VHlwZXMsIGNhc3RSZXR1
cm5UeXBlKTsKKyAgICAgICAgICAgIGlmICghZ2V0RnVuY3Rpb24pCisgICAgICAgICAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKGdldEZ1bmN0aW9uLCAmZ2V0RnVuY3Rpb24tPnR5cGUoKSk7Cisg
ICAgICAgIH0pKCk7CisKKyAgICAgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBhbmRGdW5j
dGlvbjsKKyAgICAgICAgQVNUOjpVbm5hbWVkVHlwZSogYW5kUmV0dXJuVHlwZTsKKyAgICAgICAg
c3RkOjp0aWUoYW5kRnVuY3Rpb24sIGFuZFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJsb2Fk
UmVzb2x1dGlvbiB7CisgICAgICAgICAgICBhdXRvIGNvbXB1dGVBbmRBcmd1bWVudFR5cGUgPSBb
Jl0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIC0+IE9wdGlvbmFsPFJlc29sdmluZ1R5
cGU+IHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVu
bmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdW5uYW1lZFR5cGUuY2xv
bmUoKSB9OworICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5
cGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6QXJy
YXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9y
aWdpbigpKSwgQVNUOjpSZWZlcmVuY2VUeXBlOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93bmNh
c3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBlKCkuY2xvbmUoKSkgfTsKKyAgICAg
ICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICAgICAgICAgIHJldHVy
biB7IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1Nw
YWNlOjpUaHJlYWQsIGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkudHlwZSgp
LmNsb25lKCkpIH07CisgICAgICAgICAgICB9OworICAgICAgICAgICAgYXV0byBjb21wdXRlQW5k
UmV0dXJuVHlwZSA9IFsmXShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpV
bm5hbWVkVHlwZSogeworICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1
bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpQ
b2ludGVyVHlwZT4odW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBhdXRvIGFuZEFy
Z3VtZW50VHlwZTEgPSBjb21wdXRlQW5kQXJndW1lbnRUeXBlKHN0YXRpY19jYXN0PEFTVDo6VW5u
YW1lZFR5cGUmPih3cmFwcGVkQmFzZVR5cGUpKTsKKyAgICAgICAgICAgIGlmICghYW5kQXJndW1l
bnRUeXBlMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwg
bnVsbHB0cik7CisgICAgICAgICAgICBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiBhbmRBcmd1bWVu
dFR5cGUyOworICAgICAgICAgICAgaWYgKGV4dHJhQXJndW1lbnRUeXBlKQorICAgICAgICAgICAg
ICAgIGFuZEFyZ3VtZW50VHlwZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1lbnRUeXBlLT5j
bG9uZSgpKTsKKworICAgICAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVz
b2x2aW5nVHlwZT4+IGFuZEFyZ3VtZW50VHlwZXM7CisgICAgICAgICAgICBhbmRBcmd1bWVudFR5
cGVzLmFwcGVuZCgqYW5kQXJndW1lbnRUeXBlMSk7CisgICAgICAgICAgICBpZiAoYW5kQXJndW1l
bnRUeXBlMikKKyAgICAgICAgICAgICAgICBhbmRBcmd1bWVudFR5cGVzLmFwcGVuZCgqYW5kQXJn
dW1lbnRUeXBlMik7CisKKyAgICAgICAgICAgIGF1dG8qIGFuZEZ1bmN0aW9uID0gcmVzb2x2ZUZ1
bmN0aW9uT3ZlcmxvYWRJbXBsKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3NzaWJsZUFuZE92
ZXJsb2FkcygpLCBhbmRBcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSk7CisgICAgICAgICAg
ICBpZiAoIWFuZEZ1bmN0aW9uKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFp
cihudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihh
bmRGdW5jdGlvbiwgY29tcHV0ZUFuZFJldHVyblR5cGUoYW5kRnVuY3Rpb24tPnR5cGUoKSkpOwor
ICAgICAgICB9KSgpOworCisgICAgICAgIGlmICghZ2V0UmV0dXJuVHlwZSAmJiAhYW5kUmV0dXJu
VHlwZSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChnZXRSZXR1cm5UeXBlICYmIGFuZFJldHVyblR5cGUgJiYg
IW1hdGNoZXMoKmdldFJldHVyblR5cGUsICphbmRSZXR1cm5UeXBlKSkgeworICAgICAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogc2V0RnVuY3Rpb247CisgICAgICAgIEFTVDo6VW5uYW1l
ZFR5cGUqIHNldFJldHVyblR5cGU7CisgICAgICAgIHN0ZDo6dGllKHNldEZ1bmN0aW9uLCBzZXRS
ZXR1cm5UeXBlKSA9IChbJl0oKSAtPiBPdmVybG9hZFJlc29sdXRpb24geworICAgICAgICAgICAg
UmVzb2x2aW5nVHlwZSBzZXRBcmd1bWVudDFUeXBlKHdyYXBwZWRCYXNlVHlwZS5jbG9uZSgpKTsK
KyAgICAgICAgICAgIE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IHNldEFyZ3VtZW50VHlwZTI7Cisg
ICAgICAgICAgICBpZiAoZXh0cmFBcmd1bWVudFR5cGUpCisgICAgICAgICAgICAgICAgc2V0QXJn
dW1lbnRUeXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5cGUtPmNsb25lKCkpOwor
ICAgICAgICAgICAgUmVzb2x2aW5nVHlwZSBzZXRBcmd1bWVudDNUeXBlKGdldFJldHVyblR5cGUg
PyBnZXRSZXR1cm5UeXBlLT5jbG9uZSgpIDogYW5kUmV0dXJuVHlwZS0+Y2xvbmUoKSk7CisKKyAg
ICAgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBz
ZXRBcmd1bWVudFR5cGVzOworICAgICAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoc2V0
QXJndW1lbnQxVHlwZSk7CisgICAgICAgICAgICBpZiAoc2V0QXJndW1lbnRUeXBlMikKKyAgICAg
ICAgICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZCgqc2V0QXJndW1lbnRUeXBlMik7Cisg
ICAgICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZChzZXRBcmd1bWVudDNUeXBlKTsKKwor
ICAgICAgICAgICAgYXV0byogc2V0RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZElt
cGwocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlU2V0T3ZlcmxvYWRzKCksIHNldEFy
Z3VtZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKTsKKyAgICAgICAgICAgIGlmICghc2V0RnVuY3Rp
b24pCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxw
dHIpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHNldEZ1bmN0aW9uLCAmc2V0
RnVuY3Rpb24tPnR5cGUoKSk7CisgICAgICAgIH0pKCk7CisKKyAgICAgICAgaWYgKHNldEZ1bmN0
aW9uKSB7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXMoc2V0RnVuY3Rpb24tPnR5cGUoKSwgc3Rh
dGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHdyYXBwZWRCYXNlVHlwZSkpKSB7CisgICAgICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWdldFJldHVyblR5cGUgJiYgIWFuZFJldHVy
blR5cGUpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRy
ZXNzU3BhY2VNYXAuYWRkKCZwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIFdURjo6bnVsbG9wdCk7
CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVz
c1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gRklYTUU6IFRoZSByZWZlcmVuY2UgY29tcGlsZXIgaGFzICJlbHNlIGlmICghbm9kZS5i
YXNlLmlzTFZhbHVlICYmICFiYXNlVHlwZS5pc0FycmF5UmVmKSIsCisgICAgICAgICAgICAvLyBi
dXQgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSBpdCBleGlzdHMuIEkgaGF2ZW4ndCByZXByb2R1Y2Vk
IGl0IGhlcmUsIGFuZCBJJ2xsIGludmVzdGlnYXRlCisgICAgICAgICAgICAvLyBpZiB3ZSBjYW4g
cmVtb3ZlIGl0IGZyb20gdGhlIHJlZmVyZW5jZSBjb21waWxlci4KKyAgICAgICAgICAgIEFTVDo6
UmVmZXJlbmNlVHlwZTo6QWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZTsKKyAgICAgICAgICAgIGlm
IChpczxBU1Q6OlJlZmVyZW5jZVR5cGU+KHdyYXBwZWRCYXNlVHlwZSkpCisgICAgICAgICAgICAg
ICAgYWRkcmVzc1NwYWNlID0gZG93bmNhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFwcGVkQmFz
ZVR5cGUpLmFkZHJlc3NTcGFjZSgpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgYXV0byBhZGRyZXNzU3BhY2VJdGVyYXRvciA9IG1fYWRkcmVzc1NwYWNlTWFwLmZpbmQoJnBy
b3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChh
ZGRyZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7CisgICAgICAg
ICAgICAgICAgaWYgKGFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgYWRkcmVzc1NwYWNlID0gKmFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZTsKKyAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VN
YXAuYWRkKCZwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIGFkZHJlc3NTcGFjZSk7CisgICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRk
UmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEdlbmVy
YXRlIHRoZSBjYWxsIGV4cHJlc3Npb25zCisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkRv
dEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZG90RXhwcmVzc2lvbi5iYXNlKCkpOworICAgICAgICBhdXRvIGJhc2VJ
dGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZkb3RFeHByZXNzaW9uLmJhc2UoKSk7CisgICAgICAg
IEFTU0VSVChiYXNlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYg
YmFzZVR5cGUgPSBiYXNlSXRlcmF0b3ItPnZhbHVlOworICAgICAgICBhdXRvKiBiYXNlVW5pZnlO
b2RlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4mIGJhc2VUeXBlKSAtPiBBU1Q6OlR5cGUqIHsKKyAgICAgICAgICAgIHJldHVybiAm
YmFzZVR5cGUtPnVuaWZ5Tm9kZSgpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlPiYgYmFzZVR5cGUpIC0+IEFTVDo6VHlwZSogeworICAgICAgICAgICAgaWYgKCFi
YXNlVHlwZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKSkgeworICAgICAgICAgICAg
ICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9vbD4oY29tbWl0KGJhc2VUeXBlLT5yZXNvbHZhYmxlVHlw
ZSgpKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuICZiYXNlVHlwZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZl
ZFR5cGUoKS0+dW5pZnlOb2RlKCk7CisgICAgICAgIH0pLCBiYXNlVHlwZSk7CisgICAgICAgIGlm
ICghYmFzZVVuaWZ5Tm9kZSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIHdyYXBwZWRCYXNlVHlwZSA9IChbJl0o
KSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICAgICAgaWYgKGlzPEFT
VDo6VW5uYW1lZFR5cGU+KCpiYXNlVW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4oKmJhc2VVbmlmeU5vZGUpLmNsb25lKCk7CisgICAg
ICAgICAgICBBU1NFUlQoaXM8QVNUOjpOYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpKTsKKyAgICAg
ICAgICAgIHJldHVybiBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGRvdEV4
cHJlc3Npb24ub3JpZ2luKCkpLCBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oKmJhc2VVbmlmeU5v
ZGUpKTsKKyAgICAgICAgfSkoKTsKKworICAgICAgICBmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNj
ZXNzKGRvdEV4cHJlc3Npb24sIHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih3cmFwcGVk
QmFzZVR5cGUpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6SW5kZXhFeHByZXNzaW9u
JiBpbmRleEV4cHJlc3Npb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIHdyYXBwZWRC
YXNlVHlwZSA9IChbJl0oKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+
IHsKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpbmRleEV4cHJlc3Npb24uYmFzZSgp
KTsKKyAgICAgICAgICAgIGF1dG8gYmFzZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmluZGV4
RXhwcmVzc2lvbi5iYXNlKCkpOworICAgICAgICAgICAgQVNTRVJUKGJhc2VJdGVyYXRvciAhPSBt
X3R5cGVNYXAuZW5kKCkpOworICAgICAgICAgICAgYXV0byYgYmFzZVR5cGUgPSBiYXNlSXRlcmF0
b3ItPnZhbHVlOworICAgICAgICAgICAgYXV0byogYmFzZVVuaWZ5Tm9kZSA9IFdURjo6dmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBiYXNlVHlw
ZSkgLT4gQVNUOjpUeXBlKiB7CisgICAgICAgICAgICAgICAgcmV0dXJuICZiYXNlVHlwZS0+dW5p
ZnlOb2RlKCk7CisgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
PiYgYmFzZVR5cGUpIC0+IEFTVDo6VHlwZSogeworICAgICAgICAgICAgICAgIGlmICghYmFzZVR5
cGUtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFzdGF0aWNfY2FzdDxib29sPihjb21taXQoYmFzZVR5cGUtPnJlc29sdmFibGVUeXBl
KCkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gJmJhc2VUeXBlLT5yZXNvbHZhYmxlVHlw
ZSgpLnJlc29sdmVkVHlwZSgpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIH0pLCBiYXNlVHlw
ZSk7CisgICAgICAgICAgICBpZiAoIWJhc2VVbmlmeU5vZGUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiAoWyZdKCkgLT4gVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpVbm5hbWVk
VHlwZT4oKmJhc2VVbmlmeU5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG93bmNh
c3Q8QVNUOjpVbm5hbWVkVHlwZT4oKmJhc2VVbmlmeU5vZGUpLmNsb25lKCk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oaW5k
ZXhFeHByZXNzaW9uLm9yaWdpbigpKSwgZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KCpiYXNlVW5p
ZnlOb2RlKSk7CisgICAgICAgICAgICB9KSgpOworICAgICAgICB9KSgpOworICAgICAgICBpZiAo
IXdyYXBwZWRCYXNlVHlwZSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gaW5kZXhFeHByZXNzaW9uVHlwZSA9
IChbJl0oKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoaW5kZXhFeHByZXNzaW9uLmluZGV4RXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAgIGF1
dG8gaW5kZXhFeHByZXNzaW9uSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmaW5kZXhFeHByZXNz
aW9uLmluZGV4RXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleEV4cHJlc3Np
b25JdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICAgICAgYXV0byYgaW5kZXhF
eHByZXNzaW9uVHlwZSA9IGluZGV4RXhwcmVzc2lvbkl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYmUgY2FsbGluZyB1bmlmeU5vZGUoKSBoZXJlPworICAg
ICAgICAgICAgYXV0byogY29tbWl0dGVkSW5kZXhFeHByZXNzaW9uVHlwZSA9IFdURjo6dmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBpbmRleEV4
cHJlc3Npb25UeXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CisgICAgICAgICAgICAgICAgcmV0
dXJuICZzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4oaW5kZXhFeHByZXNzaW9uVHlwZSk7
CisgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgaW5kZXhF
eHByZXNzaW9uVHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICAgICAgICAgIGlm
ICghaW5kZXhFeHByZXNzaW9uVHlwZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KGNvbW1pdChpbmRl
eEV4cHJlc3Npb25UeXBlLT5yZXNvbHZhYmxlVHlwZSgpKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIGluZGV4RXhwcmVzc2lvblR5cGUtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBl
KCk7CisgICAgICAgICAgICB9KSwgaW5kZXhFeHByZXNzaW9uVHlwZSk7CisgICAgICAgICAgICBy
ZXR1cm4gY29tbWl0dGVkSW5kZXhFeHByZXNzaW9uVHlwZTsKKyAgICAgICAgfSkoKTsKKyAgICAg
ICAgaWYgKCFpbmRleEV4cHJlc3Npb25UeXBlKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZmluaXNoVmlzaXRpbmdQ
cm9wZXJ0eUFjY2VzcyhpbmRleEV4cHJlc3Npb24sIFdURk1vdmUoKndyYXBwZWRCYXNlVHlwZSks
IGluZGV4RXhwcmVzc2lvblR5cGUpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJp
YWJsZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2UpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CisgICAgICAgIEFTU0VSVCh2
YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCkpOworICAgICAgICBhdXRvIGFkZFJl
c3VsdCA9IG1fdHlwZU1hcC5hZGQoJnZhcmlhYmxlUmVmZXJlbmNlLCB2YXJpYWJsZVJlZmVyZW5j
ZS52YXJpYWJsZSgpLT50eXBlKCktPmNsb25lKCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFk
ZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgICAgICBPcHRpb25hbDxBU1Q6OlJl
ZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlOworICAgICAgICBpZiAoIXZh
cmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPmlzQW5vbnltb3VzKCkpCisgICAgICAgICAgICBh
ZGRyZXNzU3BhY2UgPSBBU1Q6OlJlZmVyZW5jZVR5cGU6OkFkZHJlc3NTcGFjZTo6VGhyZWFkOwor
ICAgICAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFk
ZCgmdmFyaWFibGVSZWZlcmVuY2UsIFdURk1vdmUoYWRkcmVzc1NwYWNlKSk7CisgICAgICAgIEFT
U0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQu
aXNOZXdFbnRyeSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJu
U3RhdGVtZW50KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJldHVyblN0YXRlbWVu
dC5mdW5jdGlvbigpKTsKKyAgICAgICAgaWYgKHJldHVyblN0YXRlbWVudC52YWx1ZSgpKSB7Cisg
ICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnJldHVyblN0YXRlbWVudC52YWx1ZSgpKTsK
KyAgICAgICAgICAgIGF1dG8gdmFsdWVJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKHJldHVyblN0
YXRlbWVudC52YWx1ZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZUl0ZXJhdG9yICE9IG1f
dHlwZU1hcC5lbmQoKSk7CisgICAgICAgICAgICBhdXRvJiByZXN1bHRUeXBlID0gdmFsdWVJdGVy
YXRvci0+dmFsdWU7CisgICAgICAgICAgICBhdXRvIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0VHlwZSkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMocmV0dXJuU3RhdGVtZW50
LmZ1bmN0aW9uKCktPnR5cGUoKSwgc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHJlc3Vs
dFR5cGUpKTsKKyAgICAgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+
JiByZXN1bHRUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQocmV0dXJuU3RhdGVtZW50LmZ1bmN0aW9uKCktPnR5cGUo
KSwgcmVzdWx0VHlwZS0+cmVzb2x2YWJsZVR5cGUoKSkpOworICAgICAgICAgICAgfSksIHJlc3Vs
dFR5cGUpOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1h
dGNoZXMocmV0dXJuU3RhdGVtZW50LmZ1bmN0aW9uKCktPnR5cGUoKSwgbV9pbnRyaW5zaWNzLnZv
aWRUeXBlKCkpKQorICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6UG9pbnRlclR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gRm9sbG93
aW5nIHBvaW50ZXIgdHlwZXMgY2FuIGNhdXNlIGluZmluaXRlIGxvb3BzIGJlY2F1c2Ugb2YgZGF0
YSBzdHJ1Y3R1cmVzCisgICAgICAgIC8vIGxpa2UgbGlua2VkIGxpc3RzLgorICAgICAgICAvLyBG
SVhNRTogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGVtcHR5CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICAvLyBGb2xsb3dpbmcgYXJyYXkgcmVmZXJlbmNlIHR5cGVzIGNhbiBjYXVzZSBpbmZp
bml0ZSBsb29wcyBiZWNhdXNlIG9mIGRhdGEKKyAgICAgICAgLy8gc3RydWN0dXJlcyBsaWtlIGxp
bmtlZCBsaXN0cy4KKyAgICAgICAgLy8gRklYTUU6IE1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIHNo
b3VsZCBiZSBlbXB0eQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJh
bCYgaW50ZWdlckxpdGVyYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIHJlZiA9IGFk
b3B0UmVmKCpuZXcgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UoaW50ZWdlckxpdGVyYWwudHlwZSgp
KSk7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmaW50ZWdlckxpdGVy
YWwsIFdURk1vdmUocmVmKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRS
ZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0g
bV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZpbnRlZ2VyTGl0ZXJhbCwgV1RGOjpudWxsb3B0KTsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFk
ZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGF1dG8gcmVmID0gYWRvcHRSZWYoKm5ldyBSZXNvbHZhYmxlVHlwZVJlZmVyZW5j
ZSh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnR5cGUoKSkpOworICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdHlwZU1hcC5hZGQoJnVuc2lnbmVkSW50ZWdlckxpdGVyYWwsIFdURk1vdmUocmVmKSk7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAu
YWRkKCZ1bnNpZ25lZEludGVnZXJMaXRlcmFsLCBXVEY6Om51bGxvcHQpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0Lmlz
TmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZs
b2F0TGl0ZXJhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gcmVmID0gYWRvcHRSZWYo
Km5ldyBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShmbG9hdExpdGVyYWwudHlwZSgpKSk7CisgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZmxvYXRMaXRlcmFsLCBXVEZNb3Zl
KHJlZikpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3
RW50cnkpOworICAgICAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRkcmVzc1Nw
YWNlTWFwLmFkZCgmZmxvYXRMaXRlcmFsLCBXVEY6Om51bGxvcHQpOworICAgICAgICBBU1NFUlRf
VU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3
RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExp
dGVyYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvIHJlZiA9IGFkb3B0UmVmKCpuZXcg
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UobnVsbExpdGVyYWwudHlwZSgpKSk7CisgICAgICAgIGF1
dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmbnVsbExpdGVyYWwsIFdURk1vdmUocmVmKSk7
CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7
CisgICAgICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAu
YWRkKCZudWxsTGl0ZXJhbCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChh
ZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsK
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRl
cmFsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAu
YWRkKCZib29sZWFuTGl0ZXJhbCwgUmVzb2x2aW5nVHlwZShBU1Q6OlR5cGVSZWZlcmVuY2U6Ondy
YXAoTGV4ZXI6OlRva2VuKGJvb2xlYW5MaXRlcmFsLm9yaWdpbigpKSwgbV9pbnRyaW5zaWNzLmJv
b2xUeXBlKCkpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQu
aXNOZXdFbnRyeSk7CisgICAgICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRy
ZXNzU3BhY2VNYXAuYWRkKCZib29sZWFuTGl0ZXJhbCwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25N
ZW1iZXJMaXRlcmFsJiBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5p
dGlvbigpKTsKKyAgICAgICAgYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uID0gKmVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKTsKKyAgICAgICAgYXV0byBh
ZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwsIFJlc29s
dmluZ1R5cGUoQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihlbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwub3JpZ2luKCkpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24pKSk7CisgICAg
ICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
ICAgIGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZl
bnVtZXJhdGlvbk1lbWJlckxpdGVyYWwsIFdURjo6bnVsbG9wdCk7CisgICAgICAgIEFTU0VSVF9V
TlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdF
bnRyeSk7CisgICAgfQorCisgICAgYm9vbCBpc0Jvb2xUeXBlKFJlc29sdmluZ1R5cGUmIHJlc29s
dmluZ1R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IGJvb2wgeworICAg
ICAgICAgICAgcmV0dXJuIG1hdGNoZXMoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KGxl
ZnQpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBib29sIHsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdChtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSwg
bGVmdC0+cmVzb2x2YWJsZVR5cGUoKSkpOworICAgICAgICB9KSwgcmVzb2x2aW5nVHlwZSk7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2Fs
Tm90RXhwcmVzc2lvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChsb2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkpOworICAgICAgICBhdXRvIG9wZXJhbmRJ
dGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZsb2dpY2FsTm90RXhwcmVzc2lvbi5vcGVyYW5kKCkp
OworICAgICAgICBBU1NFUlQob3BlcmFuZEl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7Cisg
ICAgICAgIGF1dG8mIG9wZXJhbmRUeXBlID0gb3BlcmFuZEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAg
ICAgaWYgKCFpc0Jvb2xUeXBlKG9wZXJhbmRUeXBlKSkgeworICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFkZFJlc3Vs
dCA9IG1fdHlwZU1hcC5hZGQoJmxvZ2ljYWxOb3RFeHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlKEFT
VDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obG9naWNhbE5vdEV4cHJlc3Npb24u
b3JpZ2luKCkpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpKTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgYXV0byBhZGRy
ZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmxvZ2ljYWxOb3RFeHBy
ZXNzaW9uLCBXVEY6Om51bGxvcHQpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFj
ZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYgbG9naWNhbEV4cHJlc3Npb24p
IG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQobG9naWNhbEV4cHJl
c3Npb24ubGVmdCgpKTsKKyAgICAgICAgYXV0byBsZWZ0SXRlcmF0b3IgPSBtX3R5cGVNYXAuZmlu
ZCgmbG9naWNhbEV4cHJlc3Npb24ubGVmdCgpKTsKKyAgICAgICAgQVNTRVJUKGxlZnRJdGVyYXRv
ciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRvJiBsZWZ0VHlwZSA9IGxlZnRJdGVy
YXRvci0+dmFsdWU7CisKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGxvZ2ljYWxFeHByZXNz
aW9uLnJpZ2h0KCkpOworICAgICAgICBhdXRvIHJpZ2h0SXRlcmF0b3IgPSBtX3R5cGVNYXAuZmlu
ZCgmbG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSk7CisgICAgICAgIEFTU0VSVChyaWdodEl0ZXJh
dG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIHJpZ2h0VHlwZSA9IHJpZ2h0
SXRlcmF0b3ItPnZhbHVlOworCisgICAgICAgIGlmICghaXNCb29sVHlwZShsZWZ0VHlwZSkgfHwg
IWlzQm9vbFR5cGUocmlnaHRUeXBlKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlw
ZU1hcC5hZGQoJmxvZ2ljYWxFeHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlKEFTVDo6VHlwZVJlZmVy
ZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obG9naWNhbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBtX2lu
dHJpbnNpY3MuYm9vbFR5cGUoKSkpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQs
IGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1
bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmxvZ2ljYWxFeHByZXNzaW9uLCBXVEY6Om51bGxv
cHQpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVz
c1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNU
OjpJZlN0YXRlbWVudCYgaWZTdGF0ZW1lbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoaWZTdGF0ZW1lbnQuY29uZGl0aW9uYWwoKSk7CisgICAgICAgIGF1dG8g
Y29uZGl0aW9uYWxJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZpZlN0YXRlbWVudC5jb25kaXRp
b25hbCgpKTsKKyAgICAgICAgQVNTRVJUKGNvbmRpdGlvbmFsSXRlcmF0b3IgIT0gbV90eXBlTWFw
LmVuZCgpKTsKKyAgICAgICAgYXV0byYgY29uZGl0aW9uYWxUeXBlID0gY29uZGl0aW9uYWxJdGVy
YXRvci0+dmFsdWU7CisgICAgICAgIGlmICghaXNCb29sVHlwZShjb25kaXRpb25hbFR5cGUpKSB7
CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChpZlN0YXRlbWVudC5ib2R5KCkpOworICAgICAg
ICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChzdGF0aWNfY2FzdDxBU1Q6OlN0YXRlbWVudCY+KCppZlN0YXRlbWVudC5lbHNlQm9keSgp
KSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5jb25k
aXRpb25hbCgpKTsKKyAgICAgICAgYXV0byBjb25kaXRpb25hbEl0ZXJhdG9yID0gbV90eXBlTWFw
LmZpbmQoJndoaWxlTG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAgQVNTRVJUKGNvbmRpdGlv
bmFsSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgYXV0byYgY29uZGl0aW9u
YWxUeXBlID0gY29uZGl0aW9uYWxJdGVyYXRvci0+dmFsdWU7CisgICAgICAgIGlmICghaXNCb29s
VHlwZShjb25kaXRpb25hbFR5cGUpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGls
ZUxvb3AuYm9keSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3Am
IGRvV2hpbGVMb29wKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KGRvV2hpbGVMb29wLmJvZHkoKSk7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxl
TG9vcC5jb25kaXRpb25hbCgpKTsKKyAgICAgICAgYXV0byBjb25kaXRpb25hbEl0ZXJhdG9yID0g
bV90eXBlTWFwLmZpbmQoJmRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworICAgICAgICBBU1NF
UlQoY29uZGl0aW9uYWxJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworICAgICAgICBhdXRv
JiBjb25kaXRpb25hbFR5cGUgPSBjb25kaXRpb25hbEl0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAg
aWYgKCFpc0Jvb2xUeXBlKGNvbmRpdGlvbmFsVHlwZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHZp
c2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRl
bWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgICAgIH0s
IFsmXShVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbikgeworICAgICAgICAg
ICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0YXRpY19jYXN0PEFTVDo6RXhwcmVzc2lvbiY+KGV4cHJl
c3Npb24pKTsKKyAgICAgICAgfSksIGZvckxvb3AuaW5pdGlhbGl6YXRpb24oKSk7CisgICAgICAg
IGlmIChmb3JMb29wLmNvbmRpdGlvbigpKSB7CisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlz
aXQoKmZvckxvb3AuY29uZGl0aW9uKCkpOworICAgICAgICAgICAgYXV0byBjb25kaXRpb25JdGVy
YXRvciA9IG1fdHlwZU1hcC5maW5kKGZvckxvb3AuY29uZGl0aW9uKCkpOworICAgICAgICAgICAg
QVNTRVJUKGNvbmRpdGlvbkl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgICAg
ICBhdXRvJiBjb25kaXRpb25UeXBlID0gY29uZGl0aW9uSXRlcmF0b3ItPnZhbHVlOworICAgICAg
ICAgICAgaWYgKCFpc0Jvb2xUeXBlKGNvbmRpdGlvblR5cGUpKSB7CisgICAgICAgICAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGZvckxvb3AuaW5jcmVtZW50KCkpCisgICAgICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoKmZvckxvb3AuaW5jcmVtZW50KCkpOworICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoZm9yTG9vcC5ib2R5KCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpT
d2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVudCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hTdGF0ZW1lbnQudmFsdWUoKSk7CisgICAgICAgIGF1
dG8gdmFsdWVJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZzd2l0Y2hTdGF0ZW1lbnQudmFsdWUo
KSk7CisgICAgICAgIEFTU0VSVCh2YWx1ZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7Cisg
ICAgICAgIGF1dG8mIHZhbHVlVHlwZSA9IHZhbHVlSXRlcmF0b3ItPnZhbHVlOworICAgICAgICBh
dXRvIHZhbHVlVW5pZnlOb2RlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IEFTVDo6VHlwZSogeworICAgICAgICAg
ICAgcmV0dXJuICZsZWZ0LT51bmlmeU5vZGUoKTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mIGxlZnQpIC0+IEFTVDo6VHlwZSogeworICAgICAgICAgICAgaWYg
KCFsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFzdGF0aWNfY2FzdDxib29sPihjb21taXQobGVmdC0+cmVzb2x2YWJsZVR5cGUoKSkp
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiAmbGVmdC0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKS0+
dW5pZnlOb2RlKCk7CisgICAgICAgIH0pLCB2YWx1ZVR5cGUpOworICAgICAgICBpZiAoIWlzPEFT
VDo6TmFtZWRUeXBlPigqdmFsdWVVbmlmeU5vZGUpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8mIHZhbHVlTmFt
ZWRVbmlmeU5vZGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oKnZhbHVlVW5pZnlOb2RlKTsK
KyAgICAgICAgaWYgKCEoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHZhbHVlTmFtZWRV
bmlmeU5vZGUpICYmIGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPih2YWx1ZU5h
bWVkVW5pZnlOb2RlKS5pc0ludCgpKQorICAgICAgICAgICAgJiYgIWlzPEFTVDo6RW51bWVyYXRp
b25EZWZpbml0aW9uPih2YWx1ZU5hbWVkVW5pZnlOb2RlKSkgeworICAgICAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaGFz
RGVmYXVsdCA9IGZhbHNlOworICAgICAgICBmb3IgKGF1dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hT
dGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkgeworICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KHN3aXRjaENhc2UuYmxvY2soKSk7CisgICAgICAgICAgICBpZiAoIXN3aXRjaENhc2UudmFsdWUo
KSkgeworICAgICAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOworICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbCBzdWNjZXNzOworICAg
ICAgICAgICAgc3dpdGNoQ2FzZS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShB
U1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIHN1
Y2Nlc3MgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHN0YXRpY19jYXN0PEFTVDo6VW5u
YW1lZFR5cGUmPih2YWx1ZVR5cGUpLCBpbnRlZ2VyTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAg
ICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBlKSAt
PiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1h
dGNoQW5kQ29tbWl0KHZhbHVlVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSwgaW50ZWdlckxpdGVyYWwu
dHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfSksIHZhbHVlVHlwZSk7CisgICAgICAgICAgICB9
LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFs
KSB7CisgICAgICAgICAgICAgICAgc3VjY2VzcyA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB2YWx1ZVR5cGUpIC0+IGJvb2wgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21t
aXQoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHZhbHVlVHlwZSksIHVuc2lnbmVkSW50
ZWdlckxpdGVyYWwudHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mIHZhbHVlVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdCh2YWx1ZVR5cGUtPnJl
c29sdmFibGVUeXBlKCksIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudHlwZSgpKSk7CisgICAgICAg
ICAgICAgICAgfSksIHZhbHVlVHlwZSk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExp
dGVyYWwmIGZsb2F0TGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdmFs
dWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih2YWx1
ZVR5cGUpLCBmbG9hdExpdGVyYWwudHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfSwgWyZdKFJl
ZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHZhbHVlVHlwZSkgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdCh2YWx1
ZVR5cGUtPnJlc29sdmFibGVUeXBlKCksIGZsb2F0TGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAg
ICAgICAgICB9KSwgdmFsdWVUeXBlKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRl
cmFsJiBudWxsTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBXVEY6OnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdmFsdWVU
eXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJv
b2w+KG1hdGNoQW5kQ29tbWl0KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih2YWx1ZVR5
cGUpLCBudWxsTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oUmVmPFJl
c29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHZhbHVlVHlw
ZS0+cmVzb2x2YWJsZVR5cGUoKSwgbnVsbExpdGVyYWwudHlwZSgpKSk7CisgICAgICAgICAgICAg
ICAgfSksIHZhbHVlVHlwZSk7CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJh
bCYpIHsKKyAgICAgICAgICAgICAgICBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHZhbHVlVHlwZSkgLT4gYm9vbCB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzKHN0YXRpY19jYXN0PEFTVDo6VW5u
YW1lZFR5cGUmPih2YWx1ZVR5cGUpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSk7CisgICAgICAg
ICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHZhbHVlVHlwZSkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPiht
YXRjaEFuZENvbW1pdChtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSwgdmFsdWVUeXBlLT5yZXNvbHZh
YmxlVHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfSksIHZhbHVlVHlwZSk7CisgICAgICAgICAg
ICB9LCBbJl0oQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBX
VEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PiYgdmFsdWVUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNo
ZXMoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHZhbHVlVHlwZSksICplbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAgICAgICAgICAgICAg
IH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiB2YWx1ZVR5cGUpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRD
b21taXQoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSwg
dmFsdWVUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgICAgICAgICAgICAgfSksIHZhbHVl
VHlwZSk7CisgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAg
ICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3dp
dGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1
dG8mIGZpcnN0Q2FzZSA9IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpW2ldOworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgc3dpdGNoU3RhdGVtZW50LnN3aXRjaENh
c2VzKCkuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzZWNvbmRDYXNlID0g
c3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKClbal07CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGJvb2w+KGZpcnN0Q2FzZS52YWx1ZSgpKSAhPSBz
dGF0aWNfY2FzdDxib29sPihzZWNvbmRDYXNlLnZhbHVlKCkpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGlmICghc3RhdGljX2Nhc3Q8Ym9vbD4oZmly
c3RDYXNlLnZhbHVlKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgICAgIGZpcnN0Q2FzZS52YWx1
ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBmaXJz
dEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgIHNlY29uZENhc2UudmFsdWUo
KS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgc2Vjb25k
SW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmaXJz
dEludGVnZXJMaXRlcmFsLnZhbHVlKCkgIT0gc2Vjb25kSW50ZWdlckxpdGVyYWwudmFsdWUoKTsK
KyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYg
c2Vjb25kVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
c3VjY2VzcyA9IHN0YXRpY19jYXN0PGludDY0X3Q+KGZpcnN0SW50ZWdlckxpdGVyYWwudmFsdWUo
KSkgIT0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oc2Vjb25kVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikg
eworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAg
ICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAgICAgICAg
ICAgICAgICAgIH0sIFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYpIHsKKyAgICAg
ICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVk
SW50ZWdlckxpdGVyYWwmIGZpcnN0VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAg
ICAgICAgICAgICBzZWNvbmRDYXNlLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZd
KEFTVDo6SW50ZWdlckxpdGVyYWwmIHNlY29uZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdWNjZXNzID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oZmlyc3RVbnNpZ25l
ZEludGVnZXJMaXRlcmFsLnZhbHVlKCkpICE9IHN0YXRpY19jYXN0PGludDY0X3Q+KHNlY29uZElu
dGVnZXJMaXRlcmFsLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpV
bnNpZ25lZEludGVnZXJMaXRlcmFsJiBzZWNvbmRVbnNpZ25lZEludGVnZXJMaXRlcmFsKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmlyc3RVbnNpZ25lZEludGVnZXJMaXRl
cmFsLnZhbHVlKCkgIT0gc2Vjb25kVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAg
ICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmKSB7CisgICAgICAgICAg
ICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAg
ICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgfSwg
WyZdKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAg
ICB9KSk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAg
ICAgICAgICAgICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAg
IH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJikgeworICAgICAgICAgICAgICAgIH0sIFsmXShB
U1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZmlyc3RFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kQ2FzZS52YWx1ZSgpLT52aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJikgeworICAgICAgICAgICAgICAg
ICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJikgeworICAgICAgICAgICAg
ICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmKSB7CisgICAgICAgICAgICAgICAgICAg
IH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICB9LCBbJl0o
QVNUOjpCb29sZWFuTGl0ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6
RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBzZWNvbmRFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmaXJzdEVudW1lcmF0aW9uTWVt
YmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpICE9IHNlY29uZEVudW1lcmF0aW9uTWVtYmVy
TGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpOworICAgICAgICAgICAgICAgICAgICB9KSk7Cisg
ICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKCFoYXNEZWZhdWx0KSB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVj
bGFyYXRpb24+KHZhbHVlTmFtZWRVbmlmeU5vZGUpKSB7CisgICAgICAgICAgICAgICAgSGFzaFNl
dDxpbnQ2NF90PiB2YWx1ZXM7CisgICAgICAgICAgICAgICAgYm9vbCB6ZXJvVmFsdWVFeGlzdHM7
CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50
LnN3aXRjaENhc2VzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoQ2FzZS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZUZvclNlbGVjdGVkVHlw
ZSgpOworICAgICAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWVGb3JTZWxlY3RlZFR5cGUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAg
IH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xl
YW5MaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbCYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUp
CisgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvVmFsdWVFeGlzdHMgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYWRkKHZh
bHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4odmFsdWVOYW1lZFVuaWZ5Tm9kZSkuaXRlcmF0ZUFsbFZhbHVlcyhbJl0oaW50NjRfdCB2YWx1
ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghemVyb1ZhbHVlRXhpc3RzKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGlmICghdmFsdWVzLmNvbnRhaW5zKHZhbHVlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGlmICghc3VjY2Vz
cykgeworICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHZhbHVlTmFt
ZWRVbmlmeU5vZGUpKTsKKyAgICAgICAgICAgICAgICBIYXNoU2V0PEFTVDo6RW51bWVyYXRpb25N
ZW1iZXIqPiB2YWx1ZXM7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNlIDog
c3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dp
dGNoQ2FzZS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJM
aXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwm
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0s
IFsmXShBU1Q6Ok51bGxMaXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5M
aXRlcmFsJikgeworICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFkZChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwu
ZW51bWVyYXRpb25NZW1iZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6
IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPih2YWx1ZU5hbWVkVW5pZnlOb2Rl
KS5lbnVtZXJhdGlvbk1lbWJlcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVl
cy5jb250YWlucygmZW51bWVyYXRpb25NZW1iZXIuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29t
bWFFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNvbW1hRXhwcmVz
c2lvbi5saXN0KCkuc2l6ZSgpID4gMCk7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KGNvbW1hRXhw
cmVzc2lvbik7CisgICAgICAgIGF1dG8gbGFzdEl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJnN0
YXRpY19jYXN0PEFTVDo6RXhwcmVzc2lvbiY+KGNvbW1hRXhwcmVzc2lvbi5saXN0KCkubGFzdCgp
KSk7CisgICAgICAgIEFTU0VSVChsYXN0SXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAg
ICAgICAgYXV0byYgbGFzdFR5cGUgPSBsYXN0SXRlcmF0b3ItPnZhbHVlOworICAgICAgICBXVEY6
OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYg
bGFzdFR5cGUpIHsKKyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgm
Y29tbWFFeHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlKGxhc3RUeXBlLT5jbG9uZSgpKSk7CisgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwor
ICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGFzdFR5cGUpIHsK
KyAgICAgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmY29tbWFFeHByZXNz
aW9uLCBSZXNvbHZpbmdUeXBlKGxhc3RUeXBlLmNvcHlSZWYoKSkpOworICAgICAgICAgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgfSks
IGxhc3RUeXBlKTsKKyAgICAgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJl
c3NTcGFjZU1hcC5hZGQoJmNvbW1hRXhwcmVzc2lvbiwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VGVybmFyeUV4cHJl
c3Npb24mIHRlcm5hcnlFeHByZXNzaW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHRlcm5hcnlFeHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKKyAgICAgICAgYXV0
byBwcmVkaWNhdGVJdGVyYXRvciA9IG1fdHlwZU1hcC5maW5kKCZ0ZXJuYXJ5RXhwcmVzc2lvbi5w
cmVkaWNhdGUoKSk7CisgICAgICAgIEFTU0VSVChwcmVkaWNhdGVJdGVyYXRvciAhPSBtX3R5cGVN
YXAuZW5kKCkpOworICAgICAgICBhdXRvJiBwcmVkaWNhdGVUeXBlID0gcHJlZGljYXRlSXRlcmF0
b3ItPnZhbHVlOworICAgICAgICBpZiAoIWlzQm9vbFR5cGUocHJlZGljYXRlVHlwZSkpIHsKKyAg
ICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJlc3Npb24uYm9keUV4cHJlc3Np
b24oKSk7CisgICAgICAgIGF1dG8gYm9keUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJnRlcm5h
cnlFeHByZXNzaW9uLmJvZHlFeHByZXNzaW9uKCkpOworICAgICAgICBBU1NFUlQoYm9keUl0ZXJh
dG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8mIGJvZHlUeXBlID0gYm9keUl0
ZXJhdG9yLT52YWx1ZTsKKworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodGVybmFyeUV4cHJl
c3Npb24uZWxzZUV4cHJlc3Npb24oKSk7CisgICAgICAgIGF1dG8gZWxzZUl0ZXJhdG9yID0gbV90
eXBlTWFwLmZpbmQoJnRlcm5hcnlFeHByZXNzaW9uLmVsc2VFeHByZXNzaW9uKCkpOworICAgICAg
ICBBU1NFUlQoZWxzZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5lbmQoKSk7CisgICAgICAgIGF1dG8m
IGVsc2VUeXBlID0gZWxzZUl0ZXJhdG9yLT52YWx1ZTsKKworICAgICAgICBhdXRvIHJlc3VsdFR5
cGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYgYm9keVR5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
Pj4geworICAgICAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0o
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBlbHNlVHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMoc3Rh
dGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KGJvZHlUeXBlKSwgc3RhdGljX2Nhc3Q8QVNUOjpV
bm5hbWVkVHlwZSY+KGVsc2VUeXBlKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBib2R5
VHlwZS0+Y2xvbmUoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGVsc2VUeXBlKSAt
PiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbWF0Y2hBbmRDb21taXQoc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KGJv
ZHlUeXBlKSwgZWxzZVR5cGUtPnJlc29sdmFibGVUeXBlKCkpOworICAgICAgICAgICAgfSksIGVs
c2VUeXBlKTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGJv
ZHlUeXBlKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPiYgZWxzZVR5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPj4geworICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChzdGF0
aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4oZWxzZVR5cGUpLCBib2R5VHlwZS0+cmVzb2x2YWJs
ZVR5cGUoKSk7CisgICAgICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
PiYgZWxzZVR5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewor
ICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChib2R5VHlwZS0+cmVzb2x2YWJs
ZVR5cGUoKSwgZWxzZVR5cGUtPnJlc29sdmFibGVUeXBlKCkpOworICAgICAgICAgICAgfSksIGVs
c2VUeXBlKTsKKyAgICAgICAgfSksIGJvZHlUeXBlKTsKKyAgICAgICAgaWYgKCFyZXN1bHRUeXBl
KSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmdGVybmFyeUV4cHJl
c3Npb24sIFJlc29sdmluZ1R5cGUoV1RGTW92ZSgqcmVzdWx0VHlwZSkpKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICAgICAgYXV0
byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJnRlcm5hcnlF
eHByZXNzaW9uLCBXVEY6Om51bGxvcHQpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NT
cGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pIG92
ZXJyaWRlCisgICAgeworICAgICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50IDogY2FsbEV4cHJlc3Np
b24uYXJndW1lbnRzKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3RhdGljX2Nh
c3Q8QVNUOjpFeHByZXNzaW9uJj4oYXJndW1lbnQpKTsKKyAgICAgICAgaWYgKGNhbGxFeHByZXNz
aW9uLmNhc3RSZXR1cm5UeXBlKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoY2Fs
bEV4cHJlc3Npb24uY2FzdFJldHVyblR5cGUoKS0+Z2V0KCkpOworICAgICAgICBWZWN0b3I8c3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gdHlwZXM7CisgICAgICAgIHR5cGVz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2FsbEV4cHJlc3Npb24uYXJndW1lbnRzKCkuc2l6ZSgp
KTsKKyAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50
cygpKSB7CisgICAgICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJnN0YXRp
Y19jYXN0PEFTVDo6RXhwcmVzc2lvbiY+KGFyZ3VtZW50KSk7CisgICAgICAgICAgICBBU1NFUlQo
aXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsKKyAgICAgICAgICAgIHR5cGVzLnVuY2hlY2tl
ZEFwcGVuZChpdGVyYXRvci0+dmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKGNh
bGxFeHByZXNzaW9uLmhhc092ZXJsb2FkcygpKTsKKyAgICAgICAgYXV0byogZnVuY3Rpb24gPSBy
ZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoKmNhbGxFeHByZXNzaW9uLm92ZXJsb2FkcygpLCB0
eXBlcywgY2FsbEV4cHJlc3Npb24uY2FzdFJldHVyblR5cGUoKSk7CisgICAgICAgIGlmICghZnVu
Y3Rpb24pIHsKKyAgICAgICAgICAgIGlmIChhdXRvIG5ld0Z1bmN0aW9uID0gcmVzb2x2ZUJ5SW5z
dGFudGlhdGlvbihjYWxsRXhwcmVzc2lvbiwgdHlwZXMsIG1faW50cmluc2ljcykpIHsKKyAgICAg
ICAgICAgICAgICBtX3Byb2dyYW0uYXBwZW5kKFdURk1vdmUoKm5ld0Z1bmN0aW9uKSk7CisgICAg
ICAgICAgICAgICAgZnVuY3Rpb24gPSAmc3RhdGljX2Nhc3Q8QVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uJj4obV9wcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkubGFzdCgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICghZnVuY3Rpb24pIHsK
KyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uLT5wYXJhbWV0ZXJzKCku
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gc3VjY2VzcyA9IFdURjo6dmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JikgLT4gYm9vbCB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9LCBbJl0oUmVmPFJl
c29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1p
dCgqZnVuY3Rpb24tPnBhcmFtZXRlcnMoKVtpXS50eXBlKCksIHJlc29sdmFibGVUeXBlUmVmZXJl
bmNlLT5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgICAgICAgICB9KSwgdHlwZXNbaV0uZ2V0KCkp
OworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBjYWxsRXhwcmVzc2lvbi5zZXRGdW5jdGlvbigqZnVuY3Rpb24pOworCisgICAgICAg
IGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmY2FsbEV4cHJlc3Npb24sIFJlc29sdmlu
Z1R5cGUoZnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgICAgIGF1dG8gYWRkcmVzc1Nw
YWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZjYWxsRXhwcmVzc2lvbiwgV1RG
OjpudWxsb3B0KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQs
IGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBSZXNvbHZpbmdUeXBlPiBtX3R5cGVNYXA7Cisg
ICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBPcHRpb25hbDxBU1Q6OlJlZmVyZW5jZVR5cGU6
OkFkZHJlc3NTcGFjZT4+IG1fYWRkcmVzc1NwYWNlTWFwOworICAgIEhhc2hTZXQ8U3RyaW5nPiBt
X3ZlcnRleEVudHJ5UG9pbnRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50RW50cnlQ
b2ludHM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fY29tcHV0ZUVudHJ5UG9pbnRzOworICAgIGNv
bnN0IEludHJpbnNpY3MmIG1faW50cmluc2ljczsKKyAgICBQcm9ncmFtJiBtX3Byb2dyYW07Cit9
OworCitib29sIGNoZWNrKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgQ2hlY2tlciBjaGVja2Vy
KHByb2dyYW0uaW50cmluc2ljcygpLCBwcm9ncmFtKTsKKyAgICBjaGVja2VyLmNoZWNrRXJyb3JB
bmRWaXNpdChwcm9ncmFtKTsKKyAgICByZXR1cm4gIWNoZWNrZXIuZXJyb3IoKTsKK30KKworfQor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTENoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNmYwODU3NzgxODRmZTU0NzY3MjEwMWRmYmUw
MTIwZTYzNmI5YTg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCitib29sIGNoZWNrKFBy
b2dyYW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRl
bXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjViZDU0YzliOTEwZDFiYWFmNjcwNTE4NDU3NGExNjk2ZDQxOTY5
Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKQEAgLTAsMCArMSwxODQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xHYXRoZXJFbnRyeVBv
aW50SXRlbXMuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEFycmF5
UmVmZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAi
V0hMU0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIK
KyNpbmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBl
LmgiCisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hM
U0xUeXBlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorI2lu
Y2x1ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmlzaXRv
ci5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEdhdGhlcmVyIDogcHVibGljIFZpc2l0b3Igewor
cHVibGljOgorICAgIEdhdGhlcmVyKGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MsIEFTVDo6
U2VtYW50aWMqIHNlbWFudGljID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2ludHJpbnNpY3MoaW50
cmluc2ljcykKKyAgICAgICAgLCBtX2N1cnJlbnRTZW1hbnRpYyhzZW1hbnRpYykKKyAgICB7Cisg
ICAgfQorCisgICAgdmlydHVhbCB+R2F0aGVyZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHJl
c2V0KCkKKyAgICB7CisgICAgICAgIG1fY3VycmVudFNlbWFudGljID0gbnVsbHB0cjsKKyAgICB9
CisKKyAgICBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiYgdGFrZUVudHJ5UG9pbnRJdGVtcygpCisg
ICAgeworICAgICAgICByZXR1cm4gV1RGTW92ZShtX2VudHJ5UG9pbnRJdGVtcyk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpCisgICAgeworICAg
ICAgICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1z
LmFwcGVuZChFbnRyeVBvaW50SXRlbShtX3R5cGVSZWZlcmVuY2VzLmxhc3QoKS5nZXQoKSwgKm1f
Y3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYg
KCFtX2N1cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobWF0Y2hlcyhuYXRpdmVUeXBlRGVj
bGFyYXRpb24sIG1faW50cmluc2ljcy52b2lkVHlwZSgpKSkgeworICAgICAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fZW50cnlQ
b2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShtX3R5cGVSZWZlcmVuY2VzLmxhc3QoKS5n
ZXQoKSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6
OlN0cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCisgICAgeworICAgICAg
ICBpZiAobV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVy
ZUVsZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpIHsKKyAg
ICAgICAgICAgIGlmIChzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkpCisgICAgICAgICAgICAg
ICAgbV9jdXJyZW50U2VtYW50aWMgPSAmKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKTsKKyAg
ICAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmlu
aXRpb24pCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZURlZmluaXRpb24u
dHlwZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlw
ZVJlZmVyZW5jZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVk
VHlwZSgpKTsKKyAgICAgICAgbV90eXBlUmVmZXJlbmNlcy5hcHBlbmQodHlwZVJlZmVyZW5jZSk7
CisgICAgICAgIGF1dG8gZGVwdGggPSBtX3R5cGVSZWZlcmVuY2VzLnNpemUoKTsKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChkZXB0aCwgbV90eXBlUmVmZXJlbmNlcy5zaXplKCkgPT0gZGVwdGgp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRlclR5cGUp
CisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBz
ZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fZW50
cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShwb2ludGVyVHlwZSwgKm1fY3VycmVu
dFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNl
VHlwZSYgYXJyYXlSZWZlcmVuY2VUeXBlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRT
ZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0
ZW0oYXJyYXlSZWZlcmVuY2VUeXBlLCAqbV9jdXJyZW50U2VtYW50aWMpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCisgICAgeworICAgICAgICBp
ZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVu
ZChFbnRyeVBvaW50SXRlbShhcnJheVR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xh
cmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRTZW1hbnRpYyk7CisgICAg
ICAgIGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpCisgICAgICAgICAgICBtX2N1
cnJlbnRTZW1hbnRpYyA9ICYqdmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpOworICAgICAg
ICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpCisgICAgICAgICAgICBjaGVja0Vycm9y
QW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgY29uc3QgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOworICAgIEFTVDo6U2VtYW50aWMq
IG1fY3VycmVudFNlbWFudGljIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPEFTVDo6VHlwZVJlZmVyZW5jZT4+IG1fdHlwZVJlZmVyZW5jZXM7CisgICAgVmVj
dG9yPEVudHJ5UG9pbnRJdGVtPiBtX2VudHJ5UG9pbnRJdGVtczsKK307CisKK09wdGlvbmFsPEVu
dHJ5UG9pbnRJdGVtcz4gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKGNvbnN0IEludHJpbnNpY3MmIGlu
dHJpbnNpY3MsIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7
CisgICAgQVNTRVJUKGZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKTsKKyAgICBH
YXRoZXJlciBpbnB1dEdhdGhlcmVyKGludHJpbnNpY3MpOworICAgIGZvciAoYXV0byYgcGFyYW1l
dGVyIDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkgeworICAgICAgICBpbnB1dEdh
dGhlcmVyLnJlc2V0KCk7CisgICAgICAgIGlucHV0R2F0aGVyZXIuY2hlY2tFcnJvckFuZFZpc2l0
KHBhcmFtZXRlcik7CisgICAgICAgIGlmIChpbnB1dEdhdGhlcmVyLmVycm9yKCkpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKyAgICBHYXRoZXJlciBvdXRwdXRHYXRo
ZXJlcihpbnRyaW5zaWNzLCBmdW5jdGlvbkRlZmluaXRpb24uc2VtYW50aWMoKSA/ICYqZnVuY3Rp
b25EZWZpbml0aW9uLnNlbWFudGljKCkgOiBudWxscHRyKTsKKyAgICBvdXRwdXRHYXRoZXJlci5j
aGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7CisgICAgaWYgKG91
dHB1dEdhdGhlcmVyLmVycm9yKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICByZXR1cm4ge3sgaW5wdXRHYXRoZXJlci50YWtlRW50cnlQb2ludEl0ZW1zKCksIG91dHB1dEdh
dGhlcmVyLnRha2VFbnRyeVBvaW50SXRlbXMoKSB9fTsKK30KKworfQorCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRo
ZXJFbnRyeVBvaW50SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ0ZjdkZDg0NDU3ZmVh
NjA2OTFhNjVlYjNmMWQ3ZjNhNTQ4OTMwOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKQEAg
LTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdF
QkdQVSkKKworI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEZ1bmN0aW9uRGVm
aW5pdGlvbjsKKworfQorCitjbGFzcyBJbnRyaW5zaWNzOworY2xhc3MgVW5uYW1lZFR5cGU7CisK
K3N0cnVjdCBFbnRyeVBvaW50SXRlbSB7CisgICAgRW50cnlQb2ludEl0ZW0oQVNUOjpVbm5hbWVk
VHlwZSYgdW5uYW1lZFR5cGUsIEFTVDo6U2VtYW50aWMmIHNlbWFudGljKQorICAgICAgICA6IHVu
bmFtZWRUeXBlKHVubmFtZWRUeXBlKQorICAgICAgICAsIHNlbWFudGljKHNlbWFudGljKQorICAg
IHsKKyAgICB9CisKKyAgICBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZTsKKyAgICBBU1Q6
OlNlbWFudGljJiBzZW1hbnRpYzsKK307CisKK3N0cnVjdCBFbnRyeVBvaW50SXRlbXMgeworICAg
IFZlY3RvcjxFbnRyeVBvaW50SXRlbT4gaW5wdXRzOworICAgIFZlY3RvcjxFbnRyeVBvaW50SXRl
bT4gb3V0cHV0czsKK307CisKK09wdGlvbmFsPEVudHJ5UG9pbnRJdGVtcz4gZ2F0aGVyRW50cnlQ
b2ludEl0ZW1zKGNvbnN0IEludHJpbnNpY3MmLCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOwor
Cit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNwcAppbmRleCAyMGUwZWYwOWU0MTQxNTI1MWUw
ODRhODJkZWI1NWUxZjFmY2UyOWUyLi5hNWFhYTVlMTVlYmRiMzc2ZDJhOGI5NDRjN2VjNWZkMDMz
YWRmNWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTEluZmVyVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMSW5mZXJUeXBlcy5jcHAKQEAgLTE1OSwxNiArMTU5LDE5IEBAIE9wdGlvbmFsPFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gY29tbWl0KEFTVDo6UmVzb2x2YWJsZVR5cGUmIHJl
c29sdmFibGVUeXBlCiB7CiAgICAgQVNTRVJUKCFyZXNvbHZhYmxlVHlwZS5yZXNvbHZlZFR5cGUo
KSk7CiAgICAgaWYgKGlzPEFTVDo6RmxvYXRMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGUpKSB7
Ci0gICAgICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUoZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVy
YWxUeXBlPihyZXNvbHZhYmxlVHlwZSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkpOwotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8QVNUOjpGbG9hdExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSku
cHJlZmVycmVkVHlwZSgpLmNsb25lKCk7CisgICAgICAgIGF1dG8mIGZsb2F0TGl0ZXJhbFR5cGUg
PSBkb3duY2FzdDxBU1Q6OkZsb2F0TGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKTsKKyAgICAg
ICAgcmVzb2x2YWJsZVR5cGUucmVzb2x2ZShmbG9hdExpdGVyYWxUeXBlLnByZWZlcnJlZFR5cGUo
KS5jbG9uZSgpKTsKKyAgICAgICAgcmV0dXJuIGZsb2F0TGl0ZXJhbFR5cGUucHJlZmVycmVkVHlw
ZSgpLmNsb25lKCk7CiAgICAgfQogICAgIGlmIChpczxBU1Q6OkludGVnZXJMaXRlcmFsVHlwZT4o
cmVzb2x2YWJsZVR5cGUpKSB7Ci0gICAgICAgIHJlc29sdmFibGVUeXBlLnJlc29sdmUoZG93bmNh
c3Q8QVNUOjpJbnRlZ2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKS5wcmVmZXJyZWRUeXBl
KCkuY2xvbmUoKSk7Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFs
VHlwZT4ocmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgICAgICBh
dXRvJiBpbnRlZ2VyTGl0ZXJhbFR5cGUgPSBkb3duY2FzdDxBU1Q6OkludGVnZXJMaXRlcmFsVHlw
ZT4ocmVzb2x2YWJsZVR5cGUpOworICAgICAgICByZXNvbHZhYmxlVHlwZS5yZXNvbHZlKGludGVn
ZXJMaXRlcmFsVHlwZS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUoKSk7CisgICAgICAgIHJldHVybiBp
bnRlZ2VyTGl0ZXJhbFR5cGUucHJlZmVycmVkVHlwZSgpLmNsb25lKCk7CiAgICAgfQogICAgIGlm
IChpczxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkpIHsK
LSAgICAgICAgcmVzb2x2YWJsZVR5cGUucmVzb2x2ZShkb3duY2FzdDxBU1Q6OlVuc2lnbmVkSW50
ZWdlckxpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZSkucHJlZmVycmVkVHlwZSgpLmNsb25lKCkp
OwotICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlw
ZT4ocmVzb2x2YWJsZVR5cGUpLnByZWZlcnJlZFR5cGUoKS5jbG9uZSgpOworICAgICAgICBhdXRv
JiB1bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbFR5cGU+KHJlc29sdmFibGVUeXBlKTsKKyAgICAgICAgcmVzb2x2YWJsZVR5cGUu
cmVzb2x2ZSh1bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5wcmVmZXJyZWRUeXBlKCkuY2xvbmUo
KSk7CisgICAgICAgIHJldHVybiB1bnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5wcmVmZXJyZWRU
eXBlKCkuY2xvbmUoKTsKICAgICB9CiAgICAgaWYgKGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihy
ZXNvbHZhYmxlVHlwZSkpIHsKICAgICAgICAgLy8gRklYTUU6IFRyeWluZyB0byBtYXRjaCBudWxs
cHRyIGFuZCBudWxscHRyIGZhaWxzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCmluZGV4IDZiZjE4ZTY5YWZj
NWM4ZmU1MGQ3NDVlNTRkOTYyNmRkYzBkNTBlMGYuLjI1OWVkNTczZmRjNjc4YTEyYTM0NzE0YzI3
ZjY0MTY1YTgyNDVkNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5jcHAKQEAgLTE2NywxNyArMTY3LDIwIEBA
IHZvaWQgTmFtZVJlc29sdmVyOjp2aXNpdChBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYg
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uCiB2b2lkIE5hbWVSZXNvbHZlcjo6dmlzaXQoQVNUOjpE
b3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQogewogICAgIGlmIChpczxBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlPihkb3RFeHByZXNzaW9uLmJhc2UoKSkpIHsKLSAgICAgICAgaWYgKGF1dG8gZW51
bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoZG93bmNhc3Q8QVNUOjpWYXJp
YWJsZVJlZmVyZW5jZT4oZG90RXhwcmVzc2lvbi5iYXNlKCkpLm5hbWUoKSkpIHsKKyAgICAgICAg
YXV0byBiYXNlTmFtZSA9IGRvd25jYXN0PEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KGRvdEV4cHJl
c3Npb24uYmFzZSgpKS5uYW1lKCk7CisgICAgICAgIGlmIChhdXRvIGVudW1lcmF0aW9uVHlwZXMg
PSBtX25hbWVDb250ZXh0LmdldFR5cGVzKGJhc2VOYW1lKSkgewogICAgICAgICAgICAgQVNTRVJU
KGVudW1lcmF0aW9uVHlwZXMtPnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgIEFTVDo6TmFtZWRU
eXBlJiB0eXBlID0gKCplbnVtZXJhdGlvblR5cGVzKVswXTsKICAgICAgICAgICAgIGlmIChpczxB
U1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odHlwZSkpIHsKICAgICAgICAgICAgICAgICBBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9uID0gZG93bmNhc3Q8
QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHR5cGUpOwotICAgICAgICAgICAgICAgIGlmIChh
dXRvKiBtZW1iZXIgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24ubWVtYmVyQnlOYW1lKGRvdEV4cHJl
c3Npb24uZmllbGROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgYXV0byBtZW1iZXJOYW1lID0g
ZG90RXhwcmVzc2lvbi5maWVsZE5hbWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogbWVt
YmVyID0gZW51bWVyYXRpb25EZWZpbml0aW9uLm1lbWJlckJ5TmFtZShtZW1iZXJOYW1lKSkgewog
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihBU1Q6OkVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbCkgPD0gc2l6ZW9mKEFTVDo6RG90RXhwcmVzc2lvbiksICJEb3QgZXhwcmVz
c2lvbnMgbmVlZCB0byBiZSBhYmxlIHRvIGJlY29tZSBFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWxz
IHdpdGhvdXQgdXBkYXRpbmcgYmFja3JlZmVyZW5jZXMiKTsKICAgICAgICAgICAgICAgICAgICAg
TGV4ZXI6OlRva2VuIG9yaWdpbiA9IGRvdEV4cHJlc3Npb24ub3JpZ2luKCk7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBQZXJoYXBzIGRvIHRoaXMgd2l0aCB2YXJpYW50cyBvciBhIFJl
d3JpdGVyIGluc3RlYWQuCiAgICAgICAgICAgICAgICAgICAgIGRvdEV4cHJlc3Npb24ufkRvdEV4
cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAgICAgICAgbmV3ICgmZG90RXhwcmVzc2lvbikgQVNU
OjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoV1RGTW92ZShvcmlnaW4pLCAqbWVtYmVyKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXV0byBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwgPSBBU1Q6OkVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbDo6d3JhcChXVEZNb3ZlKG9yaWdpbiksIFdURk1vdmUoYmFz
ZU5hbWUpLCBXVEZNb3ZlKG1lbWJlck5hbWUpLCBlbnVtZXJhdGlvbkRlZmluaXRpb24sICptZW1i
ZXIpOworICAgICAgICAgICAgICAgICAgICBuZXcgKCZkb3RFeHByZXNzaW9uKSBBU1Q6OkVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbChXVEZNb3ZlKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkpOwog
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIHNldEVycm9yKCk7CkBAIC0yMTIsMTUgKzIxNSwxOCBAQCB2b2lkIE5hbWVSZXNvbHZl
cjo6dmlzaXQoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCiAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGNhbGxFeHByZXNzaW9uKTsKIH0KIAotdm9pZCBOYW1lUmVzb2x2ZXI6OnZp
c2l0KEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmIGNv
bnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKQordm9pZCBOYW1lUmVz
b2x2ZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBlbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwpCiB7Ci0gICAgaWYgKGF1dG8gZW51bWVyYXRpb25UeXBlcyA9IG1fbmFtZUNv
bnRleHQuZ2V0VHlwZXMoY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVu
Y2UubGVmdCgpKSkgeworICAgIGlmIChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRp
b25NZW1iZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8gZW51bWVyYXRpb25U
eXBlcyA9IG1fbmFtZUNvbnRleHQuZ2V0VHlwZXMoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmxl
ZnQoKSkpIHsKICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uVHlwZXMtPnNpemUoKSA9PSAxKTsK
ICAgICAgICAgQVNUOjpOYW1lZFR5cGUmIHR5cGUgPSAoKmVudW1lcmF0aW9uVHlwZXMpWzBdOwog
ICAgICAgICBpZiAoaXM8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHR5cGUpKSB7CiAgICAg
ICAgICAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZpbml0aW9u
ID0gZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KHR5cGUpOwotICAgICAgICAg
ICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5tZW1iZXJCeU5hbWUo
Y29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UucmlnaHQoKSkpIHsK
LSAgICAgICAgICAgICAgICBjb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVy
ZW5jZS5zZXRFbnVtZXJhdGlvbk1lbWJlcihlbnVtZXJhdGlvbkRlZmluaXRpb24sICptZW1iZXIp
OworICAgICAgICAgICAgaWYgKGF1dG8qIG1lbWJlciA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi5t
ZW1iZXJCeU5hbWUoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLnJpZ2h0KCkpKSB7CisgICAgICAg
ICAgICAgICAgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLnNldEVudW1lcmF0aW9uTWVtYmVyKGVu
dW1lcmF0aW9uRGVmaW5pdGlvbiwgKm1lbWJlcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAppbmRleCBjNzJlMDhlMDYyMTA2
N2RiZTE5MGNhMDQwNjhhOWU5YTcwYmZkY2YxLi42NTE4OWUyYTgzNWI2ODUxZTVlMGQwYWFlMWNh
OGFlY2FmMmIzN2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTE5hbWVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHZpc2l0KEFTVDo6UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCB2aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKICAgICB2b2lk
IHZpc2l0KEFTVDo6Q2FsbEV4cHJlc3Npb24mKSBvdmVycmlkZTsKLSAgICB2b2lkIHZpc2l0KEFT
VDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJikgb3ZlcnJp
ZGU7CiAKICAgICBOYW1lQ29udGV4dCBtX25hbWVDb250ZXh0OwogICAgIEFTVDo6RnVuY3Rpb25E
ZWZpbml0aW9uKiBtX2N1cnJlbnRGdW5jdGlvbiB7IG51bGxwdHIgfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oCmluZGV4IDNjZjY2Y2Vk
MjIwZjYzMmE5N2MzYTQxZTlkODk1ZmQ1ZjEyYmFmM2MuLjU2NzFjNDUxM2FkNmViZjM1M2FhOTI4
MTliOTIxNzk1ZGNhYWQyOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQYXJzZXIuaApAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIldITFNM
Q2FsbEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTENvbW1hRXhwcmVzc2lvbi5oIgogI2lu
Y2x1ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xDb25zdGFu
dEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIldITFNM
Q29udGludWUuaCIKICNpbmNsdWRlICJXSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oIgogI2lu
Y2x1ZGUgIldITFNMRG9XaGlsZUxvb3AuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCmluZGV4IDdmZDM2NzVhYTNhMWIzN2My
OTZhMzJjOTVjZWU4MmRhZGY2OWE0OGIuLjZlZjU3NmM5OWM3NWFjOWEzNzNmNDdmMzdkZDlhYmQ0
MWQ1NGQ5ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMVmlzaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xWaXNpdG9yLmNwcApAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgIldITFNMQ2Fs
bEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJXSExTTENvbW1hRXhwcmVzc2lvbi5oIgogI2luY2x1
ZGUgIldITFNMQ29uc3RhbnRFeHByZXNzaW9uLmgiCi0jaW5jbHVkZSAiV0hMU0xDb25zdGFudEV4
cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIldITFNMQ29u
dGludWUuaCIKICNpbmNsdWRlICJXSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oIgogI2luY2x1
ZGUgIldITFNMRG9XaGlsZUxvb3AuaCIKQEAgLTQ4LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJXSExT
TEVmZmVjdGZ1bEV4cHJlc3Npb25TdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJXSExTTEVudW1lcmF0
aW9uRGVmaW5pdGlvbi5oIgogI2luY2x1ZGUgIldITFNMRW51bWVyYXRpb25NZW1iZXIuaCIKKyNp
bmNsdWRlICJXSExTTEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5oIgogI2luY2x1ZGUgIldITFNM
RXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgIldITFNMRmFsbHRocm91Z2guaCIKICNpbmNsdWRlICJX
SExTTEZsb2F0TGl0ZXJhbC5oIgpAQCAtMjY4LDggKzI2OCw4IEBAIHZvaWQgVmlzaXRvcjo6dmlz
aXQoQVNUOjpDb25zdGFudEV4cHJlc3Npb24mIGNvbnN0YW50RXhwcmVzc2lvbikKICAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KG51bGxMaXRlcmFsKTsKICAgICB9LCBbJl0oQVNUOjpCb29sZWFu
TGl0ZXJhbCYgYm9vbGVhbkxpdGVyYWwpIHsKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGJv
b2xlYW5MaXRlcmFsKTsKLSAgICB9LCBbJl0oQVNUOjpDb25zdGFudEV4cHJlc3Npb25FbnVtZXJh
dGlvbk1lbWJlclJlZmVyZW5jZSYgY29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJS
ZWZlcmVuY2UpIHsKLSAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGNvbnN0YW50RXhwcmVzc2lv
bkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlKTsKKyAgICB9LCBbJl0oQVNUOjpFbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgeworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKTsKICAgICB9KSk7CiB9CiAK
QEAgLTM0Niw3ICszNDYsNyBAQCB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6TnVsbExpdGVyYWxU
eXBlJiBudWxsTGl0ZXJhbFR5cGUpCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqbnVsbExp
dGVyYWxUeXBlLnJlc29sdmVkVHlwZSgpKTsKIH0KIAotdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6
OkNvbnN0YW50RXhwcmVzc2lvbkVudW1lcmF0aW9uTWVtYmVyUmVmZXJlbmNlJikKK3ZvaWQgVmlz
aXRvcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmKQogewogfQogCkBAIC00
NTEsNiArNDUxLDggQEAgdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkV4cHJlc3Npb24mIGV4cHJl
c3Npb24pCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OlRlcm5hcnlF
eHByZXNzaW9uPihleHByZXNzaW9uKSk7CiAgICAgZWxzZSBpZiAoaXM8QVNUOjpVbnNpZ25lZElu
dGVnZXJMaXRlcmFsPihleHByZXNzaW9uKSkKICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRv
d25jYXN0PEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbD4oZXhwcmVzc2lvbikpOworICAgIGVs
c2UgaWYgKGlzPEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsPihleHByZXNzaW9uKSkKKyAg
ICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsPihleHByZXNzaW9uKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChpczxBU1Q6
OlZhcmlhYmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSk7CiAgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChkb3duY2FzdDxBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlPihleHByZXNzaW9uKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCmlu
ZGV4IGE2YWUyOTNhOWI4MzZkMTVhYTE2N2I3ZDQwOWZiMmE2ZTY0NWI0M2MuLmE1ZTRjOTZkOGEw
MWMyMzEzODJkMDZlN2EzOWY2MWM2YjJlM2JjZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5oCkBAIC02Myw3ICs2Myw3IEBAIGNs
YXNzIFVuc2lnbmVkSW50ZWdlckxpdGVyYWw7CiBjbGFzcyBGbG9hdExpdGVyYWw7CiBjbGFzcyBO
dWxsTGl0ZXJhbDsKIGNsYXNzIEJvb2xlYW5MaXRlcmFsOwotY2xhc3MgQ29uc3RhbnRFeHByZXNz
aW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2U7CitjbGFzcyBFbnVtZXJhdGlvbk1lbWJlckxp
dGVyYWw7CiBjbGFzcyBOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGU7CiBjbGFzcyBCbG9jazsK
IGNsYXNzIFN0YXRlbWVudDsKQEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbFR5cGUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgdmlzaXQoQVNUOjpGbG9hdExpdGVyYWxUeXBlJik7CiAgICAgdmlydHVhbCB2b2lk
IHZpc2l0KEFTVDo6TnVsbExpdGVyYWxUeXBlJik7Ci0gICAgdmlydHVhbCB2b2lkIHZpc2l0KEFT
VDo6Q29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmKTsKICAgICB2
aXJ0dWFsIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkF0dHJpYnV0ZSYpOwogICAgIHZpcnR1YWwg
dm9pZCB2aXNpdChBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYpOwogICAgIHZpcnR1
YWwgdm9pZCB2aXNpdChBU1Q6OkJsb2NrJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDA2ZjMyZDE5ZDgy
Yjc5NTM1ZTZkNTIzYTMzZmM0YTc2Yjg0ZjMyNGQuLjg0MGE3ZGIyNDUwZDEwYWFiNjVjOTc4YTI2
YWQwN2U2ZWE4YmUzYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0zMDksNiArMzA5LDggQEAgTW9kdWxl
cy93ZWJncHUvRE9NV2luZG93V2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJ
bmZlclR5cGVzLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xDaGVja2VyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50
SXRlbXMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVDb250ZXh0LmNwcAogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFJlc29sdmVPdmVybG9hZEltcGwuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2E5ZTFkZjYzYmE3OGQ3MzE1
ZmRjZGIyOTY5ZGFlOTY0MzgyOTM1OC4uYWU5MjI3MDBkZjQxMzg2MzgxOWFkNGIwMTYwZmJhY2Rl
ZmI0NzY3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtNjQwNiw3ICs2NDA2LDYgQEAKIAkJMUMyNEVFQTcxQzcyQTdCNDAwODBG
OEZDIC8qIEpTRm9udEZhY2VTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SlNGb250RmFjZVNldC5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0ZvbnRGYWNl
U2V0Lmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTFDMjY0OTc5MEQ3
RTI0OEEwMEJEMTBGMiAvKiBEb2N1bWVudExvYWRlck1hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudExvYWRlck1hYy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTFDMzI0OTEwMUM2RDZBM0IwMDdFREIzMiAvKiBGb250VmFyaWFudEJ1
aWxkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udFZhcmlh
bnRCdWlsZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMUMzMzI3NkMyMUNF
REE0MjAwMERDOUYyIC8qIFdITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMRW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFDMzMyNzcxMjFDRjBCRTEwMDBEQzlGMiAvKiBXSExTTE5hbWVkVHlwZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXSExTTE5hbWVkVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQzMzMjc3MjIxQ0YwRDJFMDAwREM5RjIgLyogV0hMU0xVbm5hbWVkVHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXSExTTFVubmFtZWRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTFDMzk2OUNGMUI3NDIxMUUwMDJCQ0ZBNyAvKiBGb250Q2FjaGVDb3JlVGV4dC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250Q2FjaGVDb3JlVGV4dC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzI2Nyw3ICsxMzI2Niw3IEBACiAJ
CUMyMUJGNkZGMjFDRDg5QzIwMDIyNzk3OSAvKiBXSExTTElmU3RhdGVtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdITFNMSWZTdGF0ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzIxQkY3MDAyMUNEODlDMjAwMjI3OTc5IC8qIFdITFNMRmFsbHRocm91Z2guaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xGYWxsdGhyb3VnaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjFCRjcwMTIxQ0Q4OUM0MDAyMjc5NzkgLyogV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0hMU0xEZXJlZmVyZW5jZUV4cHJlc3Npb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQzIxQkY3MDIyMUNEODlDNDAwMjI3OTc5IC8qIFdITFNMQ29uc3Rh
bnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJSZWZlcmVuY2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xDb25zdGFudEV4cHJlc3Npb25FbnVtZXJhdGlvbk1lbWJlclJlZmVyZW5jZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjFCRjcwMjIxQ0Q4OUM0MDAyMjc5NzkgLyogV0hM
U0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xFbnVtZXJh
dGlvbk1lbWJlckxpdGVyYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIxQkY3
MDMyMUNEODlDNTAwMjI3OTc5IC8qIFdITFNMUmV0dXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
UmV0dXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzA0MjFDRDg5QzYw
MDIyNzk3OSAvKiBXSExTTFdoaWxlTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFdoaWxlTG9v
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjcwNTIxQ0Q4OUM3MDAyMjc5
NzkgLyogV0hMU0xGdW5jdGlvbkF0dHJpYnV0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEZ1bmN0
aW9uQXR0cmlidXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzMyMyw2ICsx
MzMyMiwxMCBAQAogCQlDMjFCRjczQTIxQ0Q4RDcwMDAyMjc5NzkgLyogV0hMU0xQcm9ncmFtLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdITFNMUHJvZ3JhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMjFCRjc0MjIxQ0Q5NjNCMDAyMjc5NzkgLyogV0hMU0xTdGFuZGFyZExpYnJhcnkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV0hMU0xTdGFuZGFyZExpYnJhcnkuaDsgcGF0aCA9IERlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvV0hMU0xTdGFuZGFyZExpYnJhcnkuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BS
T0RVQ1RTX0RJUjsgfTsKIAkJQzIxQkY3NDUyMUNEOTY5ODAwMjI3OTc5IC8qIFdITFNMU3RhbmRh
cmRMaWJyYXJ5LnR4dCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBXSExTTFN0YW5kYXJkTGlicmFyeS50eHQ7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUMyMURGMkU3MUQ5RTRFOTkwMEY1QjI0QyAvKiBDU1NGb250VmFy
aWF0aW9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NT
Rm9udFZhcmlhdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIx
REYyRTgxRDlFNEU5OTAwRjVCMjRDIC8qIENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250VmFyaWF0aW9uVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIzNEE5ODUyMUU4ODZBOTAwM0M5ODREIC8qIFdITFNM
VmlzaXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFZpc2l0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTk4NzIxRTg4NkFEMDAzQzk4NEQgLyogV0hMU0xW
aXNpdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMVmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMjM0QTk4QTIxRTg4ODNFMDAzQzk4NEQgLyogV0hMU0xOYW1lUmVzb2x2
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lUmVzb2x2ZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlDMjM0QTk4QzIxRTg4ODNFMDAzQzk4NEQgLyogV0hMU0xO
YW1lUmVzb2x2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xOYW1lUmVzb2x2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzIzNEE5OEQyMUU4ODg4NDAwM0M5ODREIC8qIFdITFNM
TmFtZUNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xOYW1lQ29udGV4dC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzMzMiwxMCArMTMzMzUsMTAgQEAKIAkJ
QzIzNEE5OUEyMUU5MEY1NjAwM0M5ODREIC8qIFdITFNMSW5mZXJUeXBlcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXSExTTEluZmVyVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMjM0QTk5QjIxRTkwRjU3MDAzQzk4NEQgLyogV0hMU0xJbmZlclR5cGVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMSW5mZXJUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDMjM0QTk5RDIxRTkxMEJEMDAzQzk4NEQgLyogV0hMU0xSZXNvbHZpbmdUeXBlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdITFNMUmVzb2x2aW5nVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlDMjFERjJFNzFEOUU0RTk5MDBGNUIyNEMgLyogQ1NTRm9udFZhcmlhdGlvblZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZvbnRWYXJpYXRpb25W
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUMyMURGMkU4MUQ5RTRFOTkw
MEY1QjI0QyAvKiBDU1NGb250VmFyaWF0aW9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ1NTRm9udFZhcmlhdGlvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUMyMzRBOTg1MjFFODg2QTkwMDNDOTg0RCAvKiBXSExTTFZpc2l0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xWaXNpdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQzIzNEE5ODcyMUU4ODZBRDAwM0M5ODREIC8qIFdITFNMVmlzaXRvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXSExTTFZpc2l0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIzNEE5QkUyMUU5M0Y1MDAwM0M5ODREIC8qIFdITFNMQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXSExTTENoZWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MjM0QTlDMDIxRTkzRjUxMDAzQzk4NEQgLyogV0hMU0xDaGVja2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMQ2hlY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjM0QTlDMTIx
RTkzRjUyMDAzQzk4NEQgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDMjM0QTlDMjIxRTkzRjUyMDAzQzk4NEQgLyogV0hMU0xHYXRoZXJF
bnRyeVBvaW50SXRlbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRl
bXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI0NThFNjExRkU4OTc5RTAwNTk0
NzU5IC8qIEZvbnRDYWNoZUNvcmVUZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnRDYWNoZUNvcmVU
ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyNjAxN0ExMUM3MkRDOTkwMEY3
NEExNiAvKiBDU1NGb250RmFjZVNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDU1NGb250RmFjZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyNjAxN0EyMUM3MkRDOTkwMEY3NEExNiAvKiBDU1NGb250RmFjZVNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NGb250RmFjZVNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjUzOTksNiArMjU0MDIsMTAgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCiAJCQkJQzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5IC8qIEFTVCAqLywK
KwkJCQlDMjM0QTlCRTIxRTkzRjUwMDAzQzk4NEQgLyogV0hMU0xDaGVja2VyLmNwcCAqLywKKwkJ
CQlDMjM0QTlDMDIxRTkzRjUxMDAzQzk4NEQgLyogV0hMU0xDaGVja2VyLmggKi8sCisJCQkJQzIz
NEE5QzEyMUU5M0Y1MjAwM0M5ODREIC8qIFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcCAq
LywKKwkJCQlDMjM0QTlDMjIxRTkzRjUyMDAzQzk4NEQgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50
SXRlbXMuaCAqLywKIAkJCQlDMjM0QTk5QTIxRTkwRjU2MDAzQzk4NEQgLyogV0hMU0xJbmZlclR5
cGVzLmNwcCAqLywKIAkJCQlDMjM0QTk5QjIxRTkwRjU3MDAzQzk4NEQgLyogV0hMU0xJbmZlclR5
cGVzLmggKi8sCiAJCQkJQzIxMEU5MTEyMUI0QkQxMDAwQjdGODNEIC8qIFdITFNMTGV4ZXIuY3Bw
ICovLApAQCAtMjU0MzYsNyArMjU0NDMsNiBAQAogCQkJCUMyMUJGNzE2MjFDRDg5RDUwMDIyNzk3
OSAvKiBXSExTTENhbGxFeHByZXNzaW9uLmggKi8sCiAJCQkJQzIxQkY3MDYyMUNEODlDNzAwMjI3
OTc5IC8qIFdITFNMQ29tbWFFeHByZXNzaW9uLmggKi8sCiAJCQkJQzIxQkY3MzMyMUNEODlGMDAw
MjI3OTc5IC8qIFdITFNMQ29uc3RhbnRFeHByZXNzaW9uLmggKi8sCi0JCQkJQzIxQkY3MDIyMUNE
ODlDNDAwMjI3OTc5IC8qIFdITFNMQ29uc3RhbnRFeHByZXNzaW9uRW51bWVyYXRpb25NZW1iZXJS
ZWZlcmVuY2UuaCAqLywKIAkJCQlDMjFCRjZGNTIxQ0Q4OUI1MDAyMjc5NzkgLyogV0hMU0xDb250
aW51ZS5oICovLAogCQkJCUMyMUJGNzAxMjFDRDg5QzQwMDIyNzk3OSAvKiBXSExTTERlcmVmZXJl
bmNlRXhwcmVzc2lvbi5oICovLAogCQkJCUMyMUJGNzE4MjFDRDg5RDcwMDIyNzk3OSAvKiBXSExT
TERvdEV4cHJlc3Npb24uaCAqLywKQEAgLTI1NDQ0LDcgKzI1NDUwLDcgQEAKIAkJCQlDMjFCRjcy
ODIxQ0Q4OUU1MDAyMjc5NzkgLyogV0hMU0xFZmZlY3RmdWxFeHByZXNzaW9uU3RhdGVtZW50Lmgg
Ki8sCiAJCQkJQzIxQkY3MjAyMUNEODlERDAwMjI3OTc5IC8qIFdITFNMRW51bWVyYXRpb25EZWZp
bml0aW9uLmggKi8sCiAJCQkJQzIxQkY3MjYyMUNEODlFMzAwMjI3OTc5IC8qIFdITFNMRW51bWVy
YXRpb25NZW1iZXIuaCAqLywKLQkJCQkxQzMzMjc2QzIxQ0VEQTQyMDAwREM5RjIgLyogV0hMU0xF
bnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCAqLywKKwkJCQlDMjFCRjcwMjIxQ0Q4OUM0MDAyMjc5
NzkgLyogV0hMU0xFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuaCAqLywKIAkJCQlDMjFCRjcwQzIx
Q0Q4OUNDMDAyMjc5NzkgLyogV0hMU0xFeHByZXNzaW9uLmggKi8sCiAJCQkJQzIxQkY3MDAyMUNE
ODlDMjAwMjI3OTc5IC8qIFdITFNMRmFsbHRocm91Z2guaCAqLywKIAkJCQlDMjFCRjczNTIxQ0Q4
OUYyMDAyMjc5NzkgLyogV0hMU0xGbG9hdExpdGVyYWwuaCAqLywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359018</attachid>
            <date>2019-01-13 20:05:56 -0800</date>
            <delta_ts>2019-01-13 20:34:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193080-20190113200538.patch</filename>
            <type>text/plain</type>
            <size>85295</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5OTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjYxMDk5OGVhZjJiOWZh
MGM5ZWVkMDM5NjA1NTM0OGY1MzhiNzNkNS4uNDMzMmY5N2U4MzY4M2M0YTYxM2JiMTg2YTFhMjIz
MjUxNWM2MzdhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDE5LTAxLTEzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgdGhlIFR5cGUgQ2hlY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkzMDgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHRyYW5zbGF0aW9uIG9mIGh0dHBzOi8vZ2l0aHVi
LmNvbS9ncHV3ZWIvV0hMU0wvYmxvYi9tYXN0ZXIvU291cmNlL0NoZWNrZXIubWpzIGludG8gQysr
LgorICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICBUaGUgQ2hlY2tlciBw
YXNzZXMgdHlwZXMgYmV0d2VlbiBuZXN0ZWQgZXhwcmVzc2lvbnMuIEFuIGlubmVyIGV4cHJlc3Np
b24gZmlndXJlcyBvdXQgd2hhdCB0eXBlIGl0IGlzLCBhbmQKKyAgICAgICAgcGFzc2VzIHRoYXQg
aW5mb3JtYXRpb24gdXAgdG8gYW4gb3V0ZXIgZXhwcmVzc2lvbi4gVGhpcyBpcyBkb25lIHZpYSBy
ZWFkaW5nL3dyaXRpbmcgaW50byBhIEhhc2hNYXAsCisgICAgICAgIGJlY2F1c2UgYWxsIHRoZSB0
eXBlIGluZm9ybWF0aW9uIG5lZWRzIHRvIGJlIHNhdmVkIHNvIHRoYXQgdGhlIE1ldGFsIGNvZGVn
ZW4gY2FuIGVtaXQgdGhlIGNvcnJlY3QgdHlwZXMuCisKKyAgICAgICAgVGhlc2UgdHlwZXMgY2Fu
IGhhdmUgdHdvIGZvcm1zOiBBIHJlZ3VsYXIgdHlwZSAobGlrZSAiaW50W10iKSBvciBhIFJlc29s
dmFibGVUeXBlLiBSZXNvbHZhYmxlVHlwZXMKKyAgICAgICAgcmVwcmVzZW50IGxpdGVyYWxzLCBz
aW5jZSBhIGxpdGVyYWwgbmVlZHMgdG8ga25vdyBpdHMgY29udGV4dCBiZWZvcmUgaXQga25vd3Mg
d2hhdCB0eXBlIGl0IHNob3VsZCBiZS4gU28sCisgICAgICAgIGlmIHlvdSBoYXZlIGEgZnVuY3Rp
b24gbGlrZSAidm9pZCBmb28oaW50IHgpIiBhbmQgeW91IGhhdmUgYSBjYWxsIGxpa2UgImZvbygz
KSIsIHRoZSAzJ3MgUmVzb2x2YWJsZVR5cGUKKyAgICAgICAgZ2V0cyBwYXNzZWQgdG8gdGhlIENh
bGxFeHByZXNzaW9uLCB3aGljaCB0aGVuIHVuaWZpZXMgaXQgd2l0aCB0aGUgZnVuY3Rpb24ncyBw
YXJhbWV0ZXIgdHlwZSwgdGhlcmVieQorICAgICAgICByZXNvbHZpbmcgdGhlIDMgdG8gYmUgYW4g
aW50LgorCisgICAgICAgIFRoZXJlIGFyZSBhIGZldyBleGFtcGxlcyB3aGVyZSBtdWx0aXBsZSBl
eHByZXNzaW9ucyB3aWxsIGhhdmUgdGhlIHNhbWUgdHlwZTogInJldHVybiAoZm9vLCAzKS4iIElm
IHRob3NlCisgICAgICAgIHR5cGVzIGFyZSByZWd1bGFyIHR5cGVzLCB0aGVuIGl0J3Mgbm8gcHJv
YmxlbTsgd2UgY2FuIGp1c3QgY2xvbmUoKSB0aGUgdHlwZSBhbmQgc3RpY2sgYm90aCBpbiB0aGUg
SGFzaE1hcC4KKyAgICAgICAgSG93ZXZlciwgaWYgdGhlIHR5cGUgaXMgYSBSZXNvbHZhYmxlVHlw
ZSwgYW4gb3V0ZXIgZXhwcmVzc2lvbiB3aWxsIG9ubHkgcmVzb2x2ZSB0aGF0IHR5cGUgb25jZSwg
c28gdGhlIHR3bworICAgICAgICBSZXNvbHZhYmxlVHlwZXMgY2FuJ3QgYmUgZGlzdGluY3QuIFRo
ZSBDaGVja2VyIHNvbHZlcyB0aGlzIHByb2JsZW0gYnkgbWFraW5nIGEgcmVmZXJlbmNlLWNvdW50
ZWQgd3JhcHBlcgorICAgICAgICBhcm91bmQgUmVzb2x2YWJsZVR5cGVzIGFuZCB1c2luZyB0aGF0
IGluIHRoZSBIYXNoTWFwIGluc3RlYWQuCisKKyAgICAgICAgT25jZSBhbGwgdGhlIFJlc29sdmFi
bGVUeXBlcyBoYXZlIGJlZW4gcmVzb2x2ZWQsIGEgc2Vjb25kIHBhc3MgcnVucyB0aHJvdWdoIHRo
ZSBlbnRpcmUgSGFzaE1hcCBhbmQgYXNzaWducworICAgICAgICB0aGUga25vd24gdHlwZXMgdG8g
YWxsIHRoZSBleHByZXNzaW9ucy4gTFZhbHVlcyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBhZGRyZXNz
IHNwYWNlcyBhcmUgaGVsZCBpbiBhIHBhcmFsbGVsCisgICAgICAgIEhhc2hNYXAsIGFuZCBhcmUg
YXNzaWduZWQgdG8gdGhlIGV4cHJlc3Npb24gYXQgdGhlIHNhbWUgdGltZS4gVGhlIHR5cGUgaXMg
YW4gT3B0aW9uYWw8QWRkcmVzc1NwYWNlPiBiZWNhdXNlCisgICAgICAgIGFkZHJlc3Mgc3BhY2Vz
IGFyZSBvbmx5IHJlbGV2YW50IGlmIHRoZSB2YWx1ZSBpcyBhbiBsdmFsdWU7IGlmIGl0J3MgbnVs
bG9wdCB0aGVuIHRoYXQgbWVhbnMgdGhlIGV4cHJlc3Npb24KKyAgICAgICAgaXMgYW4gcnZhbHVl
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIGl0IGlzbid0IGhvb2tlZCB1cCB5ZXQu
IE5vdCBlbm91Z2ggb2YgdGhlIGNvbXBpbGVyIGV4aXN0cyB0byBoYXZlIGFueSBtZWFuaW5nZnVs
IHNvcnQKKyAgICAgICAgb2YgdGVzdC4gV2hlbiBlbm91Z2ggb2YgdGhlIGNvbXBpbGVyIGlzIHBy
ZXNlbnQsIEknbGwgcG9ydCB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uJ3MgdGVzdCBzdWl0
ZS4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVXaXRoT3BlcmF0b3JBbmRlcklu
ZGV4ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVXaXRoT3BlcmF0b3JMZW5n
dGgpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OnJlc29sdmVXaXRoUmVmZXJlbmNlQ29tcGFy
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6cmVzb2x2ZUJ5SW5zdGFudGlhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Y2hlY2tTZW1hbnRpY3MpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OmNoZWNrT3BlcmF0b3JPdmVybG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6Q2hlY2tlcjo6Q2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tl
cjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmFzc2lnblR5cGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpjaGVja1NoYWRlclR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Om1hdGNoQW5kQ29tbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpDaGVja2VyOjpyZWN1cnNlQW5kR2V0SW5mbyk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6Q2hlY2tlcjo6Z2V0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hl
Y2tlcjo6YXNzaWduVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Q2hlY2tlcjo6Zm9y
d2FyZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmdldFVubmFtZWRUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNj
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpyZWN1cnNlQW5kV3JhcEJh
c2VUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjppc0Jvb2xUeXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpyZWN1cnNlQW5kUmVxdWlyZUJvb2xU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpjaGVjayk6CisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6R2F0aGVyZXI6OkdhdGhlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpHYXRoZXJlcjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Okdh
dGhlcmVyOjp0YWtlRW50cnlQb2ludEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpH
YXRoZXJlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmdhdGhlckVudHJ5UG9p
bnRJdGVtcyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRy
eVBvaW50SXRlbXMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6RW50cnlQb2lu
dEl0ZW06OkVudHJ5UG9pbnRJdGVtKToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKIDIwMTktMDEtMTMgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgTWlub3Igb3B0aW1p
emF0aW9uIHRvIFJlbmRlclRleHQ6OnNldFJlbmRlcmVkVGV4dCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41MGQ0MzQ1MTMyNzllZjY0ZGEyNTg5NTFiODU1ZTI5OGIwY2Y4ODRjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNw
cApAQCAtMCwwICsxLDE0NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV0hMU0xDaGVja2VyLmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVk
ZSAiV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5o
IgorI2luY2x1ZGUgIldITFNMQXNzaWdubWVudEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExT
TENhbGxFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDb21tYUV4cHJlc3Npb24uaCIKKyNp
bmNsdWRlICJXSExTTERlcmVmZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRG9X
aGlsZUxvb3AuaCIKKyNpbmNsdWRlICJXSExTTERvdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJX
SExTTEZvckxvb3AuaCIKKyNpbmNsdWRlICJXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oIgor
I2luY2x1ZGUgIldITFNMSWZTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTEluZGV4RXhwcmVz
c2lvbi5oIgorI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgorI2luY2x1ZGUgIldITFNMTG9n
aWNhbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTExvZ2ljYWxOb3RFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLmgiCisjaW5jbHVk
ZSAiV0hMU0xNYWtlUG9pbnRlckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJU
eXBlLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiV0hMU0xSZWFkTW9k
aWZ5V3JpdGVFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZhYmxlVHlwZS5oIgor
I2luY2x1ZGUgIldITFNMUmVzb2x2ZU92ZXJsb2FkSW1wbC5oIgorI2luY2x1ZGUgIldITFNMUmVz
b2x2aW5nVHlwZS5oIgorI2luY2x1ZGUgIldITFNMUmV0dXJuLmgiCisjaW5jbHVkZSAiV0hMU0xT
d2l0Y2hTdGF0ZW1lbnQuaCIKKyNpbmNsdWRlICJXSExTTFRlcm5hcnlFeHByZXNzaW9uLmgiCisj
aW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCisjaW5jbHVkZSAiV0hMU0xXaGlsZUxvb3AuaCIKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wg
eworCitjbGFzcyBQT0RDaGVja2VyIDogcHVibGljIFZpc2l0b3IgeworcHVibGljOgorICAgIFBP
RENoZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIH5QT0RDaGVja2VyKCkgPSBkZWZh
dWx0OworCisgICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVy
YXRpb25EZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQo
ZW51bWVyYXRpb25EZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TmF0
aXZlVHlwZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pIG92ZXJyaWRlCisgICAg
eworICAgICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc051bWJlcigpCisgICAgICAg
ICAgICAmJiAhbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzVmVjdG9yKCkKKyAgICAgICAgICAgICYm
ICFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNNYXRyaXgoKSkKKyAgICAgICAgICAgIHNldEVycm9y
KCk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24mIHN0
cnVjdHVyZURlZmluaXRpb24pIG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNp
dChzdHJ1Y3R1cmVEZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlw
ZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlz
aXRvcjo6dmlzaXQodHlwZURlZmluaXRpb24pOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNU
OjpBcnJheVR5cGUmIGFycmF5VHlwZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6
OnZpc2l0KGFycmF5VHlwZSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJU
eXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBzZXRFcnJvcigpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJl
bmNlJiB0eXBlUmVmZXJlbmNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVS
ZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnR5
cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgIH0KK307CisKK3N0YXRpYyBPcHRpb25h
bDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVXaXRoT3BlcmF0b3JBbmRl
ckluZGV4ZXIoQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24sIEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlJiBmaXJzdEFyZ3VtZW50LCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNz
KQoreworICAgIGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7CisgICAgYm9vbCBpc09wZXJhdG9y
ID0gdHJ1ZTsKKyAgICBhdXRvIHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRl
clR5cGU+KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGZpcnN0QXJndW1l
bnQuYWRkcmVzc1NwYWNlKCksIGZpcnN0QXJndW1lbnQuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsK
KyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVy
cy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVz
c2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGZpcnN0QXJndW1lbnQuY2xvbmUo
KSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0
ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNl
Ojp3cmFwKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3Mu
dWludFR5cGUoKSkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7Cisg
ICAgcmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRy
aWJ1dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygi
b3BlcmF0b3ImW10iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJh
bWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKK30KKwor
c3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZVdp
dGhPcGVyYXRvckxlbmd0aChBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lvbiwgQVNU
OjpVbm5hbWVkVHlwZSYgZmlyc3RBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2lj
cykKK3sKKyAgICBib29sIGlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgIGJvb2wgaXNPcGVyYXRv
ciA9IHRydWU7CisgICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MudWludFR5
cGUoKSk7CisgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJzOworICAgIHBh
cmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2Fs
bEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBmaXJzdEFyZ3VtZW50
LmNsb25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAg
cmV0dXJuIEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1
dGVCbG9jaygpLCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3Bl
cmF0b3IubGVuZ3RoIiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1vdmUocGFy
YW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7Cit9CisK
K3N0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJlc29sdmVX
aXRoUmVmZXJlbmNlQ29tcGFyYXRvcihBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxsRXhwcmVzc2lv
biwgUmVzb2x2aW5nVHlwZSYgZmlyc3RBcmd1bWVudCwgUmVzb2x2aW5nVHlwZSYgc2Vjb25kQXJn
dW1lbnQsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7CisgICAgYm9vbCBpc1Jlc3Ry
aWN0ZWQgPSBmYWxzZTsKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGF1dG8gcmV0
dXJuVHlwZSA9IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oY2FsbEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLmJvb2xUeXBlKCkpOworICAgIGF1dG8gYXJndW1l
bnRUeXBlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVu
bmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7
CisgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKKyAgICB9LCBbJl0oUmVmPFJl
c29sdmFibGVUeXBlUmVmZXJlbmNlPiYpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7
CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1l
ZFR5cGU+IHsKKyAgICAgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS0+Y2xvbmUoKTsKKyAgICAg
ICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4geworICAgICAgICAgICAgLy8gV2UgZW5jb3VudGVyZWQgIm51bGwgPT0g
bnVsbCIuCisgICAgICAgICAgICAvLyBUaGUgdHlwZSBpc24ndCBvYnNlcnZhYmxlLCBzbyB3ZSBj
YW4gcGljayB3aGF0ZXZlciB3ZSB3YW50LgorICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2Fu
IHByb2JhYmx5IGJlIGdlbmVyYWxpemVkLCB1c2luZyB0aGUgInByZWZlcnJlZCB0eXBlIiBpbmZy
YXN0cnVjdHVyZSB1c2VkIGJ5IGdlbmVyaWMgbGl0ZXJhbHMKKyAgICAgICAgICAgIHJldHVybiBB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdp
bigpKSwgaW50cmluc2ljcy5pbnRUeXBlKCkpOworICAgICAgICB9KSwgc2Vjb25kQXJndW1lbnQp
OworICAgIH0pLCBmaXJzdEFyZ3VtZW50KTsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
IHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0
aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVy
cygpLCB7IGFyZ3VtZW50VHlwZS0+Y2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBX
VEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZp
ZXJzKCksIHsgV1RGTW92ZShhcmd1bWVudFR5cGUpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQs
IFdURjo6bnVsbG9wdCkpOworICAgIHJldHVybiBBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b24oQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5v
cmlnaW4oKSksIEFTVDo6QXR0cmlidXRlQmxvY2soKSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKHJl
dHVyblR5cGUpLCBTdHJpbmcoIm9wZXJhdG9yPT0iLCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRl
cmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNS
ZXN0cmljdGVkKTsKK30KKworc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNs
YXJhdGlvbj4gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihBU1Q6OkNhbGxFeHByZXNzaW9uJiBjYWxs
RXhwcmVzc2lvbiwgY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5n
VHlwZT4+JiB0eXBlcywgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcykKK3sKKyAgICBpZiAo
Y2FsbEV4cHJlc3Npb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIgJiYgdHlwZXMuc2l6ZSgpID09
IDIpIHsKKyAgICAgICAgYXV0byogZmlyc3RBcmd1bWVudEFycmF5UmVmID0gV1RGOjp2aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5
cGUpIC0+IEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlKiB7CisgICAgICAgICAgICBpZiAoaXM8QVNU
OjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5h
bWVkVHlwZSkpKQorICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpBcnJheVJl
ZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkp
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0sIFtdKFJlZjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSogeworICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0pLCB0eXBlc1swXS5nZXQoKSk7CisgICAg
ICAgIGJvb2wgc2Vjb25kQXJndW1lbnRJc1VpbnQgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wg
eworICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXModW5uYW1lZFR5cGUsIGludHJpbnNpY3MudWlu
dFR5cGUoKSk7CisgICAgICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBy
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gcmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkuY2FuUmVzb2x2ZShpbnRyaW5z
aWNzLnVpbnRUeXBlKCkpOworICAgICAgICB9KSwgdHlwZXNbMV0uZ2V0KCkpOworICAgICAgICBp
ZiAoZmlyc3RBcmd1bWVudEFycmF5UmVmICYmIHNlY29uZEFyZ3VtZW50SXNVaW50KQorICAgICAg
ICAgICAgcmV0dXJuIHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIoY2FsbEV4cHJlc3Np
b24sICpmaXJzdEFyZ3VtZW50QXJyYXlSZWYsIGludHJpbnNpY3MpOworICAgIH0gZWxzZSBpZiAo
Y2FsbEV4cHJlc3Npb24ubmFtZSgpID09ICJvcGVyYXRvci5sZW5ndGgiICYmIHR5cGVzLnNpemUo
KSA9PSAxKSB7CisgICAgICAgIGF1dG8qIGZpcnN0QXJndW1lbnRSZWZlcmVuY2UgPSBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5h
bWVkVHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICAgICAgaWYgKGlzPEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPihzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5uYW1l
ZFR5cGUpKSB8fCBpczxBU1Q6OkFycmF5VHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlw
ZSY+KHVubmFtZWRUeXBlKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuICZ1bm5hbWVkVHlwZTsK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9LCBbXShSZWY8UmVzb2x2YWJs
ZVR5cGVSZWZlcmVuY2U+JikgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0pLCB0eXBlc1swXS5nZXQoKSk7CisgICAgICAgIGlmIChm
aXJzdEFyZ3VtZW50UmVmZXJlbmNlKQorICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVXaXRoT3Bl
cmF0b3JMZW5ndGgoY2FsbEV4cHJlc3Npb24sICpmaXJzdEFyZ3VtZW50UmVmZXJlbmNlLCBpbnRy
aW5zaWNzKTsKKyAgICB9IGVsc2UgaWYgKGNhbGxFeHByZXNzaW9uLm5hbWUoKSA9PSAib3BlcmF0
b3I9PSIgJiYgdHlwZXMuc2l6ZSgpID09IDIpIHsKKyAgICAgICAgYXV0byBpc0FjY2VwdGFibGUg
PSBbXShSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKSAtPiBib29sIHsKKyAgICAgICAgICAg
IHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVu
bmFtZWRUeXBlKSk7CisgICAgICAgICAgICB9LCBbXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGlzPEFTVDo6TnVsbExpdGVyYWxUeXBlPihyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+
cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAgICAgICB9KSwgcmVzb2x2aW5nVHlwZSk7CisgICAg
ICAgIH07CisgICAgICAgIGlmIChpc0FjY2VwdGFibGUodHlwZXNbMF0uZ2V0KCkpICYmIGlzQWNj
ZXB0YWJsZSh0eXBlc1sxXS5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhS
ZWZlcmVuY2VDb21wYXJhdG9yKGNhbGxFeHByZXNzaW9uLCB0eXBlc1swXS5nZXQoKSwgdHlwZXNb
MV0uZ2V0KCksIGludHJpbnNpY3MpOworICAgIH0KKyAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
fQorCitzdGF0aWMgYm9vbCBjaGVja1NlbWFudGljcyhWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBp
bnB1dEl0ZW1zLCBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBvdXRwdXRJdGVtcywgY29uc3QgT3B0
aW9uYWw8QVNUOjpFbnRyeVBvaW50VHlwZT4mIGVudHJ5UG9pbnRUeXBlLCBjb25zdCBJbnRyaW5z
aWNzJiBpbnRyaW5zaWNzKQoreworICAgIHsKKyAgICAgICAgYXV0byBjaGVja0R1cGxpY2F0ZVNl
bWFudGljcyA9IFsmXShjb25zdCBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpdGVtcykgLT4gYm9v
bCB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgaXRlbXMuc2l6
ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zW2ldLnNlbWFudGljID09
IGl0ZW1zW2pdLnNlbWFudGljKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9OworICAgICAgICBpZiAoIWNoZWNrRHVwbGljYXRlU2VtYW50aWNzKGlu
cHV0SXRlbXMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWNoZWNr
RHVwbGljYXRlU2VtYW50aWNzKG91dHB1dEl0ZW1zKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8gY2hlY2tTZW1hbnRpY1R5cGVzID0gWyZd
KGNvbnN0IFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGl0ZW1zKSAtPiBib29sIHsKKyAgICAgICAg
ICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgICAgICAgICAgYXV0byBhY2Nl
cHRhYmxlID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBBU1Q6OkJhc2VT
ZW1hbnRpYyYgc2VtYW50aWMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
c2VtYW50aWMuaXNBY2NlcHRhYmxlVHlwZShpdGVtLnVubmFtZWRUeXBlLCBpbnRyaW5zaWNzKTsK
KyAgICAgICAgICAgICAgICB9KSwgaXRlbS5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAgaWYg
KCFhY2NlcHRhYmxlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYg
KCFjaGVja1NlbWFudGljVHlwZXMoaW5wdXRJdGVtcykpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY1R5cGVzKG91dHB1dEl0ZW1zKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8gY2hlY2tT
ZW1hbnRpY0ZvclNoYWRlclR5cGUgPSBbJl0oY29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYg
aXRlbXMsIEFTVDo6QmFzZVNlbWFudGljOjpTaGFkZXJJdGVtRGlyZWN0aW9uIGRpcmVjdGlvbikg
LT4gYm9vbCB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBpdGVtcykgeworICAgICAg
ICAgICAgICAgIGF1dG8gYWNjZXB0YWJsZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oY29uc3QgQVNUOjpCYXNlU2VtYW50aWMmIHNlbWFudGljKSAtPiBib29sIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljLmlzQWNjZXB0YWJsZUZvclNoYWRlckl0ZW1EaXJl
Y3Rpb24oZGlyZWN0aW9uLCBlbnRyeVBvaW50VHlwZSk7CisgICAgICAgICAgICAgICAgfSksIGl0
ZW0uc2VtYW50aWMpOworICAgICAgICAgICAgICAgIGlmICghYWNjZXB0YWJsZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH07CisgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY0ZvclNoYWRl
clR5cGUoaW5wdXRJdGVtcywgQVNUOjpCYXNlU2VtYW50aWM6OlNoYWRlckl0ZW1EaXJlY3Rpb246
OklucHV0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFjaGVja1Nl
bWFudGljRm9yU2hhZGVyVHlwZShvdXRwdXRJdGVtcywgQVNUOjpCYXNlU2VtYW50aWM6OlNoYWRl
ckl0ZW1EaXJlY3Rpb246Ok91dHB1dCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgeworICAgICAgICBhdXRvIGNoZWNrUE9ERGF0YSA9IFsmXShjb25zdCBWZWN0b3I8
RW50cnlQb2ludEl0ZW0+JiBpdGVtcykgLT4gYm9vbCB7CisgICAgICAgICAgICBmb3IgKGF1dG8m
IGl0ZW0gOiBpdGVtcykgeworICAgICAgICAgICAgICAgIFBPRENoZWNrZXIgcG9kQ2hlY2tlcjsK
KyAgICAgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4oaXRlbS51bm5hbWVkVHlw
ZSkpCisgICAgICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0KGRv
d25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpLmVsZW1lbnRUeXBlKCkp
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihp
dGVtLnVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcG9kQ2hlY2tlci5jaGVja0Vy
cm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KGl0ZW0udW5uYW1l
ZFR5cGUpLmVsZW1lbnRUeXBlKCkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzPEFTVDo6
QXJyYXlUeXBlPihpdGVtLnVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcG9kQ2hl
Y2tlci5jaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KGl0ZW0udW5u
YW1lZFR5cGUpLnR5cGUoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAocG9kQ2hlY2tlci5lcnJvcigpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKCFjaGVja1BPRERhdGEo
aW5wdXRJdGVtcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghY2hl
Y2tQT0REYXRhKG91dHB1dEl0ZW1zKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY2hlY2tPcGVyYXRvck92ZXJs
b2FkKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24sIGNv
bnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MsIE5hbWVDb250ZXh0JiBuYW1lQ29udGV4dCkKK3sK
KyAgICBlbnVtIGNsYXNzIENoZWNrS2luZCB7CisgICAgICAgIEluZGV4LAorICAgICAgICBEb3QK
KyAgICB9OworCisgICAgYXV0byBjaGVja0dldHRlciA9IFsmXShDaGVja0tpbmQga2luZCkgLT4g
Ym9vbCB7CisgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENo
ZWNrS2luZDo6SW5kZXggPyAyIDogMTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5w
YXJhbWV0ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmlu
aXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICBpZiAo
aXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkgeworICAgICAgICAgICAgYXV0byYgdW5u
YW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAg
ICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fTsKKworICAgIGF1dG8gY2hlY2tTZXR0ZXIgPSBbJl0oQ2hlY2tLaW5kIGtpbmQpIC0+IGJvb2wg
eworICAgICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tp
bmQ6OkluZGV4ID8gMyA6IDI7CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpLnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGF1dG8mIGZpcnN0QXJndW1lbnRVbmlmeU5vZGUgPSAoKmZ1bmN0
aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAg
ICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKSkgewor
ICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBl
PihmaXJzdEFyZ3VtZW50VW5pZnlOb2RlKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50
ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGlmICghbWF0Y2hlcyhmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpLCAq
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvJiB2YWx1ZVR5cGUgPSAqZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKVtudW1FeHBlY3RlZFBhcmFtZXRlcnMgLSAxXS50eXBlKCk7CisgICAg
ICAgIGF1dG8gZ2V0dGVyTmFtZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkuc3Vic3RyaW5n
KDAsIGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgYXV0
byogZ2V0dGVyRnVuY3MgPSBuYW1lQ29udGV4dC5nZXRGdW5jdGlvbnMoZ2V0dGVyTmFtZSk7Cisg
ICAgICAgIGlmICghZ2V0dGVyRnVuY3MpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIFZlY3RvcjxSZXNvbHZpbmdUeXBlPiBhcmd1bWVudFR5cGVzOworICAgICAgICBWZWN0b3I8
c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gYXJndW1lbnRUeXBlUmVmZXJl
bmNlczsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1FeHBlY3RlZFBhcmFtZXRl
cnMgLSAxOyArK2kpCisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVuZCgoKmZ1bmN0aW9u
RGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKS0+Y2xvbmUoKSk7CisgICAgICAgIGZv
ciAoYXV0byYgYXJndW1lbnRUeXBlIDogYXJndW1lbnRUeXBlcykKKyAgICAgICAgICAgIGFyZ3Vt
ZW50VHlwZVJlZmVyZW5jZXMuYXBwZW5kKGFyZ3VtZW50VHlwZSk7CisgICAgICAgIE9wdGlvbmFs
PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QVNUOjpOYW1lZFR5cGU+PiBjYXN0UmV0dXJuVHlwZTsK
KyAgICAgICAgYXV0byogb3ZlcmxvYWQgPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwoKmdl
dHRlckZ1bmNzLCBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLCBjYXN0UmV0dXJuVHlwZSk7CisgICAg
ICAgIGlmICghb3ZlcmxvYWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1
dG8mIHJlc3VsdFR5cGUgPSBvdmVybG9hZC0+dHlwZSgpOworICAgICAgICByZXR1cm4gbWF0Y2hl
cyhyZXN1bHRUeXBlLCB2YWx1ZVR5cGUpOworICAgIH07CisKKyAgICBhdXRvIGNoZWNrQW5kZXIg
PSBbJl0oQ2hlY2tLaW5kIGtpbmQpIC0+IGJvb2wgeworICAgICAgICBzaXplX3QgbnVtRXhwZWN0
ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6OkluZGV4ID8gMiA6IDE7CisgICAgICAg
IGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSAhPSBudW1FeHBlY3Rl
ZFBhcmFtZXRlcnMpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlO
b2RlKCk7CisgICAgICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byYgdW5uYW1l
ZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICAg
ICAgaWYgKCFpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8m
IHVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCkp
LT51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5p
ZnlOb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBhdXRv
JiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7Cisg
ICAgICAgICAgICByZXR1cm4gaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpIHx8IGlz
PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgaWYgKCFmdW5jdGlvbkRlZmluaXRpb24uaXNPcGVyYXRvcigpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLmlzQ2FzdCgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3IrKyIgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ItLSIpIHsK
KyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09
IDEKKyAgICAgICAgICAgICYmIG1hdGNoZXMoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJz
KClbMF0udHlwZSgpLCBmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAgICB9CisgICAgaWYg
KGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yKyIgfHwgZnVuY3Rpb25EZWZp
bml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ItIikKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVm
aW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDEgfHwgZnVuY3Rpb25EZWZpbml0aW9uLnBh
cmFtZXRlcnMoKS5zaXplKCkgPT0gMjsKKyAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUo
KSA9PSAib3BlcmF0b3IqIgorICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09
ICJvcGVyYXRvci8iCisgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9w
ZXJhdG9yJSIKKyAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0
b3ImIgorICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcnwi
CisgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yXiIKKyAg
ICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I8PCIKKyAgICAg
ICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3ByZWF0b3I+PiIpCisgICAgICAg
IHJldHVybiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyOworICAg
IGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcn4iKQorICAgICAgICBy
ZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMTsKKyAgICBp
ZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I9PSIKKyAgICAgICAgfHwg
ZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I8IgorICAgICAgICB8fCBmdW5j
dGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcjw9IgorICAgICAgICB8fCBmdW5jdGlv
bkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcj4iCisgICAgICAgIHx8IGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPj0iKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlv
bkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyCisgICAgICAgICAgICAmJiBtYXRj
aGVzKGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCksIGludHJpbnNpY3MuYm9vbFR5cGUoKSk7Cisg
ICAgfQorICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdIikK
KyAgICAgICAgcmV0dXJuIGNoZWNrR2V0dGVyKENoZWNrS2luZDo6SW5kZXgpOworICAgIGlmIChm
dW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcltdPSIpCisgICAgICAgIHJldHVy
biBjaGVja1NldHRlcihDaGVja0tpbmQ6OkluZGV4KTsKKyAgICBpZiAoZnVuY3Rpb25EZWZpbml0
aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ImW10iKQorICAgICAgICByZXR1cm4gY2hlY2tBbmRlcihD
aGVja0tpbmQ6OkluZGV4KTsKKyAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5zdGFy
dHNXaXRoKCJvcGVyYXRvci4iKSkgeworICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5h
bWUoKS5lbmRzV2l0aCgiPSIpKQorICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2V0dGVyKENoZWNr
S2luZDo6RG90KTsKKyAgICAgICAgcmV0dXJuIGNoZWNrR2V0dGVyKENoZWNrS2luZDo6RG90KTsK
KyAgICB9CisgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgib3Bl
cmF0b3ImLiIpKQorICAgICAgICByZXR1cm4gY2hlY2tBbmRlcihDaGVja0tpbmQ6OkRvdCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitjbGFzcyBDaGVja2VyIDogcHVibGljIFZpc2l0b3Igewor
cHVibGljOgorICAgIENoZWNrZXIoY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcywgUHJvZ3Jh
bSYgcHJvZ3JhbSkKKyAgICAgICAgOiBtX2ludHJpbnNpY3MoaW50cmluc2ljcykKKyAgICAgICAg
LCBtX3Byb2dyYW0ocHJvZ3JhbSkKKyAgICB7CisgICAgfQorCisgICAgfkNoZWNrZXIoKSA9IGRl
ZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KFByb2dyYW0mKSBvdmVycmlkZTsKKworICAgIGJvb2wg
YXNzaWduVHlwZXMoKTsKKworcHJpdmF0ZToKKyAgICBib29sIGNoZWNrU2hhZGVyVHlwZShjb25z
dCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOworICAgIHZvaWQgZmluaXNoVmlzaXRpbmdQcm9w
ZXJ0eUFjY2VzcyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYsIEFTVDo6VW5uYW1lZFR5
cGUmIHdyYXBwZWRCYXNlVHlwZSwgQVNUOjpVbm5hbWVkVHlwZSogZXh0cmFBcmd1bWVudFR5cGUg
PSBudWxscHRyKTsKKyAgICBib29sIGlzQm9vbFR5cGUoUmVzb2x2aW5nVHlwZSYpOworICAgIHN0
cnVjdCBSZWN1cnNlSW5mbyB7CisgICAgICAgIFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGU7
CisgICAgICAgIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiYgYWRkcmVzc1NwYWNlOworICAg
IH07CisgICAgT3B0aW9uYWw8UmVjdXJzZUluZm8+IHJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhw
cmVzc2lvbiYsIGJvb2wgcmVxdWlyZXNMVmFsdWUgPSBmYWxzZSk7CisgICAgT3B0aW9uYWw8UmVj
dXJzZUluZm8+IGdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xWYWx1ZSA9
IGZhbHNlKTsKKyAgICBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHJlY3Vy
c2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mKTsKKyAgICBi
b29sIHJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUoQVNUOjpFeHByZXNzaW9uJik7CisgICAgdm9p
ZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYsIFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PiYmLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gPSBXVEY6Om51bGxvcHQpOworICAgIHZv
aWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVu
Y2U+JiYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiA9IFdURjo6bnVsbG9wdCk7CisgICAg
dm9pZCBmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBSZXNvbHZpbmdUeXBlJiwgT3B0aW9u
YWw8QVNUOjpBZGRyZXNzU3BhY2U+ID0gV1RGOjpudWxsb3B0KTsKKworICAgIHZvaWQgdmlzaXQo
QVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
RW51bWVyYXRpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlR5
cGVSZWZlcmVuY2UmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpBc3NpZ25tZW50RXhwcmVz
c2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHBy
ZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVz
c2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Np
b24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TWFrZUFycmF5UmVmZXJlbmNlRXhw
cmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYpIG92ZXJyaWRl
OworICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlzaXQoQVNUOjpSZXR1cm4mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
UG9pbnRlclR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVu
Y2VUeXBlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJikg
b3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmKSBv
dmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OkJvb2xlYW5MaXRlcmFsJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpM
b2dpY2FsTm90RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpMb2dp
Y2FsRXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpJZlN0YXRlbWVu
dCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpXaGlsZUxvb3AmKSBvdmVycmlkZTsK
KyAgICB2b2lkIHZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZp
c2l0KEFTVDo6Rm9yTG9vcCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpTd2l0Y2hT
dGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9u
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJikgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisK
KyAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIFJlc29sdmluZ1R5cGU+IG1fdHlwZU1hcDsK
KyAgICBIYXNoTWFwPEFTVDo6RXhwcmVzc2lvbiosIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNl
Pj4gbV9hZGRyZXNzU3BhY2VNYXA7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fdmVydGV4RW50cnlQ
b2ludHM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fZnJhZ21lbnRFbnRyeVBvaW50czsKKyAgICBI
YXNoU2V0PFN0cmluZz4gbV9jb21wdXRlRW50cnlQb2ludHM7CisgICAgY29uc3QgSW50cmluc2lj
cyYgbV9pbnRyaW5zaWNzOworICAgIFByb2dyYW0mIG1fcHJvZ3JhbTsKK307CisKK3ZvaWQgQ2hl
Y2tlcjo6dmlzaXQoUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICAvLyBUaGVzZSB2aXNpdGluZyBm
dW5jdGlvbnMgbWlnaHQgYWRkIG5ldyBnbG9iYWwgc3RhdGVtZW50cywgc28gZG9uJ3QgdXNlIGZv
cmVhY2ggc3ludGF4LgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS50eXBlRGVm
aW5pdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHByb2dy
YW0udHlwZURlZmluaXRpb25zKClbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJv
Z3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICBjaGVja0Vy
cm9yQW5kVmlzaXQocHJvZ3JhbS5zdHJ1Y3R1cmVEZWZpbml0aW9ucygpW2ldKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHByb2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpLnNpemUo
KTsgKytpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbS5lbnVtZXJhdGlvbkRl
ZmluaXRpb25zKClbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5uYXRp
dmVUeXBlRGVjbGFyYXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKVtpXSk7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHByb2dyYW0uZnVuY3Rpb25EZWZpbml0aW9ucygpLnNpemUoKTsgKytp
KQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbS5mdW5jdGlvbkRlZmluaXRpb25z
KClbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5uYXRpdmVGdW5jdGlv
bkRlY2xhcmF0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQo
cHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpW2ldKTsKK30KKworYm9vbCBDaGVj
a2VyOjphc3NpZ25UeXBlcygpCit7CisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX3R5
cGVNYXApIHsKKyAgICAgICAgYXV0byBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29s
IHsKKyAgICAgICAgICAgIGtleVZhbHVlUGFpci5rZXktPnNldFR5cGUodW5uYW1lZFR5cGUtPmNs
b25lKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0sIFsmXShSZWY8UmVz
b2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkgLT4gYm9vbCB7
CisgICAgICAgICAgICBpZiAoIXJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlw
ZSgpLnJlc29sdmVkVHlwZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEluc3RlYWQg
b2YgdHJ5aW5nIHRvIGNvbW1pdCwgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIGp1c3QgcmV0dXJuIGFu
IGVycm9yIGluc3RlYWQuCisgICAgICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxib29sPihj
b21taXQocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkpKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
a2V5VmFsdWVQYWlyLmtleS0+c2V0VHlwZShyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2
YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKS0+Y2xvbmUoKSk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfSksIGtleVZhbHVlUGFpci52YWx1ZSk7CisgICAgICAgIGlmICghc3Vj
Y2VzcykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKGF1dG8m
IGtleVZhbHVlUGFpciA6IG1fYWRkcmVzc1NwYWNlTWFwKQorICAgICAgICBrZXlWYWx1ZVBhaXIu
a2V5LT5zZXRBZGRyZXNzU3BhY2Uoa2V5VmFsdWVQYWlyLnZhbHVlKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBDaGVja2VyOjpjaGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlv
bkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBzd2l0Y2ggKCpmdW5jdGlv
bkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSkgeworICAgIGNhc2UgQVNUOjpFbnRyeVBvaW50
VHlwZTo6VmVydGV4OgorICAgICAgICByZXR1cm4gIW1fdmVydGV4RW50cnlQb2ludHMuYWRkKGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpLmlzTmV3RW50cnk7CisgICAgY2FzZSBBU1Q6OkVudHJ5
UG9pbnRUeXBlOjpGcmFnbWVudDoKKyAgICAgICAgcmV0dXJuICFtX2ZyYWdtZW50RW50cnlQb2lu
dHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkpLmlzTmV3RW50cnk7CisgICAgY2FzZSBB
U1Q6OkVudHJ5UG9pbnRUeXBlOjpDb21wdXRlOgorICAgICAgICByZXR1cm4gIW1fY29tcHV0ZUVu
dHJ5UG9pbnRzLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKS5pc05ld0VudHJ5OworICAg
IH0KK30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVu
Y3Rpb25EZWZpbml0aW9uKQoreworICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2lu
dFR5cGUoKSkgeworICAgICAgICBpZiAoIWNoZWNrU2hhZGVyVHlwZShmdW5jdGlvbkRlZmluaXRp
b24pKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGF1dG8gZW50cnlQb2ludEl0ZW1zID0gZ2F0aGVyRW50cnlQb2ludEl0
ZW1zKG1faW50cmluc2ljcywgZnVuY3Rpb25EZWZpbml0aW9uKTsKKyAgICAgICAgaWYgKCFlbnRy
eVBvaW50SXRlbXMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjaGVja1NlbWFudGljcyhlbnRyeVBvaW50SXRl
bXMtPmlucHV0cywgZW50cnlQb2ludEl0ZW1zLT5vdXRwdXRzLCBmdW5jdGlvbkRlZmluaXRpb24u
ZW50cnlQb2ludFR5cGUoKSwgbV9pbnRyaW5zaWNzKSkgeworICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWNoZWNr
T3BlcmF0b3JPdmVybG9hZChmdW5jdGlvbkRlZmluaXRpb24sIG1faW50cmluc2ljcywgbV9wcm9n
cmFtLm5hbWVDb250ZXh0KCkpKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uKTsK
K30KKworc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hB
bmRDb21taXQoUmVzb2x2aW5nVHlwZSYgbGVmdCwgUmVzb2x2aW5nVHlwZSYgcmlnaHQpCit7Cisg
ICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiBsZWZ0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlw
ZT4+IHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByaWdodCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAgICBpZiAobWF0Y2hlcyhsZWZ0LCByaWdodCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQtPmNsb25lKCk7CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYgcmlnaHQpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewor
ICAgICAgICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KGxlZnQsIHJpZ2h0LT5yZXNvbHZhYmxl
VHlwZSgpKTsKKyAgICAgICAgfSksIHJpZ2h0KTsKKyAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVU
eXBlUmVmZXJlbmNlPiYgbGVmdCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+PiB7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmlnaHQpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KHJp
Z2h0LCBsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4+IHsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChsZWZ0LT5yZXNv
bHZhYmxlVHlwZSgpLCByaWdodC0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAgIH0pLCByaWdo
dCk7CisgICAgfSksIGxlZnQpOworfQorCitzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBl
LCBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkKK3sKKyAgICByZXR1cm4gV1RGOjp2aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJlc29s
dmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAg
ICAgICBpZiAobWF0Y2hlcyh1bm5hbWVkVHlwZSwgcmVzb2x2aW5nVHlwZSkpCisgICAgICAgICAg
ICByZXR1cm4gdW5uYW1lZFR5cGUuY2xvbmUoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2aW5nVHlw
ZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgIHJl
dHVybiBtYXRjaEFuZENvbW1pdCh1bm5hbWVkVHlwZSwgcmVzb2x2aW5nVHlwZS0+cmVzb2x2YWJs
ZVR5cGUoKSk7CisgICAgfSksIHJlc29sdmluZ1R5cGUpOworfQorCitzdGF0aWMgT3B0aW9uYWw8
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBl
JiByZXNvbHZpbmdUeXBlLCBBU1Q6Ok5hbWVkVHlwZSYgbmFtZWRUeXBlKQoreworICAgIHJldHVy
biBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPiYgcmVzb2x2aW5nVHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+PiB7CisgICAgICAgIGlmIChtYXRjaGVzKHJlc29sdmluZ1R5cGUsIG5hbWVkVHlwZSkpCisg
ICAgICAgICAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS0+Y2xvbmUoKTsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYg
cmVzb2x2aW5nVHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7
CisgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChuYW1lZFR5cGUsIHJlc29sdmluZ1R5cGUt
PnJlc29sdmFibGVUeXBlKCkpOworICAgIH0pLCByZXNvbHZpbmdUeXBlKTsKK30KKwordm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25EZWZp
bml0aW9uKQoreworICAgIGF1dG8qIGJhc2VUeXBlID0gKFsmXSgpIC0+IEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uKiB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChlbnVtZXJhdGlvbkRl
ZmluaXRpb24udHlwZSgpKTsKKyAgICAgICAgYXV0byYgYmFzZVR5cGUgPSBlbnVtZXJhdGlvbkRl
ZmluaXRpb24udHlwZSgpLnVuaWZ5Tm9kZSgpOworICAgICAgICBpZiAoIWlzPEFTVDo6VW5uYW1l
ZFR5cGU+KGJhc2VUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBh
dXRvJiB1bm5hbWVkQmFzZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGJhc2VUeXBlKTsK
KyAgICAgICAgaWYgKCFpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRCYXNlKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBhdXRvJiB0eXBlUmVmZXJlbmNlQmFzZSA9
IGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZEJhc2UpOworICAgICAgICBBU1NF
UlQodHlwZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBpZiAoIWlzPEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlwZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBl
KCkpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGF1dG8mIG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiA9IGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdHlw
ZVJlZmVyZW5jZUJhc2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAgICBpZiAoIW5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbi5pc0ludCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiAmbmF0aXZlVHlwZURlY2xhcmF0aW9uOworICAgIH0pKCk7CisgICAgaWYgKCFiYXNl
VHlwZSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgYXV0byBlbnVtZXJhdGlvbk1lbWJlcnMgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24uZW51bWVy
YXRpb25NZW1iZXJzKCk7CisKKyAgICBmb3IgKGF1dG8mIG1lbWJlciA6IGVudW1lcmF0aW9uTWVt
YmVycykgeworICAgICAgICBpZiAoIW1lbWJlci5nZXQoKS52YWx1ZSgpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgIG1lbWJl
ci5nZXQoKS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkV4cHJlc3Np
b24mIHZhbHVlKSB7CisgICAgICAgICAgICBhdXRvIHZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJ
bmZvKHZhbHVlKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVJbmZvKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFu
ZENvbW1pdCh2YWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsICpiYXNlVHlwZSkpOworICAgICAgICB9
KSk7CisgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGludDY0X3QgbmV4dFZh
bHVlID0gMDsKKyAgICBmb3IgKGF1dG8mIG1lbWJlciA6IGVudW1lcmF0aW9uTWVtYmVycykgewor
ICAgICAgICBpZiAobWVtYmVyLmdldCgpLnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGludDY0X3Qg
dmFsdWU7CisgICAgICAgICAgICBtZW1iZXIuZ2V0KCkudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGludGVnZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCk7
CisgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25l
ZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB1bnNpZ25lZEludGVn
ZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCk7CisgICAgICAgICAgICB9LCBbJl0oYXV0
byYpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0pKTsKKyAgICAgICAgICAgIG5leHRWYWx1ZSA9IGJhc2VUeXBlLT5zdWNjZXNzb3IoKSh2YWx1
ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtZW1iZXIuZ2V0KCkuc2V0VmFsdWUo
QVNUOjpDb25zdGFudEV4cHJlc3Npb24oQVNUOjpJbnRlZ2VyTGl0ZXJhbChMZXhlcjo6VG9rZW4o
bWVtYmVyLmdldCgpLm9yaWdpbigpKSwgbmV4dFZhbHVlKSkpOworICAgICAgICAgICAgbmV4dFZh
bHVlID0gYmFzZVR5cGUtPnN1Y2Nlc3NvcigpKG5leHRWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBhdXRvIGdldFZhbHVlID0gWyZdKEFTVDo6RW51bWVyYXRpb25NZW1iZXImIG1lbWJl
cikgLT4gaW50NjRfdCB7CisgICAgICAgIGludDY0X3QgdmFsdWU7CisgICAgICAgIEFTU0VSVCht
ZW1iZXIudmFsdWUoKSk7CisgICAgICAgIG1lbWJlci52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VW
aXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAg
ICAgICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oQVNU
OjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAg
ICAgICAgICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAg
fSwgWyZdKGF1dG8mKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfSkpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZW51bWVyYXRpb25NZW1iZXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1
dG8gdmFsdWUgPSBnZXRWYWx1ZShlbnVtZXJhdGlvbk1lbWJlcnNbaV0uZ2V0KCkpOworICAgICAg
ICBmb3IgKHNpemVfdCBqID0gaSArIDE7IGogPCBlbnVtZXJhdGlvbk1lbWJlcnMuc2l6ZSgpOyAr
K2opIHsKKyAgICAgICAgICAgIGF1dG8gb3RoZXJWYWx1ZSA9IGdldFZhbHVlKGVudW1lcmF0aW9u
TWVtYmVyc1tqXS5nZXQoKSk7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gb3RoZXJWYWx1ZSkg
eworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBmb3VuZFplcm8gPSBm
YWxzZTsKKyAgICBmb3IgKGF1dG8mIG1lbWJlciA6IGVudW1lcmF0aW9uTWVtYmVycykgeworICAg
ICAgICBpZiAoIWdldFZhbHVlKG1lbWJlci5nZXQoKSkpIHsKKyAgICAgICAgICAgIGZvdW5kWmVy
byA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAo
IWZvdW5kWmVybykgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAg
fQorfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVy
ZW5jZSkKK3sKKyAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisKKyAg
ICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZVJlZmVyZW5jZSk7Cit9CisKK2F1dG8gQ2hlY2tlcjo6
cmVjdXJzZUFuZEdldEluZm8oQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBib29sIHJlcXVp
cmVzTFZhbHVlKSAtPiBPcHRpb25hbDxSZWN1cnNlSW5mbz4KK3sKKyAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZXhwcmVzc2lvbik7CisgICAgaWYgKCFlcnJvcigpKQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIHJldHVybiBnZXRJbmZvKGV4cHJlc3Npb24sIHJlcXVpcmVzTFZhbHVl
KTsKK30KKworYXV0byBDaGVja2VyOjpnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lv
biwgYm9vbCByZXF1aXJlc0xWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+Cit7CisgICAg
YXV0byB0eXBlSXRlcmF0b3IgPSBtX3R5cGVNYXAuZmluZCgmZXhwcmVzc2lvbik7CisgICAgQVNT
RVJUKHR5cGVJdGVyYXRvciAhPSBtX3R5cGVNYXAuZW5kKCkpOworCisgICAgYXV0byBhZGRyZXNz
U3BhY2VJdGVyYXRvciA9IG1fYWRkcmVzc1NwYWNlTWFwLmZpbmQoJmV4cHJlc3Npb24pOworICAg
IEFTU0VSVChhZGRyZXNzU3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7
CisgICAgaWYgKHJlcXVpcmVzTFZhbHVlICYmICFhZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUp
IHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICB9CisgICAgcmV0dXJuIHt7IHR5cGVJdGVyYXRvci0+dmFsdWUsIGFkZHJlc3NTcGFjZUl0ZXJh
dG9yLT52YWx1ZSB9fTsKK30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlRGVj
bGFyYXRpb24mIHZhcmlhYmxlRGVjbGFyYXRpb24pCit7CisgICAgLy8gUmVhZE1vZGlmeVdyaXRl
RXhwcmVzc2lvbnMgYXJlIHRoZSBvbmx5IHBsYWNlIHdoZXJlIGFub255bW91cyB2YXJpYWJsZXMg
ZXhpc3QsCisgICAgLy8gYW5kIHRoYXQgZG9lc24ndCByZWN1cnNlIG9uIHRoZSBhbm9ueW1vdXMg
dmFyaWFibGVzLCBzbyB3ZSBjYW4gYXNzdW1lIHRoZSB2YXJpYWJsZSBoYXMgYSB0eXBlLgorICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgIGlm
ICh2YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpIHsKKyAgICAgICAgYXV0byYgbGhz
VHlwZSA9ICp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKTsKKyAgICAgICAgYXV0byBpbml0aWFs
aXplckluZm8gPSByZWN1cnNlQW5kR2V0SW5mbygqdmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFs
aXplcigpKTsKKyAgICAgICAgaWYgKCFpbml0aWFsaXplckluZm8pCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGlmICghbWF0Y2hBbmRDb21taXQoaW5pdGlhbGl6ZXJJbmZvLT5yZXNvbHZp
bmdUeXBlLCBsaHNUeXBlKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDaGVja2VyOjphc3NpZ25UeXBl
KEFTVDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+
JiYgdW5uYW1lZFR5cGUsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2Up
Cit7CisgICAgYXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBXVEZN
b3ZlKHVubmFtZWRUeXBlKSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRkcmVz
c1NwYWNlTWFwLmFkZCgmZXhwcmVzc2lvbiwgYWRkcmVzc1NwYWNlKTsKKyAgICBBU1NFUlRfVU5V
U0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50
cnkpOworfQorCit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHBy
ZXNzaW9uLCBSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiYgcmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2UsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2UpCit7CisgICAg
YXV0byBhZGRSZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCBXVEZNb3ZlKHJlc29s
dmFibGVUeXBlUmVmZXJlbmNlKSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRk
cmVzc1NwYWNlTWFwLmFkZCgmZXhwcmVzc2lvbiwgYWRkcmVzc1NwYWNlKTsKKyAgICBBU1NFUlRf
VU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3
RW50cnkpOworfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6QXNzaWdubWVudEV4cHJlc3Np
b24mIGFzc2lnbm1lbnRFeHByZXNzaW9uKQoreworICAgIGF1dG8gbGVmdEluZm8gPSByZWN1cnNl
QW5kR2V0SW5mbyhhc3NpZ25tZW50RXhwcmVzc2lvbi5sZWZ0KCksIHRydWUpOworICAgIGlmICgh
bGVmdEluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmlnaHRJbmZvID0gcmVjdXJz
ZUFuZEdldEluZm8oYXNzaWdubWVudEV4cHJlc3Npb24ucmlnaHQoKSk7CisgICAgaWYgKCFyaWdo
dEluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVzdWx0VHlwZSA9IG1hdGNoQW5k
Q29tbWl0KGxlZnRJbmZvLT5yZXNvbHZpbmdUeXBlLCByaWdodEluZm8tPnJlc29sdmluZ1R5cGUp
OworICAgIGlmICghcmVzdWx0VHlwZSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgYXNzaWduVHlwZShhc3NpZ25tZW50RXhwcmVzc2lvbiwgV1RG
TW92ZSgqcmVzdWx0VHlwZSkpOworfQorCit2b2lkIENoZWNrZXI6OmZvcndhcmRUeXBlKEFTVDo6
RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSwgT3B0
aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZSkKK3sKKyAgICBXVEY6OnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmVzdWx0
KSB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVzc2lvbiwg
cmVzdWx0LT5jbG9uZSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNl
PiYgcmVzdWx0KSB7CisgICAgICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhw
cmVzc2lvbiwgcmVzdWx0LmNvcHlSZWYoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVz
dWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfSksIHJlc29sdmluZ1R5cGUpOworICAg
IGF1dG8gYWRkcmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZleHBy
ZXNzaW9uLCBhZGRyZXNzU3BhY2UpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRk
UmVzdWx0LCBhZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3ZvaWQgQ2hl
Y2tlcjo6dmlzaXQoQVNUOjpSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJiByZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uKQoreworICAgIGF1dG8gbFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZv
KHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubFZhbHVlKCksIHRydWUpOworICAgIGlmICghbFZh
bHVlSW5mbykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgd2hh
dCB0byBkbyB3aXRoIHRoZSBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uJ3MgQW5vbnltb3VzVmFy
aWFibGVzLgorCisgICAgYXV0byBuZXdWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbygqcmVh
ZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5uZXdWYWx1ZUV4cHJlc3Npb24oKSk7CisgICAgaWYgKCFu
ZXdWYWx1ZUluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbWF0Y2hBbmRDb21taXQo
bFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSwgbmV3VmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKSkg
eworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byByZXN1bHRJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oKnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Np
b24ucmVzdWx0RXhwcmVzc2lvbigpKTsKKyAgICBpZiAoIXJlc3VsdEluZm8pCisgICAgICAgIHJl
dHVybjsKKworICAgIGZvcndhcmRUeXBlKHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24sIHJlc3Vs
dEluZm8tPnJlc29sdmluZ1R5cGUpOworfQorCitzdGF0aWMgQVNUOjpVbm5hbWVkVHlwZSogZ2V0
VW5uYW1lZFR5cGUoUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSkKK3sKKyAgICByZXR1cm4g
V1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBl
PiYgdHlwZSkgLT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICByZXR1cm4gJnR5cGU7Cisg
ICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgdHlwZSkgLT4gQVNUOjpVbm5h
bWVkVHlwZSogeworICAgICAgICAvLyBGSVhNRTogSWYgdGhlIHR5cGUgaXNuJ3QgY29tbWl0dGVk
LCBzaG91bGQgd2UganVzdCBjb21taXQoKSBpdCBub3c/CisgICAgICAgIHJldHVybiB0eXBlLT5y
ZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpOworICAgIH0pLCByZXNvbHZpbmdUeXBlKTsK
K30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbiYgZGVy
ZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAgIGF1dG8gcG9pbnRlckluZm8gPSByZWN1cnNlQW5k
R2V0SW5mbyhkZXJlZmVyZW5jZUV4cHJlc3Npb24ucG9pbnRlcigpKTsKKyAgICBpZiAoIXBvaW50
ZXJJbmZvKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiB1bm5hbWVkVHlwZSA9IGdldFVu
bmFtZWRUeXBlKHBvaW50ZXJJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKworICAgIGF1dG8qIHBvaW50
ZXJUeXBlID0gKFsmXShBU1Q6OlVubmFtZWRUeXBlKiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpQb2lu
dGVyVHlwZSogeworICAgICAgICBpZiAoIXVubmFtZWRUeXBlKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIGF1dG8mIHVuaWZ5Tm9kZSA9IHVubmFtZWRUeXBlLT51bmlmeU5v
ZGUoKTsKKyAgICAgICAgaWYgKCFpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGF1dG8mIHVubmFtZWRVbmlmeVR5cGUg
PSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAgICBpZiAoIWlz
PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRVbmlmeVR5cGUpKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5u
YW1lZFVuaWZ5VHlwZSk7CisgICAgfSkodW5uYW1lZFR5cGUpOworICAgIGlmICghcG9pbnRlclR5
cGUpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGFzc2lnblR5cGUoZGVyZWZlcmVuY2VFeHByZXNzaW9uLCBwb2ludGVyVHlwZS0+Y2xvbmUoKSwg
cG9pbnRlclR5cGUtPmFkZHJlc3NTcGFjZSgpKTsKK30KKwordm9pZCBDaGVja2VyOjp2aXNpdChB
U1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYgbWFrZVBvaW50ZXJFeHByZXNzaW9uKQoreworICAg
IGF1dG8gbFZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKG1ha2VQb2ludGVyRXhwcmVzc2lv
bi5sVmFsdWUoKSwgdHJ1ZSk7CisgICAgaWYgKCFsVmFsdWVJbmZvKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvKiBsVmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUobFZhbHVlSW5mby0+cmVz
b2x2aW5nVHlwZSk7CisgICAgaWYgKCFsVmFsdWVUeXBlKSB7CisgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhc3NpZ25UeXBlKG1ha2VQb2ludGVyRXhw
cmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBvaW50ZXJUeXBlPihMZXhlcjo6VG9rZW4obWFr
ZVBvaW50ZXJFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSwg
bFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiYgbWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbikK
K3sKKyAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhtYWtlQXJyYXlSZWZl
cmVuY2VFeHByZXNzaW9uLmxWYWx1ZSgpKTsKKyAgICBpZiAoIWxWYWx1ZUluZm8pCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8qIGxWYWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShsVmFsdWVJ
bmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBpZiAoIWxWYWx1ZVR5cGUpIHsKKyAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8mIHVuaWZ5Tm9kZSA9
IGxWYWx1ZVR5cGUtPnVuaWZ5Tm9kZSgpOworICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1
bmlmeU5vZGUpKSB7CisgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpV
bm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+
KHVubmFtZWRUeXBlKSkgeworICAgICAgICAgICAgYXV0byYgcG9pbnRlclR5cGUgPSBkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSk7CisgICAgICAgICAgICAvLyBGSVhNRTog
U2F2ZSB0aGUgZmFjdCB0aGF0IHdlJ3JlIG5vdCB0YXJnZXR0aW5nIHRoZSBpdGVtOyB3ZSdyZSB0
YXJnZXR0aW5nIHRoZSBpdGVtJ3MgaW5uZXIgZWxlbWVudC4KKyAgICAgICAgICAgIGFzc2lnblR5
cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5
UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24u
b3JpZ2luKCkpLCBwb2ludGVyVHlwZS5hZGRyZXNzU3BhY2UoKSwgcG9pbnRlclR5cGUuZWxlbWVu
dFR5cGUoKS5jbG9uZSgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIWxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSkgeworICAgICAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpczxB
U1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgICAgICBhdXRvJiBhcnJheVR5
cGUgPSBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpOworICAgICAgICAgICAg
Ly8gRklYTUU6IFNhdmUgdGhlIG51bWJlciBvZiBlbGVtZW50cy4KKyAgICAgICAgICAgIGFzc2ln
blR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFy
cmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Np
b24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBhcnJheVR5cGUudHlwZSgp
LmNsb25lKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICghbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlKSB7CisgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhc3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5j
ZUV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVy
OjpUb2tlbihtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxWYWx1ZUlu
Zm8tPmFkZHJlc3NTcGFjZSwgbFZhbHVlVHlwZS0+Y2xvbmUoKSkpOworfQorCit2b2lkIENoZWNr
ZXI6OmZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgQVNUOjpVbm5hbWVkVHlwZSYgd3JhcHBl
ZEJhc2VUeXBlLCBBU1Q6OlVubmFtZWRUeXBlKiBleHRyYUFyZ3VtZW50VHlwZSkKK3sKKyAgICBP
cHRpb25hbDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBlPj4gY2FzdFJldHVy
blR5cGU7CisgICAgdXNpbmcgT3ZlcmxvYWRSZXNvbHV0aW9uID0gc3RkOjp0dXBsZTxBU1Q6OkZ1
bmN0aW9uRGVjbGFyYXRpb24qLCBBU1Q6OlVubmFtZWRUeXBlKj47CisKKyAgICBBU1Q6OkZ1bmN0
aW9uRGVjbGFyYXRpb24qIGdldEZ1bmN0aW9uOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGdldFJl
dHVyblR5cGU7CisgICAgc3RkOjp0aWUoZ2V0RnVuY3Rpb24sIGdldFJldHVyblR5cGUpID0gKFsm
XSgpIC0+IE92ZXJsb2FkUmVzb2x1dGlvbiB7CisgICAgICAgIFJlc29sdmluZ1R5cGUgZ2V0QXJn
dW1lbnRUeXBlMSh3cmFwcGVkQmFzZVR5cGUuY2xvbmUoKSk7CisgICAgICAgIE9wdGlvbmFsPFJl
c29sdmluZ1R5cGU+IGdldEFyZ3VtZW50VHlwZTI7CisgICAgICAgIGlmIChleHRyYUFyZ3VtZW50
VHlwZSkKKyAgICAgICAgICAgIGdldEFyZ3VtZW50VHlwZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJh
QXJndW1lbnRUeXBlLT5jbG9uZSgpKTsKKworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vf
d3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4gZ2V0QXJndW1lbnRUeXBlczsKKyAgICAgICAgZ2V0QXJn
dW1lbnRUeXBlcy5hcHBlbmQoZ2V0QXJndW1lbnRUeXBlMSk7CisgICAgICAgIGlmIChnZXRBcmd1
bWVudFR5cGUyKQorICAgICAgICAgICAgZ2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoKmdldEFyZ3Vt
ZW50VHlwZTIpOworCisgICAgICAgIGF1dG8qIGdldEZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9u
T3ZlcmxvYWRJbXBsKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3NzaWJsZUdldE92ZXJsb2Fk
cygpLCBnZXRBcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSk7CisgICAgICAgIGlmICghZ2V0
RnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVsbHB0ciwgbnVs
bHB0cik7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihnZXRGdW5jdGlvbiwgJmdldEZ1
bmN0aW9uLT50eXBlKCkpOworICAgIH0pKCk7CisKKyAgICBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRp
b24qIGFuZEZ1bmN0aW9uOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIGFuZFJldHVyblR5cGU7Cisg
ICAgc3RkOjp0aWUoYW5kRnVuY3Rpb24sIGFuZFJldHVyblR5cGUpID0gKFsmXSgpIC0+IE92ZXJs
b2FkUmVzb2x1dGlvbiB7CisgICAgICAgIGF1dG8gY29tcHV0ZUFuZEFyZ3VtZW50VHlwZSA9IFsm
XShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkgLT4gT3B0aW9uYWw8UmVzb2x2aW5nVHlw
ZT4geworICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVk
VHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgdW5uYW1lZFR5cGUuY2xvbmUoKSB9Owor
ICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4o
TGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6QWRk
cmVzc1NwYWNlOjpUaHJlYWQsIGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSku
dHlwZSgpLmNsb25lKCkpIH07CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAg
ICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpU
b2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFj
ZTo6VGhyZWFkLCBkb3duY2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKS5j
bG9uZSgpKSB9OworICAgICAgICB9OworICAgICAgICBhdXRvIGNvbXB1dGVBbmRSZXR1cm5UeXBl
ID0gWyZdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBl
KiB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiAmZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1l
ZFR5cGUpLmVsZW1lbnRUeXBlKCk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgfTsKKworICAgICAgICBhdXRvIGFuZEFyZ3VtZW50VHlwZTEgPSBjb21wdXRlQW5kQXJndW1l
bnRUeXBlKHdyYXBwZWRCYXNlVHlwZSk7CisgICAgICAgIGlmICghYW5kQXJndW1lbnRUeXBlMSkK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRyLCBudWxscHRyKTsKKyAg
ICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gYW5kQXJndW1lbnRUeXBlMjsKKyAgICAgICAg
aWYgKGV4dHJhQXJndW1lbnRUeXBlKQorICAgICAgICAgICAgYW5kQXJndW1lbnRUeXBlMiA9IFJl
c29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5cGUtPmNsb25lKCkpOworCisgICAgICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhbmRBcmd1bWVudFR5cGVz
OworICAgICAgICBhbmRBcmd1bWVudFR5cGVzLmFwcGVuZCgqYW5kQXJndW1lbnRUeXBlMSk7Cisg
ICAgICAgIGlmIChhbmRBcmd1bWVudFR5cGUyKQorICAgICAgICAgICAgYW5kQXJndW1lbnRUeXBl
cy5hcHBlbmQoKmFuZEFyZ3VtZW50VHlwZTIpOworCisgICAgICAgIGF1dG8qIGFuZEZ1bmN0aW9u
ID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5w
b3NzaWJsZUFuZE92ZXJsb2FkcygpLCBhbmRBcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSk7
CisgICAgICAgIGlmICghYW5kRnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIobnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihh
bmRGdW5jdGlvbiwgY29tcHV0ZUFuZFJldHVyblR5cGUoYW5kRnVuY3Rpb24tPnR5cGUoKSkpOwor
ICAgIH0pKCk7CisKKyAgICBpZiAoIWdldFJldHVyblR5cGUgJiYgIWFuZFJldHVyblR5cGUpIHsK
KyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChn
ZXRSZXR1cm5UeXBlICYmIGFuZFJldHVyblR5cGUgJiYgIW1hdGNoZXMoKmdldFJldHVyblR5cGUs
ICphbmRSZXR1cm5UeXBlKSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBzZXRGdW5jdGlvbjsKKyAg
ICBBU1Q6OlVubmFtZWRUeXBlKiBzZXRSZXR1cm5UeXBlOworICAgIHN0ZDo6dGllKHNldEZ1bmN0
aW9uLCBzZXRSZXR1cm5UeXBlKSA9IChbJl0oKSAtPiBPdmVybG9hZFJlc29sdXRpb24geworICAg
ICAgICBSZXNvbHZpbmdUeXBlIHNldEFyZ3VtZW50MVR5cGUod3JhcHBlZEJhc2VUeXBlLmNsb25l
KCkpOworICAgICAgICBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiBzZXRBcmd1bWVudFR5cGUyOwor
ICAgICAgICBpZiAoZXh0cmFBcmd1bWVudFR5cGUpCisgICAgICAgICAgICBzZXRBcmd1bWVudFR5
cGUyID0gUmVzb2x2aW5nVHlwZShleHRyYUFyZ3VtZW50VHlwZS0+Y2xvbmUoKSk7CisgICAgICAg
IFJlc29sdmluZ1R5cGUgc2V0QXJndW1lbnQzVHlwZShnZXRSZXR1cm5UeXBlID8gZ2V0UmV0dXJu
VHlwZS0+Y2xvbmUoKSA6IGFuZFJldHVyblR5cGUtPmNsb25lKCkpOworCisgICAgICAgIFZlY3Rv
cjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBzZXRBcmd1bWVudFR5cGVz
OworICAgICAgICBzZXRBcmd1bWVudFR5cGVzLmFwcGVuZChzZXRBcmd1bWVudDFUeXBlKTsKKyAg
ICAgICAgaWYgKHNldEFyZ3VtZW50VHlwZTIpCisgICAgICAgICAgICBzZXRBcmd1bWVudFR5cGVz
LmFwcGVuZCgqc2V0QXJndW1lbnRUeXBlMik7CisgICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBw
ZW5kKHNldEFyZ3VtZW50M1R5cGUpOworCisgICAgICAgIGF1dG8qIHNldEZ1bmN0aW9uID0gcmVz
b2x2ZUZ1bmN0aW9uT3ZlcmxvYWRJbXBsKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3NzaWJs
ZVNldE92ZXJsb2FkcygpLCBzZXRBcmd1bWVudFR5cGVzLCBjYXN0UmV0dXJuVHlwZSk7CisgICAg
ICAgIGlmICghc2V0RnVuY3Rpb24pCisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
bnVsbHB0ciwgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihzZXRGdW5j
dGlvbiwgJnNldEZ1bmN0aW9uLT50eXBlKCkpOworICAgIH0pKCk7CisKKyAgICBpZiAoc2V0RnVu
Y3Rpb24pIHsKKyAgICAgICAgaWYgKCFtYXRjaGVzKHNldEZ1bmN0aW9uLT50eXBlKCksIHdyYXBw
ZWRCYXNlVHlwZSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWdldFJldHVyblR5cGUgJiYgIWFuZFJl
dHVyblR5cGUpIHsKKyAgICAgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBtX2FkZHJl
c3NTcGFjZU1hcC5hZGQoJnByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwgV1RGOjpudWxsb3B0KTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFj
ZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGSVhNRTog
VGhlIHJlZmVyZW5jZSBjb21waWxlciBoYXMgImVsc2UgaWYgKCFub2RlLmJhc2UuaXNMVmFsdWUg
JiYgIWJhc2VUeXBlLmlzQXJyYXlSZWYpIiwKKyAgICAgICAgLy8gYnV0IEkgZG9uJ3QgdW5kZXJz
dGFuZCB3aHkgaXQgZXhpc3RzLiBJIGhhdmVuJ3Qgd3JpdHRlbiBpdCBoZXJlLCBhbmQgSSdsbCBp
bnZlc3RpZ2F0ZQorICAgICAgICAvLyBpZiB3ZSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhlIHJlZmVy
ZW5jZSBjb21waWxlci4KKyAgICAgICAgQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlOwor
ICAgICAgICBpZiAoaXM8QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFwcGVkQmFzZVR5cGUpKQorICAg
ICAgICAgICAgYWRkcmVzc1NwYWNlID0gZG93bmNhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFw
cGVkQmFzZVR5cGUpLmFkZHJlc3NTcGFjZSgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGF1dG8gYWRkcmVzc1NwYWNlSXRlcmF0b3IgPSBtX2FkZHJlc3NTcGFjZU1hcC5maW5kKCZwcm9w
ZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChhZGRyZXNz
U3BhY2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7CisgICAgICAgICAgICBp
ZiAoYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlKQorICAgICAgICAgICAgICAgIGFkZHJlc3NT
cGFjZSA9ICphZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3Vs
dCA9IG1fYWRkcmVzc1NwYWNlTWFwLmFkZCgmcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLCBhZGRy
ZXNzU3BhY2UpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwg
YWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KKworICAgIC8vIEZJWE1F
OiBHZW5lcmF0ZSB0aGUgY2FsbCBleHByZXNzaW9ucworfQorCitPcHRpb25hbDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4+IENoZWNrZXI6OnJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoQVNUOjpQ
cm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24mIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbikKK3sKKyAg
ICBhdXRvIGJhc2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8ocHJvcGVydHlBY2Nlc3NFeHByZXNz
aW9uLmJhc2UoKSk7CisgICAgaWYgKCFiYXNlSW5mbykKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKworICAgIGF1dG8qIGJhc2VUeXBlID0gZ2V0VW5uYW1lZFR5cGUoYmFzZUluZm8tPnJl
c29sdmluZ1R5cGUpOworICAgIGlmICghYmFzZVR5cGUpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisgICAgYXV0byYgYmFzZVVuaWZ5
Tm9kZSA9IGJhc2VUeXBlLT51bmlmeU5vZGUoKTsKKyAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlw
ZT4oYmFzZVVuaWZ5Tm9kZSkpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxBU1Q6OlVubmFtZWRU
eXBlPihiYXNlVW5pZnlOb2RlKS5jbG9uZSgpOworICAgIEFTU0VSVChpczxBU1Q6Ok5hbWVkVHlw
ZT4oYmFzZVVuaWZ5Tm9kZSkpOworICAgIHJldHVybiB7IEFTVDo6VHlwZVJlZmVyZW5jZTo6d3Jh
cChMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpKSwgZG93bmNh
c3Q8QVNUOjpOYW1lZFR5cGU+KGJhc2VVbmlmeU5vZGUpKSB9OworfQorCit2b2lkIENoZWNrZXI6
OnZpc2l0KEFTVDo6RG90RXhwcmVzc2lvbiYgZG90RXhwcmVzc2lvbikKK3sKKyAgICBhdXRvIGJh
c2VUeXBlID0gcmVjdXJzZUFuZFdyYXBCYXNlVHlwZShkb3RFeHByZXNzaW9uKTsKKyAgICBpZiAo
IWJhc2VUeXBlKQorICAgICAgICByZXR1cm47CisKKyAgICBmaW5pc2hWaXNpdGluZ1Byb3BlcnR5
QWNjZXNzKGRvdEV4cHJlc3Npb24sICpiYXNlVHlwZSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikKK3sKKyAgICBhdXRvIGJh
c2VUeXBlID0gcmVjdXJzZUFuZFdyYXBCYXNlVHlwZShpbmRleEV4cHJlc3Npb24pOworICAgIGlm
ICghYmFzZVR5cGUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gaW5kZXhJbmZvID0gcmVj
dXJzZUFuZEdldEluZm8oaW5kZXhFeHByZXNzaW9uLmluZGV4RXhwcmVzc2lvbigpKTsKKyAgICBp
ZiAoIWluZGV4SW5mbykKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gaW5kZXhFeHByZXNzaW9u
VHlwZSA9IGdldFVubmFtZWRUeXBlKGluZGV4SW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYg
KCFpbmRleEV4cHJlc3Npb25UeXBlKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKGluZGV4RXhw
cmVzc2lvbiwgV1RGTW92ZSgqYmFzZVR5cGUpLCBpbmRleEV4cHJlc3Npb25UeXBlKTsKK30KKwor
dm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlZhcmlhYmxlUmVmZXJlbmNlJiB2YXJpYWJsZVJlZmVy
ZW5jZSkKK3sKKyAgICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKSk7CisgICAg
QVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKSk7CisgICAgCisgICAg
T3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKKyAgICBpZiAoIXZhcmlh
YmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPmlzQW5vbnltb3VzKCkpCisgICAgICAgIGFkZHJlc3NT
cGFjZSA9IEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQ7CisgICAgYXNzaWduVHlwZSh2YXJpYWJs
ZVJlZmVyZW5jZSwgdmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlwZSgpLT5jbG9uZSgp
LCBhZGRyZXNzU3BhY2UpOworfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UmV0dXJuJiBy
ZXR1cm5TdGF0ZW1lbnQpCit7CisgICAgQVNTRVJUKHJldHVyblN0YXRlbWVudC5mdW5jdGlvbigp
KTsKKyAgICBpZiAocmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpIHsKKyAgICAgICAgYXV0byB2YWx1
ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbygqcmV0dXJuU3RhdGVtZW50LnZhbHVlKCkpOworICAg
ICAgICBpZiAoIXZhbHVlSW5mbykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFt
YXRjaEFuZENvbW1pdCh2YWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsIHJldHVyblN0YXRlbWVudC5m
dW5jdGlvbigpLT50eXBlKCkpKQorICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghbWF0Y2hlcyhyZXR1cm5TdGF0ZW1lbnQuZnVuY3Rpb24o
KS0+dHlwZSgpLCBtX2ludHJpbnNpY3Mudm9pZFR5cGUoKSkpCisgICAgICAgIHNldEVycm9yKCk7
Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpCit7CisgICAgLy8g
Rm9sbG93aW5nIHBvaW50ZXIgdHlwZXMgY2FuIGNhdXNlIGluZmluaXRlIGxvb3BzIGJlY2F1c2Ug
b2YgZGF0YSBzdHJ1Y3R1cmVzCisgICAgLy8gbGlrZSBsaW5rZWQgbGlzdHMuCisgICAgLy8gRklY
TUU6IE1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBlbXB0eQorfQorCit2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJikKK3sKKyAgICAvLyBGb2xsb3dp
bmcgYXJyYXkgcmVmZXJlbmNlIHR5cGVzIGNhbiBjYXVzZSBpbmZpbml0ZSBsb29wcyBiZWNhdXNl
IG9mIGRhdGEKKyAgICAvLyBzdHJ1Y3R1cmVzIGxpa2UgbGlua2VkIGxpc3RzLgorICAgIC8vIEZJ
WE1FOiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW1wdHkKK30KKwordm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkKK3sKKyAg
ICBhc3NpZ25UeXBlKGludGVnZXJMaXRlcmFsLCBhZG9wdFJlZigqbmV3IFJlc29sdmFibGVUeXBl
UmVmZXJlbmNlKGludGVnZXJMaXRlcmFsLnR5cGUoKSkpKTsKK30KKwordm9pZCBDaGVja2VyOjp2
aXNpdChBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwp
Cit7CisgICAgYXNzaWduVHlwZSh1bnNpZ25lZEludGVnZXJMaXRlcmFsLCBhZG9wdFJlZigqbmV3
IFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudHlwZSgpKSkp
OworfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RmxvYXRMaXRlcmFsJiBmbG9hdExpdGVy
YWwpCit7CisgICAgYXNzaWduVHlwZShmbG9hdExpdGVyYWwsIGFkb3B0UmVmKCpuZXcgUmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UoZmxvYXRMaXRlcmFsLnR5cGUoKSkpKTsKK30KKwordm9pZCBDaGVj
a2VyOjp2aXNpdChBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkKK3sKKyAgICBhc3NpZ25U
eXBlKG51bGxMaXRlcmFsLCBhZG9wdFJlZigqbmV3IFJlc29sdmFibGVUeXBlUmVmZXJlbmNlKG51
bGxMaXRlcmFsLnR5cGUoKSkpKTsKK30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkJvb2xl
YW5MaXRlcmFsJiBib29sZWFuTGl0ZXJhbCkKK3sKKyAgICBhc3NpZ25UeXBlKGJvb2xlYW5MaXRl
cmFsLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGJvb2xlYW5MaXRlcmFs
Lm9yaWdpbigpKSwgbV9pbnRyaW5zaWNzLmJvb2xUeXBlKCkpKTsKK30KKwordm9pZCBDaGVja2Vy
Ojp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJM
aXRlcmFsKQoreworICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRp
b25EZWZpbml0aW9uKCkpOworICAgIGF1dG8mIGVudW1lcmF0aW9uRGVmaW5pdGlvbiA9ICplbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCk7CisgICAgYXNzaWdu
VHlwZShlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChM
ZXhlcjo6VG9rZW4oZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLm9yaWdpbigpKSwgZW51bWVyYXRp
b25EZWZpbml0aW9uKSk7Cit9CisKK2Jvb2wgQ2hlY2tlcjo6aXNCb29sVHlwZShSZXNvbHZpbmdU
eXBlJiByZXNvbHZpbmdUeXBlKQoreworICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgbGVmdCkgLT4gYm9vbCB7Cisg
ICAgICAgIHJldHVybiBtYXRjaGVzKGxlZnQsIG1faW50cmluc2ljcy5ib29sVHlwZSgpKTsKKyAg
ICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgbGVmdCkgLT4gYm9vbCB7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdChtX2ludHJpbnNp
Y3MuYm9vbFR5cGUoKSwgbGVmdC0+cmVzb2x2YWJsZVR5cGUoKSkpOworICAgIH0pLCByZXNvbHZp
bmdUeXBlKTsKK30KKworYm9vbCBDaGVja2VyOjpyZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKEFT
VDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikKK3sKKyAgICBhdXRvIGV4cHJlc3Npb25JbmZvID0g
cmVjdXJzZUFuZEdldEluZm8oZXhwcmVzc2lvbik7CisgICAgaWYgKCFleHByZXNzaW9uSW5mbykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaXNCb29sVHlwZShleHByZXNzaW9uSW5m
by0+cmVzb2x2aW5nVHlwZSkpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJiBsb2dpY2FsTm90RXhwcmVzc2lvbikKK3sKKyAg
ICBpZiAoIXJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUobG9naWNhbE5vdEV4cHJlc3Npb24ub3Bl
cmFuZCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGFzc2lnblR5cGUobG9naWNhbE5vdEV4cHJl
c3Npb24sIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4obG9naWNhbE5vdEV4
cHJlc3Npb24ub3JpZ2luKCkpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpOworfQorCit2b2lk
IENoZWNrZXI6OnZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mIGxvZ2ljYWxFeHByZXNzaW9u
KQoreworICAgIGlmICghcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZShsb2dpY2FsRXhwcmVzc2lv
bi5sZWZ0KCkpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFyZWN1cnNlQW5kUmVxdWlyZUJv
b2xUeXBlKGxvZ2ljYWxFeHByZXNzaW9uLnJpZ2h0KCkpKQorICAgICAgICByZXR1cm47CisgICAg
YXNzaWduVHlwZShsb2dpY2FsRXhwcmVzc2lvbiwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExl
eGVyOjpUb2tlbihsb2dpY2FsRXhwcmVzc2lvbi5vcmlnaW4oKSksIG1faW50cmluc2ljcy5ib29s
VHlwZSgpKSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpJZlN0YXRlbWVudCYgaWZT
dGF0ZW1lbnQpCit7CisgICAgaWYgKCFyZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKGlmU3RhdGVt
ZW50LmNvbmRpdGlvbmFsKCkpKQorICAgICAgICByZXR1cm47CisgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGlmU3RhdGVtZW50LmJvZHkoKSk7CisgICAgaWYgKGlmU3RhdGVtZW50LmVsc2VCb2R5KCkp
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqaWZTdGF0ZW1lbnQuZWxzZUJvZHkoKSk7Cit9
CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpXaGlsZUxvb3AmIHdoaWxlTG9vcCkKK3sKKyAg
ICBpZiAoIXJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUod2hpbGVMb29wLmNvbmRpdGlvbmFsKCkp
KQorICAgICAgICByZXR1cm47CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHdoaWxlTG9vcC5ib2R5
KCkpOworfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RG9XaGlsZUxvb3AmIGRvV2hpbGVM
b29wKQoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChkb1doaWxlTG9vcC5ib2R5KCkpOworICAg
IHJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUoZG9XaGlsZUxvb3AuY29uZGl0aW9uYWwoKSk7Cit9
CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpGb3JMb29wJiBmb3JMb29wKQoreworICAgIFdU
Rjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0
YXRlbWVudCYgdmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpIHsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KTsKKyAgICB9LCBbJl0o
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24pIHsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOworICAgIH0pLCBmb3JMb29wLmluaXRpYWxpemF0aW9u
KCkpOworICAgIGlmIChlcnJvcigpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGZvckxvb3Au
Y29uZGl0aW9uKCkpIHsKKyAgICAgICAgaWYgKCFyZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKCpm
b3JMb29wLmNvbmRpdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KGZvckxvb3AuaW5jcmVtZW50KCkpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqZm9yTG9v
cC5pbmNyZW1lbnQoKSk7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZvckxvb3AuYm9keSgpKTsK
K30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYgc3dpdGNoU3Rh
dGVtZW50KQoreworICAgIGF1dG8qIHZhbHVlVHlwZSA9IChbJl0oKSAtPiBBU1Q6Ok5hbWVkVHlw
ZSogeworICAgICAgICBhdXRvIHZhbHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKHN3aXRjaFN0
YXRlbWVudC52YWx1ZSgpKTsKKyAgICAgICAgaWYgKCF2YWx1ZUluZm8pCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgYXV0byogdmFsdWVUeXBlID0gZ2V0VW5uYW1lZFR5cGUo
dmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgaWYgKCF2YWx1ZVR5cGUpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgYXV0byYgdmFsdWVVbmlmeU5vZGUgPSB2
YWx1ZVR5cGUtPnVuaWZ5Tm9kZSgpOworICAgICAgICBpZiAoIWlzPEFTVDo6TmFtZWRUeXBlPih2
YWx1ZVVuaWZ5Tm9kZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgYXV0
byYgdmFsdWVOYW1lZFVuaWZ5Tm9kZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPih2YWx1ZVVu
aWZ5Tm9kZSk7CisgICAgICAgIGlmICghKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPih2
YWx1ZU5hbWVkVW5pZnlOb2RlKSAmJiBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
bj4odmFsdWVOYW1lZFVuaWZ5Tm9kZSkuaXNJbnQoKSkKKyAgICAgICAgICAgICYmICFpczxBU1Q6
OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4odmFsdWVOYW1lZFVuaWZ5Tm9kZSkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZ2YWx1ZU5hbWVkVW5pZnlOb2RlOwor
ICAgIH0pKCk7CisgICAgaWYgKCF2YWx1ZVR5cGUpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgaGFzRGVmYXVsdCA9IGZhbHNlOworICAg
IGZvciAoYXV0byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKSB7
CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzd2l0Y2hDYXNlLmJsb2NrKCkpOworICAgICAg
ICBpZiAoIXN3aXRjaENhc2UudmFsdWUoKSkgeworICAgICAgICAgICAgaGFzRGVmYXVsdCA9IHRy
dWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBib29sIHN1Y2Nl
c3M7CisgICAgICAgIHN3aXRjaENhc2UudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHN1
Y2Nlc3MgPSBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdCgqdmFsdWVUeXBlLCBpbnRl
Z2VyTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgc3VjY2VzcyA9
IHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KCp2YWx1ZVR5cGUsIHVuc2lnbmVkSW50
ZWdlckxpdGVyYWwudHlwZSgpKSk7CisgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYg
ZmxvYXRMaXRlcmFsKSB7CisgICAgICAgICAgICBzdWNjZXNzID0gc3RhdGljX2Nhc3Q8Ym9vbD4o
bWF0Y2hBbmRDb21taXQoKnZhbHVlVHlwZSwgZmxvYXRMaXRlcmFsLnR5cGUoKSkpOworICAgICAg
ICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpIHsKKyAgICAgICAgICAgIHN1
Y2Nlc3MgPSBzdGF0aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdCgqdmFsdWVUeXBlLCBudWxs
TGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7
CisgICAgICAgICAgICBzdWNjZXNzID0gbWF0Y2hlcygqdmFsdWVUeXBlLCBtX2ludHJpbnNpY3Mu
Ym9vbFR5cGUoKSk7CisgICAgICAgIH0sIFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSB7CisgICAgICAgICAgICBBU1NFUlQoZW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgICAg
IHN1Y2Nlc3MgPSBtYXRjaGVzKCp2YWx1ZVR5cGUsICplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwu
ZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAgICAgICB9KSk7CisgICAgICAgIGlmICghc3Vj
Y2VzcykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3dpdGNoU3RhdGVt
ZW50LnN3aXRjaENhc2VzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgZmlyc3RDYXNl
ID0gc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKClbaV07CisgICAgICAgIGZvciAoc2l6ZV90
IGogPSBpICsgMTsgaiA8IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpLnNpemUoKTsgKytq
KSB7CisgICAgICAgICAgICBhdXRvJiBzZWNvbmRDYXNlID0gc3dpdGNoU3RhdGVtZW50LnN3aXRj
aENhc2VzKClbal07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDxi
b29sPihmaXJzdENhc2UudmFsdWUoKSkgIT0gc3RhdGljX2Nhc3Q8Ym9vbD4oc2Vjb25kQ2FzZS52
YWx1ZSgpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKCFz
dGF0aWNfY2FzdDxib29sPihmaXJzdENhc2UudmFsdWUoKSkpIHsKKyAgICAgICAgICAgICAgICBz
ZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgIGZpcnN0Q2FzZS52YWx1
ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBmaXJz
dEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgc2Vjb25kQ2FzZS52YWx1ZSgpLT52
aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBzZWNvbmRJbnRl
Z2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmlyc3RJbnRlZ2Vy
TGl0ZXJhbC52YWx1ZSgpICE9IHNlY29uZEludGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAg
ICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgc2Vjb25kVW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gc3RhdGlj
X2Nhc3Q8aW50NjRfdD4oZmlyc3RJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKSAhPSBzdGF0aWNfY2Fz
dDxpbnQ2NF90PihzZWNvbmRVbnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCkpOworICAgICAg
ICAgICAgICAgIH0sIFtdKGF1dG8mKSB7CisgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAg
ICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgZmlyc3RVbnNpZ25lZEludGVn
ZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgc2Vjb25kQ2FzZS52YWx1ZSgpLT52aXNpdChX
VEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBzZWNvbmRJbnRlZ2VyTGl0
ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gc3RhdGljX2Nhc3Q8aW50NjRf
dD4oZmlyc3RVbnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCkpICE9IHN0YXRpY19jYXN0PGlu
dDY0X3Q+KHNlY29uZEludGVnZXJMaXRlcmFsLnZhbHVlKCkpOworICAgICAgICAgICAgICAgIH0s
IFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHNlY29uZFVuc2lnbmVkSW50ZWdlckxp
dGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZpcnN0VW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbC52YWx1ZSgpICE9IHNlY29uZFVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUo
KTsKKyAgICAgICAgICAgICAgICB9LCBbXShhdXRvJikgeworICAgICAgICAgICAgICAgIH0pKTsK
KyAgICAgICAgICAgIH0sIFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZmlyc3RF
bnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBzZWNvbmRDYXNlLnZh
bHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmKSB7
CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBz
ZWNvbmRFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGZpcnN0RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkpOwor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc2Vjb25kRW51bWVyYXRpb25NZW1iZXJMaXRlcmFs
LmVudW1lcmF0aW9uTWVtYmVyKCkpOworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmly
c3RFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKSAhPSBzZWNvbmRF
bnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKTsKKyAgICAgICAgICAg
ICAgICB9LCBbXShhdXRvJikgeworICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIH0s
IFtdKGF1dG8mKSB7CisgICAgICAgICAgICB9KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAoIWhhc0RlZmF1bHQpIHsKKyAgICAgICAgaWYgKGlzPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uPigqdmFsdWVUeXBlKSkgeworICAgICAgICAgICAgSGFzaFNldDxpbnQ2NF90PiB2YWx1ZXM7
CisgICAgICAgICAgICBib29sIHplcm9WYWx1ZUV4aXN0czsKKyAgICAgICAgICAgIGZvciAoYXV0
byYgc3dpdGNoQ2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKSB7CisgICAgICAg
ICAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAgICAgICAgICAgICAgICBzd2l0Y2hDYXNlLnZhbHVl
KCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVn
ZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW50ZWdlckxpdGVyYWwu
dmFsdWVGb3JTZWxlY3RlZFR5cGUoKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNp
Z25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZUZvclNlbGVjdGVk
VHlwZSgpOworICAgICAgICAgICAgICAgIH0sIFtdKGF1dG8mKSB7CisgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgICAgICAgICB6ZXJvVmFsdWVFeGlzdHMg
PSB0cnVlOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVz
LmFkZCh2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0
cnVlOworICAgICAgICAgICAgZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp2
YWx1ZVR5cGUpLml0ZXJhdGVBbGxWYWx1ZXMoWyZdKGludDY0X3QgdmFsdWUpIC0+IGJvb2wgewor
ICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF6
ZXJvVmFsdWVFeGlzdHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXMuY29udGFpbnModmFsdWUpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoaXM8QVNUOjpFbnVtZXJh
dGlvbkRlZmluaXRpb24+KCp2YWx1ZVR5cGUpKTsKKyAgICAgICAgICAgIEhhc2hTZXQ8QVNUOjpF
bnVtZXJhdGlvbk1lbWJlcio+IHZhbHVlczsKKyAgICAgICAgICAgIGZvciAoYXV0byYgc3dpdGNo
Q2FzZSA6IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpKSB7CisgICAgICAgICAgICAgICAg
c3dpdGNoQ2FzZS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSB7CisgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25N
ZW1iZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hZGQoZW51bWVyYXRpb25NZW1i
ZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkpOworICAgICAgICAgICAgICAgIH0sIFtdKGF1
dG8mKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoYXV0byYgZW51
bWVyYXRpb25NZW1iZXIgOiBkb3duY2FzdDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbj4oKnZh
bHVlVHlwZSkuZW51bWVyYXRpb25NZW1iZXJzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXZh
bHVlcy5jb250YWlucygmZW51bWVyYXRpb25NZW1iZXIuZ2V0KCkpKSB7CisgICAgICAgICAgICAg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ2hl
Y2tlcjo6dmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mIGNvbW1hRXhwcmVzc2lvbikKK3sKKyAg
ICBBU1NFUlQoY29tbWFFeHByZXNzaW9uLmxpc3QoKS5zaXplKCkgPiAwKTsKKyAgICBWaXNpdG9y
Ojp2aXNpdChjb21tYUV4cHJlc3Npb24pOworICAgIGlmIChlcnJvcigpKQorICAgICAgICByZXR1
cm47CisgICAgYXV0byBsYXN0SW5mbyA9IGdldEluZm8oY29tbWFFeHByZXNzaW9uLmxpc3QoKS5s
YXN0KCkpOworICAgIGZvcndhcmRUeXBlKGNvbW1hRXhwcmVzc2lvbiwgbGFzdEluZm8tPnJlc29s
dmluZ1R5cGUpOworfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VGVybmFyeUV4cHJlc3Np
b24mIHRlcm5hcnlFeHByZXNzaW9uKQoreworICAgIGF1dG8gcHJlZGljYXRlSW5mbyA9IHJlY3Vy
c2VBbmRSZXF1aXJlQm9vbFR5cGUodGVybmFyeUV4cHJlc3Npb24ucHJlZGljYXRlKCkpOworICAg
IGlmICghcHJlZGljYXRlSW5mbykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBib2R5SW5m
byA9IHJlY3Vyc2VBbmRHZXRJbmZvKHRlcm5hcnlFeHByZXNzaW9uLmJvZHlFeHByZXNzaW9uKCkp
OworICAgIGF1dG8gZWxzZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyh0ZXJuYXJ5RXhwcmVzc2lv
bi5lbHNlRXhwcmVzc2lvbigpKTsKKyAgICAKKyAgICBhdXRvIHJlc3VsdFR5cGUgPSBtYXRjaEFu
ZENvbW1pdChib2R5SW5mby0+cmVzb2x2aW5nVHlwZSwgZWxzZUluZm8tPnJlc29sdmluZ1R5cGUp
OworICAgIGlmICghcmVzdWx0VHlwZSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgYXNzaWduVHlwZSh0ZXJuYXJ5RXhwcmVzc2lvbiwgV1RGTW92
ZSgqcmVzdWx0VHlwZSkpOworfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Q2FsbEV4cHJl
c3Npb24mIGNhbGxFeHByZXNzaW9uKQoreworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPFJlc29sdmluZ1R5cGU+PiB0eXBlczsKKyAgICB0eXBlcy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygpLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBh
cmd1bWVudCA6IGNhbGxFeHByZXNzaW9uLmFyZ3VtZW50cygpKSB7CisgICAgICAgIGF1dG8gYXJn
dW1lbnRJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oYXJndW1lbnQpOworICAgICAgICBpZiAoIWFy
Z3VtZW50SW5mbykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdHlwZXMudW5jaGVja2Vk
QXBwZW5kKGFyZ3VtZW50SW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgfQorICAgIGlmIChjYWxs
RXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpKSB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNp
dChjYWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpLT5nZXQoKSk7CisgICAgICAgIGlmIChl
cnJvcigpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChjYWxsRXhw
cmVzc2lvbi5oYXNPdmVybG9hZHMoKSk7CisgICAgYXV0byogZnVuY3Rpb24gPSByZXNvbHZlRnVu
Y3Rpb25PdmVybG9hZEltcGwoKmNhbGxFeHByZXNzaW9uLm92ZXJsb2FkcygpLCB0eXBlcywgY2Fs
bEV4cHJlc3Npb24uY2FzdFJldHVyblR5cGUoKSk7CisgICAgaWYgKCFmdW5jdGlvbikgeworICAg
ICAgICBpZiAoYXV0byBuZXdGdW5jdGlvbiA9IHJlc29sdmVCeUluc3RhbnRpYXRpb24oY2FsbEV4
cHJlc3Npb24sIHR5cGVzLCBtX2ludHJpbnNpY3MpKSB7CisgICAgICAgICAgICBtX3Byb2dyYW0u
YXBwZW5kKFdURk1vdmUoKm5ld0Z1bmN0aW9uKSk7CisgICAgICAgICAgICBmdW5jdGlvbiA9ICZt
X3Byb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5sYXN0KCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAoIWZ1bmN0aW9uKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9u
LT5wYXJhbWV0ZXJzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtYXRjaEFuZENvbW1p
dCh0eXBlc1tpXS5nZXQoKSwgKmZ1bmN0aW9uLT5wYXJhbWV0ZXJzKClbaV0udHlwZSgpKSkgewor
ICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGNhbGxFeHByZXNzaW9uLnNldEZ1bmN0aW9uKCpmdW5jdGlvbik7CisKKyAg
ICBhc3NpZ25UeXBlKGNhbGxFeHByZXNzaW9uLCBmdW5jdGlvbi0+dHlwZSgpLmNsb25lKCkpOwor
fQorCitib29sIGNoZWNrKFByb2dyYW0mIHByb2dyYW0pCit7CisgICAgQ2hlY2tlciBjaGVja2Vy
KHByb2dyYW0uaW50cmluc2ljcygpLCBwcm9ncmFtKTsKKyAgICBjaGVja2VyLmNoZWNrRXJyb3JB
bmRWaXNpdChwcm9ncmFtKTsKKyAgICBpZiAoY2hlY2tlci5lcnJvcigpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuIGNoZWNrZXIuYXNzaWduVHlwZXMoKTsKK30KKworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTENoZWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNmYwODU3NzgxODRmZTU0NzY3MjEwMWRmYmUwMTIw
ZTYzNmI5YTg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xDaGVja2VyLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CituYW1lc3BhY2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCitib29sIGNoZWNrKFByb2dy
YW0mKTsKKworfQorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjViZDU0YzliOTEwZDFiYWFmNjcwNTE4NDU3NGExNjk2ZDQxOTY5Y2UK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xHYXRoZXJFbnRyeVBvaW50
SXRlbXMuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEFycmF5UmVm
ZXJlbmNlVHlwZS5oIgorI2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hM
U0xGdW5jdGlvbkRlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTEluZmVyVHlwZXMuaCIKKyNp
bmNsdWRlICJXSExTTEludHJpbnNpY3MuaCIKKyNpbmNsdWRlICJXSExTTFBvaW50ZXJUeXBlLmgi
CisjaW5jbHVkZSAiV0hMU0xTdHJ1Y3R1cmVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xU
eXBlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorI2luY2x1
ZGUgIldITFNMVmFyaWFibGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVmlzaXRvci5o
IgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIEdhdGhlcmVyIDogcHVibGljIFZpc2l0b3IgeworcHVi
bGljOgorICAgIEdhdGhlcmVyKGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MsIEFTVDo6U2Vt
YW50aWMqIHNlbWFudGljID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2ludHJpbnNpY3MoaW50cmlu
c2ljcykKKyAgICAgICAgLCBtX2N1cnJlbnRTZW1hbnRpYyhzZW1hbnRpYykKKyAgICB7CisgICAg
fQorCisgICAgdmlydHVhbCB+R2F0aGVyZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHJlc2V0
KCkKKyAgICB7CisgICAgICAgIG1fY3VycmVudFNlbWFudGljID0gbnVsbHB0cjsKKyAgICB9CisK
KyAgICBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiYgdGFrZUVudHJ5UG9pbnRJdGVtcygpCisgICAg
eworICAgICAgICByZXR1cm4gV1RGTW92ZShtX2VudHJ5UG9pbnRJdGVtcyk7CisgICAgfQorCisg
ICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpCisgICAgeworICAgICAg
ICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFw
cGVuZChFbnRyeVBvaW50SXRlbShtX3R5cGVSZWZlcmVuY2VzLmxhc3QoKS5nZXQoKSwgKm1fY3Vy
cmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbiYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X2N1cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobWF0Y2hlcyhuYXRpdmVUeXBlRGVjbGFy
YXRpb24sIG1faW50cmluc2ljcy52b2lkVHlwZSgpKSkgeworICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fZW50cnlQb2lu
dEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShtX3R5cGVSZWZlcmVuY2VzLmxhc3QoKS5nZXQo
KSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlN0
cnVjdHVyZURlZmluaXRpb24mIHN0cnVjdHVyZURlZmluaXRpb24pCisgICAgeworICAgICAgICBp
ZiAobV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGF1dG8mIHN0cnVjdHVyZUVs
ZW1lbnQgOiBzdHJ1Y3R1cmVEZWZpbml0aW9uLnN0cnVjdHVyZUVsZW1lbnRzKCkpIHsKKyAgICAg
ICAgICAgIGlmIChzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCkpCisgICAgICAgICAgICAgICAg
bV9jdXJyZW50U2VtYW50aWMgPSAmKnN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKTsKKyAgICAg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChzdHJ1Y3R1cmVFbGVtZW50KTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRp
b24pCisgICAgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQodHlwZURlZmluaXRpb24udHlw
ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJl
ZmVyZW5jZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlw
ZSgpKTsKKyAgICAgICAgbV90eXBlUmVmZXJlbmNlcy5hcHBlbmQodHlwZVJlZmVyZW5jZSk7Cisg
ICAgICAgIGF1dG8gZGVwdGggPSBtX3R5cGVSZWZlcmVuY2VzLnNpemUoKTsKKyAgICAgICAgY2hl
Y2tFcnJvckFuZFZpc2l0KCp0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChkZXB0aCwgbV90eXBlUmVmZXJlbmNlcy5zaXplKCkgPT0gZGVwdGgpOwor
ICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYgcG9pbnRlclR5cGUpCisg
ICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBzZXRF
cnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fZW50cnlQ
b2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRlbShwb2ludGVyVHlwZSwgKm1fY3VycmVudFNl
bWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlw
ZSYgYXJyYXlSZWZlcmVuY2VUeXBlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRTZW1h
bnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0o
YXJyYXlSZWZlcmVuY2VUeXBlLCAqbV9jdXJyZW50U2VtYW50aWMpKTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJheVR5cGUpCisgICAgeworICAgICAgICBpZiAo
IW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChF
bnRyeVBvaW50SXRlbShhcnJheVR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgIH0KKwor
ICAgIHZvaWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0
aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2N1cnJlbnRTZW1hbnRpYyk7CisgICAgICAg
IGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCkpCisgICAgICAgICAgICBtX2N1cnJl
bnRTZW1hbnRpYyA9ICYqdmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpOworICAgICAgICBp
ZiAodmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpCisgICAgICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgY29uc3QgSW50cmluc2ljcyYgbV9pbnRyaW5zaWNzOworICAgIEFTVDo6U2VtYW50aWMqIG1f
Y3VycmVudFNlbWFudGljIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPEFTVDo6VHlwZVJlZmVyZW5jZT4+IG1fdHlwZVJlZmVyZW5jZXM7CisgICAgVmVjdG9y
PEVudHJ5UG9pbnRJdGVtPiBtX2VudHJ5UG9pbnRJdGVtczsKK307CisKK09wdGlvbmFsPEVudHJ5
UG9pbnRJdGVtcz4gZ2F0aGVyRW50cnlQb2ludEl0ZW1zKGNvbnN0IEludHJpbnNpY3MmIGludHJp
bnNpY3MsIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7Cisg
ICAgQVNTRVJUKGZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKTsKKyAgICBHYXRo
ZXJlciBpbnB1dEdhdGhlcmVyKGludHJpbnNpY3MpOworICAgIGZvciAoYXV0byYgcGFyYW1ldGVy
IDogZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKSkgeworICAgICAgICBpbnB1dEdhdGhl
cmVyLnJlc2V0KCk7CisgICAgICAgIGlucHV0R2F0aGVyZXIuY2hlY2tFcnJvckFuZFZpc2l0KHBh
cmFtZXRlcik7CisgICAgICAgIGlmIChpbnB1dEdhdGhlcmVyLmVycm9yKCkpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKyAgICBHYXRoZXJlciBvdXRwdXRHYXRoZXJl
cihpbnRyaW5zaWNzLCBmdW5jdGlvbkRlZmluaXRpb24uc2VtYW50aWMoKSA/ICYqZnVuY3Rpb25E
ZWZpbml0aW9uLnNlbWFudGljKCkgOiBudWxscHRyKTsKKyAgICBvdXRwdXRHYXRoZXJlci5jaGVj
a0Vycm9yQW5kVmlzaXQoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSk7CisgICAgaWYgKG91dHB1
dEdhdGhlcmVyLmVycm9yKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBy
ZXR1cm4ge3sgaW5wdXRHYXRoZXJlci50YWtlRW50cnlQb2ludEl0ZW1zKCksIG91dHB1dEdhdGhl
cmVyLnRha2VFbnRyeVBvaW50SXRlbXMoKSB9fTsKK30KKworfQorCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJF
bnRyeVBvaW50SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ0ZjdkZDg0NDU3ZmVhNjA2
OTFhNjVlYjNmMWQ3ZjNhNTQ4OTMwOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmgKQEAgLTAs
MCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQkdQ
VSkKKworI2luY2x1ZGUgIldITFNMU2VtYW50aWMuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisKK2NsYXNzIEZ1bmN0aW9uRGVmaW5p
dGlvbjsKKworfQorCitjbGFzcyBJbnRyaW5zaWNzOworY2xhc3MgVW5uYW1lZFR5cGU7CisKK3N0
cnVjdCBFbnRyeVBvaW50SXRlbSB7CisgICAgRW50cnlQb2ludEl0ZW0oQVNUOjpVbm5hbWVkVHlw
ZSYgdW5uYW1lZFR5cGUsIEFTVDo6U2VtYW50aWMmIHNlbWFudGljKQorICAgICAgICA6IHVubmFt
ZWRUeXBlKHVubmFtZWRUeXBlKQorICAgICAgICAsIHNlbWFudGljKHNlbWFudGljKQorICAgIHsK
KyAgICB9CisKKyAgICBBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZTsKKyAgICBBU1Q6OlNl
bWFudGljJiBzZW1hbnRpYzsKK307CisKK3N0cnVjdCBFbnRyeVBvaW50SXRlbXMgeworICAgIFZl
Y3RvcjxFbnRyeVBvaW50SXRlbT4gaW5wdXRzOworICAgIFZlY3RvcjxFbnRyeVBvaW50SXRlbT4g
b3V0cHV0czsKK307CisKK09wdGlvbmFsPEVudHJ5UG9pbnRJdGVtcz4gZ2F0aGVyRW50cnlQb2lu
dEl0ZW1zKGNvbnN0IEludHJpbnNpY3MmLCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpOworCit9
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDBkMjU2MzUzZDc0YWJkNjI2NjMwMjRi
ZDgwNTRjOTUwZTA3MzgxMDMuLjYzZjA5NjExYjY4MmMxODk0MjE2MzQyMmY4Y2YwMzViYjQyODA5
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0zMDksNiArMzA5LDggQEAgTW9kdWxlcy93ZWJncHUvRE9N
V2luZG93V2ViR1BVLmNwcAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xJbmZlclR5cGVzLmNw
cAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUGFyc2VyLmNwcAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNw
cAorTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwCiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmNwcAogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xSZWN1cnNpdmVUeXBlQ2hlY2tlci5jcHAKIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMU3ludGhlc2l6ZUFycmF5T3BlcmF0b3JMZW5ndGguY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NjQ5Mzg0NGI4OGQ1MDY0MzQxMjUwYjRkZGQ1ZmMwNTEzNWI4Nzc3Ny4uNGEwYjE2ZDI0MzdlZmNk
Njg5ZmEyMjdjMzI1MDI1Y2M5ZGNhNTVjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQxNSw2ICs2NDE1LDEwIEBACiAJCTFD
ODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNvbnRyb2xsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5z
cGVjdG9yQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDODFC
OTU4MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTFDODQwQjk3MjFFQzQwMDcwMEQwNTAwRCAvKiBXSExTTENoZWNrZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xDaGVja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTFDODQwQjk5MjFFQzQwMDgwMEQwNTAwRCAvKiBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDODQwQjlBMjFFQzQwMDkwMEQwNTAwRCAvKiBX
SExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTEdhdGhlckVu
dHJ5UG9pbnRJdGVtcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzg0MEI5QjIx
RUM0MDA5MDBEMDUwMEQgLyogV0hMU0xDaGVja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdI
TFNMQ2hlY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDOTA0REY5MEJB
OUQyQzgwMDgxRTlEMCAvKiBWZXJzaW9uLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZp
ZzsgcGF0aCA9IFZlcnNpb24ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTFDQTE5RTAzMERDMjU1OTUwMDY1QTk5NCAvKiBFdmVudExvb3BNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBFdmVudExvb3BNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFDQTE5RTE1MERDMjU1Q0EwMDY1QTk5NCAvKiBFdmVudExvb3Au
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRMb29wLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzMyMyw2ICsxMzMyNywxMCBAQAogCQlDMjFCRjczQTIx
Q0Q4RDcwMDAyMjc5NzkgLyogV0hMU0xQcm9ncmFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMUHJv
Z3JhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjFCRjc0MjIxQ0Q5NjNCMDAy
Mjc5NzkgLyogV0hMU0xTdGFuZGFyZExpYnJhcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0hMU0xTdGFu
ZGFyZExpYnJhcnkuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYkNvcmUvV0hMU0xTdGFuZGFy
ZExpYnJhcnkuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJQzIxQkY3
NDUyMUNEOTY5ODAwMjI3OTc5IC8qIFdITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXSExT
TFN0YW5kYXJkTGlicmFyeS50eHQ7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUMyMURG
MkU3MUQ5RTRFOTkwMEY1QjI0QyAvKiBDU1NGb250VmFyaWF0aW9uVmFsdWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRm9udFZhcmlhdGlvblZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIxREYyRTgxRDlFNEU5OTAwRjVCMjRDIC8q
IENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDU1NGb250VmFyaWF0aW9uVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzIzNEE5ODUyMUU4ODZBOTAwM0M5ODREIC8qIFdITFNMVmlzaXRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXSExTTFZpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
MjM0QTk4NzIxRTg4NkFEMDAzQzk4NEQgLyogV0hMU0xWaXNpdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdITFNMVmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjM0QTk4QTIx
RTg4ODNFMDAzQzk4NEQgLyogV0hMU0xOYW1lUmVzb2x2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV0hMU0xOYW1lUmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlD
MjM0QTk4QzIxRTg4ODNFMDAzQzk4NEQgLyogV0hMU0xOYW1lUmVzb2x2ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xOYW1lUmVzb2x2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QzIzNEE5OEQyMUU4ODg4NDAwM0M5ODREIC8qIFdITFNMTmFtZUNvbnRleHQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0hMU0xOYW1lQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMzM0NiwxMCArMTMzNTQsNiBAQAogCQlDMjM0QTlCNTIxRTkyQzIzMDAzQzk4NEQg
LyogV0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdI
TFNMU3ludGhlc2l6ZVN0cnVjdHVyZUFjY2Vzc29ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMjM0QTlCNjIxRTkyQ0MwMDAzQzk4NEQgLyogV0hMU0xJbnRyaW5zaWNzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdITFNMSW50cmluc2ljcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMjM0QTlCNzIxRTkyQ0MxMDAzQzk4NEQgLyogV0hMU0xJbnRyaW5zaWNzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdITFNMSW50cmluc2ljcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUMyMURGMkU3MUQ5RTRFOTkwMEY1QjI0QyAvKiBDU1NGb250VmFyaWF0aW9uVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRm9udFZhcmlh
dGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQzIxREYyRTgxRDlF
NEU5OTAwRjVCMjRDIC8qIENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDU1NGb250VmFyaWF0aW9uVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQzIzNEE5ODUyMUU4ODZBOTAwM0M5ODREIC8qIFdITFNMVmlzaXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTFZpc2l0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDMjM0QTk4NzIxRTg4NkFEMDAzQzk4NEQgLyogV0hMU0xWaXNpdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdITFNMVmlzaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlDMjQ1OEU2MTFGRTg5NzlFMDA1OTQ3NTkgLyogRm9udENhY2hlQ29yZVRleHQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRm9udENhY2hlQ29yZVRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzI2MDE3QTExQzcyREM5OTAwRjc0QTE2IC8qIENTU0ZvbnRGYWNlU2V0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0ZvbnRGYWNlU2V0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzI2MDE3QTIxQzcyREM5OTAwRjc0QTE2IC8qIENT
U0ZvbnRGYWNlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZvbnRG
YWNlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTQxNSw2ICsyNTQxOSwx
MCBAQAogCQkJCUMyMUJGNkYxMjFDRDg5OEQwMDIyNzk3OSAvKiBBU1QgKi8sCiAJCQkJQzIzNEE5
QjIyMUU5MkMxRjAwM0M5ODREIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwICov
LAogCQkJCUMyMzRBOUFFMjFFOTJDMUEwMDNDOTg0RCAvKiBXSExTTENoZWNrRHVwbGljYXRlRnVu
Y3Rpb25zLmggKi8sCisJCQkJMUM4NDBCOUIyMUVDNDAwOTAwRDA1MDBEIC8qIFdITFNMQ2hlY2tl
ci5jcHAgKi8sCisJCQkJMUM4NDBCOTcyMUVDNDAwNzAwRDA1MDBEIC8qIFdITFNMQ2hlY2tlci5o
ICovLAorCQkJCTFDODQwQjk5MjFFQzQwMDgwMEQwNTAwRCAvKiBXSExTTEdhdGhlckVudHJ5UG9p
bnRJdGVtcy5jcHAgKi8sCisJCQkJMUM4NDBCOUEyMUVDNDAwOTAwRDA1MDBEIC8qIFdITFNMR2F0
aGVyRW50cnlQb2ludEl0ZW1zLmggKi8sCiAJCQkJQzIzNEE5OUEyMUU5MEY1NjAwM0M5ODREIC8q
IFdITFNMSW5mZXJUeXBlcy5jcHAgKi8sCiAJCQkJQzIzNEE5OUIyMUU5MEY1NzAwM0M5ODREIC8q
IFdITFNMSW5mZXJUeXBlcy5oICovLAogCQkJCUMyMzRBOUI3MjFFOTJDQzEwMDNDOTg0RCAvKiBX
SExTTEludHJpbnNpY3MuY3BwICovLAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359019</attachid>
            <date>2019-01-13 20:34:57 -0800</date>
            <delta_ts>2019-01-14 20:12:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-193080-20190113203438.patch</filename>
            <type>text/plain</type>
            <size>85012</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5OTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjYxMDk5OGVhZjJiOWZh
MGM5ZWVkMDM5NjA1NTM0OGY1MzhiNzNkNS4uZTE2YTUzY2VkMmY1ZmUxNDEzYzExMjBkN2Q1OGEy
MmQwODI3MWFjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDE5LTAxLTEzICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgdGhlIFR5cGUgQ2hlY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkzMDgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHRyYW5zbGF0aW9uIG9mIGh0dHBzOi8vZ2l0aHVi
LmNvbS9ncHV3ZWIvV0hMU0wvYmxvYi9tYXN0ZXIvU291cmNlL0NoZWNrZXIubWpzIGludG8gQysr
LgorCisgICAgICAgIFRoZSBDaGVja2VyIHBhc3NlcyB0eXBlcyBiZXR3ZWVuIG5lc3RlZCBleHBy
ZXNzaW9ucy4gQW4gaW5uZXIgZXhwcmVzc2lvbiBmaWd1cmVzIG91dCB3aGF0IHR5cGUgaXQgaXMs
IGFuZAorICAgICAgICBwYXNzZXMgdGhhdCBpbmZvcm1hdGlvbiB1cCB0byBhbiBvdXRlciBleHBy
ZXNzaW9uLiBUaGlzIGlzIGRvbmUgdmlhIHJlYWRpbmcvd3JpdGluZyBpbnRvIGEgSGFzaE1hcCwK
KyAgICAgICAgYmVjYXVzZSBhbGwgdGhlIHR5cGUgaW5mb3JtYXRpb24gbmVlZHMgdG8gYmUgc2F2
ZWQgc28gdGhhdCB0aGUgTWV0YWwgY29kZWdlbiBjYW4gZW1pdCB0aGUgY29ycmVjdCB0eXBlcy4K
KworICAgICAgICBUaGVzZSB0eXBlcyBjYW4gaGF2ZSB0d28gZm9ybXM6IEEgcmVndWxhciB0eXBl
IChsaWtlICJpbnRbXSIpIG9yIGEgUmVzb2x2YWJsZVR5cGUuIFJlc29sdmFibGVUeXBlcworICAg
ICAgICByZXByZXNlbnQgbGl0ZXJhbHMsIHNpbmNlIGEgbGl0ZXJhbCBuZWVkcyB0byBrbm93IGl0
cyBjb250ZXh0IGJlZm9yZSBpdCBrbm93cyB3aGF0IHR5cGUgaXQgc2hvdWxkIGJlLiBTbywKKyAg
ICAgICAgaWYgeW91IGhhdmUgYSBmdW5jdGlvbiBsaWtlICJ2b2lkIGZvbyhpbnQgeCkiIGFuZCB5
b3UgaGF2ZSBhIGNhbGwgbGlrZSAiZm9vKDMpIiwgdGhlIDMncyBSZXNvbHZhYmxlVHlwZQorICAg
ICAgICBnZXRzIHBhc3NlZCB0byB0aGUgQ2FsbEV4cHJlc3Npb24sIHdoaWNoIHRoZW4gdW5pZmll
cyBpdCB3aXRoIHRoZSBmdW5jdGlvbidzIHBhcmFtZXRlciB0eXBlLCB0aGVyZWJ5CisgICAgICAg
IHJlc29sdmluZyB0aGUgMyB0byBiZSBhbiBpbnQuCisKKyAgICAgICAgVGhlcmUgYXJlIGEgZmV3
IGV4YW1wbGVzIHdoZXJlIG11bHRpcGxlIGV4cHJlc3Npb25zIHdpbGwgaGF2ZSB0aGUgc2FtZSB0
eXBlOiAicmV0dXJuIChmb28sIDMpLiIgSWYgdGhvc2UKKyAgICAgICAgdHlwZXMgYXJlIHJlZ3Vs
YXIgdHlwZXMsIHRoZW4gaXQncyBubyBwcm9ibGVtOyB3ZSBjYW4ganVzdCBjbG9uZSgpIHRoZSB0
eXBlIGFuZCBzdGljayBib3RoIGluIHRoZSBIYXNoTWFwLgorICAgICAgICBIb3dldmVyLCBpZiB0
aGUgdHlwZSBpcyBhIFJlc29sdmFibGVUeXBlLCBhbiBvdXRlciBleHByZXNzaW9uIHdpbGwgb25s
eSByZXNvbHZlIHRoYXQgdHlwZSBvbmNlLCBzbyB0aGUgdHdvCisgICAgICAgIFJlc29sdmFibGVU
eXBlcyBjYW4ndCBiZSBkaXN0aW5jdC4gVGhlIENoZWNrZXIgc29sdmVzIHRoaXMgcHJvYmxlbSBi
eSBtYWtpbmcgYSByZWZlcmVuY2UtY291bnRlZCB3cmFwcGVyCisgICAgICAgIGFyb3VuZCBSZXNv
bHZhYmxlVHlwZXMgYW5kIHVzaW5nIHRoYXQgaW4gdGhlIEhhc2hNYXAgaW5zdGVhZC4KKworICAg
ICAgICBPbmNlIGFsbCB0aGUgUmVzb2x2YWJsZVR5cGVzIGhhdmUgYmVlbiByZXNvbHZlZCwgYSBz
ZWNvbmQgcGFzcyBydW5zIHRocm91Z2ggdGhlIGVudGlyZSBIYXNoTWFwIGFuZCBhc3NpZ25zCisg
ICAgICAgIHRoZSBrbm93biB0eXBlcyB0byBhbGwgdGhlIGV4cHJlc3Npb25zLiBMVmFsdWVzIGFu
ZCB0aGVpciBhc3NvY2lhdGVkIGFkZHJlc3Mgc3BhY2VzIGFyZSBoZWxkIGluIGEgcGFyYWxsZWwK
KyAgICAgICAgSGFzaE1hcCwgYW5kIGFyZSBhc3NpZ25lZCB0byB0aGUgZXhwcmVzc2lvbiBhdCB0
aGUgc2FtZSB0aW1lLiBUaGUgdHlwZSBpcyBhbiBPcHRpb25hbDxBZGRyZXNzU3BhY2U+IGJlY2F1
c2UKKyAgICAgICAgYWRkcmVzcyBzcGFjZXMgYXJlIG9ubHkgcmVsZXZhbnQgaWYgdGhlIHZhbHVl
IGlzIGFuIGx2YWx1ZTsgaWYgaXQncyBudWxsb3B0IHRoZW4gdGhhdCBtZWFucyB0aGUgZXhwcmVz
c2lvbgorICAgICAgICBpcyBhbiBydmFsdWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1
c2UgaXQgaXNuJ3QgaG9va2VkIHVwIHlldC4gTm90IGVub3VnaCBvZiB0aGUgY29tcGlsZXIgZXhp
c3RzIHRvIGhhdmUgYW55IG1lYW5pbmdmdWwgc29ydAorICAgICAgICBvZiB0ZXN0LiBXaGVuIGVu
b3VnaCBvZiB0aGUgY29tcGlsZXIgaXMgcHJlc2VudCwgSSdsbCBwb3J0IHRoZSByZWZlcmVuY2Ug
aW1wbGVtZW50YXRpb24ncyB0ZXN0IHN1aXRlLgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xDaGVja2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
cmVzb2x2ZVdpdGhPcGVyYXRvckFuZGVySW5kZXhlcik6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6cmVzb2x2ZVdpdGhPcGVyYXRvckxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
cmVzb2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpyZXNvbHZlQnlJbnN0YW50aWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpjaGVj
a1NlbWFudGljcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Y2hlY2tPcGVyYXRvck92ZXJs
b2FkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpDaGVja2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6Q2hlY2tlcjo6YXNzaWduVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNo
ZWNrZXI6OmNoZWNrU2hhZGVyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6bWF0Y2hB
bmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OnJlY3Vyc2VBbmRH
ZXRJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpnZXRJbmZvKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpDaGVja2VyOjpmb3J3YXJkVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6Z2V0VW5uYW1lZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6
OmZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkNoZWNrZXI6OnJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmlzQm9vbFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OnJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OmNoZWNrKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuaDog
QWRkZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBv
aW50SXRlbXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpHYXRoZXJlcjo6
R2F0aGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkdhdGhlcmVyOjpyZXNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6R2F0aGVyZXI6OnRha2VFbnRyeVBvaW50SXRlbXMpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkdhdGhlcmVyOjp2aXNpdCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6Z2F0aGVyRW50cnlQb2ludEl0ZW1zKToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpFbnRyeVBvaW50SXRlbTo6RW50cnlQb2ludEl0ZW0pOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKwogMjAxOS0wMS0xMyAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNv
bT4KIAogICAgICAgICBNaW5vciBvcHRpbWl6YXRpb24gdG8gUmVuZGVyVGV4dDo6c2V0UmVuZGVy
ZWRUZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMQ2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTENoZWNrZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmZDdjOWQyZGE3OTBiMTBiMDZmZjFkMGM4MTk0
Y2UzZmMxOGQ0OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCkBAIC0wLDAgKzEsMTQ1MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTENoZWNrZXIuaCIKKworI2lm
IEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJXSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oIgor
I2luY2x1ZGUgIldITFNMQXJyYXlUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBc3NpZ25tZW50RXhw
cmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMQ2FsbEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJX
SExTTENvbW1hRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRGVyZWZlcmVuY2VFeHByZXNz
aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEb1doaWxlTG9vcC5oIgorI2luY2x1ZGUgIldITFNMRG90
RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMRm9yTG9vcC5oIgorI2luY2x1ZGUgIldITFNM
R2F0aGVyRW50cnlQb2ludEl0ZW1zLmgiCisjaW5jbHVkZSAiV0hMU0xJZlN0YXRlbWVudC5oIgor
I2luY2x1ZGUgIldITFNMSW5kZXhFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5
cGVzLmgiCisjaW5jbHVkZSAiV0hMU0xMb2dpY2FsRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldI
TFNMTG9naWNhbE5vdEV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE1ha2VBcnJheVJlZmVy
ZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTE1ha2VQb2ludGVyRXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFByb2dyYW0u
aCIKKyNpbmNsdWRlICJXSExTTFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTFJlc29sdmFibGVUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZlT3ZlcmxvYWRJ
bXBsLmgiCisjaW5jbHVkZSAiV0hMU0xSZXNvbHZpbmdUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xS
ZXR1cm4uaCIKKyNpbmNsdWRlICJXSExTTFN3aXRjaFN0YXRlbWVudC5oIgorI2luY2x1ZGUgIldI
TFNMVGVybmFyeUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNpbmNs
dWRlICJXSExTTFdoaWxlTG9vcC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFBPRENoZWNrZXIgOiBwdWJsaWMg
VmlzaXRvciB7CitwdWJsaWM6CisgICAgUE9EQ2hlY2tlcigpID0gZGVmYXVsdDsKKworICAgIHZp
cnR1YWwgflBPRENoZWNrZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51
bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pIG92ZXJyaWRlCisgICAg
eworICAgICAgICBWaXNpdG9yOjp2aXNpdChlbnVtZXJhdGlvbkRlZmluaXRpb24pOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24mIG5hdGl2ZVR5cGVE
ZWNsYXJhdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghbmF0aXZlVHlwZURlY2xh
cmF0aW9uLmlzTnVtYmVyKCkKKyAgICAgICAgICAgICYmICFuYXRpdmVUeXBlRGVjbGFyYXRpb24u
aXNWZWN0b3IoKQorICAgICAgICAgICAgJiYgIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc01hdHJp
eCgpKQorICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFT
VDo6U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHN0cnVjdHVyZURlZmluaXRpb24pOworICAgIH0K
KworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvbiYgdHlwZURlZmluaXRpb24pIG92
ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdCh0eXBlRGVmaW5pdGlvbik7Cisg
ICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoYXJyYXlUeXBlKTsKKyAgICB9CisKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlJikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgfQorCisgICAg
dm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAg
ICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7Cisg
ICAgfQorfTsKKworc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlv
bj4gcmVzb2x2ZVdpdGhPcGVyYXRvckFuZGVySW5kZXhlcihBU1Q6OkNhbGxFeHByZXNzaW9uJiBj
YWxsRXhwcmVzc2lvbiwgQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGZpcnN0QXJndW1lbnQsIGNv
bnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7CisgICAgYm9vbCBpc1Jlc3RyaWN0ZWQgPSBm
YWxzZTsKKyAgICBib29sIGlzT3BlcmF0b3IgPSB0cnVlOworICAgIGF1dG8gcmV0dXJuVHlwZSA9
IG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNz
aW9uLm9yaWdpbigpKSwgZmlyc3RBcmd1bWVudC5hZGRyZXNzU3BhY2UoKSwgZmlyc3RBcmd1bWVu
dC5lbGVtZW50VHlwZSgpLmNsb25lKCkpOworICAgIEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMg
cGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJz
KCksIHsgZmlyc3RBcmd1bWVudC5jbG9uZSgpIH0sIFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdU
Rjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJh
dGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmll
cnMoKSwgeyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNz
aW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKSB9LCBTdHJpbmcoKSwgV1RGOjpu
dWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRl
Y2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJl
c3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RG
TW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvciZbXSIsIFN0cmluZzo6Q29uc3RydWN0
RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6Om51bGxvcHQsIGlzT3BlcmF0
b3IpLCBpc1Jlc3RyaWN0ZWQpOworfQorCitzdGF0aWMgT3B0aW9uYWw8QVNUOjpOYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uPiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKEFTVDo6Q2FsbEV4cHJl
c3Npb24mIGNhbGxFeHByZXNzaW9uLCBBU1Q6OlVubmFtZWRUeXBlJiBmaXJzdEFyZ3VtZW50LCBj
b25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQoreworICAgIGJvb2wgaXNSZXN0cmljdGVkID0g
ZmFsc2U7CisgICAgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKKyAgICBhdXRvIHJldHVyblR5cGUg
PSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9y
aWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICBBU1Q6OlZhcmlhYmxlRGVjbGFy
YXRpb25zIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURl
Y2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVh
bGlmaWVycygpLCB7IGZpcnN0QXJndW1lbnQuY2xvbmUoKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92
ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvci5sZW5ndGgiLCBTdHJpbmc6OkNvbnN0cnVj
dEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpudWxsb3B0LCBpc09wZXJh
dG9yKSwgaXNSZXN0cmljdGVkKTsKK30KKworc3RhdGljIE9wdGlvbmFsPEFTVDo6TmF0aXZlRnVu
Y3Rpb25EZWNsYXJhdGlvbj4gcmVzb2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKEFTVDo6Q2Fs
bEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uLCBSZXNvbHZpbmdUeXBlJiBmaXJzdEFyZ3VtZW50
LCBSZXNvbHZpbmdUeXBlJiBzZWNvbmRBcmd1bWVudCwgY29uc3QgSW50cmluc2ljcyYgaW50cmlu
c2ljcykKK3sKKyAgICBib29sIGlzUmVzdHJpY3RlZCA9IGZhbHNlOworICAgIGJvb2wgaXNPcGVy
YXRvciA9IHRydWU7CisgICAgYXV0byByZXR1cm5UeXBlID0gQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MuYm9v
bFR5cGUoKSk7CisgICAgYXV0byBhcmd1bWVudFR5cGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoW10oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLT5j
bG9uZSgpOworICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JikgLT4gVW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RG
OjptYWtlVmlzaXRvcihbXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBl
KSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICAgICAgcmV0dXJuIHVu
bmFtZWRUeXBlLT5jbG9uZSgpOworICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVm
ZXJlbmNlPiYpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7CisgICAgICAgICAgICAv
LyBXZSBlbmNvdW50ZXJlZCAibnVsbCA9PSBudWxsIi4KKyAgICAgICAgICAgIC8vIFRoZSB0eXBl
IGlzbid0IG9ic2VydmFibGUsIHNvIHdlIGNhbiBwaWNrIHdoYXRldmVyIHdlIHdhbnQuCisgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYmUgZ2VuZXJhbGl6ZWQsIHVzaW5n
IHRoZSAicHJlZmVycmVkIHR5cGUiIGluZnJhc3RydWN0dXJlIHVzZWQgYnkgZ2VuZXJpYyBsaXRl
cmFscworICAgICAgICAgICAgcmV0dXJuIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6
VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBpbnRyaW5zaWNzLmludFR5cGUoKSk7Cisg
ICAgICAgIH0pLCBzZWNvbmRBcmd1bWVudCk7CisgICAgfSksIGZpcnN0QXJndW1lbnQpOworICAg
IEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnMgcGFyYW1ldGVyczsKKyAgICBwYXJhbWV0ZXJzLmFw
cGVuZChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9u
Lm9yaWdpbigpKSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgYXJndW1lbnRUeXBlLT5jbG9uZSgpIH0s
IFN0cmluZygpLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCkpOworICAgIHBhcmFtZXRlcnMu
YXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Np
b24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBXVEZNb3ZlKGFyZ3VtZW50VHlwZSkg
fSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcmV0dXJuIEFT
VDo6TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4
ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygp
LCBXVEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3I9PSIs
IFN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBXVEY6
Om51bGxvcHQsIGlzT3BlcmF0b3IpLCBpc1Jlc3RyaWN0ZWQpOworfQorCitzdGF0aWMgT3B0aW9u
YWw8QVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uPiByZXNvbHZlQnlJbnN0YW50aWF0aW9u
KEFTVDo6Q2FsbEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uLCBjb25zdCBWZWN0b3I8c3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBlPj4mIHR5cGVzLCBjb25zdCBJbnRyaW5zaWNz
JiBpbnRyaW5zaWNzKQoreworICAgIGlmIChjYWxsRXhwcmVzc2lvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yJltdIiAmJiB0eXBlcy5zaXplKCkgPT0gMikgeworICAgICAgICBhdXRvKiBmaXJzdEFyZ3Vt
ZW50QXJyYXlSZWYgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10oVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+JiB1bm5hbWVkVHlwZSkgLT4gQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUq
IHsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nh
c3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuICZkb3duY2FzdDxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpV
bm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYpIC0+IEFTVDo6QXJy
YXlSZWZlcmVuY2VUeXBlKiB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
fSksIHR5cGVzWzBdLmdldCgpKTsKKyAgICAgICAgYm9vbCBzZWNvbmRBcmd1bWVudElzVWludCA9
IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+JiB1bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hlcyh1
bm5hbWVkVHlwZSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICAgICAgfSwgWyZdKFJlZjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAtPiBib29s
IHsKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+cmVzb2x2YWJs
ZVR5cGUoKS5jYW5SZXNvbHZlKGludHJpbnNpY3MudWludFR5cGUoKSk7CisgICAgICAgIH0pLCB0
eXBlc1sxXS5nZXQoKSk7CisgICAgICAgIGlmIChmaXJzdEFyZ3VtZW50QXJyYXlSZWYgJiYgc2Vj
b25kQXJndW1lbnRJc1VpbnQpCisgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZVdpdGhPcGVyYXRv
ckFuZGVySW5kZXhlcihjYWxsRXhwcmVzc2lvbiwgKmZpcnN0QXJndW1lbnRBcnJheVJlZiwgaW50
cmluc2ljcyk7CisgICAgfSBlbHNlIGlmIChjYWxsRXhwcmVzc2lvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yLmxlbmd0aCIgJiYgdHlwZXMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgYXV0byogZmlyc3RB
cmd1bWVudFJlZmVyZW5jZSA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7
CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0
PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkpIHx8IGlzPEFTVDo6QXJyYXlUeXBlPihz
dGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5cGUpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJnVubmFtZWRUeXBlOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIH0sIFtdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mKSAtPiBBU1Q6OlVubmFt
ZWRUeXBlKiB7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfSksIHR5cGVz
WzBdLmdldCgpKTsKKyAgICAgICAgaWYgKGZpcnN0QXJndW1lbnRSZWZlcmVuY2UpCisgICAgICAg
ICAgICByZXR1cm4gcmVzb2x2ZVdpdGhPcGVyYXRvckxlbmd0aChjYWxsRXhwcmVzc2lvbiwgKmZp
cnN0QXJndW1lbnRSZWZlcmVuY2UsIGludHJpbnNpY3MpOworICAgIH0gZWxzZSBpZiAoY2FsbEV4
cHJlc3Npb24ubmFtZSgpID09ICJvcGVyYXRvcj09IiAmJiB0eXBlcy5zaXplKCkgPT0gMikgewor
ICAgICAgICBhdXRvIGlzQWNjZXB0YWJsZSA9IFtdKFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5
cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlz
aXRvcihbXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXM8QVNUOjpSZWZlcmVuY2VUeXBlPihzdGF0aWNf
Y2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAgICAgIH0sIFtd
KFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFibGVUeXBlUmVmZXJlbmNlKSAt
PiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gaXM8QVNUOjpOdWxsTGl0ZXJhbFR5cGU+
KHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICAgICAgICAg
IH0pLCByZXNvbHZpbmdUeXBlKTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKGlzQWNjZXB0YWJs
ZSh0eXBlc1swXS5nZXQoKSkgJiYgaXNBY2NlcHRhYmxlKHR5cGVzWzFdLmdldCgpKSkKKyAgICAg
ICAgICAgIHJldHVybiByZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3IoY2FsbEV4cHJlc3Np
b24sIHR5cGVzWzBdLmdldCgpLCB0eXBlc1sxXS5nZXQoKSwgaW50cmluc2ljcyk7CisgICAgfQor
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cit9CisKK3N0YXRpYyBib29sIGNoZWNrU2VtYW50aWNz
KFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGlucHV0SXRlbXMsIFZlY3RvcjxFbnRyeVBvaW50SXRl
bT4mIG91dHB1dEl0ZW1zLCBjb25zdCBPcHRpb25hbDxBU1Q6OkVudHJ5UG9pbnRUeXBlPiYgZW50
cnlQb2ludFR5cGUsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7CisgICAgeworICAg
ICAgICBhdXRvIGNoZWNrRHVwbGljYXRlU2VtYW50aWNzID0gWyZdKGNvbnN0IFZlY3RvcjxFbnRy
eVBvaW50SXRlbT4mIGl0ZW1zKSAtPiBib29sIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVf
dCBqID0gaSArIDE7IGogPCBpdGVtcy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoaXRlbXNbaV0uc2VtYW50aWMgPT0gaXRlbXNbal0uc2VtYW50aWMpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisgICAgICAgIGlmICgh
Y2hlY2tEdXBsaWNhdGVTZW1hbnRpY3MoaW5wdXRJdGVtcykpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmICghY2hlY2tEdXBsaWNhdGVTZW1hbnRpY3Mob3V0cHV0SXRlbXMp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHsKKyAgICAgICAgYXV0
byBjaGVja1NlbWFudGljVHlwZXMgPSBbJl0oY29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYg
aXRlbXMpIC0+IGJvb2wgeworICAgICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGFjY2VwdGFibGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZp
c2l0b3IoWyZdKGNvbnN0IEFTVDo6QmFzZVNlbWFudGljJiBzZW1hbnRpYykgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBzZW1hbnRpYy5pc0FjY2VwdGFibGVUeXBlKGl0ZW0u
dW5uYW1lZFR5cGUsIGludHJpbnNpY3MpOworICAgICAgICAgICAgICAgIH0pLCBpdGVtLnNlbWFu
dGljKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFjY2VwdGFibGUpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9OworICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNUeXBlcyhpbnB1dEl0ZW1z
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFjaGVja1NlbWFudGlj
VHlwZXMob3V0cHV0SXRlbXMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHsKKyAgICAgICAgYXV0byBjaGVja1NlbWFudGljRm9yU2hhZGVyVHlwZSA9IFsmXShjb25z
dCBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBpdGVtcywgQVNUOjpCYXNlU2VtYW50aWM6OlNoYWRl
ckl0ZW1EaXJlY3Rpb24gZGlyZWN0aW9uKSAtPiBib29sIHsKKyAgICAgICAgICAgIGZvciAoYXV0
byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgICAgICAgICAgYXV0byBhY2NlcHRhYmxlID0gV1RG
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShjb25zdCBBU1Q6OkJhc2VTZW1hbnRpYyYgc2Vt
YW50aWMpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VtYW50aWMuaXNB
Y2NlcHRhYmxlRm9yU2hhZGVySXRlbURpcmVjdGlvbihkaXJlY3Rpb24sIGVudHJ5UG9pbnRUeXBl
KTsKKyAgICAgICAgICAgICAgICB9KSwgaXRlbS5zZW1hbnRpYyk7CisgICAgICAgICAgICAgICAg
aWYgKCFhY2NlcHRhYmxlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfTsKKyAgICAgICAg
aWYgKCFjaGVja1NlbWFudGljRm9yU2hhZGVyVHlwZShpbnB1dEl0ZW1zLCBBU1Q6OkJhc2VTZW1h
bnRpYzo6U2hhZGVySXRlbURpcmVjdGlvbjo6SW5wdXQpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNGb3JTaGFkZXJUeXBlKG91dHB1dEl0ZW1z
LCBBU1Q6OkJhc2VTZW1hbnRpYzo6U2hhZGVySXRlbURpcmVjdGlvbjo6T3V0cHV0KSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGF1dG8gY2hlY2tQ
T0REYXRhID0gWyZdKGNvbnN0IFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGl0ZW1zKSAtPiBib29s
IHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGl0ZW1zKSB7CisgICAgICAgICAgICAg
ICAgUE9EQ2hlY2tlciBwb2RDaGVja2VyOworICAgICAgICAgICAgICAgIGlmIChpczxBU1Q6OlBv
aW50ZXJUeXBlPihpdGVtLnVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAgcG9kQ2hl
Y2tlci5jaGVja0Vycm9yQW5kVmlzaXQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oaXRlbS51
bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXM8
QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQorICAgICAgICAgICAg
ICAgICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6OkFycmF5
UmVmZXJlbmNlVHlwZT4oaXRlbS51bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7CisgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQor
ICAgICAgICAgICAgICAgICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2Fz
dDxBU1Q6OkFycmF5VHlwZT4oaXRlbS51bm5hbWVkVHlwZSkudHlwZSgpKTsKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IGlmIChwb2RDaGVja2VyLmVycm9yKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Owor
ICAgICAgICBpZiAoIWNoZWNrUE9ERGF0YShpbnB1dEl0ZW1zKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKCFjaGVja1BPRERhdGEob3V0cHV0SXRlbXMpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0
aWMgYm9vbCBjaGVja09wZXJhdG9yT3ZlcmxvYWQoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRp
b24mIGZ1bmN0aW9uRGVmaW5pdGlvbiwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcywgTmFt
ZUNvbnRleHQmIG5hbWVDb250ZXh0KQoreworICAgIGVudW0gY2xhc3MgQ2hlY2tLaW5kIHsKKyAg
ICAgICAgSW5kZXgsCisgICAgICAgIERvdAorICAgIH07CisKKyAgICBhdXRvIGNoZWNrR2V0dGVy
ID0gWyZdKENoZWNrS2luZCBraW5kKSAtPiBib29sIHsKKyAgICAgICAgc2l6ZV90IG51bUV4cGVj
dGVkUGFyYW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCA/IDIgOiAxOworICAgICAg
ICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0
ZWRQYXJhbWV0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvJiB1
bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlwZSgpKS0+
dW5pZnlOb2RlKCk7CisgICAgICAgIGlmIChpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUp
KSB7CisgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1l
ZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4o
dW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9OworCisgICAgYXV0byBjaGVja1NldHRlciA9IFsm
XShDaGVja0tpbmQga2luZCkgLT4gYm9vbCB7CisgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBh
cmFtZXRlcnMgPSBraW5kID09IENoZWNrS2luZDo6SW5kZXggPyAzIDogMjsKKyAgICAgICAgaWYg
KGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVjdGVkUGFy
YW1ldGVycykKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byYgZmlyc3RB
cmd1bWVudFVuaWZ5Tm9kZSA9ICgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50
eXBlKCkpLT51bmlmeU5vZGUoKTsKKyAgICAgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KGZp
cnN0QXJndW1lbnRVbmlmeU5vZGUpKSB7CisgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9
IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGZpcnN0QXJndW1lbnRVbmlmeU5vZGUpOworICAg
ICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFtYXRjaGVzKGZ1
bmN0aW9uRGVmaW5pdGlvbi50eXBlKCksICpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygp
WzBdLnR5cGUoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGF1dG8mIHZh
bHVlVHlwZSA9ICpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpW251bUV4cGVjdGVkUGFy
YW1ldGVycyAtIDFdLnR5cGUoKTsKKyAgICAgICAgYXV0byBnZXR0ZXJOYW1lID0gZnVuY3Rpb25E
ZWZpbml0aW9uLm5hbWUoKS5zdWJzdHJpbmcoMCwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKS5s
ZW5ndGgoKSAtIDEpOworICAgICAgICBhdXRvKiBnZXR0ZXJGdW5jcyA9IG5hbWVDb250ZXh0Lmdl
dEZ1bmN0aW9ucyhnZXR0ZXJOYW1lKTsKKyAgICAgICAgaWYgKCFnZXR0ZXJGdW5jcykKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgVmVjdG9yPFJlc29sdmluZ1R5cGU+IGFyZ3Vt
ZW50VHlwZXM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmlu
Z1R5cGU+PiBhcmd1bWVudFR5cGVSZWZlcmVuY2VzOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bUV4cGVjdGVkUGFyYW1ldGVycyAtIDE7ICsraSkKKyAgICAgICAgICAgIGFyZ3Vt
ZW50VHlwZXMuYXBwZW5kKCgqZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBl
KCkpLT5jbG9uZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBhcmd1bWVudFR5cGUgOiBhcmd1bWVu
dFR5cGVzKQorICAgICAgICAgICAgYXJndW1lbnRUeXBlUmVmZXJlbmNlcy5hcHBlbmQoYXJndW1l
bnRUeXBlKTsKKyAgICAgICAgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5h
bWVkVHlwZT4+IGNhc3RSZXR1cm5UeXBlOworICAgICAgICBhdXRvKiBvdmVybG9hZCA9IHJlc29s
dmVGdW5jdGlvbk92ZXJsb2FkSW1wbCgqZ2V0dGVyRnVuY3MsIGFyZ3VtZW50VHlwZVJlZmVyZW5j
ZXMsIGNhc3RSZXR1cm5UeXBlKTsKKyAgICAgICAgaWYgKCFvdmVybG9hZCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byYgcmVzdWx0VHlwZSA9IG92ZXJsb2FkLT50eXBl
KCk7CisgICAgICAgIHJldHVybiBtYXRjaGVzKHJlc3VsdFR5cGUsIHZhbHVlVHlwZSk7CisgICAg
fTsKKworICAgIGF1dG8gY2hlY2tBbmRlciA9IFsmXShDaGVja0tpbmQga2luZCkgLT4gYm9vbCB7
CisgICAgICAgIHNpemVfdCBudW1FeHBlY3RlZFBhcmFtZXRlcnMgPSBraW5kID09IENoZWNrS2lu
ZDo6SW5kZXggPyAyIDogMTsKKyAgICAgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0
ZXJzKCkuc2l6ZSgpICE9IG51bUV4cGVjdGVkUGFyYW1ldGVycykKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gZnVuY3Rp
b25EZWZpbml0aW9uLnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAgICAgICAgIGlmICghaXM8QVNU
OjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5
cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgICAgICBpZiAoIWlzPEFTVDo6UG9pbnRlclR5cGU+KHVu
bmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgeworICAgICAgICAgICAgYXV0byYgdW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRp
b24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgaWYg
KCFpczxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpV
bm5hbWVkVHlwZT4odW5pZnlOb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBpczxBU1Q6OlBvaW50
ZXJUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFt
ZWRUeXBlKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBpZiAoIWZ1bmN0aW9uRGVmaW5pdGlv
bi5pc09wZXJhdG9yKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChmdW5jdGlvbkRl
ZmluaXRpb24uaXNDYXN0KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChmdW5jdGlv
bkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcisrIiB8fCBmdW5jdGlvbkRlZmluaXRpb24u
bmFtZSgpID09ICJvcGVyYXRvci0tIikgeworICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWZpbml0
aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMQorICAgICAgICAgICAgJiYgbWF0Y2hlcygqZnVu
Y3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKVswXS50eXBlKCksIGZ1bmN0aW9uRGVmaW5pdGlv
bi50eXBlKCkpOworICAgIH0KKyAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAi
b3BlcmF0b3IrIiB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvci0iKQor
ICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0g
MSB8fCBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAyOworICAgIGlm
IChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcioiCisgICAgICAgIHx8IGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLyIKKyAgICAgICAgfHwgZnVuY3Rp
b25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IlIgorICAgICAgICB8fCBmdW5jdGlvbkRl
ZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvciYiCisgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yfCIKKyAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9u
Lm5hbWUoKSA9PSAib3BlcmF0b3JeIgorICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFt
ZSgpID09ICJvcGVyYXRvcjw8IgorICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgp
ID09ICJvcHJlYXRvcj4+IikKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKCkuc2l6ZSgpID09IDI7CisgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkg
PT0gIm9wZXJhdG9yfiIpCisgICAgICAgIHJldHVybiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1l
dGVycygpLnNpemUoKSA9PSAxOworICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09
ICJvcGVyYXRvcj09IgorICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJv
cGVyYXRvcjwiCisgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yPD0iCisgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9y
PiIKKyAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I+PSIp
IHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgp
ID09IDIKKyAgICAgICAgICAgICYmIG1hdGNoZXMoZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUoKSwg
aW50cmluc2ljcy5ib29sVHlwZSgpKTsKKyAgICB9CisgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlv
bi5uYW1lKCkgPT0gIm9wZXJhdG9yW10iKQorICAgICAgICByZXR1cm4gY2hlY2tHZXR0ZXIoQ2hl
Y2tLaW5kOjpJbmRleCk7CisgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9w
ZXJhdG9yW109IikKKyAgICAgICAgcmV0dXJuIGNoZWNrU2V0dGVyKENoZWNrS2luZDo6SW5kZXgp
OworICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvciZbXSIpCisg
ICAgICAgIHJldHVybiBjaGVja0FuZGVyKENoZWNrS2luZDo6SW5kZXgpOworICAgIGlmIChmdW5j
dGlvbkRlZmluaXRpb24ubmFtZSgpLnN0YXJ0c1dpdGgoIm9wZXJhdG9yLiIpKSB7CisgICAgICAg
IGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLmVuZHNXaXRoKCI9IikpCisgICAgICAgICAg
ICByZXR1cm4gY2hlY2tTZXR0ZXIoQ2hlY2tLaW5kOjpEb3QpOworICAgICAgICByZXR1cm4gY2hl
Y2tHZXR0ZXIoQ2hlY2tLaW5kOjpEb3QpOworICAgIH0KKyAgICBpZiAoZnVuY3Rpb25EZWZpbml0
aW9uLm5hbWUoKS5zdGFydHNXaXRoKCJvcGVyYXRvciYuIikpCisgICAgICAgIHJldHVybiBjaGVj
a0FuZGVyKENoZWNrS2luZDo6RG90KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NsYXNzIENo
ZWNrZXIgOiBwdWJsaWMgVmlzaXRvciB7CitwdWJsaWM6CisgICAgQ2hlY2tlcihjb25zdCBJbnRy
aW5zaWNzJiBpbnRyaW5zaWNzLCBQcm9ncmFtJiBwcm9ncmFtKQorICAgICAgICA6IG1faW50cmlu
c2ljcyhpbnRyaW5zaWNzKQorICAgICAgICAsIG1fcHJvZ3JhbShwcm9ncmFtKQorICAgIHsKKyAg
ICB9CisKKyAgICB+Q2hlY2tlcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgdmlzaXQoUHJvZ3Jh
bSYpIG92ZXJyaWRlOworCisgICAgYm9vbCBhc3NpZ25UeXBlcygpOworCitwcml2YXRlOgorICAg
IGJvb2wgY2hlY2tTaGFkZXJUeXBlKGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7Cisg
ICAgdm9pZCBmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKEFTVDo6UHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uJiwgQVNUOjpVbm5hbWVkVHlwZSYgd3JhcHBlZEJhc2VUeXBlLCBBU1Q6OlVubmFt
ZWRUeXBlKiBleHRyYUFyZ3VtZW50VHlwZSA9IG51bGxwdHIpOworICAgIGJvb2wgaXNCb29sVHlw
ZShSZXNvbHZpbmdUeXBlJik7CisgICAgc3RydWN0IFJlY3Vyc2VJbmZvIHsKKyAgICAgICAgUmVz
b2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZTsKKyAgICAgICAgT3B0aW9uYWw8QVNUOjpBZGRyZXNz
U3BhY2U+JiBhZGRyZXNzU3BhY2U7CisgICAgfTsKKyAgICBPcHRpb25hbDxSZWN1cnNlSW5mbz4g
cmVjdXJzZUFuZEdldEluZm8oQVNUOjpFeHByZXNzaW9uJiwgYm9vbCByZXF1aXJlc0xWYWx1ZSA9
IGZhbHNlKTsKKyAgICBPcHRpb25hbDxSZWN1cnNlSW5mbz4gZ2V0SW5mbyhBU1Q6OkV4cHJlc3Np
b24mLCBib29sIHJlcXVpcmVzTFZhbHVlID0gZmFsc2UpOworICAgIE9wdGlvbmFsPFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPj4gcmVjdXJzZUFuZFdyYXBCYXNlVHlwZShBU1Q6OlByb3BlcnR5
QWNjZXNzRXhwcmVzc2lvbiYpOworICAgIGJvb2wgcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZShB
U1Q6OkV4cHJlc3Npb24mKTsKKyAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwg
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNl
PiA9IFdURjo6bnVsbG9wdCk7CisgICAgdm9pZCBhc3NpZ25UeXBlKEFTVDo6RXhwcmVzc2lvbiYs
IFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mJiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3Bh
Y2U+ID0gV1RGOjpudWxsb3B0KTsKKyAgICB2b2lkIGZvcndhcmRUeXBlKEFTVDo6RXhwcmVzc2lv
biYsIFJlc29sdmluZ1R5cGUmLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gPSBXVEY6Om51
bGxvcHQpOworCisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlzaXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2
aXNpdChBU1Q6OkFzc2lnbm1lbnRFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OlJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZp
c2l0KEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6Ok1ha2VQb2ludGVyRXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQo
QVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2
aXNpdChBU1Q6OkRvdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
SW5kZXhFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxl
UmVmZXJlbmNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OlJldHVybiYpIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpIG92ZXJyaWRlOworICAgIHZv
aWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZp
c2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpG
bG9hdExpdGVyYWwmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6TnVsbExpdGVyYWwm
KSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxOb3RFeHByZXNzaW9uJikgb3ZlcnJpZGU7
CisgICAgdm9pZCB2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAg
dm9pZCB2aXNpdChBU1Q6OklmU3RhdGVtZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6OldoaWxlTG9vcCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpEb1doaWxlTG9v
cCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpGb3JMb29wJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6OlN3aXRjaFN0YXRlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQg
dmlzaXQoQVNUOjpDb21tYUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6VGVybmFyeUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6Q2Fs
bEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKworICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwg
UmVzb2x2aW5nVHlwZT4gbV90eXBlTWFwOworICAgIEhhc2hNYXA8QVNUOjpFeHByZXNzaW9uKiwg
T3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+PiBtX2FkZHJlc3NTcGFjZU1hcDsKKyAgICBIYXNo
U2V0PFN0cmluZz4gbV92ZXJ0ZXhFbnRyeVBvaW50czsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9m
cmFnbWVudEVudHJ5UG9pbnRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2NvbXB1dGVFbnRyeVBv
aW50czsKKyAgICBjb25zdCBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CisgICAgUHJvZ3JhbSYg
bV9wcm9ncmFtOworfTsKKwordm9pZCBDaGVja2VyOjp2aXNpdChQcm9ncmFtJiBwcm9ncmFtKQor
eworICAgIC8vIFRoZXNlIHZpc2l0aW5nIGZ1bmN0aW9ucyBtaWdodCBhZGQgbmV3IGdsb2JhbCBz
dGF0ZW1lbnRzLCBzbyBkb24ndCB1c2UgZm9yZWFjaCBzeW50YXguCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpLnNpemUoKTsgKytpKQorICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbS50eXBlRGVmaW5pdGlvbnMoKVtpXSk7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9ncmFtLnN0cnVjdHVyZURlZmluaXRpb25zKCkuc2l6
ZSgpOyArK2kpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtLnN0cnVjdHVyZURl
ZmluaXRpb25zKClbaV0pOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5lbnVt
ZXJhdGlvbkRlZmluaXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChwcm9ncmFtLmVudW1lcmF0aW9uRGVmaW5pdGlvbnMoKVtpXSk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwcm9ncmFtLm5hdGl2ZVR5cGVEZWNsYXJhdGlvbnMoKS5zaXplKCk7ICsr
aSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0
aW9ucygpW2ldKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvZ3JhbS5mdW5jdGlv
bkRlZmluaXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChw
cm9ncmFtLmZ1bmN0aW9uRGVmaW5pdGlvbnMoKVtpXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkuc2l6ZSgpOyArK2kpCisg
ICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdChwcm9ncmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRp
b25zKClbaV0pOworfQorCitib29sIENoZWNrZXI6OmFzc2lnblR5cGVzKCkKK3sKKyAgICBmb3Ig
KGF1dG8mIGtleVZhbHVlUGFpciA6IG1fdHlwZU1hcCkgeworICAgICAgICBhdXRvIHN1Y2Nlc3Mg
PSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPiYgdW5uYW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAga2V5VmFsdWVQYWlyLmtl
eS0+c2V0VHlwZSh1bm5hbWVkVHlwZS0+Y2xvbmUoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmFi
bGVUeXBlUmVmZXJlbmNlKSAtPiBib29sIHsKKyAgICAgICAgICAgIGlmICghcmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogSW5zdGVhZCBvZiB0cnlpbmcgdG8gY29tbWl0LCBpdCBtaWdodCBi
ZSBiZXR0ZXIgdG8ganVzdCByZXR1cm4gYW4gZXJyb3IgaW5zdGVhZC4KKyAgICAgICAgICAgICAg
ICBpZiAoIXN0YXRpY19jYXN0PGJvb2w+KGNvbW1pdChyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZS0+
cmVzb2x2YWJsZVR5cGUoKSkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBrZXlWYWx1ZVBhaXIua2V5LT5zZXRUeXBlKHJlc29s
dmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLnJlc29sdmVkVHlwZSgpLT5jbG9u
ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9KSwga2V5VmFsdWVQYWly
LnZhbHVlKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGZvciAoYXV0byYga2V5VmFsdWVQYWlyIDogbV9hZGRyZXNzU3BhY2VN
YXApCisgICAgICAgIGtleVZhbHVlUGFpci5rZXktPnNldEFkZHJlc3NTcGFjZShrZXlWYWx1ZVBh
aXIudmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENoZWNrZXI6OmNoZWNrU2hh
ZGVyVHlwZShjb25zdCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9u
KQoreworICAgIHN3aXRjaCAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7
CisgICAgY2FzZSBBU1Q6OkVudHJ5UG9pbnRUeXBlOjpWZXJ0ZXg6CisgICAgICAgIHJldHVybiAh
bV92ZXJ0ZXhFbnRyeVBvaW50cy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSkuaXNOZXdF
bnRyeTsKKyAgICBjYXNlIEFTVDo6RW50cnlQb2ludFR5cGU6OkZyYWdtZW50OgorICAgICAgICBy
ZXR1cm4gIW1fZnJhZ21lbnRFbnRyeVBvaW50cy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUo
KSkuaXNOZXdFbnRyeTsKKyAgICBjYXNlIEFTVDo6RW50cnlQb2ludFR5cGU6OkNvbXB1dGU6Cisg
ICAgICAgIHJldHVybiAhbV9jb21wdXRlRW50cnlQb2ludHMuYWRkKGZ1bmN0aW9uRGVmaW5pdGlv
bi5uYW1lKCkpLmlzTmV3RW50cnk7CisgICAgfQorfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7CisgICAgaWYgKGZ1
bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpKSB7CisgICAgICAgIGlmICghY2hlY2tT
aGFkZXJUeXBlKGZ1bmN0aW9uRGVmaW5pdGlvbikpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byBlbnRyeVBvaW50
SXRlbXMgPSBnYXRoZXJFbnRyeVBvaW50SXRlbXMobV9pbnRyaW5zaWNzLCBmdW5jdGlvbkRlZmlu
aXRpb24pOworICAgICAgICBpZiAoIWVudHJ5UG9pbnRJdGVtcykgeworICAgICAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWNo
ZWNrU2VtYW50aWNzKGVudHJ5UG9pbnRJdGVtcy0+aW5wdXRzLCBlbnRyeVBvaW50SXRlbXMtPm91
dHB1dHMsIGZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpLCBtX2ludHJpbnNpY3Mp
KSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorICAgIGlmICghY2hlY2tPcGVyYXRvck92ZXJsb2FkKGZ1bmN0aW9uRGVmaW5p
dGlvbiwgbV9pbnRyaW5zaWNzLCBtX3Byb2dyYW0ubmFtZUNvbnRleHQoKSkpIHsKKyAgICAgICAg
c2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNoZWNrRXJyb3JBbmRW
aXNpdChmdW5jdGlvbkRlZmluaXRpb24pOworfQorCitzdGF0aWMgT3B0aW9uYWw8VW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+PiBtYXRjaEFuZENvbW1pdChSZXNvbHZpbmdUeXBlJiBsZWZ0LCBS
ZXNvbHZpbmdUeXBlJiByaWdodCkKK3sKKyAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VW
aXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IE9wdGlvbmFs
PFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICByZXR1cm4gV1RGOjp2aXNp
dChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJpZ2h0
KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgICAg
IGlmIChtYXRjaGVzKGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC0+
Y2xvbmUoKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIH0sIFsm
XShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdodCkgLT4gT3B0aW9uYWw8VW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21t
aXQobGVmdCwgcmlnaHQtPnJlc29sdmFibGVUeXBlKCkpOworICAgICAgICB9KSwgcmlnaHQpOwor
ICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBPcHRpb25h
bDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgcmV0dXJuIFdURjo6dmlz
aXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByaWdo
dCkgLT4gT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAg
ICByZXR1cm4gbWF0Y2hBbmRDb21taXQocmlnaHQsIGxlZnQtPnJlc29sdmFibGVUeXBlKCkpOwor
ICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmlnaHQpIC0+IE9w
dGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICAgICAgcmV0dXJu
IG1hdGNoQW5kQ29tbWl0KGxlZnQtPnJlc29sdmFibGVUeXBlKCksIHJpZ2h0LT5yZXNvbHZhYmxl
VHlwZSgpKTsKKyAgICAgICAgfSksIHJpZ2h0KTsKKyAgICB9KSwgbGVmdCk7Cit9CisKK3N0YXRp
YyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KFJl
c29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUsIEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBl
KQoreworICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmVzb2x2aW5nVHlwZSkgLT4gT3B0aW9uYWw8VW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgIGlmIChtYXRjaGVzKHVubmFtZWRUeXBlLCBy
ZXNvbHZpbmdUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiB1bm5hbWVkVHlwZS5jbG9uZSgpOwor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2U+JiByZXNvbHZpbmdUeXBlKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4+IHsKKyAgICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0KHVubmFtZWRUeXBl
LCByZXNvbHZpbmdUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICB9KSwgcmVzb2x2aW5nVHlw
ZSk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IG1h
dGNoQW5kQ29tbWl0KFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5cGUsIEFTVDo6TmFtZWRUeXBl
JiBuYW1lZFR5cGUpCit7CisgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihb
Jl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiByZXNvbHZpbmdUeXBlKSAtPiBPcHRpb25h
bDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgaWYgKG1hdGNoZXMocmVz
b2x2aW5nVHlwZSwgbmFtZWRUeXBlKSkKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZpbmdUeXBl
LT5jbG9uZSgpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0sIFsmXShSZWY8
UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXNvbHZpbmdUeXBlKSAtPiBPcHRpb25hbDxVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgcmV0dXJuIG1hdGNoQW5kQ29tbWl0
KG5hbWVkVHlwZSwgcmVzb2x2aW5nVHlwZS0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgfSksIHJl
c29sdmluZ1R5cGUpOworfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCit7CisgICAgYXV0byogYmFzZVR5cGUg
PSAoWyZdKCkgLT4gQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIHsKKyAgICAgICAgY2hlY2tF
cnJvckFuZFZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgICAgICBhdXRv
JiBiYXNlVHlwZSA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7Cisg
ICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlwZT4oYmFzZVR5cGUpKQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIGF1dG8mIHVubmFtZWRCYXNlID0gZG93bmNhc3Q8QVNU
OjpVbm5hbWVkVHlwZT4oYmFzZVR5cGUpOworICAgICAgICBpZiAoIWlzPEFTVDo6VHlwZVJlZmVy
ZW5jZT4odW5uYW1lZEJhc2UpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IGF1dG8mIHR5cGVSZWZlcmVuY2VCYXNlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1
bm5hbWVkQmFzZSk7CisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5
cGUoKSk7CisgICAgICAgIGlmICghaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBl
UmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUoKSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0gZG93bmNhc3Q8QVNUOjpO
YXRpdmVUeXBlRGVjbGFyYXRpb24+KCp0eXBlUmVmZXJlbmNlQmFzZS5yZXNvbHZlZFR5cGUoKSk7
CisgICAgICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0aW9uLmlzSW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZuYXRpdmVUeXBlRGVjbGFyYXRpb247
CisgICAgfSkoKTsKKyAgICBpZiAoIWJhc2VUeXBlKSB7CisgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGVudW1lcmF0aW9uTWVtYmVycyA9IGVu
dW1lcmF0aW9uRGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1lbWJlcnMoKTsKKworICAgIGZvciAoYXV0
byYgbWVtYmVyIDogZW51bWVyYXRpb25NZW1iZXJzKSB7CisgICAgICAgIGlmICghbWVtYmVyLmdl
dCgpLnZhbHVlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBib29sIHN1Y2Nl
c3MgPSBmYWxzZTsKKyAgICAgICAgbWVtYmVyLmdldCgpLnZhbHVlKCktPnZpc2l0KFdURjo6bWFr
ZVZpc2l0b3IoWyZdKEFTVDo6RXhwcmVzc2lvbiYgdmFsdWUpIHsKKyAgICAgICAgICAgIGF1dG8g
dmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8odmFsdWUpOworICAgICAgICAgICAgaWYgKCF2
YWx1ZUluZm8pCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgc3VjY2VzcyA9
IHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KHZhbHVlSW5mby0+cmVzb2x2aW5nVHlw
ZSwgKmJhc2VUeXBlKSk7CisgICAgICAgIH0pKTsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7Cisg
ICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorCisgICAgaW50NjRfdCBuZXh0VmFsdWUgPSAwOworICAgIGZvciAoYXV0byYgbWVtYmVy
IDogZW51bWVyYXRpb25NZW1iZXJzKSB7CisgICAgICAgIGlmIChtZW1iZXIuZ2V0KCkudmFsdWUo
KSkgeworICAgICAgICAgICAgaW50NjRfdCB2YWx1ZTsKKyAgICAgICAgICAgIG1lbWJlci5nZXQo
KS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFs
JiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gaW50ZWdlckxpdGVy
YWwudmFsdWVGb3JTZWxlY3RlZFR5cGUoKTsKKyAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVuc2ln
bmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWVGb3JTZWxlY3RlZFR5cGUo
KTsKKyAgICAgICAgICAgIH0sIFsmXShhdXRvJikgeworICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgbmV4dFZhbHVlID0g
YmFzZVR5cGUtPnN1Y2Nlc3NvcigpKHZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1lbWJlci5nZXQoKS5zZXRWYWx1ZShBU1Q6OkNvbnN0YW50RXhwcmVzc2lvbihBU1Q6Oklu
dGVnZXJMaXRlcmFsKExleGVyOjpUb2tlbihtZW1iZXIuZ2V0KCkub3JpZ2luKCkpLCBuZXh0VmFs
dWUpKSk7CisgICAgICAgICAgICBuZXh0VmFsdWUgPSBiYXNlVHlwZS0+c3VjY2Vzc29yKCkobmV4
dFZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gZ2V0VmFsdWUgPSBbJl0oQVNU
OjpFbnVtZXJhdGlvbk1lbWJlciYgbWVtYmVyKSAtPiBpbnQ2NF90IHsKKyAgICAgICAgaW50NjRf
dCB2YWx1ZTsKKyAgICAgICAgQVNTRVJUKG1lbWJlci52YWx1ZSgpKTsKKyAgICAgICAgbWVtYmVy
LnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwm
IGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICB2YWx1ZSA9IGludGVnZXJMaXRlcmFsLnZh
bHVlKCk7CisgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2ln
bmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gdW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oYXV0byYpIHsKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9KSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsK
KyAgICB9OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnVtZXJhdGlvbk1lbWJlcnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKGVudW1lcmF0aW9u
TWVtYmVyc1tpXS5nZXQoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGVu
dW1lcmF0aW9uTWVtYmVycy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgYXV0byBvdGhlclZh
bHVlID0gZ2V0VmFsdWUoZW51bWVyYXRpb25NZW1iZXJzW2pdLmdldCgpKTsKKyAgICAgICAgICAg
IGlmICh2YWx1ZSA9PSBvdGhlclZhbHVlKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBib29sIGZvdW5kWmVybyA9IGZhbHNlOworICAgIGZvciAoYXV0byYgbWVtYmVyIDog
ZW51bWVyYXRpb25NZW1iZXJzKSB7CisgICAgICAgIGlmICghZ2V0VmFsdWUobWVtYmVyLmdldCgp
KSkgeworICAgICAgICAgICAgZm91bmRaZXJvID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorICAgIGlmICghZm91bmRaZXJvKSB7CisgICAgICAgIHNldEVycm9y
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNU
OjpUeXBlUmVmZXJlbmNlJiB0eXBlUmVmZXJlbmNlKQoreworICAgIEFTU0VSVCh0eXBlUmVmZXJl
bmNlLnJlc29sdmVkVHlwZSgpKTsKKworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlUmVmZXJl
bmNlKTsKK30KKworYXV0byBDaGVja2VyOjpyZWN1cnNlQW5kR2V0SW5mbyhBU1Q6OkV4cHJlc3Np
b24mIGV4cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMVmFsdWUpIC0+IE9wdGlvbmFsPFJlY3Vyc2VJ
bmZvPgoreworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChleHByZXNzaW9uKTsKKyAgICBpZiAoIWVy
cm9yKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGdldEluZm8o
ZXhwcmVzc2lvbiwgcmVxdWlyZXNMVmFsdWUpOworfQorCithdXRvIENoZWNrZXI6OmdldEluZm8o
QVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBib29sIHJlcXVpcmVzTFZhbHVlKSAtPiBPcHRp
b25hbDxSZWN1cnNlSW5mbz4KK3sKKyAgICBhdXRvIHR5cGVJdGVyYXRvciA9IG1fdHlwZU1hcC5m
aW5kKCZleHByZXNzaW9uKTsKKyAgICBBU1NFUlQodHlwZUl0ZXJhdG9yICE9IG1fdHlwZU1hcC5l
bmQoKSk7CisKKyAgICBhdXRvIGFkZHJlc3NTcGFjZUl0ZXJhdG9yID0gbV9hZGRyZXNzU3BhY2VN
YXAuZmluZCgmZXhwcmVzc2lvbik7CisgICAgQVNTRVJUKGFkZHJlc3NTcGFjZUl0ZXJhdG9yICE9
IG1fYWRkcmVzc1NwYWNlTWFwLmVuZCgpKTsKKyAgICBpZiAocmVxdWlyZXNMVmFsdWUgJiYgIWFk
ZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKyAgICByZXR1cm4ge3sgdHlwZUl0ZXJhdG9y
LT52YWx1ZSwgYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlIH19OworfQorCit2b2lkIENoZWNr
ZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikK
K3sKKyAgICAvLyBSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9ucyBhcmUgdGhlIG9ubHkgcGxhY2Ug
d2hlcmUgYW5vbnltb3VzIHZhcmlhYmxlcyBleGlzdCwKKyAgICAvLyBhbmQgdGhhdCBkb2Vzbid0
IHJlY3Vyc2Ugb24gdGhlIGFub255bW91cyB2YXJpYWJsZXMsIHNvIHdlIGNhbiBhc3N1bWUgdGhl
IHZhcmlhYmxlIGhhcyBhIHR5cGUuCisgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp2YXJpYWJsZURl
Y2xhcmF0aW9uLnR5cGUoKSk7CisgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uaW5pdGlhbGl6
ZXIoKSkgeworICAgICAgICBhdXRvJiBsaHNUeXBlID0gKnZhcmlhYmxlRGVjbGFyYXRpb24udHlw
ZSgpOworICAgICAgICBhdXRvIGluaXRpYWxpemVySW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKCp2
YXJpYWJsZURlY2xhcmF0aW9uLmluaXRpYWxpemVyKCkpOworICAgICAgICBpZiAoIWluaXRpYWxp
emVySW5mbykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFtYXRjaEFuZENvbW1p
dChpbml0aWFsaXplckluZm8tPnJlc29sdmluZ1R5cGUsIGxoc1R5cGUpKSB7CisgICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIENoZWNrZXI6OmFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB1bm5hbWVkVHlwZSwgT3B0aW9uYWw8QVNUOjpB
ZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZSkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlw
ZU1hcC5hZGQoJmV4cHJlc3Npb24sIFdURk1vdmUodW5uYW1lZFR5cGUpKTsKKyAgICBBU1NFUlRf
VU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIGF1dG8gYWRkcmVz
c1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZleHByZXNzaW9uLCBhZGRy
ZXNzU3BhY2UpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBhZGRy
ZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6YXNzaWdu
VHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZT4mJiByZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3Bh
Y2U+IGFkZHJlc3NTcGFjZSkKK3sKKyAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1hcC5hZGQo
JmV4cHJlc3Npb24sIFdURk1vdmUocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UpKTsKKyAgICBBU1NF
UlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIGF1dG8gYWRk
cmVzc1NwYWNlQWRkUmVzdWx0ID0gbV9hZGRyZXNzU3BhY2VNYXAuYWRkKCZleHByZXNzaW9uLCBh
ZGRyZXNzU3BhY2UpOworICAgIEFTU0VSVF9VTlVTRUQoYWRkcmVzc1NwYWNlQWRkUmVzdWx0LCBh
ZGRyZXNzU3BhY2VBZGRSZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpBc3NpZ25tZW50RXhwcmVzc2lvbiYgYXNzaWdubWVudEV4cHJlc3Npb24pCit7Cisg
ICAgYXV0byBsZWZ0SW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGFzc2lnbm1lbnRFeHByZXNzaW9u
LmxlZnQoKSwgdHJ1ZSk7CisgICAgaWYgKCFsZWZ0SW5mbykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byByaWdodEluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhhc3NpZ25tZW50RXhwcmVzc2lv
bi5yaWdodCgpKTsKKyAgICBpZiAoIXJpZ2h0SW5mbykKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byByZXN1bHRUeXBlID0gbWF0Y2hBbmRDb21taXQobGVmdEluZm8tPnJlc29sdmluZ1R5cGUs
IHJpZ2h0SW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFyZXN1bHRUeXBlKSB7CisgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhc3NpZ25UeXBl
KGFzc2lnbm1lbnRFeHByZXNzaW9uLCBXVEZNb3ZlKCpyZXN1bHRUeXBlKSk7Cit9CisKK3ZvaWQg
Q2hlY2tlcjo6Zm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uLCBSZXNvbHZp
bmdUeXBlJiByZXNvbHZpbmdUeXBlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVz
c1NwYWNlKQoreworICAgIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVm
PEFTVDo6VW5uYW1lZFR5cGU+JiByZXN1bHQpIHsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBt
X3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQtPmNsb25lKCkpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0sIFsmXShS
ZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByZXN1bHQpIHsKKyAgICAgICAgYXV0byBhZGRS
ZXN1bHQgPSBtX3R5cGVNYXAuYWRkKCZleHByZXNzaW9uLCByZXN1bHQuY29weVJlZigpKTsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3VsdC5pc05ld0VudHJ5KTsKKyAg
ICB9KSwgcmVzb2x2aW5nVHlwZSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VBZGRSZXN1bHQgPSBt
X2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFjZSk7CisgICAgQVNT
RVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFjZUFkZFJlc3VsdC5p
c05ld0VudHJ5KTsKK30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24mIHJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24pCit7CisgICAgYXV0byBsVmFs
dWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8ocmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5sVmFs
dWUoKSwgdHJ1ZSk7CisgICAgaWYgKCFsVmFsdWVJbmZvKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBGSVhNRTogRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggdGhlIFJlYWRNb2RpZnlXcml0
ZUV4cHJlc3Npb24ncyBBbm9ueW1vdXNWYXJpYWJsZXMuCisKKyAgICBhdXRvIG5ld1ZhbHVlSW5m
byA9IHJlY3Vyc2VBbmRHZXRJbmZvKCpyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLm5ld1ZhbHVl
RXhwcmVzc2lvbigpKTsKKyAgICBpZiAoIW5ld1ZhbHVlSW5mbykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtYXRjaEFuZENvbW1pdChsVmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCBuZXdW
YWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHJlc3VsdEluZm8gPSByZWN1cnNlQW5kR2V0SW5m
bygqcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5yZXN1bHRFeHByZXNzaW9uKCkpOworICAgIGlm
ICghcmVzdWx0SW5mbykKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yd2FyZFR5cGUocmVhZE1v
ZGlmeVdyaXRlRXhwcmVzc2lvbiwgcmVzdWx0SW5mby0+cmVzb2x2aW5nVHlwZSk7Cit9CisKK3N0
YXRpYyBBU1Q6OlVubmFtZWRUeXBlKiBnZXRVbm5hbWVkVHlwZShSZXNvbHZpbmdUeXBlJiByZXNv
bHZpbmdUeXBlKQoreworICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoW10o
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7
CisgICAgICAgIHJldHVybiAmdHlwZTsKKyAgICB9LCBbXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2U+JiB0eXBlKSAtPiBBU1Q6OlVubmFtZWRUeXBlKiB7CisgICAgICAgIC8vIEZJWE1FOiBJ
ZiB0aGUgdHlwZSBpc24ndCBjb21taXR0ZWQsIHNob3VsZCB3ZSBqdXN0IGNvbW1pdCgpIGl0IG5v
dz8KKyAgICAgICAgcmV0dXJuIHR5cGUtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCk7
CisgICAgfSksIHJlc29sdmluZ1R5cGUpOworfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6
RGVyZWZlcmVuY2VFeHByZXNzaW9uJiBkZXJlZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgYXV0
byBwb2ludGVySW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGRlcmVmZXJlbmNlRXhwcmVzc2lvbi5w
b2ludGVyKCkpOworICAgIGlmICghcG9pbnRlckluZm8pCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8qIHVubmFtZWRUeXBlID0gZ2V0VW5uYW1lZFR5cGUocG9pbnRlckluZm8tPnJlc29sdmlu
Z1R5cGUpOworCisgICAgYXV0byogcG9pbnRlclR5cGUgPSAoWyZdKEFTVDo6VW5uYW1lZFR5cGUq
IHVubmFtZWRUeXBlKSAtPiBBU1Q6OlBvaW50ZXJUeXBlKiB7CisgICAgICAgIGlmICghdW5uYW1l
ZFR5cGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgYXV0byYgdW5pZnlO
b2RlID0gdW5uYW1lZFR5cGUtPnVuaWZ5Tm9kZSgpOworICAgICAgICBpZiAoIWlzPEFTVDo6VW5u
YW1lZFR5cGU+KHVuaWZ5Tm9kZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgYXV0byYgdW5uYW1lZFVuaWZ5VHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVu
aWZ5Tm9kZSk7CisgICAgICAgIGlmICghaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFVuaWZ5
VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICZkb3du
Y2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVW5pZnlUeXBlKTsKKyAgICB9KSh1bm5hbWVk
VHlwZSk7CisgICAgaWYgKCFwb2ludGVyVHlwZSkgeworICAgICAgICBzZXRFcnJvcigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgYXNzaWduVHlwZShkZXJlZmVyZW5jZUV4cHJlc3Np
b24sIHBvaW50ZXJUeXBlLT5jbG9uZSgpLCBwb2ludGVyVHlwZS0+YWRkcmVzc1NwYWNlKCkpOwor
fQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6TWFrZVBvaW50ZXJFeHByZXNzaW9uJiBtYWtl
UG9pbnRlckV4cHJlc3Npb24pCit7CisgICAgYXV0byBsVmFsdWVJbmZvID0gcmVjdXJzZUFuZEdl
dEluZm8obWFrZVBvaW50ZXJFeHByZXNzaW9uLmxWYWx1ZSgpLCB0cnVlKTsKKyAgICBpZiAoIWxW
YWx1ZUluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGxWYWx1ZVR5cGUgPSBnZXRV
bm5hbWVkVHlwZShsVmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBpZiAoIWxWYWx1ZVR5
cGUpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGFzc2lnblR5cGUobWFrZVBvaW50ZXJFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6UG9p
bnRlclR5cGU+KExleGVyOjpUb2tlbihtYWtlUG9pbnRlckV4cHJlc3Npb24ub3JpZ2luKCkpLCAq
bFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBsVmFsdWVUeXBlLT5jbG9uZSgpKSk7Cit9CisKK3Zv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uJiBtYWtl
QXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uKQoreworICAgIGF1dG8gbFZhbHVlSW5mbyA9IHJlY3Vy
c2VBbmRHZXRJbmZvKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24ubFZhbHVlKCkpOworICAg
IGlmICghbFZhbHVlSW5mbykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogbFZhbHVlVHlw
ZSA9IGdldFVubmFtZWRUeXBlKGxWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGlmICgh
bFZhbHVlVHlwZSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgYXV0byYgdW5pZnlOb2RlID0gbFZhbHVlVHlwZS0+dW5pZnlOb2RlKCk7CisgICAg
aWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgdW5u
YW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRUeXBlPih1bmlmeU5vZGUpOworICAgICAg
ICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKSB7CisgICAgICAgICAgICBh
dXRvJiBwb2ludGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBl
KTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTYXZlIHRoZSBmYWN0IHRoYXQgd2UncmUgbm90IHRh
cmdldHRpbmcgdGhlIGl0ZW07IHdlJ3JlIHRhcmdldHRpbmcgdGhlIGl0ZW0ncyBpbm5lciBlbGVt
ZW50LgorICAgICAgICAgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9u
LCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFr
ZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksIHBvaW50ZXJUeXBlLmFkZHJlc3NT
cGFjZSgpLCBwb2ludGVyVHlwZS5lbGVtZW50VHlwZSgpLmNsb25lKCkpKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbFZhbHVlSW5mby0+YWRkcmVzc1Nw
YWNlKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkpIHsK
KyAgICAgICAgICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1
bm5hbWVkVHlwZSk7CisgICAgICAgICAgICAvLyBGSVhNRTogU2F2ZSB0aGUgbnVtYmVyIG9mIGVs
ZW1lbnRzLgorICAgICAgICAgICAgYXNzaWduVHlwZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNz
aW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4o
bWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsVmFsdWVJbmZvLT5hZGRy
ZXNzU3BhY2UsIGFycmF5VHlwZS50eXBlKCkuY2xvbmUoKSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2Up
IHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFz
c2lnblR5cGUobWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbiwgbWFrZVVuaXF1ZVJlZjxBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZT4oTGV4ZXI6OlRva2VuKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJl
c3Npb24ub3JpZ2luKCkpLCAqbFZhbHVlSW5mby0+YWRkcmVzc1NwYWNlLCBsVmFsdWVUeXBlLT5j
bG9uZSgpKSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2Vz
cyhBU1Q6OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9u
LCBBU1Q6OlVubmFtZWRUeXBlJiB3cmFwcGVkQmFzZVR5cGUsIEFTVDo6VW5uYW1lZFR5cGUqIGV4
dHJhQXJndW1lbnRUeXBlKQoreworICAgIE9wdGlvbmFsPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
QVNUOjpOYW1lZFR5cGU+PiBjYXN0UmV0dXJuVHlwZTsKKyAgICB1c2luZyBPdmVybG9hZFJlc29s
dXRpb24gPSBzdGQ6OnR1cGxlPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiosIEFTVDo6VW5uYW1l
ZFR5cGUqPjsKKworICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogZ2V0RnVuY3Rpb247Cisg
ICAgQVNUOjpVbm5hbWVkVHlwZSogZ2V0UmV0dXJuVHlwZTsKKyAgICBzdGQ6OnRpZShnZXRGdW5j
dGlvbiwgZ2V0UmV0dXJuVHlwZSkgPSAoWyZdKCkgLT4gT3ZlcmxvYWRSZXNvbHV0aW9uIHsKKyAg
ICAgICAgUmVzb2x2aW5nVHlwZSBnZXRBcmd1bWVudFR5cGUxKHdyYXBwZWRCYXNlVHlwZS5jbG9u
ZSgpKTsKKyAgICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4gZ2V0QXJndW1lbnRUeXBlMjsK
KyAgICAgICAgaWYgKGV4dHJhQXJndW1lbnRUeXBlKQorICAgICAgICAgICAgZ2V0QXJndW1lbnRU
eXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5cGUtPmNsb25lKCkpOworCisgICAg
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBnZXRBcmd1
bWVudFR5cGVzOworICAgICAgICBnZXRBcmd1bWVudFR5cGVzLmFwcGVuZChnZXRBcmd1bWVudFR5
cGUxKTsKKyAgICAgICAgaWYgKGdldEFyZ3VtZW50VHlwZTIpCisgICAgICAgICAgICBnZXRBcmd1
bWVudFR5cGVzLmFwcGVuZCgqZ2V0QXJndW1lbnRUeXBlMik7CisKKyAgICAgICAgYXV0byogZ2V0
RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwocHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLnBvc3NpYmxlR2V0T3ZlcmxvYWRzKCksIGdldEFyZ3VtZW50VHlwZXMsIGNhc3RSZXR1
cm5UeXBlKTsKKyAgICAgICAgaWYgKCFnZXRGdW5jdGlvbikKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKGdldEZ1bmN0aW9uLCAmZ2V0RnVuY3Rpb24tPnR5cGUoKSk7CisgICAgfSkoKTsKKwor
ICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiogYW5kRnVuY3Rpb247CisgICAgQVNUOjpVbm5h
bWVkVHlwZSogYW5kUmV0dXJuVHlwZTsKKyAgICBzdGQ6OnRpZShhbmRGdW5jdGlvbiwgYW5kUmV0
dXJuVHlwZSkgPSAoWyZdKCkgLT4gT3ZlcmxvYWRSZXNvbHV0aW9uIHsKKyAgICAgICAgYXV0byBj
b21wdXRlQW5kQXJndW1lbnRUeXBlID0gWyZdKEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBl
KSAtPiBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiB7CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyB1bm5hbWVkVHlwZS5jbG9uZSgpIH07CisgICAgICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVm
PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHBy
ZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93bmNhc3Q8QVNU
OjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS50eXBlKCkuY2xvbmUoKSkgfTsKKyAgICAgICAgICAg
IGlmIChpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8
QVNUOjpQb2ludGVyVHlwZT4oTGV4ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5v
cmlnaW4oKSksIEFTVDo6QWRkcmVzc1NwYWNlOjpUaHJlYWQsIGRvd25jYXN0PEFTVDo6QXJyYXlU
eXBlPih1bm5hbWVkVHlwZSkudHlwZSgpLmNsb25lKCkpIH07CisgICAgICAgIH07CisgICAgICAg
IGF1dG8gY29tcHV0ZUFuZFJldHVyblR5cGUgPSBbJl0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1l
ZFR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OlBv
aW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuICZkb3duY2Fz
dDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKTsKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9OworCisgICAgICAgIGF1dG8gYW5kQXJndW1l
bnRUeXBlMSA9IGNvbXB1dGVBbmRBcmd1bWVudFR5cGUod3JhcHBlZEJhc2VUeXBlKTsKKyAgICAg
ICAgaWYgKCFhbmRBcmd1bWVudFR5cGUxKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiBh
bmRBcmd1bWVudFR5cGUyOworICAgICAgICBpZiAoZXh0cmFBcmd1bWVudFR5cGUpCisgICAgICAg
ICAgICBhbmRBcmd1bWVudFR5cGUyID0gUmVzb2x2aW5nVHlwZShleHRyYUFyZ3VtZW50VHlwZS0+
Y2xvbmUoKSk7CisKKyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2
aW5nVHlwZT4+IGFuZEFyZ3VtZW50VHlwZXM7CisgICAgICAgIGFuZEFyZ3VtZW50VHlwZXMuYXBw
ZW5kKCphbmRBcmd1bWVudFR5cGUxKTsKKyAgICAgICAgaWYgKGFuZEFyZ3VtZW50VHlwZTIpCisg
ICAgICAgICAgICBhbmRBcmd1bWVudFR5cGVzLmFwcGVuZCgqYW5kQXJndW1lbnRUeXBlMik7CisK
KyAgICAgICAgYXV0byogYW5kRnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwo
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlQW5kT3ZlcmxvYWRzKCksIGFuZEFyZ3Vt
ZW50VHlwZXMsIGNhc3RSZXR1cm5UeXBlKTsKKyAgICAgICAgaWYgKCFhbmRGdW5jdGlvbikKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRyLCBudWxscHRyKTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGFuZEZ1bmN0aW9uLCBjb21wdXRlQW5kUmV0dXJuVHlw
ZShhbmRGdW5jdGlvbi0+dHlwZSgpKSk7CisgICAgfSkoKTsKKworICAgIGlmICghZ2V0UmV0dXJu
VHlwZSAmJiAhYW5kUmV0dXJuVHlwZSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGdldFJldHVyblR5cGUgJiYgYW5kUmV0dXJuVHlwZSAm
JiAhbWF0Y2hlcygqZ2V0UmV0dXJuVHlwZSwgKmFuZFJldHVyblR5cGUpKSB7CisgICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24qIHNldEZ1bmN0aW9uOworICAgIEFTVDo6VW5uYW1lZFR5cGUqIHNldFJldHVyblR5
cGU7CisgICAgc3RkOjp0aWUoc2V0RnVuY3Rpb24sIHNldFJldHVyblR5cGUpID0gKFsmXSgpIC0+
IE92ZXJsb2FkUmVzb2x1dGlvbiB7CisgICAgICAgIFJlc29sdmluZ1R5cGUgc2V0QXJndW1lbnQx
VHlwZSh3cmFwcGVkQmFzZVR5cGUuY2xvbmUoKSk7CisgICAgICAgIE9wdGlvbmFsPFJlc29sdmlu
Z1R5cGU+IHNldEFyZ3VtZW50VHlwZTI7CisgICAgICAgIGlmIChleHRyYUFyZ3VtZW50VHlwZSkK
KyAgICAgICAgICAgIHNldEFyZ3VtZW50VHlwZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1l
bnRUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgUmVzb2x2aW5nVHlwZSBzZXRBcmd1bWVudDNUeXBl
KGdldFJldHVyblR5cGUgPyBnZXRSZXR1cm5UeXBlLT5jbG9uZSgpIDogYW5kUmV0dXJuVHlwZS0+
Y2xvbmUoKSk7CisKKyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2
aW5nVHlwZT4+IHNldEFyZ3VtZW50VHlwZXM7CisgICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBw
ZW5kKHNldEFyZ3VtZW50MVR5cGUpOworICAgICAgICBpZiAoc2V0QXJndW1lbnRUeXBlMikKKyAg
ICAgICAgICAgIHNldEFyZ3VtZW50VHlwZXMuYXBwZW5kKCpzZXRBcmd1bWVudFR5cGUyKTsKKyAg
ICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoc2V0QXJndW1lbnQzVHlwZSk7CisKKyAgICAg
ICAgYXV0byogc2V0RnVuY3Rpb24gPSByZXNvbHZlRnVuY3Rpb25PdmVybG9hZEltcGwocHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLnBvc3NpYmxlU2V0T3ZlcmxvYWRzKCksIHNldEFyZ3VtZW50VHlw
ZXMsIGNhc3RSZXR1cm5UeXBlKTsKKyAgICAgICAgaWYgKCFzZXRGdW5jdGlvbikKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihudWxscHRyLCBudWxscHRyKTsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKHNldEZ1bmN0aW9uLCAmc2V0RnVuY3Rpb24tPnR5cGUoKSk7Cisg
ICAgfSkoKTsKKworICAgIGlmIChzZXRGdW5jdGlvbikgeworICAgICAgICBpZiAoIW1hdGNoZXMo
c2V0RnVuY3Rpb24tPnR5cGUoKSwgd3JhcHBlZEJhc2VUeXBlKSkgeworICAgICAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIE9w
dGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2U7CisgICAgaWYgKGdldFJldHVy
blR5cGUgfHwgYW5kUmV0dXJuVHlwZSkgeworICAgICAgICAvLyBGSVhNRTogVGhlIHJlZmVyZW5j
ZSBjb21waWxlciBoYXMgImVsc2UgaWYgKCFub2RlLmJhc2UuaXNMVmFsdWUgJiYgIWJhc2VUeXBl
LmlzQXJyYXlSZWYpIiwKKyAgICAgICAgLy8gYnV0IEkgZG9uJ3QgdW5kZXJzdGFuZCB3aHkgaXQg
ZXhpc3RzLiBJIGhhdmVuJ3Qgd3JpdHRlbiBpdCBoZXJlLCBhbmQgSSdsbCBpbnZlc3RpZ2F0ZQor
ICAgICAgICAvLyBpZiB3ZSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhlIHJlZmVyZW5jZSBjb21waWxl
ci4KKyAgICAgICAgaWYgKGlzPEFTVDo6UmVmZXJlbmNlVHlwZT4od3JhcHBlZEJhc2VUeXBlKSkK
KyAgICAgICAgICAgIGFkZHJlc3NTcGFjZSA9IGRvd25jYXN0PEFTVDo6UmVmZXJlbmNlVHlwZT4o
d3JhcHBlZEJhc2VUeXBlKS5hZGRyZXNzU3BhY2UoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBhdXRvIGFkZHJlc3NTcGFjZUl0ZXJhdG9yID0gbV9hZGRyZXNzU3BhY2VNYXAuZmluZCgm
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmJhc2UoKSk7CisgICAgICAgICAgICBBU1NFUlQoYWRk
cmVzc1NwYWNlSXRlcmF0b3IgIT0gbV9hZGRyZXNzU3BhY2VNYXAuZW5kKCkpOworICAgICAgICAg
ICAgaWYgKGFkZHJlc3NTcGFjZUl0ZXJhdG9yLT52YWx1ZSkKKyAgICAgICAgICAgICAgICBhZGRy
ZXNzU3BhY2UgPSAqYWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBGSVhNRTogR2VuZXJh
dGUgdGhlIGNhbGwgZXhwcmVzc2lvbnMKKworICAgIGFzc2lnblR5cGUocHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLCBnZXRSZXR1cm5UeXBlID8gZ2V0UmV0dXJuVHlwZS0+Y2xvbmUoKSA6IGFuZFJl
dHVyblR5cGUtPmNsb25lKCksIGFkZHJlc3NTcGFjZSk7Cit9CisKK09wdGlvbmFsPFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPj4gQ2hlY2tlcjo6cmVjdXJzZUFuZFdyYXBCYXNlVHlwZShBU1Q6
OlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiYgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKQorewor
ICAgIGF1dG8gYmFzZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24uYmFzZSgpKTsKKyAgICBpZiAoIWJhc2VJbmZvKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgYXV0byogYmFzZVR5cGUgPSBnZXRVbm5hbWVkVHlwZShiYXNlSW5mby0+
cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFiYXNlVHlwZSkgeworICAgICAgICBzZXRFcnJvcigp
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKyAgICBhdXRvJiBiYXNlVW5p
ZnlOb2RlID0gYmFzZVR5cGUtPnVuaWZ5Tm9kZSgpOworICAgIGlmIChpczxBU1Q6OlVubmFtZWRU
eXBlPihiYXNlVW5pZnlOb2RlKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6VW5uYW1l
ZFR5cGU+KGJhc2VVbmlmeU5vZGUpLmNsb25lKCk7CisgICAgQVNTRVJUKGlzPEFTVDo6TmFtZWRU
eXBlPihiYXNlVW5pZnlOb2RlKSk7CisgICAgcmV0dXJuIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3
cmFwKExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCkpLCBkb3du
Y2FzdDxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVVuaWZ5Tm9kZSkpIH07Cit9CisKK3ZvaWQgQ2hlY2tl
cjo6dmlzaXQoQVNUOjpEb3RFeHByZXNzaW9uJiBkb3RFeHByZXNzaW9uKQoreworICAgIGF1dG8g
YmFzZVR5cGUgPSByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKGRvdEV4cHJlc3Npb24pOworICAgIGlm
ICghYmFzZVR5cGUpCisgICAgICAgIHJldHVybjsKKworICAgIGZpbmlzaFZpc2l0aW5nUHJvcGVy
dHlBY2Nlc3MoZG90RXhwcmVzc2lvbiwgKmJhc2VUeXBlKTsKK30KKwordm9pZCBDaGVja2VyOjp2
aXNpdChBU1Q6OkluZGV4RXhwcmVzc2lvbiYgaW5kZXhFeHByZXNzaW9uKQoreworICAgIGF1dG8g
YmFzZVR5cGUgPSByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKGluZGV4RXhwcmVzc2lvbik7CisgICAg
aWYgKCFiYXNlVHlwZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBpbmRleEluZm8gPSBy
ZWN1cnNlQW5kR2V0SW5mbyhpbmRleEV4cHJlc3Npb24uaW5kZXhFeHByZXNzaW9uKCkpOworICAg
IGlmICghaW5kZXhJbmZvKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBpbmRleEV4cHJlc3Np
b25UeXBlID0gZ2V0VW5uYW1lZFR5cGUoaW5kZXhJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBp
ZiAoIWluZGV4RXhwcmVzc2lvblR5cGUpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MoaW5kZXhF
eHByZXNzaW9uLCBXVEZNb3ZlKCpiYXNlVHlwZSksIGluZGV4RXhwcmVzc2lvblR5cGUpOworfQor
Cit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVuY2UmIHZhcmlhYmxlUmVm
ZXJlbmNlKQoreworICAgIEFTU0VSVCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpKTsKKyAg
ICBBU1NFUlQodmFyaWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+dHlwZSgpKTsKKyAgICAKKyAg
ICBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRkcmVzc1NwYWNlOworICAgIGlmICghdmFy
aWFibGVSZWZlcmVuY2UudmFyaWFibGUoKS0+aXNBbm9ueW1vdXMoKSkKKyAgICAgICAgYWRkcmVz
c1NwYWNlID0gQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZDsKKyAgICBhc3NpZ25UeXBlKHZhcmlh
YmxlUmVmZXJlbmNlLCB2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCktPmNsb25l
KCksIGFkZHJlc3NTcGFjZSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpSZXR1cm4m
IHJldHVyblN0YXRlbWVudCkKK3sKKyAgICBBU1NFUlQocmV0dXJuU3RhdGVtZW50LmZ1bmN0aW9u
KCkpOworICAgIGlmIChyZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSkgeworICAgICAgICBhdXRvIHZh
bHVlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKCpyZXR1cm5TdGF0ZW1lbnQudmFsdWUoKSk7Cisg
ICAgICAgIGlmICghdmFsdWVJbmZvKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo
IW1hdGNoQW5kQ29tbWl0KHZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSwgcmV0dXJuU3RhdGVtZW50
LmZ1bmN0aW9uKCktPnR5cGUoKSkpCisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtYXRjaGVzKHJldHVyblN0YXRlbWVudC5mdW5jdGlv
bigpLT50eXBlKCksIG1faW50cmluc2ljcy52b2lkVHlwZSgpKSkKKyAgICAgICAgc2V0RXJyb3Io
KTsKK30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJikKK3sKKyAgICAv
LyBGb2xsb3dpbmcgcG9pbnRlciB0eXBlcyBjYW4gY2F1c2UgaW5maW5pdGUgbG9vcHMgYmVjYXVz
ZSBvZiBkYXRhIHN0cnVjdHVyZXMKKyAgICAvLyBsaWtlIGxpbmtlZCBsaXN0cy4KKyAgICAvLyBG
SVhNRTogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGVtcHR5Cit9CisKK3ZvaWQg
Q2hlY2tlcjo6dmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmKQoreworICAgIC8vIEZvbGxv
d2luZyBhcnJheSByZWZlcmVuY2UgdHlwZXMgY2FuIGNhdXNlIGluZmluaXRlIGxvb3BzIGJlY2F1
c2Ugb2YgZGF0YQorICAgIC8vIHN0cnVjdHVyZXMgbGlrZSBsaW5rZWQgbGlzdHMuCisgICAgLy8g
RklYTUU6IE1ha2Ugc3VyZSB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBlbXB0eQorfQorCit2b2lk
IENoZWNrZXI6OnZpc2l0KEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKQorewor
ICAgIGFzc2lnblR5cGUoaW50ZWdlckxpdGVyYWwsIGFkb3B0UmVmKCpuZXcgUmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2UoaW50ZWdlckxpdGVyYWwudHlwZSgpKSkpOworfQorCit2b2lkIENoZWNrZXI6
OnZpc2l0KEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJh
bCkKK3sKKyAgICBhc3NpZ25UeXBlKHVuc2lnbmVkSW50ZWdlckxpdGVyYWwsIGFkb3B0UmVmKCpu
ZXcgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC50eXBlKCkp
KSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0TGl0
ZXJhbCkKK3sKKyAgICBhc3NpZ25UeXBlKGZsb2F0TGl0ZXJhbCwgYWRvcHRSZWYoKm5ldyBSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZShmbG9hdExpdGVyYWwudHlwZSgpKSkpOworfQorCit2b2lkIENo
ZWNrZXI6OnZpc2l0KEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRlcmFsKQoreworICAgIGFzc2ln
blR5cGUobnVsbExpdGVyYWwsIGFkb3B0UmVmKCpuZXcgUmVzb2x2YWJsZVR5cGVSZWZlcmVuY2Uo
bnVsbExpdGVyYWwudHlwZSgpKSkpOworfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Qm9v
bGVhbkxpdGVyYWwmIGJvb2xlYW5MaXRlcmFsKQoreworICAgIGFzc2lnblR5cGUoYm9vbGVhbkxp
dGVyYWwsIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6VG9rZW4oYm9vbGVhbkxpdGVy
YWwub3JpZ2luKCkpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSkpOworfQorCit2b2lkIENoZWNr
ZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBlbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwpCit7CisgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJh
dGlvbkRlZmluaXRpb24oKSk7CisgICAgYXV0byYgZW51bWVyYXRpb25EZWZpbml0aW9uID0gKmVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKTsKKyAgICBhc3Np
Z25UeXBlKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFw
KExleGVyOjpUb2tlbihlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwub3JpZ2luKCkpLCBlbnVtZXJh
dGlvbkRlZmluaXRpb24pKTsKK30KKworYm9vbCBDaGVja2VyOjppc0Jvb2xUeXBlKFJlc29sdmlu
Z1R5cGUmIHJlc29sdmluZ1R5cGUpCit7CisgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtl
VmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiBsZWZ0KSAtPiBib29sIHsK
KyAgICAgICAgcmV0dXJuIG1hdGNoZXMobGVmdCwgbV9pbnRyaW5zaWNzLmJvb2xUeXBlKCkpOwor
ICAgIH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiBsZWZ0KSAtPiBib29sIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KG1faW50cmlu
c2ljcy5ib29sVHlwZSgpLCBsZWZ0LT5yZXNvbHZhYmxlVHlwZSgpKSk7CisgICAgfSksIHJlc29s
dmluZ1R5cGUpOworfQorCitib29sIENoZWNrZXI6OnJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUo
QVNUOjpFeHByZXNzaW9uJiBleHByZXNzaW9uKQoreworICAgIGF1dG8gZXhwcmVzc2lvbkluZm8g
PSByZWN1cnNlQW5kR2V0SW5mbyhleHByZXNzaW9uKTsKKyAgICBpZiAoIWV4cHJlc3Npb25JbmZv
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpc0Jvb2xUeXBlKGV4cHJlc3Npb25J
bmZvLT5yZXNvbHZpbmdUeXBlKSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENoZWNrZXI6OnZp
c2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mIGxvZ2ljYWxOb3RFeHByZXNzaW9uKQorewor
ICAgIGlmICghcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZShsb2dpY2FsTm90RXhwcmVzc2lvbi5v
cGVyYW5kKCkpKQorICAgICAgICByZXR1cm47CisgICAgYXNzaWduVHlwZShsb2dpY2FsTm90RXhw
cmVzc2lvbiwgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihsb2dpY2FsTm90
RXhwcmVzc2lvbi5vcmlnaW4oKSksIG1faW50cmluc2ljcy5ib29sVHlwZSgpKSk7Cit9CisKK3Zv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpMb2dpY2FsRXhwcmVzc2lvbiYgbG9naWNhbEV4cHJlc3Np
b24pCit7CisgICAgaWYgKCFyZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKGxvZ2ljYWxFeHByZXNz
aW9uLmxlZnQoKSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXJlY3Vyc2VBbmRSZXF1aXJl
Qm9vbFR5cGUobG9naWNhbEV4cHJlc3Npb24ucmlnaHQoKSkpCisgICAgICAgIHJldHVybjsKKyAg
ICBhc3NpZ25UeXBlKGxvZ2ljYWxFeHByZXNzaW9uLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAo
TGV4ZXI6OlRva2VuKGxvZ2ljYWxFeHByZXNzaW9uLm9yaWdpbigpKSwgbV9pbnRyaW5zaWNzLmJv
b2xUeXBlKCkpKTsKK30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OklmU3RhdGVtZW50JiBp
ZlN0YXRlbWVudCkKK3sKKyAgICBpZiAoIXJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUoaWZTdGF0
ZW1lbnQuY29uZGl0aW9uYWwoKSkpCisgICAgICAgIHJldHVybjsKKyAgICBjaGVja0Vycm9yQW5k
VmlzaXQoaWZTdGF0ZW1lbnQuYm9keSgpKTsKKyAgICBpZiAoaWZTdGF0ZW1lbnQuZWxzZUJvZHko
KSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCppZlN0YXRlbWVudC5lbHNlQm9keSgpKTsK
K30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OldoaWxlTG9vcCYgd2hpbGVMb29wKQorewor
ICAgIGlmICghcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZSh3aGlsZUxvb3AuY29uZGl0aW9uYWwo
KSkpCisgICAgICAgIHJldHVybjsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQod2hpbGVMb29wLmJv
ZHkoKSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEb1doaWxlTG9vcCYgZG9XaGls
ZUxvb3ApCit7CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGRvV2hpbGVMb29wLmJvZHkoKSk7Cisg
ICAgcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZShkb1doaWxlTG9vcC5jb25kaXRpb25hbCgpKTsK
K30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkZvckxvb3AmIGZvckxvb3ApCit7CisgICAg
V1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25z
U3RhdGVtZW50JiB2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCkgeworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQodmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1lbnQpOworICAgIH0sIFsm
XShVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYgZXhwcmVzc2lvbikgeworICAgICAgICBjaGVj
a0Vycm9yQW5kVmlzaXQoZXhwcmVzc2lvbik7CisgICAgfSksIGZvckxvb3AuaW5pdGlhbGl6YXRp
b24oKSk7CisgICAgaWYgKGVycm9yKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZm9yTG9v
cC5jb25kaXRpb24oKSkgeworICAgICAgICBpZiAoIXJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUo
KmZvckxvb3AuY29uZGl0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoZm9yTG9vcC5pbmNyZW1lbnQoKSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCpmb3JM
b29wLmluY3JlbWVudCgpKTsKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZm9yTG9vcC5ib2R5KCkp
OworfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50JiBzd2l0Y2hT
dGF0ZW1lbnQpCit7CisgICAgYXV0byogdmFsdWVUeXBlID0gKFsmXSgpIC0+IEFTVDo6TmFtZWRU
eXBlKiB7CisgICAgICAgIGF1dG8gdmFsdWVJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oc3dpdGNo
U3RhdGVtZW50LnZhbHVlKCkpOworICAgICAgICBpZiAoIXZhbHVlSW5mbykKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICBhdXRvKiB2YWx1ZVR5cGUgPSBnZXRVbm5hbWVkVHlw
ZSh2YWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgICAgICBpZiAoIXZhbHVlVHlwZSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBhdXRvJiB2YWx1ZVVuaWZ5Tm9kZSA9
IHZhbHVlVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgICAgIGlmICghaXM8QVNUOjpOYW1lZFR5cGU+
KHZhbHVlVW5pZnlOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBh
dXRvJiB2YWx1ZU5hbWVkVW5pZnlOb2RlID0gZG93bmNhc3Q8QVNUOjpOYW1lZFR5cGU+KHZhbHVl
VW5pZnlOb2RlKTsKKyAgICAgICAgaWYgKCEoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+
KHZhbHVlTmFtZWRVbmlmeU5vZGUpICYmIGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uPih2YWx1ZU5hbWVkVW5pZnlOb2RlKS5pc0ludCgpKQorICAgICAgICAgICAgJiYgIWlzPEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uPih2YWx1ZU5hbWVkVW5pZnlOb2RlKSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gJnZhbHVlTmFtZWRVbmlmeU5vZGU7
CisgICAgfSkoKTsKKyAgICBpZiAoIXZhbHVlVHlwZSkgeworICAgICAgICBzZXRFcnJvcigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCBoYXNEZWZhdWx0ID0gZmFsc2U7Cisg
ICAgZm9yIChhdXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkp
IHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN3aXRjaENhc2UuYmxvY2soKSk7CisgICAg
ICAgIGlmICghc3dpdGNoQ2FzZS52YWx1ZSgpKSB7CisgICAgICAgICAgICBoYXNEZWZhdWx0ID0g
dHJ1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGJvb2wgc3Vj
Y2VzczsKKyAgICAgICAgc3dpdGNoQ2FzZS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAg
c3VjY2VzcyA9IHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KCp2YWx1ZVR5cGUsIGlu
dGVnZXJMaXRlcmFsLnR5cGUoKSkpOworICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVn
ZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICBzdWNjZXNz
ID0gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoKnZhbHVlVHlwZSwgdW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFs
JiBmbG9hdExpdGVyYWwpIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdGF0aWNfY2FzdDxib29s
PihtYXRjaEFuZENvbW1pdCgqdmFsdWVUeXBlLCBmbG9hdExpdGVyYWwudHlwZSgpKSk7CisgICAg
ICAgIH0sIFsmXShBU1Q6Ok51bGxMaXRlcmFsJiBudWxsTGl0ZXJhbCkgeworICAgICAgICAgICAg
c3VjY2VzcyA9IHN0YXRpY19jYXN0PGJvb2w+KG1hdGNoQW5kQ29tbWl0KCp2YWx1ZVR5cGUsIG51
bGxMaXRlcmFsLnR5cGUoKSkpOworICAgICAgICB9LCBbJl0oQVNUOjpCb29sZWFuTGl0ZXJhbCYp
IHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBtYXRjaGVzKCp2YWx1ZVR5cGUsIG1faW50cmluc2lj
cy5ib29sVHlwZSgpKTsKKyAgICAgICAgfSwgWyZdKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsJiBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIEFTU0VSVChlbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOworICAgICAgICAg
ICAgc3VjY2VzcyA9IG1hdGNoZXMoKnZhbHVlVHlwZSwgKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgIH0pKTsKKyAgICAgICAgaWYgKCFz
dWNjZXNzKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzd2l0Y2hTdGF0
ZW1lbnQuc3dpdGNoQ2FzZXMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBmaXJzdENh
c2UgPSBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKVtpXTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaiA9IGkgKyAxOyBqIDwgc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkuc2l6ZSgpOyAr
K2opIHsKKyAgICAgICAgICAgIGF1dG8mIHNlY29uZENhc2UgPSBzd2l0Y2hTdGF0ZW1lbnQuc3dp
dGNoQ2FzZXMoKVtqXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0
PGJvb2w+KGZpcnN0Q2FzZS52YWx1ZSgpKSAhPSBzdGF0aWNfY2FzdDxib29sPihzZWNvbmRDYXNl
LnZhbHVlKCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAo
IXN0YXRpY19jYXN0PGJvb2w+KGZpcnN0Q2FzZS52YWx1ZSgpKSkgeworICAgICAgICAgICAgICAg
IHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgICAgICAgICAgZmlyc3RDYXNlLnZh
bHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGZp
cnN0SW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBzZWNvbmRDYXNlLnZhbHVlKCkt
PnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIHNlY29uZElu
dGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmaXJzdEludGVn
ZXJMaXRlcmFsLnZhbHVlKCkgIT0gc2Vjb25kSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAg
ICAgICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiBzZWNvbmRVbnNp
Z25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdGF0
aWNfY2FzdDxpbnQ2NF90PihmaXJzdEludGVnZXJMaXRlcmFsLnZhbHVlKCkpICE9IHN0YXRpY19j
YXN0PGludDY0X3Q+KHNlY29uZFVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgfSwgW10oYXV0byYpIHsKKyAgICAgICAgICAgICAgICB9KSk7CisgICAgICAg
ICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiBmaXJzdFVuc2lnbmVkSW50
ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBzZWNvbmRDYXNlLnZhbHVlKCktPnZpc2l0
KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIHNlY29uZEludGVnZXJM
aXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdGF0aWNfY2FzdDxpbnQ2
NF90PihmaXJzdFVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKSkgIT0gc3RhdGljX2Nhc3Q8
aW50NjRfdD4oc2Vjb25kSW50ZWdlckxpdGVyYWwudmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
fSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgc2Vjb25kVW5zaWduZWRJbnRlZ2Vy
TGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmlyc3RVbnNpZ25lZElu
dGVnZXJMaXRlcmFsLnZhbHVlKCkgIT0gc2Vjb25kVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1
ZSgpOworICAgICAgICAgICAgICAgIH0sIFtdKGF1dG8mKSB7CisgICAgICAgICAgICAgICAgfSkp
OworICAgICAgICAgICAgfSwgWyZdKEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBmaXJz
dEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIHNlY29uZENhc2Uu
dmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYp
IHsKKyAgICAgICAgICAgICAgICB9LCBbJl0oQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwm
IHNlY29uZEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoZmlyc3RFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKSk7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzZWNvbmRFbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwuZW51bWVyYXRpb25NZW1iZXIoKSk7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBm
aXJzdEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpICE9IHNlY29u
ZEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpOworICAgICAgICAg
ICAgICAgIH0sIFtdKGF1dG8mKSB7CisgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAg
fSwgW10oYXV0byYpIHsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGlmICghaGFzRGVmYXVsdCkgeworICAgICAgICBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24+KCp2YWx1ZVR5cGUpKSB7CisgICAgICAgICAgICBIYXNoU2V0PGludDY0X3Q+IHZhbHVl
czsKKyAgICAgICAgICAgIGJvb2wgemVyb1ZhbHVlRXhpc3RzOworICAgICAgICAgICAgZm9yIChh
dXRvJiBzd2l0Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpIHsKKyAgICAg
ICAgICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAgICAgICAgICAgIHN3aXRjaENhc2UudmFs
dWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50
ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJh
bC52YWx1ZUZvclNlbGVjdGVkVHlwZSgpOworICAgICAgICAgICAgICAgIH0sIFsmXShBU1Q6OlVu
c2lnbmVkSW50ZWdlckxpdGVyYWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWUgPSB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0
ZWRUeXBlKCk7CisgICAgICAgICAgICAgICAgfSwgW10oYXV0byYpIHsKKyAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfSkpOworICAgICAg
ICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHplcm9WYWx1ZUV4aXN0
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB2YWx1
ZXMuYWRkKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2wgc3VjY2VzcyA9
IHRydWU7CisgICAgICAgICAgICBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4o
KnZhbHVlVHlwZSkuaXRlcmF0ZUFsbFZhbHVlcyhbJl0oaW50NjRfdCB2YWx1ZSkgLT4gYm9vbCB7
CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IXplcm9WYWx1ZUV4aXN0cykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcy5jb250YWlucyh2YWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAg
ICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChpczxBU1Q6OkVudW1l
cmF0aW9uRGVmaW5pdGlvbj4oKnZhbHVlVHlwZSkpOworICAgICAgICAgICAgSGFzaFNldDxBU1Q6
OkVudW1lcmF0aW9uTWVtYmVyKj4gdmFsdWVzOworICAgICAgICAgICAgZm9yIChhdXRvJiBzd2l0
Y2hDYXNlIDogc3dpdGNoU3RhdGVtZW50LnN3aXRjaENhc2VzKCkpIHsKKyAgICAgICAgICAgICAg
ICBzd2l0Y2hDYXNlLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6RW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsJiBlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwpIHsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlv
bk1lbWJlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzLmFkZChlbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKSk7CisgICAgICAgICAgICAgICAgfSwgW10o
YXV0byYpIHsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChhdXRvJiBl
bnVtZXJhdGlvbk1lbWJlciA6IGRvd25jYXN0PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uPigq
dmFsdWVUeXBlKS5lbnVtZXJhdGlvbk1lbWJlcnMoKSkgeworICAgICAgICAgICAgICAgIGlmICgh
dmFsdWVzLmNvbnRhaW5zKCZlbnVtZXJhdGlvbk1lbWJlci5nZXQoKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBD
aGVja2VyOjp2aXNpdChBU1Q6OkNvbW1hRXhwcmVzc2lvbiYgY29tbWFFeHByZXNzaW9uKQorewor
ICAgIEFTU0VSVChjb21tYUV4cHJlc3Npb24ubGlzdCgpLnNpemUoKSA+IDApOworICAgIFZpc2l0
b3I6OnZpc2l0KGNvbW1hRXhwcmVzc2lvbik7CisgICAgaWYgKGVycm9yKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBhdXRvIGxhc3RJbmZvID0gZ2V0SW5mbyhjb21tYUV4cHJlc3Npb24ubGlzdCgp
Lmxhc3QoKSk7CisgICAgZm9yd2FyZFR5cGUoY29tbWFFeHByZXNzaW9uLCBsYXN0SW5mby0+cmVz
b2x2aW5nVHlwZSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpUZXJuYXJ5RXhwcmVz
c2lvbiYgdGVybmFyeUV4cHJlc3Npb24pCit7CisgICAgYXV0byBwcmVkaWNhdGVJbmZvID0gcmVj
dXJzZUFuZFJlcXVpcmVCb29sVHlwZSh0ZXJuYXJ5RXhwcmVzc2lvbi5wcmVkaWNhdGUoKSk7Cisg
ICAgaWYgKCFwcmVkaWNhdGVJbmZvKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGJvZHlJ
bmZvID0gcmVjdXJzZUFuZEdldEluZm8odGVybmFyeUV4cHJlc3Npb24uYm9keUV4cHJlc3Npb24o
KSk7CisgICAgYXV0byBlbHNlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKHRlcm5hcnlFeHByZXNz
aW9uLmVsc2VFeHByZXNzaW9uKCkpOworICAgIAorICAgIGF1dG8gcmVzdWx0VHlwZSA9IG1hdGNo
QW5kQ29tbWl0KGJvZHlJbmZvLT5yZXNvbHZpbmdUeXBlLCBlbHNlSW5mby0+cmVzb2x2aW5nVHlw
ZSk7CisgICAgaWYgKCFyZXN1bHRUeXBlKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhc3NpZ25UeXBlKHRlcm5hcnlFeHByZXNzaW9uLCBXVEZN
b3ZlKCpyZXN1bHRUeXBlKSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpDYWxsRXhw
cmVzc2lvbiYgY2FsbEV4cHJlc3Npb24pCit7CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dy
YXBwZXI8UmVzb2x2aW5nVHlwZT4+IHR5cGVzOworICAgIHR5cGVzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoY2FsbEV4cHJlc3Npb24uYXJndW1lbnRzKCkuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8m
IGFyZ3VtZW50IDogY2FsbEV4cHJlc3Npb24uYXJndW1lbnRzKCkpIHsKKyAgICAgICAgYXV0byBh
cmd1bWVudEluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhhcmd1bWVudCk7CisgICAgICAgIGlmICgh
YXJndW1lbnRJbmZvKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0eXBlcy51bmNoZWNr
ZWRBcHBlbmQoYXJndW1lbnRJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICB9CisgICAgaWYgKGNh
bGxFeHByZXNzaW9uLmNhc3RSZXR1cm5UeXBlKCkpIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZp
c2l0KGNhbGxFeHByZXNzaW9uLmNhc3RSZXR1cm5UeXBlKCktPmdldCgpKTsKKyAgICAgICAgaWYg
KGVycm9yKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKGNhbGxF
eHByZXNzaW9uLmhhc092ZXJsb2FkcygpKTsKKyAgICBhdXRvKiBmdW5jdGlvbiA9IHJlc29sdmVG
dW5jdGlvbk92ZXJsb2FkSW1wbCgqY2FsbEV4cHJlc3Npb24ub3ZlcmxvYWRzKCksIHR5cGVzLCBj
YWxsRXhwcmVzc2lvbi5jYXN0UmV0dXJuVHlwZSgpKTsKKyAgICBpZiAoIWZ1bmN0aW9uKSB7Cisg
ICAgICAgIGlmIChhdXRvIG5ld0Z1bmN0aW9uID0gcmVzb2x2ZUJ5SW5zdGFudGlhdGlvbihjYWxs
RXhwcmVzc2lvbiwgdHlwZXMsIG1faW50cmluc2ljcykpIHsKKyAgICAgICAgICAgIG1fcHJvZ3Jh
bS5hcHBlbmQoV1RGTW92ZSgqbmV3RnVuY3Rpb24pKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uID0g
Jm1fcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpLmxhc3QoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICghZnVuY3Rpb24pIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnVuY3Rp
b24tPnBhcmFtZXRlcnMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIW1hdGNoQW5kQ29t
bWl0KHR5cGVzW2ldLmdldCgpLCAqZnVuY3Rpb24tPnBhcmFtZXRlcnMoKVtpXS50eXBlKCkpKSB7
CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorCisgICAgY2FsbEV4cHJlc3Npb24uc2V0RnVuY3Rpb24oKmZ1bmN0aW9uKTsKKwor
ICAgIGFzc2lnblR5cGUoY2FsbEV4cHJlc3Npb24sIGZ1bmN0aW9uLT50eXBlKCkuY2xvbmUoKSk7
Cit9CisKK2Jvb2wgY2hlY2soUHJvZ3JhbSYgcHJvZ3JhbSkKK3sKKyAgICBDaGVja2VyIGNoZWNr
ZXIocHJvZ3JhbS5pbnRyaW5zaWNzKCksIHByb2dyYW0pOworICAgIGNoZWNrZXIuY2hlY2tFcnJv
ckFuZFZpc2l0KHByb2dyYW0pOworICAgIGlmIChjaGVja2VyLmVycm9yKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2hlY2tlci5hc3NpZ25UeXBlcygpOworfQorCit9CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTENoZWNrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMQ2hlY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2ZjA4NTc3ODE4NGZlNTQ3NjcyMTAxZGZiZTAx
MjBlNjM2YjlhODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTENoZWNrZXIuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK25hbWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIFByb2dyYW07CisKK2Jvb2wgY2hlY2soUHJv
Z3JhbSYpOworCit9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVt
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWJkNTRjOWI5MTBkMWJhYWY2NzA1MTg0NTc0YTE2OTZkNDE5Njlj
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTEdhdGhlckVudHJ5UG9p
bnRJdGVtcy5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQXJyYXlS
ZWZlcmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJX
SExTTEZ1bmN0aW9uRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMSW5mZXJUeXBlcy5oIgor
I2luY2x1ZGUgIldITFNMSW50cmluc2ljcy5oIgorI2luY2x1ZGUgIldITFNMUG9pbnRlclR5cGUu
aCIKKyNpbmNsdWRlICJXSExTTFN0cnVjdHVyZURlZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExT
TFR5cGVEZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisjaW5j
bHVkZSAiV0hMU0xWYXJpYWJsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xWaXNpdG9y
LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
bmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgR2F0aGVyZXIgOiBwdWJsaWMgVmlzaXRvciB7Citw
dWJsaWM6CisgICAgR2F0aGVyZXIoY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcywgQVNUOjpT
ZW1hbnRpYyogc2VtYW50aWMgPSBudWxscHRyKQorICAgICAgICA6IG1faW50cmluc2ljcyhpbnRy
aW5zaWNzKQorICAgICAgICAsIG1fY3VycmVudFNlbWFudGljKHNlbWFudGljKQorICAgIHsKKyAg
ICB9CisKKyAgICB2aXJ0dWFsIH5HYXRoZXJlcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQgcmVz
ZXQoKQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50U2VtYW50aWMgPSBudWxscHRyOworICAgIH0K
KworICAgIFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mJiB0YWtlRW50cnlQb2ludEl0ZW1zKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKG1fZW50cnlQb2ludEl0ZW1zKTsKKyAgICB9CisK
KyAgICB2b2lkIHZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJikKKyAgICB7CisgICAg
ICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMu
YXBwZW5kKEVudHJ5UG9pbnRJdGVtKG1fdHlwZVJlZmVyZW5jZXMubGFzdCgpLmdldCgpLCAqbV9j
dXJyZW50U2VtYW50aWMpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6TmF0aXZlVHlw
ZURlY2xhcmF0aW9uJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24pCisgICAgeworICAgICAgICBpZiAo
IW1fY3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtYXRjaGVzKG5hdGl2ZVR5cGVEZWNs
YXJhdGlvbiwgbV9pbnRyaW5zaWNzLnZvaWRUeXBlKCkpKSB7CisgICAgICAgICAgICBzZXRFcnJv
cigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9lbnRyeVBv
aW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKG1fdHlwZVJlZmVyZW5jZXMubGFzdCgpLmdl
dCgpLCAqbV9jdXJyZW50U2VtYW50aWMpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6
U3RydWN0dXJlRGVmaW5pdGlvbiYgc3RydWN0dXJlRGVmaW5pdGlvbikKKyAgICB7CisgICAgICAg
IGlmIChtX2N1cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoYXV0byYgc3RydWN0dXJl
RWxlbWVudCA6IHN0cnVjdHVyZURlZmluaXRpb24uc3RydWN0dXJlRWxlbWVudHMoKSkgeworICAg
ICAgICAgICAgaWYgKHN0cnVjdHVyZUVsZW1lbnQuc2VtYW50aWMoKSkKKyAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRTZW1hbnRpYyA9ICYqc3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygpOworICAg
ICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHN0cnVjdHVyZUVsZW1lbnQpOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBlRGVmaW5p
dGlvbikKKyAgICB7CisgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh0eXBlRGVmaW5pdGlvbi50
eXBlKCkpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJiB0eXBl
UmVmZXJlbmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRU
eXBlKCkpOworICAgICAgICBtX3R5cGVSZWZlcmVuY2VzLmFwcGVuZCh0eXBlUmVmZXJlbmNlKTsK
KyAgICAgICAgYXV0byBkZXB0aCA9IG1fdHlwZVJlZmVyZW5jZXMuc2l6ZSgpOworICAgICAgICBj
aGVja0Vycm9yQW5kVmlzaXQoKnR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKGRlcHRoLCBtX3R5cGVSZWZlcmVuY2VzLnNpemUoKSA9PSBkZXB0aCk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJiBwb2ludGVyVHlwZSkK
KyAgICB7CisgICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNl
dEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRy
eVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKHBvaW50ZXJUeXBlLCAqbV9jdXJyZW50
U2VtYW50aWMpKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlJiBhcnJheVJlZmVyZW5jZVR5cGUpCisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudFNl
bWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIG1fZW50cnlQb2ludEl0ZW1zLmFwcGVuZChFbnRyeVBvaW50SXRl
bShhcnJheVJlZmVyZW5jZVR5cGUsICptX2N1cnJlbnRTZW1hbnRpYykpOworICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpBcnJheVR5cGUmIGFycmF5VHlwZSkKKyAgICB7CisgICAgICAgIGlm
ICghbV9jdXJyZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5k
KEVudHJ5UG9pbnRJdGVtKGFycmF5VHlwZSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQor
CisgICAgdm9pZCB2aXNpdChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mIHZhcmlhYmxlRGVjbGFy
YXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoIW1fY3VycmVudFNlbWFudGljKTsKKyAgICAg
ICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKSkKKyAgICAgICAgICAgIG1fY3Vy
cmVudFNlbWFudGljID0gJip2YXJpYWJsZURlY2xhcmF0aW9uLnNlbWFudGljKCk7CisgICAgICAg
IGlmICh2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSkKKyAgICAgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCgqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBjb25zdCBJbnRyaW5zaWNzJiBtX2ludHJpbnNpY3M7CisgICAgQVNUOjpTZW1hbnRpYyog
bV9jdXJyZW50U2VtYW50aWMgeyBudWxscHRyIH07CisgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8QVNUOjpUeXBlUmVmZXJlbmNlPj4gbV90eXBlUmVmZXJlbmNlczsKKyAgICBWZWN0
b3I8RW50cnlQb2ludEl0ZW0+IG1fZW50cnlQb2ludEl0ZW1zOworfTsKKworT3B0aW9uYWw8RW50
cnlQb2ludEl0ZW1zPiBnYXRoZXJFbnRyeVBvaW50SXRlbXMoY29uc3QgSW50cmluc2ljcyYgaW50
cmluc2ljcywgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sK
KyAgICBBU1NFUlQoZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpOworICAgIEdh
dGhlcmVyIGlucHV0R2F0aGVyZXIoaW50cmluc2ljcyk7CisgICAgZm9yIChhdXRvJiBwYXJhbWV0
ZXIgOiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpKSB7CisgICAgICAgIGlucHV0R2F0
aGVyZXIucmVzZXQoKTsKKyAgICAgICAgaW5wdXRHYXRoZXJlci5jaGVja0Vycm9yQW5kVmlzaXQo
cGFyYW1ldGVyKTsKKyAgICAgICAgaWYgKGlucHV0R2F0aGVyZXIuZXJyb3IoKSkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorICAgIEdhdGhlcmVyIG91dHB1dEdhdGhl
cmVyKGludHJpbnNpY3MsIGZ1bmN0aW9uRGVmaW5pdGlvbi5zZW1hbnRpYygpID8gJipmdW5jdGlv
bkRlZmluaXRpb24uc2VtYW50aWMoKSA6IG51bGxwdHIpOworICAgIG91dHB1dEdhdGhlcmVyLmNo
ZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAgICBpZiAob3V0
cHV0R2F0aGVyZXIuZXJyb3IoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IHJldHVybiB7eyBpbnB1dEdhdGhlcmVyLnRha2VFbnRyeVBvaW50SXRlbXMoKSwgb3V0cHV0R2F0
aGVyZXIudGFrZUVudHJ5UG9pbnRJdGVtcygpIH19OworfQorCit9CisKK30KKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhl
ckVudHJ5UG9pbnRJdGVtcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDRmN2RkODQ0NTdmZWE2
MDY5MWE2NWViM2YxZDdmM2E1NDg5MzA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaApAQCAt
MCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VC
R1BVKQorCisjaW5jbHVkZSAiV0hMU0xTZW1hbnRpYy5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitu
YW1lc3BhY2UgV0hMU0wgeworCituYW1lc3BhY2UgQVNUIHsKKworY2xhc3MgRnVuY3Rpb25EZWZp
bml0aW9uOworCit9CisKK2NsYXNzIEludHJpbnNpY3M7CitjbGFzcyBVbm5hbWVkVHlwZTsKKwor
c3RydWN0IEVudHJ5UG9pbnRJdGVtIHsKKyAgICBFbnRyeVBvaW50SXRlbShBU1Q6OlVubmFtZWRU
eXBlJiB1bm5hbWVkVHlwZSwgQVNUOjpTZW1hbnRpYyYgc2VtYW50aWMpCisgICAgICAgIDogdW5u
YW1lZFR5cGUodW5uYW1lZFR5cGUpCisgICAgICAgICwgc2VtYW50aWMoc2VtYW50aWMpCisgICAg
eworICAgIH0KKworICAgIEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlOworICAgIEFTVDo6
U2VtYW50aWMmIHNlbWFudGljOworfTsKKworc3RydWN0IEVudHJ5UG9pbnRJdGVtcyB7CisgICAg
VmVjdG9yPEVudHJ5UG9pbnRJdGVtPiBpbnB1dHM7CisgICAgVmVjdG9yPEVudHJ5UG9pbnRJdGVt
PiBvdXRwdXRzOworfTsKKworT3B0aW9uYWw8RW50cnlQb2ludEl0ZW1zPiBnYXRoZXJFbnRyeVBv
aW50SXRlbXMoY29uc3QgSW50cmluc2ljcyYsIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7CisK
K30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMGQyNTYzNTNkNzRhYmQ2MjY2MzAy
NGJkODA1NGM5NTBlMDczODEwMy4uNjNmMDk2MTFiNjgyYzE4OTQyMTYzNDIyZjhjZjAzNWJiNDI4
MDkwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTMwOSw2ICszMDksOCBAQCBNb2R1bGVzL3dlYmdwdS9E
T01XaW5kb3dXZWJHUFUuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEluZmVyVHlwZXMu
Y3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcAogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQYXJzZXIuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIu
Y3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAK
IE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tEdXBsaWNhdGVGdW5jdGlvbnMuY3BwCiBN
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFJlY3Vyc2l2ZVR5cGVDaGVja2VyLmNwcAogTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQXJyYXlPcGVyYXRvckxlbmd0aC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCA2NDkzODQ0Yjg4ZDUwNjQzNDEyNTBiNGRkZDVmYzA1MTM1Yjg3Nzc3Li40YTBiMTZkMjQzN2Vm
Y2Q2ODlmYTIyN2MzMjUwMjVjYzlkY2E1NWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDE1LDYgKzY0MTUsMTAgQEAKIAkJ
MUM4MUI5NTYwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnNwZWN0b3JDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4
MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMUM4NDBCOTcyMUVDNDAwNzAwRDA1MDBEIC8qIFdITFNMQ2hlY2tlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXSExTTENoZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMUM4NDBCOTkyMUVDNDAwODAwRDA1MDBEIC8qIFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1z
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM4NDBCOUEyMUVDNDAwOTAwRDA1MDBEIC8q
IFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMR2F0aGVy
RW50cnlQb2ludEl0ZW1zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDODQwQjlC
MjFFQzQwMDkwMEQwNTAwRCAvKiBXSExTTENoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V0hMU0xDaGVja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5MDRERjkw
QkE5RDJDODAwODFFOUQwIC8qIFZlcnNpb24ueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29u
ZmlnOyBwYXRoID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMUNBMTlFMDMwREMyNTU5NTAwNjVBOTk0IC8qIEV2ZW50TG9vcE1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEV2ZW50TG9vcE1hYy5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUNBMTlFMTUwREMyNTVDQTAwNjVBOTk0IC8qIEV2ZW50TG9v
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudExvb3AuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMzIzLDYgKzEzMzI3LDEwIEBACiAJCUMyMUJGNzNB
MjFDRDhENzAwMDIyNzk3OSAvKiBXSExTTFByb2dyYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xQ
cm9ncmFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMUJGNzQyMjFDRDk2M0Iw
MDIyNzk3OSAvKiBXSExTTFN0YW5kYXJkTGlicmFyeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXSExTTFN0
YW5kYXJkTGlicmFyeS5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9XSExTTFN0YW5k
YXJkTGlicmFyeS5oOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlDMjFC
Rjc0NTIxQ0Q5Njk4MDAyMjc5NzkgLyogV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0ICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdI
TFNMU3RhbmRhcmRMaWJyYXJ5LnR4dDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzIx
REYyRTcxRDlFNEU5OTAwRjVCMjRDIC8qIENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250VmFyaWF0aW9uVmFsdWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDMjFERjJFODFEOUU0RTk5MDBGNUIyNEMg
LyogQ1NTRm9udFZhcmlhdGlvblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDMjM0QTk4NTIxRTg4NkE5MDAzQzk4NEQgLyogV0hMU0xWaXNpdG9yLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdITFNMVmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUMyMzRBOTg3MjFFODg2QUQwMDNDOTg0RCAvKiBXSExTTFZpc2l0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0hMU0xWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyMzRBOThB
MjFFODg4M0UwMDNDOTg0RCAvKiBXSExTTE5hbWVSZXNvbHZlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXSExTTE5hbWVSZXNvbHZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUMyMzRBOThDMjFFODg4M0UwMDNDOTg0RCAvKiBXSExTTE5hbWVSZXNvbHZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXSExTTE5hbWVSZXNvbHZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlDMjM0QTk4RDIxRTg4ODg0MDAzQzk4NEQgLyogV0hMU0xOYW1lQ29udGV4dC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXSExTTE5hbWVDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEzMzQ2LDEwICsxMzM1NCw2IEBACiAJCUMyMzRBOUI1MjFFOTJDMjMwMDNDOTg0
RCAvKiBXSExTTFN5bnRoZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0hMU0xTeW50aGVzaXplU3RydWN0dXJlQWNjZXNzb3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUMyMzRBOUI2MjFFOTJDQzAwMDNDOTg0RCAvKiBXSExTTEludHJpbnNpY3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMyMzRBOUI3MjFFOTJDQzEwMDNDOTg0RCAvKiBXSExTTEludHJpbnNpY3MuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xJbnRyaW5zaWNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQzIxREYyRTcxRDlFNEU5OTAwRjVCMjRDIC8qIENTU0ZvbnRWYXJpYXRpb25W
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NGb250VmFy
aWF0aW9uVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDMjFERjJFODFE
OUU0RTk5MDBGNUIyNEMgLyogQ1NTRm9udFZhcmlhdGlvblZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENTU0ZvbnRWYXJpYXRpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlDMjM0QTk4NTIxRTg4NkE5MDAzQzk4NEQgLyogV0hMU0xWaXNpdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdITFNMVmlzaXRvci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUMyMzRBOTg3MjFFODg2QUQwMDNDOTg0RCAvKiBXSExTTFZpc2l0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUMyNDU4RTYxMUZFODk3OUUwMDU5NDc1OSAvKiBGb250Q2FjaGVDb3JlVGV4dC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGb250Q2FjaGVDb3JlVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlDMjYwMTdBMTFDNzJEQzk5MDBGNzRBMTYgLyogQ1NTRm9udEZhY2VTZXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTRm9udEZhY2VTZXQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMjYwMTdBMjFDNzJEQzk5MDBGNzRBMTYgLyog
Q1NTRm9udEZhY2VTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTRm9u
dEZhY2VTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NDE1LDYgKzI1NDE5
LDEwIEBACiAJCQkJQzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5IC8qIEFTVCAqLywKIAkJCQlDMjM0
QTlCMjIxRTkyQzFGMDAzQzk4NEQgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAg
Ki8sCiAJCQkJQzIzNEE5QUUyMUU5MkMxQTAwM0M5ODREIC8qIFdITFNMQ2hlY2tEdXBsaWNhdGVG
dW5jdGlvbnMuaCAqLywKKwkJCQkxQzg0MEI5QjIxRUM0MDA5MDBEMDUwMEQgLyogV0hMU0xDaGVj
a2VyLmNwcCAqLywKKwkJCQkxQzg0MEI5NzIxRUM0MDA3MDBEMDUwMEQgLyogV0hMU0xDaGVja2Vy
LmggKi8sCisJCQkJMUM4NDBCOTkyMUVDNDAwODAwRDA1MDBEIC8qIFdITFNMR2F0aGVyRW50cnlQ
b2ludEl0ZW1zLmNwcCAqLywKKwkJCQkxQzg0MEI5QTIxRUM0MDA5MDBEMDUwMEQgLyogV0hMU0xH
YXRoZXJFbnRyeVBvaW50SXRlbXMuaCAqLywKIAkJCQlDMjM0QTk5QTIxRTkwRjU2MDAzQzk4NEQg
LyogV0hMU0xJbmZlclR5cGVzLmNwcCAqLywKIAkJCQlDMjM0QTk5QjIxRTkwRjU3MDAzQzk4NEQg
LyogV0hMU0xJbmZlclR5cGVzLmggKi8sCiAJCQkJQzIzNEE5QjcyMUU5MkNDMTAwM0M5ODREIC8q
IFdITFNMSW50cmluc2ljcy5jcHAgKi8sCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359122</attachid>
            <date>2019-01-14 20:12:12 -0800</date>
            <delta_ts>2019-01-14 20:12:12 -0800</delta_ts>
            <desc>Patch for committing</desc>
            <filename>bug-193080-20190114201212.patch</filename>
            <type>text/plain</type>
            <size>82681</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5OTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDIxMjY0NDkwODFiNGMx
MjI2YjM3OTQxNTgyMmUwMDExMDYxMDE1ZS4uNjMxYzIxMmQxZjQyNDY5NDlkN2I3ZmVmMDRmZTdl
NjEzMTgzNmQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDE5LTAxLTE0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBJ
bXBsZW1lbnQgdGhlIFR5cGUgQ2hlY2tlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkzMDgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBhIHRyYW5zbGF0aW9uIG9mIGh0dHBzOi8vZ2l0aHVi
LmNvbS9ncHV3ZWIvV0hMU0wvYmxvYi9tYXN0ZXIvU291cmNlL0NoZWNrZXIubWpzIGludG8gQysr
LgorCisgICAgICAgIFRoZSBDaGVja2VyIHBhc3NlcyB0eXBlcyBiZXR3ZWVuIG5lc3RlZCBleHBy
ZXNzaW9ucy4gQW4gaW5uZXIgZXhwcmVzc2lvbiBmaWd1cmVzIG91dCB3aGF0IHR5cGUgaXQgaXMs
IGFuZAorICAgICAgICBwYXNzZXMgdGhhdCBpbmZvcm1hdGlvbiB1cCB0byBhbiBvdXRlciBleHBy
ZXNzaW9uLiBUaGlzIGlzIGRvbmUgdmlhIHJlYWRpbmcvd3JpdGluZyBpbnRvIGEgSGFzaE1hcCwK
KyAgICAgICAgYmVjYXVzZSBhbGwgdGhlIHR5cGUgaW5mb3JtYXRpb24gbmVlZHMgdG8gYmUgc2F2
ZWQgc28gdGhhdCB0aGUgTWV0YWwgY29kZWdlbiBjYW4gZW1pdCB0aGUgY29ycmVjdCB0eXBlcy4K
KworICAgICAgICBUaGVzZSB0eXBlcyBjYW4gaGF2ZSB0d28gZm9ybXM6IEEgcmVndWxhciB0eXBl
IChsaWtlICJpbnRbXSIpIG9yIGEgUmVzb2x2YWJsZVR5cGUuIFJlc29sdmFibGVUeXBlcworICAg
ICAgICByZXByZXNlbnQgbGl0ZXJhbHMsIHNpbmNlIGEgbGl0ZXJhbCBuZWVkcyB0byBrbm93IGl0
cyBjb250ZXh0IGJlZm9yZSBpdCBrbm93cyB3aGF0IHR5cGUgaXQgc2hvdWxkIGJlLiBTbywKKyAg
ICAgICAgaWYgeW91IGhhdmUgYSBmdW5jdGlvbiBsaWtlICJ2b2lkIGZvbyhpbnQgeCkiIGFuZCB5
b3UgaGF2ZSBhIGNhbGwgbGlrZSAiZm9vKDMpIiwgdGhlIDMncyBSZXNvbHZhYmxlVHlwZQorICAg
ICAgICBnZXRzIHBhc3NlZCB0byB0aGUgQ2FsbEV4cHJlc3Npb24sIHdoaWNoIHRoZW4gdW5pZmll
cyBpdCB3aXRoIHRoZSBmdW5jdGlvbidzIHBhcmFtZXRlciB0eXBlLCB0aGVyZWJ5CisgICAgICAg
IHJlc29sdmluZyB0aGUgMyB0byBiZSBhbiBpbnQuCisKKyAgICAgICAgVGhlcmUgYXJlIGEgZmV3
IGV4YW1wbGVzIHdoZXJlIG11bHRpcGxlIGV4cHJlc3Npb25zIHdpbGwgaGF2ZSB0aGUgc2FtZSB0
eXBlOiAicmV0dXJuIChmb28sIDMpLiIgSWYgdGhvc2UKKyAgICAgICAgdHlwZXMgYXJlIHJlZ3Vs
YXIgdHlwZXMsIHRoZW4gaXQncyBubyBwcm9ibGVtOyB3ZSBjYW4ganVzdCBjbG9uZSgpIHRoZSB0
eXBlIGFuZCBzdGljayBib3RoIGluIHRoZSBIYXNoTWFwLgorICAgICAgICBIb3dldmVyLCBpZiB0
aGUgdHlwZSBpcyBhIFJlc29sdmFibGVUeXBlLCBhbiBvdXRlciBleHByZXNzaW9uIHdpbGwgb25s
eSByZXNvbHZlIHRoYXQgdHlwZSBvbmNlLCBzbyB0aGUgdHdvCisgICAgICAgIFJlc29sdmFibGVU
eXBlcyBjYW4ndCBiZSBkaXN0aW5jdC4gVGhlIENoZWNrZXIgc29sdmVzIHRoaXMgcHJvYmxlbSBi
eSBtYWtpbmcgYSByZWZlcmVuY2UtY291bnRlZCB3cmFwcGVyCisgICAgICAgIGFyb3VuZCBSZXNv
bHZhYmxlVHlwZXMgYW5kIHVzaW5nIHRoYXQgaW4gdGhlIEhhc2hNYXAgaW5zdGVhZC4KKworICAg
ICAgICBPbmNlIGFsbCB0aGUgUmVzb2x2YWJsZVR5cGVzIGhhdmUgYmVlbiByZXNvbHZlZCwgYSBz
ZWNvbmQgcGFzcyBydW5zIHRocm91Z2ggdGhlIGVudGlyZSBIYXNoTWFwIGFuZCBhc3NpZ25zCisg
ICAgICAgIHRoZSBrbm93biB0eXBlcyB0byBhbGwgdGhlIGV4cHJlc3Npb25zLiBMVmFsdWVzIGFu
ZCB0aGVpciBhc3NvY2lhdGVkIGFkZHJlc3Mgc3BhY2VzIGFyZSBoZWxkIGluIGEgcGFyYWxsZWwK
KyAgICAgICAgSGFzaE1hcCwgYW5kIGFyZSBhc3NpZ25lZCB0byB0aGUgZXhwcmVzc2lvbiBhdCB0
aGUgc2FtZSB0aW1lLiBUaGUgdHlwZSBpcyBhbiBPcHRpb25hbDxBZGRyZXNzU3BhY2U+IGJlY2F1
c2UKKyAgICAgICAgYWRkcmVzcyBzcGFjZXMgYXJlIG9ubHkgcmVsZXZhbnQgaWYgdGhlIHZhbHVl
IGlzIGFuIGx2YWx1ZTsgaWYgaXQncyBudWxsb3B0IHRoZW4gdGhhdCBtZWFucyB0aGUgZXhwcmVz
c2lvbgorICAgICAgICBpcyBhbiBydmFsdWUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGJlY2F1
c2UgaXQgaXNuJ3QgaG9va2VkIHVwIHlldC4gTm90IGVub3VnaCBvZiB0aGUgY29tcGlsZXIgZXhp
c3RzIHRvIGhhdmUgYW55IG1lYW5pbmdmdWwgc29ydAorICAgICAgICBvZiB0ZXN0LiBXaGVuIGVu
b3VnaCBvZiB0aGUgY29tcGlsZXIgaXMgcHJlc2VudCwgSSdsbCBwb3J0IHRoZSByZWZlcmVuY2Ug
aW1wbGVtZW50YXRpb24ncyB0ZXN0IHN1aXRlLgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xDaGVja2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
cmVzb2x2ZVdpdGhPcGVyYXRvckFuZGVySW5kZXhlcik6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6cmVzb2x2ZVdpdGhPcGVyYXRvckxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
cmVzb2x2ZVdpdGhSZWZlcmVuY2VDb21wYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpyZXNvbHZlQnlJbnN0YW50aWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpjaGVj
a1NlbWFudGljcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Y2hlY2tPcGVyYXRvck92ZXJs
b2FkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpDaGVja2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6Q2hlY2tlcjo6YXNzaWduVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNo
ZWNrZXI6OmNoZWNrU2hhZGVyVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6bWF0Y2hB
bmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OnJlY3Vyc2VBbmRH
ZXRJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjpnZXRJbmZvKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpDaGVja2VyOjphc3NpZ25UeXBlKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpDaGVja2VyOjpmb3J3YXJkVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6Z2V0VW5uYW1lZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6
OmZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OkNoZWNrZXI6OnJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkNoZWNrZXI6OmlzQm9vbFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkNoZWNr
ZXI6OnJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OmNoZWNrKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuaDog
QWRkZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBv
aW50SXRlbXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpHYXRoZXJlcjo6
R2F0aGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkdhdGhlcmVyOjpyZXNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6R2F0aGVyZXI6OnRha2VFbnRyeVBvaW50SXRlbXMpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkdhdGhlcmVyOjp2aXNpdCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6Z2F0aGVyRW50cnlQb2ludEl0ZW1zKToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpFbnRyeVBvaW50SXRlbTo6RW50cnlQb2ludEl0ZW0pOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKwogMjAxOS0wMS0xNCAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KIAog
ICAgICAgICBJbmRleGVkREI6IFdoZW4gZGVsZXRpbmcgZGF0YWJhc2VzLCBzb21lIG9wZW4gZGF0
YWJhc2VzIG1pZ2h0IGJlIG1pc3NlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE4ZTIwMmJjYTkwMzQ4
MDE2NzNkNTFlY2RjZDllZmZkNjhmMmZiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKQEAgLTAsMCArMSwxNDc0
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
Y2tlci5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQXJyYXlSZWZl
cmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExT
TEFzc2lnbm1lbnRFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xDYWxsRXhwcmVzc2lvbi5o
IgorI2luY2x1ZGUgIldITFNMQ29tbWFFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xEZXJl
ZmVyZW5jZUV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXSExTTERvV2hpbGVMb29wLmgiCisjaW5j
bHVkZSAiV0hMU0xEb3RFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xGb3JMb29wLmgiCisj
aW5jbHVkZSAiV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCIKKyNpbmNsdWRlICJXSExTTElm
U3RhdGVtZW50LmgiCisjaW5jbHVkZSAiV0hMU0xJbmRleEV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJXSExTTEluZmVyVHlwZXMuaCIKKyNpbmNsdWRlICJXSExTTExvZ2ljYWxFeHByZXNzaW9uLmgi
CisjaW5jbHVkZSAiV0hMU0xMb2dpY2FsTm90RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNM
TWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMTWFrZVBvaW50
ZXJFeHByZXNzaW9uLmgiCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2luY2x1ZGUg
IldITFNMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldITFNMUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lv
bi5oIgorI2luY2x1ZGUgIldITFNMUmVzb2x2YWJsZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTFJl
c29sdmVPdmVybG9hZEltcGwuaCIKKyNpbmNsdWRlICJXSExTTFJlc29sdmluZ1R5cGUuaCIKKyNp
bmNsdWRlICJXSExTTFJldHVybi5oIgorI2luY2x1ZGUgIldITFNMU3dpdGNoU3RhdGVtZW50Lmgi
CisjaW5jbHVkZSAiV0hMU0xUZXJuYXJ5RXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIldITFNMVmlz
aXRvci5oIgorI2luY2x1ZGUgIldITFNMV2hpbGVMb29wLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUE9EQ2hl
Y2tlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBQT0RDaGVja2VyKCkgPSBkZWZh
dWx0OworCisgICAgdmlydHVhbCB+UE9EQ2hlY2tlcigpID0gZGVmYXVsdDsKKworICAgIHZvaWQg
dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KGVudW1lcmF0aW9uRGVmaW5p
dGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biYgbmF0aXZlVHlwZURlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFu
YXRpdmVUeXBlRGVjbGFyYXRpb24uaXNOdW1iZXIoKQorICAgICAgICAgICAgJiYgIW5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi5pc1ZlY3RvcigpCisgICAgICAgICAgICAmJiAhbmF0aXZlVHlwZURlY2xh
cmF0aW9uLmlzTWF0cml4KCkpCisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgIH0KKworICAg
IHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9u
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQoc3RydWN0dXJlRGVmaW5p
dGlvbik7CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVEZWZpbml0aW9uJiB0eXBl
RGVmaW5pdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0KHR5cGVE
ZWZpbml0aW9uKTsKKyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6QXJyYXlUeXBlJiBhcnJh
eVR5cGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBWaXNpdG9yOjp2aXNpdChhcnJheVR5cGUp
OworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpQb2ludGVyVHlwZSYpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBzZXRFcnJvcigpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpB
cnJheVJlZmVyZW5jZVR5cGUmKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgc2V0RXJyb3IoKTsK
KyAgICB9CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZVJlZmVyZW5jZSYgdHlwZVJlZmVyZW5j
ZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCh0eXBlUmVmZXJlbmNlLnJlc29sdmVk
VHlwZSgpKTsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KCp0eXBlUmVmZXJlbmNlLnJlc29s
dmVkVHlwZSgpKTsKKyAgICB9Cit9OworCitzdGF0aWMgQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uIHJlc29sdmVXaXRoT3BlcmF0b3JBbmRlckluZGV4ZXIoQVNUOjpDYWxsRXhwcmVzc2lv
biYgY2FsbEV4cHJlc3Npb24sIEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlJiBmaXJzdEFyZ3VtZW50
LCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQoreworICAgIGNvbnN0IGJvb2wgaXNSZXN0
cmljdGVkID0gZmFsc2U7CisgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKKyAgICBh
dXRvIHJldHVyblR5cGUgPSBtYWtlVW5pcXVlUmVmPEFTVDo6UG9pbnRlclR5cGU+KExleGVyOjpU
b2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGZpcnN0QXJndW1lbnQuYWRkcmVzc1NwYWNl
KCksIGZpcnN0QXJndW1lbnQuZWxlbWVudFR5cGUoKS5jbG9uZSgpKTsKKyAgICBBU1Q6OlZhcmlh
YmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpW
YXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSks
IEFTVDo6UXVhbGlmaWVycygpLCB7IGZpcnN0QXJndW1lbnQuY2xvbmUoKSB9LCBTdHJpbmcoKSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGVuZChBU1Q6
OlZhcmlhYmxlRGVjbGFyYXRpb24oTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigp
KSwgQVNUOjpRdWFsaWZpZXJzKCksIHsgQVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpU
b2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJpbnNpY3MudWludFR5cGUoKSkgfSwg
U3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0KSk7CisgICAgcmV0dXJuIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbihBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oTGV4ZXI6
OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgQVNUOjpBdHRyaWJ1dGVCbG9jaygpLCBX
VEY6Om51bGxvcHQsIFdURk1vdmUocmV0dXJuVHlwZSksIFN0cmluZygib3BlcmF0b3ImW10iLCBT
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RGOjpu
dWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKK30KKworc3RhdGljIEFTVDo6TmF0
aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3RoKEFTVDo6Q2Fs
bEV4cHJlc3Npb24mIGNhbGxFeHByZXNzaW9uLCBBU1Q6OlVubmFtZWRUeXBlJiBmaXJzdEFyZ3Vt
ZW50LCBjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzKQoreworICAgIGNvbnN0IGJvb2wgaXNS
ZXN0cmljdGVkID0gZmFsc2U7CisgICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKKyAg
ICBhdXRvIHJldHVyblR5cGUgPSBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2Vu
KGNhbGxFeHByZXNzaW9uLm9yaWdpbigpKSwgaW50cmluc2ljcy51aW50VHlwZSgpKTsKKyAgICBB
U1Q6OlZhcmlhYmxlRGVjbGFyYXRpb25zIHBhcmFtZXRlcnM7CisgICAgcGFyYW1ldGVycy5hcHBl
bmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5v
cmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IGZpcnN0QXJndW1lbnQuY2xvbmUoKSB9LCBT
dHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQpKTsKKyAgICByZXR1cm4gQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdU
Rjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwgU3RyaW5nKCJvcGVyYXRvci5sZW5ndGgi
LCBTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKSwgV1RGTW92ZShwYXJhbWV0ZXJzKSwgV1RG
OjpudWxsb3B0LCBpc09wZXJhdG9yKSwgaXNSZXN0cmljdGVkKTsKK30KKworc3RhdGljIEFTVDo6
TmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbiByZXNvbHZlV2l0aFJlZmVyZW5jZUNvbXBhcmF0b3Io
QVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUmIGZpcnN0
QXJndW1lbnQsIFJlc29sdmluZ1R5cGUmIHNlY29uZEFyZ3VtZW50LCBjb25zdCBJbnRyaW5zaWNz
JiBpbnRyaW5zaWNzKQoreworICAgIGNvbnN0IGJvb2wgaXNSZXN0cmljdGVkID0gZmFsc2U7Cisg
ICAgY29uc3QgYm9vbCBpc09wZXJhdG9yID0gdHJ1ZTsKKyAgICBhdXRvIHJldHVyblR5cGUgPSBB
U1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGNhbGxFeHByZXNzaW9uLm9yaWdp
bigpKSwgaW50cmluc2ljcy5ib29sVHlwZSgpKTsKKyAgICBhdXRvIGFyZ3VtZW50VHlwZSA9IFdU
Rjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4m
IHVubmFtZWRUeXBlKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICBy
ZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7CisgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlw
ZVJlZmVyZW5jZT4mKSAtPiBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4geworICAgICAgICBy
ZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFt
ZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+IFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiB7Cisg
ICAgICAgICAgICByZXR1cm4gdW5uYW1lZFR5cGUtPmNsb25lKCk7CisgICAgICAgIH0sIFsmXShS
ZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JikgLT4gVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5
cGU+IHsKKyAgICAgICAgICAgIC8vIFdlIGVuY291bnRlcmVkICJudWxsID09IG51bGwiLgorICAg
ICAgICAgICAgLy8gVGhlIHR5cGUgaXNuJ3Qgb2JzZXJ2YWJsZSwgc28gd2UgY2FuIHBpY2sgd2hh
dGV2ZXIgd2Ugd2FudC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBi
ZSBnZW5lcmFsaXplZCwgdXNpbmcgdGhlICJwcmVmZXJyZWQgdHlwZSIgaW5mcmFzdHJ1Y3R1cmUg
dXNlZCBieSBnZW5lcmljIGxpdGVyYWxzCisgICAgICAgICAgICByZXR1cm4gQVNUOjpUeXBlUmVm
ZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIGludHJp
bnNpY3MuaW50VHlwZSgpKTsKKyAgICAgICAgfSksIHNlY29uZEFyZ3VtZW50KTsKKyAgICB9KSwg
Zmlyc3RBcmd1bWVudCk7CisgICAgQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9ucyBwYXJhbWV0ZXJz
OworICAgIHBhcmFtZXRlcnMuYXBwZW5kKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbihMZXhlcjo6
VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBBU1Q6OlF1YWxpZmllcnMoKSwgeyBhcmd1
bWVudFR5cGUtPmNsb25lKCkgfSwgU3RyaW5nKCksIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0
KSk7CisgICAgcGFyYW1ldGVycy5hcHBlbmQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKExleGVy
OjpUb2tlbihjYWxsRXhwcmVzc2lvbi5vcmlnaW4oKSksIEFTVDo6UXVhbGlmaWVycygpLCB7IFdU
Rk1vdmUoYXJndW1lbnRUeXBlKSB9LCBTdHJpbmcoKSwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQpKTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uKEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbihMZXhlcjo6VG9rZW4oY2FsbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBB
U1Q6OkF0dHJpYnV0ZUJsb2NrKCksIFdURjo6bnVsbG9wdCwgV1RGTW92ZShyZXR1cm5UeXBlKSwg
U3RyaW5nKCJvcGVyYXRvcj09IiwgU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCksIFdURk1v
dmUocGFyYW1ldGVycyksIFdURjo6bnVsbG9wdCwgaXNPcGVyYXRvciksIGlzUmVzdHJpY3RlZCk7
Cit9CisKK3N0YXRpYyBPcHRpb25hbDxBU1Q6Ok5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24+IHJl
c29sdmVCeUluc3RhbnRpYXRpb24oQVNUOjpDYWxsRXhwcmVzc2lvbiYgY2FsbEV4cHJlc3Npb24s
IGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgdHlw
ZXMsIGNvbnN0IEludHJpbnNpY3MmIGludHJpbnNpY3MpCit7CisgICAgaWYgKGNhbGxFeHByZXNz
aW9uLm5hbWUoKSA9PSAib3BlcmF0b3ImW10iICYmIHR5cGVzLnNpemUoKSA9PSAyKSB7CisgICAg
ICAgIGF1dG8qIGZpcnN0QXJndW1lbnRBcnJheVJlZiA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlz
aXRvcihbXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBBU1Q6
OkFycmF5UmVmZXJlbmNlVHlwZSogeworICAgICAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZl
cmVuY2VUeXBlPihzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5cGUpKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBl
PihzdGF0aWNfY2FzdDxBU1Q6OlVubmFtZWRUeXBlJj4odW5uYW1lZFR5cGUpKTsKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9LCBbXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZl
cmVuY2U+JikgLT4gQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUqIHsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9KSwgdHlwZXNbMF0uZ2V0KCkpOworICAgICAgICBib29sIHNl
Y29uZEFyZ3VtZW50SXNVaW50ID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHVubmFtZWRUeXBlKSAtPiBib29sIHsKKyAgICAgICAg
ICAgIHJldHVybiBtYXRjaGVzKHVubmFtZWRUeXBlLCBpbnRyaW5zaWNzLnVpbnRUeXBlKCkpOwor
ICAgICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAgICAgICAgICAgcmV0dXJuIHJlc29sdmFibGVUeXBl
UmVmZXJlbmNlLT5yZXNvbHZhYmxlVHlwZSgpLmNhblJlc29sdmUoaW50cmluc2ljcy51aW50VHlw
ZSgpKTsKKyAgICAgICAgfSksIHR5cGVzWzFdLmdldCgpKTsKKyAgICAgICAgaWYgKGZpcnN0QXJn
dW1lbnRBcnJheVJlZiAmJiBzZWNvbmRBcmd1bWVudElzVWludCkKKyAgICAgICAgICAgIHJldHVy
biByZXNvbHZlV2l0aE9wZXJhdG9yQW5kZXJJbmRleGVyKGNhbGxFeHByZXNzaW9uLCAqZmlyc3RB
cmd1bWVudEFycmF5UmVmLCBpbnRyaW5zaWNzKTsKKyAgICB9IGVsc2UgaWYgKGNhbGxFeHByZXNz
aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IubGVuZ3RoIiAmJiB0eXBlcy5zaXplKCkgPT0gMSkgewor
ICAgICAgICBhdXRvKiBmaXJzdEFyZ3VtZW50UmVmZXJlbmNlID0gV1RGOjp2aXNpdChXVEY6Om1h
a2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5cGUpIC0+
IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVmZXJl
bmNlVHlwZT4oc3RhdGljX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSY+KHVubmFtZWRUeXBlKSkgfHwg
aXM8QVNUOjpBcnJheVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVk
VHlwZSkpKQorICAgICAgICAgICAgICAgIHJldHVybiAmdW5uYW1lZFR5cGU7CisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJl
bmNlPiYpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICB9KSwgdHlwZXNbMF0uZ2V0KCkpOworICAgICAgICBpZiAoZmlyc3RBcmd1bWVu
dFJlZmVyZW5jZSkKKyAgICAgICAgICAgIHJldHVybiByZXNvbHZlV2l0aE9wZXJhdG9yTGVuZ3Ro
KGNhbGxFeHByZXNzaW9uLCAqZmlyc3RBcmd1bWVudFJlZmVyZW5jZSwgaW50cmluc2ljcyk7Cisg
ICAgfSBlbHNlIGlmIChjYWxsRXhwcmVzc2lvbi5uYW1lKCkgPT0gIm9wZXJhdG9yPT0iICYmIHR5
cGVzLnNpemUoKSA9PSAyKSB7CisgICAgICAgIGF1dG8gaXNBY2NlcHRhYmxlID0gW10oUmVzb2x2
aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICByZXR1cm4gV1RG
Ojp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFtdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYg
dW5uYW1lZFR5cGUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBpczxBU1Q6OlJl
ZmVyZW5jZVR5cGU+KHN0YXRpY19jYXN0PEFTVDo6VW5uYW1lZFR5cGUmPih1bm5hbWVkVHlwZSkp
OworICAgICAgICAgICAgfSwgW10oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2
YWJsZVR5cGVSZWZlcmVuY2UpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIHJldHVybiBpczxB
U1Q6Ok51bGxMaXRlcmFsVHlwZT4ocmVzb2x2YWJsZVR5cGVSZWZlcmVuY2UtPnJlc29sdmFibGVU
eXBlKCkpOworICAgICAgICAgICAgfSksIHJlc29sdmluZ1R5cGUpOworICAgICAgICB9OworICAg
ICAgICBpZiAoaXNBY2NlcHRhYmxlKHR5cGVzWzBdLmdldCgpKSAmJiBpc0FjY2VwdGFibGUodHlw
ZXNbMV0uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVXaXRoUmVmZXJlbmNlQ29t
cGFyYXRvcihjYWxsRXhwcmVzc2lvbiwgdHlwZXNbMF0uZ2V0KCksIHR5cGVzWzFdLmdldCgpLCBp
bnRyaW5zaWNzKTsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RhdGlj
IGJvb2wgY2hlY2tTZW1hbnRpY3MoVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaW5wdXRJdGVtcywg
VmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgb3V0cHV0SXRlbXMsIGNvbnN0IE9wdGlvbmFsPEFTVDo6
RW50cnlQb2ludFR5cGU+JiBlbnRyeVBvaW50VHlwZSwgY29uc3QgSW50cmluc2ljcyYgaW50cmlu
c2ljcykKK3sKKyAgICB7CisgICAgICAgIGF1dG8gY2hlY2tEdXBsaWNhdGVTZW1hbnRpY3MgPSBb
Jl0oY29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYgaXRlbXMpIC0+IGJvb2wgeworICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGogPSBpICsgMTsgaiA8IGl0ZW1zLnNpemUoKTsgKytqKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtc1tpXS5zZW1hbnRpYyA9PSBpdGVtc1tqXS5z
ZW1hbnRpYykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfTsKKyAgICAgICAgaWYgKCFjaGVja0R1cGxpY2F0ZVNlbWFudGljcyhpbnB1dEl0ZW1zKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFjaGVja0R1cGxpY2F0ZVNl
bWFudGljcyhvdXRwdXRJdGVtcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgeworICAgICAgICBhdXRvIGNoZWNrU2VtYW50aWNUeXBlcyA9IFsmXShjb25zdCBWZWN0
b3I8RW50cnlQb2ludEl0ZW0+JiBpdGVtcykgLT4gYm9vbCB7CisgICAgICAgICAgICBmb3IgKGF1
dG8mIGl0ZW0gOiBpdGVtcykgeworICAgICAgICAgICAgICAgIGF1dG8gYWNjZXB0YWJsZSA9IFdU
Rjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oY29uc3QgQVNUOjpCYXNlU2VtYW50aWMmIHNl
bWFudGljKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbWFudGljLmlz
QWNjZXB0YWJsZVR5cGUoaXRlbS51bm5hbWVkVHlwZSwgaW50cmluc2ljcyk7CisgICAgICAgICAg
ICAgICAgfSksIGl0ZW0uc2VtYW50aWMpOworICAgICAgICAgICAgICAgIGlmICghYWNjZXB0YWJs
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07CisgICAgICAgIGlmICghY2hlY2tTZW1h
bnRpY1R5cGVzKGlucHV0SXRlbXMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAoIWNoZWNrU2VtYW50aWNUeXBlcyhvdXRwdXRJdGVtcykpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgeworICAgICAgICBhdXRvIGNoZWNrU2VtYW50aWNGb3JT
aGFkZXJUeXBlID0gWyZdKGNvbnN0IFZlY3RvcjxFbnRyeVBvaW50SXRlbT4mIGl0ZW1zLCBBU1Q6
OkJhc2VTZW1hbnRpYzo6U2hhZGVySXRlbURpcmVjdGlvbiBkaXJlY3Rpb24pIC0+IGJvb2wgewor
ICAgICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRlbXMpIHsKKyAgICAgICAgICAgICAgICBh
dXRvIGFjY2VwdGFibGUgPSBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKGNvbnN0IEFT
VDo6QmFzZVNlbWFudGljJiBzZW1hbnRpYykgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzZW1hbnRpYy5pc0FjY2VwdGFibGVGb3JTaGFkZXJJdGVtRGlyZWN0aW9uKGRpcmVj
dGlvbiwgZW50cnlQb2ludFR5cGUpOworICAgICAgICAgICAgICAgIH0pLCBpdGVtLnNlbWFudGlj
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWFjY2VwdGFibGUpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9OworICAgICAgICBpZiAoIWNoZWNrU2VtYW50aWNGb3JTaGFkZXJUeXBlKGlucHV0
SXRlbXMsIEFTVDo6QmFzZVNlbWFudGljOjpTaGFkZXJJdGVtRGlyZWN0aW9uOjpJbnB1dCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghY2hlY2tTZW1hbnRpY0ZvclNo
YWRlclR5cGUob3V0cHV0SXRlbXMsIEFTVDo6QmFzZVNlbWFudGljOjpTaGFkZXJJdGVtRGlyZWN0
aW9uOjpPdXRwdXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHsK
KyAgICAgICAgYXV0byBjaGVja1BPRERhdGEgPSBbJl0oY29uc3QgVmVjdG9yPEVudHJ5UG9pbnRJ
dGVtPiYgaXRlbXMpIC0+IGJvb2wgeworICAgICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogaXRl
bXMpIHsKKyAgICAgICAgICAgICAgICBQT0RDaGVja2VyIHBvZENoZWNrZXI7CisgICAgICAgICAg
ICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5cGU+KGl0ZW0udW5uYW1lZFR5cGUpKQorICAgICAg
ICAgICAgICAgICAgICBwb2RDaGVja2VyLmNoZWNrRXJyb3JBbmRWaXNpdChkb3duY2FzdDxBU1Q6
OlBvaW50ZXJUeXBlPihpdGVtLnVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpKTsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4oaXRlbS51bm5hbWVk
VHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tFcnJvckFuZFZpc2l0
KGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPihpdGVtLnVubmFtZWRUeXBlKS5lbGVt
ZW50VHlwZSgpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpczxBU1Q6OkFycmF5VHlwZT4o
aXRlbS51bm5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHBvZENoZWNrZXIuY2hlY2tF
cnJvckFuZFZpc2l0KGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPihpdGVtLnVubmFtZWRUeXBlKS50
eXBlKCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgaWYgKHBvZENoZWNrZXIuZXJyb3IoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH07CisgICAgICAgIGlmICghY2hlY2tQT0REYXRhKGlucHV0SXRlbXMp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWNoZWNrUE9ERGF0YShv
dXRwdXRJdGVtcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGNoZWNrT3BlcmF0b3JPdmVybG9hZChjb25zdCBB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uLCBjb25zdCBJbnRyaW5z
aWNzJiBpbnRyaW5zaWNzLCBOYW1lQ29udGV4dCYgbmFtZUNvbnRleHQpCit7CisgICAgZW51bSBj
bGFzcyBDaGVja0tpbmQgeworICAgICAgICBJbmRleCwKKyAgICAgICAgRG90CisgICAgfTsKKwor
ICAgIGF1dG8gY2hlY2tHZXR0ZXIgPSBbJl0oQ2hlY2tLaW5kIGtpbmQpIC0+IGJvb2wgeworICAg
ICAgICBzaXplX3QgbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzID0ga2luZCA9PSBDaGVja0tpbmQ6Oklu
ZGV4ID8gMiA6IDE7CisgICAgICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygp
LnNpemUoKSAhPSBudW1FeHBlY3RlZFBhcmFtZXRlcnMpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGF1dG8mIGZpcnN0UGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRl
ZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICBp
ZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RQYXJhbWV0ZXJVbmlmeU5vZGUpKSB7CisgICAg
ICAgICAgICBhdXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KGZp
cnN0UGFyYW1ldGVyVW5pZnlOb2RlKTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OlBvaW50ZXJU
eXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRU
eXBlKSB8fCBpczxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoa2luZCA9PSBDaGVja0tpbmQ6
OkluZGV4KSB7CisgICAgICAgICAgICBhdXRvJiBzZWNvbmRQYXJhbWV0ZXJVbmlmeU5vZGUgPSAo
KmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMV0udHlwZSgpKS0+dW5pZnlOb2RlKCk7
CisgICAgICAgICAgICBpZiAoIWlzPEFTVDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJVbmlm
eU5vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGF1dG8m
IG5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihzZWNvbmRQYXJhbWV0ZXJVbmlm
eU5vZGUpOworICAgICAgICAgICAgaWYgKCFpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4o
bmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBh
dXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5cGVEZWNs
YXJhdGlvbj4obmFtZWRUeXBlKTsKKyAgICAgICAgICAgIGlmICghbmF0aXZlVHlwZURlY2xhcmF0
aW9uLmlzSW50KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH07CisKKyAgICBhdXRvIGNoZWNrU2V0dGVyID0gWyZd
KENoZWNrS2luZCBraW5kKSAtPiBib29sIHsKKyAgICAgICAgc2l6ZV90IG51bUV4cGVjdGVkUGFy
YW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCA/IDMgOiAyOworICAgICAgICBpZiAo
ZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJh
bWV0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBhdXRvJiBmaXJzdEFy
Z3VtZW50VW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5
cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4oZmly
c3RBcmd1bWVudFVuaWZ5Tm9kZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0g
ZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4oZmlyc3RBcmd1bWVudFVuaWZ5Tm9kZSk7CisgICAg
ICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpIHx8IGlzPEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkgfHwgaXM8QVNUOjpBcnJheVR5cGU+KHVu
bmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRleCkgeworICAgICAgICAgICAgYXV0byYg
c2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlID0gKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVy
cygpWzFdLnR5cGUoKSktPnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgaWYgKCFpczxBU1Q6Ok5h
bWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBhdXRvJiBuYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6Ok5h
bWVkVHlwZT4oc2Vjb25kUGFyYW1ldGVyVW5pZnlOb2RlKTsKKyAgICAgICAgICAgIGlmICghaXM8
QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYXV0byYgbmF0aXZlVHlwZURlY2xhcmF0aW9uID0g
ZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSk7CisgICAgICAg
ICAgICBpZiAoIW5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc0ludCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1hdGNoZXMoZnVuY3Rpb25E
ZWZpbml0aW9uLnR5cGUoKSwgKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbMF0udHlw
ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYXV0byYgdmFsdWVUeXBl
ID0gKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKClbbnVtRXhwZWN0ZWRQYXJhbWV0ZXJz
IC0gMV0udHlwZSgpOworICAgICAgICBhdXRvIGdldHRlck5hbWUgPSBmdW5jdGlvbkRlZmluaXRp
b24ubmFtZSgpLnN1YnN0cmluZygwLCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpLmxlbmd0aCgp
IC0gMSk7CisgICAgICAgIGF1dG8qIGdldHRlckZ1bmNzID0gbmFtZUNvbnRleHQuZ2V0RnVuY3Rp
b25zKGdldHRlck5hbWUpOworICAgICAgICBpZiAoIWdldHRlckZ1bmNzKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBWZWN0b3I8UmVzb2x2aW5nVHlwZT4gYXJndW1lbnRUeXBl
czsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+
IGFyZ3VtZW50VHlwZVJlZmVyZW5jZXM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtRXhwZWN0ZWRQYXJhbWV0ZXJzIC0gMTsgKytpKQorICAgICAgICAgICAgYXJndW1lbnRUeXBl
cy5hcHBlbmQoKCpmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSktPmNs
b25lKCkpOworICAgICAgICBmb3IgKGF1dG8mIGFyZ3VtZW50VHlwZSA6IGFyZ3VtZW50VHlwZXMp
CisgICAgICAgICAgICBhcmd1bWVudFR5cGVSZWZlcmVuY2VzLmFwcGVuZChhcmd1bWVudFR5cGUp
OworICAgICAgICBPcHRpb25hbDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEFTVDo6TmFtZWRUeXBl
Pj4gY2FzdFJldHVyblR5cGU7CisgICAgICAgIGF1dG8qIG92ZXJsb2FkID0gcmVzb2x2ZUZ1bmN0
aW9uT3ZlcmxvYWRJbXBsKCpnZXR0ZXJGdW5jcywgYXJndW1lbnRUeXBlUmVmZXJlbmNlcywgY2Fz
dFJldHVyblR5cGUpOworICAgICAgICBpZiAoIW92ZXJsb2FkKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBhdXRvJiByZXN1bHRUeXBlID0gb3ZlcmxvYWQtPnR5cGUoKTsKKyAg
ICAgICAgcmV0dXJuIG1hdGNoZXMocmVzdWx0VHlwZSwgdmFsdWVUeXBlKTsKKyAgICB9OworCisg
ICAgYXV0byBjaGVja0FuZGVyID0gWyZdKENoZWNrS2luZCBraW5kKSAtPiBib29sIHsKKyAgICAg
ICAgc2l6ZV90IG51bUV4cGVjdGVkUGFyYW1ldGVycyA9IGtpbmQgPT0gQ2hlY2tLaW5kOjpJbmRl
eCA/IDIgOiAxOworICAgICAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5z
aXplKCkgIT0gbnVtRXhwZWN0ZWRQYXJhbWV0ZXJzKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB7CisgICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSBmdW5jdGlvbkRlZmlu
aXRpb24udHlwZSgpLnVuaWZ5Tm9kZSgpOworICAgICAgICAgICAgaWYgKCFpczxBU1Q6OlVubmFt
ZWRUeXBlPih1bmlmeU5vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGF1dG8mIHVubmFtZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5p
ZnlOb2RlKTsKKyAgICAgICAgICAgIGlmICghaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5
cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB7
CisgICAgICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJh
bWV0ZXJzKClbMF0udHlwZSgpKS0+dW5pZnlOb2RlKCk7CisgICAgICAgICAgICBpZiAoIWlzPEFT
VDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSBkb3duY2FzdDxBU1Q6OlVubmFtZWRU
eXBlPih1bmlmeU5vZGUpOworICAgICAgICAgICAgcmV0dXJuIGlzPEFTVDo6UG9pbnRlclR5cGU+
KHVubmFtZWRUeXBlKSB8fCBpczxBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUp
OworICAgICAgICB9CisgICAgfTsKKworICAgIGlmICghZnVuY3Rpb25EZWZpbml0aW9uLmlzT3Bl
cmF0b3IoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlv
bi5pc0Nhc3QoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGZ1bmN0aW9uRGVmaW5p
dGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yKysiIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkg
PT0gIm9wZXJhdG9yLS0iKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbkRlZmluaXRpb24ucGFy
YW1ldGVycygpLnNpemUoKSA9PSAxCisgICAgICAgICAgICAmJiBtYXRjaGVzKCpmdW5jdGlvbkRl
ZmluaXRpb24ucGFyYW1ldGVycygpWzBdLnR5cGUoKSwgZnVuY3Rpb25EZWZpbml0aW9uLnR5cGUo
KSk7CisgICAgfQorICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRv
cisiIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yLSIpCisgICAgICAg
IHJldHVybiBmdW5jdGlvbkRlZmluaXRpb24ucGFyYW1ldGVycygpLnNpemUoKSA9PSAxIHx8IGZ1
bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkuc2l6ZSgpID09IDI7CisgICAgaWYgKGZ1bmN0
aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yKiIKKyAgICAgICAgfHwgZnVuY3Rpb25E
ZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3IvIgorICAgICAgICB8fCBmdW5jdGlvbkRlZmlu
aXRpb24ubmFtZSgpID09ICJvcGVyYXRvciUiCisgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlv
bi5uYW1lKCkgPT0gIm9wZXJhdG9yJiIKKyAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5h
bWUoKSA9PSAib3BlcmF0b3J8IgorICAgICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgp
ID09ICJvcGVyYXRvcl4iCisgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0g
Im9wZXJhdG9yPDwiCisgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9w
cmVhdG9yPj4iKQorICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMo
KS5zaXplKCkgPT0gMjsKKyAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3Bl
cmF0b3J+IikKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCku
c2l6ZSgpID09IDE7CisgICAgaWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJh
dG9yPT0iCisgICAgICAgIHx8IGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9y
PCIKKyAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I8PSIK
KyAgICAgICAgfHwgZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3I+IgorICAg
ICAgICB8fCBmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpID09ICJvcGVyYXRvcj49IikgeworICAg
ICAgICByZXR1cm4gZnVuY3Rpb25EZWZpbml0aW9uLnBhcmFtZXRlcnMoKS5zaXplKCkgPT0gMgor
ICAgICAgICAgICAgJiYgbWF0Y2hlcyhmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpLCBpbnRyaW5z
aWNzLmJvb2xUeXBlKCkpOworICAgIH0KKyAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUo
KSA9PSAib3BlcmF0b3JbXSIpCisgICAgICAgIHJldHVybiBjaGVja0dldHRlcihDaGVja0tpbmQ6
OkluZGV4KTsKKyAgICBpZiAoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3Jb
XT0iKQorICAgICAgICByZXR1cm4gY2hlY2tTZXR0ZXIoQ2hlY2tLaW5kOjpJbmRleCk7CisgICAg
aWYgKGZ1bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkgPT0gIm9wZXJhdG9yJltdIikKKyAgICAgICAg
cmV0dXJuIGNoZWNrQW5kZXIoQ2hlY2tLaW5kOjpJbmRleCk7CisgICAgaWYgKGZ1bmN0aW9uRGVm
aW5pdGlvbi5uYW1lKCkuc3RhcnRzV2l0aCgib3BlcmF0b3IuIikpIHsKKyAgICAgICAgaWYgKGZ1
bmN0aW9uRGVmaW5pdGlvbi5uYW1lKCkuZW5kc1dpdGgoIj0iKSkKKyAgICAgICAgICAgIHJldHVy
biBjaGVja1NldHRlcihDaGVja0tpbmQ6OkRvdCk7CisgICAgICAgIHJldHVybiBjaGVja0dldHRl
cihDaGVja0tpbmQ6OkRvdCk7CisgICAgfQorICAgIGlmIChmdW5jdGlvbkRlZmluaXRpb24ubmFt
ZSgpLnN0YXJ0c1dpdGgoIm9wZXJhdG9yJi4iKSkKKyAgICAgICAgcmV0dXJuIGNoZWNrQW5kZXIo
Q2hlY2tLaW5kOjpEb3QpOworICAgIHJldHVybiBmYWxzZTsKK30KKworY2xhc3MgQ2hlY2tlciA6
IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBDaGVja2VyKGNvbnN0IEludHJpbnNpY3Mm
IGludHJpbnNpY3MsIFByb2dyYW0mIHByb2dyYW0pCisgICAgICAgIDogbV9pbnRyaW5zaWNzKGlu
dHJpbnNpY3MpCisgICAgICAgICwgbV9wcm9ncmFtKHByb2dyYW0pCisgICAgeworICAgIH0KKwor
ICAgIH5DaGVja2VyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCB2aXNpdChQcm9ncmFtJikgb3Zl
cnJpZGU7CisKKyAgICBib29sIGFzc2lnblR5cGVzKCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBj
aGVja1NoYWRlclR5cGUoY29uc3QgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKKyAgICB2b2lk
IGZpbmlzaFZpc2l0aW5nUHJvcGVydHlBY2Nlc3MoQVNUOjpQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24mLCBBU1Q6OlVubmFtZWRUeXBlJiB3cmFwcGVkQmFzZVR5cGUsIEFTVDo6VW5uYW1lZFR5cGUq
IGV4dHJhQXJndW1lbnRUeXBlID0gbnVsbHB0cik7CisgICAgYm9vbCBpc0Jvb2xUeXBlKFJlc29s
dmluZ1R5cGUmKTsKKyAgICBzdHJ1Y3QgUmVjdXJzZUluZm8geworICAgICAgICBSZXNvbHZpbmdU
eXBlJiByZXNvbHZpbmdUeXBlOworICAgICAgICBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4m
IGFkZHJlc3NTcGFjZTsKKyAgICB9OworICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiByZWN1cnNl
QW5kR2V0SW5mbyhBU1Q6OkV4cHJlc3Npb24mLCBib29sIHJlcXVpcmVzTFZhbHVlID0gZmFsc2Up
OworICAgIE9wdGlvbmFsPFJlY3Vyc2VJbmZvPiBnZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYsIGJv
b2wgcmVxdWlyZXNMVmFsdWUgPSBmYWxzZSk7CisgICAgT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+PiByZWN1cnNlQW5kV3JhcEJhc2VUeXBlKEFTVDo6UHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uJik7CisgICAgYm9vbCByZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKEFTVDo6RXhw
cmVzc2lvbiYpOworICAgIHZvaWQgYXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mLCBVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiwgT3B0aW9uYWw8QVNUOjpBZGRyZXNzU3BhY2U+ID0gV1RG
OjpudWxsb3B0KTsKKyAgICB2b2lkIGFzc2lnblR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVmPFJl
c29sdmFibGVUeXBlUmVmZXJlbmNlPiYmLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gPSBX
VEY6Om51bGxvcHQpOworICAgIHZvaWQgZm9yd2FyZFR5cGUoQVNUOjpFeHByZXNzaW9uJiwgUmVz
b2x2aW5nVHlwZSYsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiA9IFdURjo6bnVsbG9wdCk7
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlzaXQoQVNUOjpUeXBlUmVmZXJlbmNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6QXNzaWdubWVudEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
UmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNU
OjpEZXJlZmVyZW5jZUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6
TWFrZVBvaW50ZXJFeHByZXNzaW9uJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6Ok1h
a2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFT
VDo6RG90RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpJbmRleEV4
cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVSZWZlcmVu
Y2UmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6UmV0dXJuJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB2aXNpdChBU1Q6OlBvaW50ZXJUeXBlJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNp
dChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNU
OjpJbnRlZ2VyTGl0ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpVbnNpZ25l
ZEludGVnZXJMaXRlcmFsJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZsb2F0TGl0
ZXJhbCYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYpIG92ZXJy
aWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpCb29sZWFuTGl0ZXJhbCYpIG92ZXJyaWRlOworICAg
IHZvaWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHZpc2l0KEFTVDo6TG9naWNhbE5vdEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2
b2lkIHZpc2l0KEFTVDo6TG9naWNhbEV4cHJlc3Npb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIHZp
c2l0KEFTVDo6SWZTdGF0ZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIHZpc2l0KEFTVDo6V2hp
bGVMb29wJikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkRvV2hpbGVMb29wJikgb3Zl
cnJpZGU7CisgICAgdm9pZCB2aXNpdChBU1Q6OkZvckxvb3AmKSBvdmVycmlkZTsKKyAgICB2b2lk
IHZpc2l0KEFTVDo6U3dpdGNoU3RhdGVtZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCB2aXNpdChB
U1Q6OkNvbW1hRXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpUZXJu
YXJ5RXhwcmVzc2lvbiYpIG92ZXJyaWRlOworICAgIHZvaWQgdmlzaXQoQVNUOjpDYWxsRXhwcmVz
c2lvbiYpIG92ZXJyaWRlOworCisgICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBSZXNvbHZp
bmdUeXBlPiBtX3R5cGVNYXA7CisgICAgSGFzaE1hcDxBU1Q6OkV4cHJlc3Npb24qLCBPcHRpb25h
bDxBU1Q6OkFkZHJlc3NTcGFjZT4+IG1fYWRkcmVzc1NwYWNlTWFwOworICAgIEhhc2hTZXQ8U3Ry
aW5nPiBtX3ZlcnRleEVudHJ5UG9pbnRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2ZyYWdtZW50
RW50cnlQb2ludHM7CisgICAgSGFzaFNldDxTdHJpbmc+IG1fY29tcHV0ZUVudHJ5UG9pbnRzOwor
ICAgIGNvbnN0IEludHJpbnNpY3MmIG1faW50cmluc2ljczsKKyAgICBQcm9ncmFtJiBtX3Byb2dy
YW07Cit9OworCit2b2lkIENoZWNrZXI6OnZpc2l0KFByb2dyYW0mIHByb2dyYW0pCit7CisgICAg
Ly8gVGhlc2UgdmlzaXRpbmcgZnVuY3Rpb25zIG1pZ2h0IGFkZCBuZXcgZ2xvYmFsIHN0YXRlbWVu
dHMsIHNvIGRvbid0IHVzZSBmb3JlYWNoIHN5bnRheC4KKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHByb2dyYW0udHlwZURlZmluaXRpb25zKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdChwcm9ncmFtLnR5cGVEZWZpbml0aW9ucygpW2ldKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlvbnMoKS5zaXplKCk7ICsr
aSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0uc3RydWN0dXJlRGVmaW5pdGlv
bnMoKVtpXSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9ncmFtLmVudW1lcmF0aW9u
RGVmaW5pdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHBy
b2dyYW0uZW51bWVyYXRpb25EZWZpbml0aW9ucygpW2ldKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHByb2dyYW0ubmF0aXZlVHlwZURlY2xhcmF0aW9ucygpLnNpemUoKTsgKytpKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQocHJvZ3JhbS5uYXRpdmVUeXBlRGVjbGFyYXRpb25zKClb
aV0pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm9ncmFtLmZ1bmN0aW9uRGVmaW5p
dGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0u
ZnVuY3Rpb25EZWZpbml0aW9ucygpW2ldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBy
b2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5zaXplKCk7ICsraSkKKyAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KHByb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKVtp
XSk7Cit9CisKK2Jvb2wgQ2hlY2tlcjo6YXNzaWduVHlwZXMoKQoreworICAgIGZvciAoYXV0byYg
a2V5VmFsdWVQYWlyIDogbV90eXBlTWFwKSB7CisgICAgICAgIGF1dG8gc3VjY2VzcyA9IFdURjo6
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+JiB1
bm5hbWVkVHlwZSkgLT4gYm9vbCB7CisgICAgICAgICAgICBrZXlWYWx1ZVBhaXIua2V5LT5zZXRU
eXBlKHVubmFtZWRUeXBlLT5jbG9uZSgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9LCBbJl0oUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYgcmVzb2x2YWJsZVR5cGVS
ZWZlcmVuY2UpIC0+IGJvb2wgeworICAgICAgICAgICAgaWYgKCFyZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKSkgeworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBJbnN0ZWFkIG9mIHRyeWluZyB0byBjb21taXQsIGl0IG1pZ2h0IGJlIGJldHRl
ciB0byBqdXN0IHJldHVybiBhbiBlcnJvciBpbnN0ZWFkLgorICAgICAgICAgICAgICAgIGlmICgh
c3RhdGljX2Nhc3Q8Ym9vbD4oY29tbWl0KHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLT5yZXNvbHZh
YmxlVHlwZSgpKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGtleVZhbHVlUGFpci5rZXktPnNldFR5cGUocmVzb2x2YWJsZVR5
cGVSZWZlcmVuY2UtPnJlc29sdmFibGVUeXBlKCkucmVzb2x2ZWRUeXBlKCktPmNsb25lKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0pLCBrZXlWYWx1ZVBhaXIudmFsdWUp
OworICAgICAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX2FkZHJlc3NTcGFjZU1hcCkKKyAg
ICAgICAga2V5VmFsdWVQYWlyLmtleS0+c2V0QWRkcmVzc1NwYWNlKGtleVZhbHVlUGFpci52YWx1
ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ2hlY2tlcjo6Y2hlY2tTaGFkZXJUeXBl
KGNvbnN0IEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCit7Cisg
ICAgc3dpdGNoICgqZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICBj
YXNlIEFTVDo6RW50cnlQb2ludFR5cGU6OlZlcnRleDoKKyAgICAgICAgcmV0dXJuICFtX3ZlcnRl
eEVudHJ5UG9pbnRzLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKS5pc05ld0VudHJ5Owor
ICAgIGNhc2UgQVNUOjpFbnRyeVBvaW50VHlwZTo6RnJhZ21lbnQ6CisgICAgICAgIHJldHVybiAh
bV9mcmFnbWVudEVudHJ5UG9pbnRzLmFkZChmdW5jdGlvbkRlZmluaXRpb24ubmFtZSgpKS5pc05l
d0VudHJ5OworICAgIGNhc2UgQVNUOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZToKKyAgICAgICAg
cmV0dXJuICFtX2NvbXB1dGVFbnRyeVBvaW50cy5hZGQoZnVuY3Rpb25EZWZpbml0aW9uLm5hbWUo
KSkuaXNOZXdFbnRyeTsKKyAgICB9Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpGdW5j
dGlvbkRlZmluaXRpb24mIGZ1bmN0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBpZiAoZnVuY3Rpb25E
ZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCkpIHsKKyAgICAgICAgaWYgKCFjaGVja1NoYWRlclR5
cGUoZnVuY3Rpb25EZWZpbml0aW9uKSkgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGVudHJ5UG9pbnRJdGVtcyA9
IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhtX2ludHJpbnNpY3MsIGZ1bmN0aW9uRGVmaW5pdGlvbik7
CisgICAgICAgIGlmICghZW50cnlQb2ludEl0ZW1zKSB7CisgICAgICAgICAgICBzZXRFcnJvcigp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghY2hlY2tTZW1h
bnRpY3MoZW50cnlQb2ludEl0ZW1zLT5pbnB1dHMsIGVudHJ5UG9pbnRJdGVtcy0+b3V0cHV0cywg
ZnVuY3Rpb25EZWZpbml0aW9uLmVudHJ5UG9pbnRUeXBlKCksIG1faW50cmluc2ljcykpIHsKKyAg
ICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisgICAgaWYgKCFjaGVja09wZXJhdG9yT3ZlcmxvYWQoZnVuY3Rpb25EZWZpbml0aW9uLCBt
X2ludHJpbnNpY3MsIG1fcHJvZ3JhbS5uYW1lQ29udGV4dCgpKSkgeworICAgICAgICBzZXRFcnJv
cigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGZ1
bmN0aW9uRGVmaW5pdGlvbik7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4+IG1hdGNoQW5kQ29tbWl0KFJlc29sdmluZ1R5cGUmIGxlZnQsIFJlc29sdmlu
Z1R5cGUmIHJpZ2h0KQoreworICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3Io
WyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgbGVmdCkgLT4gT3B0aW9uYWw8VW5pcXVl
UmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgcmlnaHQpIC0+IE9w
dGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICAgICAgaWYgKG1h
dGNoZXMobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LT5jbG9uZSgp
OworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgfSwgWyZdKFJlZjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJpZ2h0KSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNU
OjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgICAgIHJldHVybiBtYXRjaEFuZENvbW1pdChsZWZ0
LCByaWdodC0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAgIH0pLCByaWdodCk7CisgICAgfSwg
WyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxlZnQpIC0+IE9wdGlvbmFsPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6
Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJpZ2h0KSAtPiBP
cHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IHsKKyAgICAgICAgICAgIHJldHVy
biBtYXRjaEFuZENvbW1pdChyaWdodCwgbGVmdC0+cmVzb2x2YWJsZVR5cGUoKSk7CisgICAgICAg
IH0sIFsmXShSZWY8UmVzb2x2YWJsZVR5cGVSZWZlcmVuY2U+JiByaWdodCkgLT4gT3B0aW9uYWw8
VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+PiB7CisgICAgICAgICAgICByZXR1cm4gbWF0Y2hB
bmRDb21taXQobGVmdC0+cmVzb2x2YWJsZVR5cGUoKSwgcmlnaHQtPnJlc29sdmFibGVUeXBlKCkp
OworICAgICAgICB9KSwgcmlnaHQpOworICAgIH0pLCBsZWZ0KTsKK30KKworc3RhdGljIE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoUmVzb2x2aW5n
VHlwZSYgcmVzb2x2aW5nVHlwZSwgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpCit7Cisg
ICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oVW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+JiByZXNvbHZpbmdUeXBlKSAtPiBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4+IHsKKyAgICAgICAgaWYgKG1hdGNoZXModW5uYW1lZFR5cGUsIHJlc29sdmlu
Z1R5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHVubmFtZWRUeXBlLmNsb25lKCk7CisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfSwgWyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZT4mIHJlc29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRU
eXBlPj4geworICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQodW5uYW1lZFR5cGUsIHJlc29s
dmluZ1R5cGUtPnJlc29sdmFibGVUeXBlKCkpOworICAgIH0pLCByZXNvbHZpbmdUeXBlKTsKK30K
Kworc3RhdGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRD
b21taXQoUmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSwgQVNUOjpOYW1lZFR5cGUmIG5hbWVk
VHlwZSkKK3sKKyAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlx
dWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJlc29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICBpZiAobWF0Y2hlcyhyZXNvbHZpbmdU
eXBlLCBuYW1lZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUtPmNsb25l
KCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfSwgWyZdKFJlZjxSZXNvbHZh
YmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPj4geworICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQobmFtZWRU
eXBlLCByZXNvbHZpbmdUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsKKyAgICB9KSwgcmVzb2x2aW5n
VHlwZSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRp
b24mIGVudW1lcmF0aW9uRGVmaW5pdGlvbikKK3sKKyAgICBhdXRvKiBiYXNlVHlwZSA9IChbJl0o
KSAtPiBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbiogeworICAgICAgICBjaGVja0Vycm9yQW5k
VmlzaXQoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSk7CisgICAgICAgIGF1dG8mIGJhc2VU
eXBlID0gZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKS51bmlmeU5vZGUoKTsKKyAgICAgICAg
aWYgKCFpczxBU1Q6OlVubmFtZWRUeXBlPihiYXNlVHlwZSkpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgYXV0byYgdW5uYW1lZEJhc2UgPSBkb3duY2FzdDxBU1Q6OlVubmFt
ZWRUeXBlPihiYXNlVHlwZSk7CisgICAgICAgIGlmICghaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1
bm5hbWVkQmFzZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgYXV0byYg
dHlwZVJlZmVyZW5jZUJhc2UgPSBkb3duY2FzdDxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRC
YXNlKTsKKyAgICAgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2VCYXNlLnJlc29sdmVkVHlwZSgpKTsK
KyAgICAgICAgaWYgKCFpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVu
Y2VCYXNlLnJlc29sdmVkVHlwZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbj4oKnR5cGVSZWZlcmVuY2VCYXNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAg
ICAgaWYgKCFuYXRpdmVUeXBlRGVjbGFyYXRpb24uaXNJbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKKyAgICB9
KSgpOworICAgIGlmICghYmFzZVR5cGUpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGF1dG8gZW51bWVyYXRpb25NZW1iZXJzID0gZW51bWVyYXRp
b25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpOworCisgICAgZm9yIChhdXRvJiBtZW1i
ZXIgOiBlbnVtZXJhdGlvbk1lbWJlcnMpIHsKKyAgICAgICAgaWYgKCFtZW1iZXIuZ2V0KCkudmFs
dWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGZh
bHNlOworICAgICAgICBtZW1iZXIuZ2V0KCkudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRv
cihbJl0oQVNUOjpFeHByZXNzaW9uJiB2YWx1ZSkgeworICAgICAgICAgICAgYXV0byB2YWx1ZUlu
Zm8gPSByZWN1cnNlQW5kR2V0SW5mbyh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIXZhbHVlSW5m
bykKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBzdWNjZXNzID0gc3RhdGlj
X2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQodmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCAqYmFz
ZVR5cGUpKTsKKyAgICAgICAgfSkpOworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpbnQ2NF90IG5leHRWYWx1ZSA9IDA7CisgICAgZm9yIChhdXRvJiBtZW1iZXIgOiBlbnVt
ZXJhdGlvbk1lbWJlcnMpIHsKKyAgICAgICAgaWYgKG1lbWJlci5nZXQoKS52YWx1ZSgpKSB7Cisg
ICAgICAgICAgICBpbnQ2NF90IHZhbHVlOworICAgICAgICAgICAgbWVtYmVyLmdldCgpLnZhbHVl
KCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVn
ZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJhbC52YWx1
ZUZvclNlbGVjdGVkVHlwZSgpOworICAgICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIHZh
bHVlID0gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZUZvclNlbGVjdGVkVHlwZSgpOworICAg
ICAgICAgICAgfSwgWyZdKGF1dG8mKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICBuZXh0VmFsdWUgPSBiYXNlVHlw
ZS0+c3VjY2Vzc29yKCkodmFsdWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWVt
YmVyLmdldCgpLnNldFZhbHVlKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uKEFTVDo6SW50ZWdlckxp
dGVyYWwoTGV4ZXI6OlRva2VuKG1lbWJlci5nZXQoKS5vcmlnaW4oKSksIG5leHRWYWx1ZSkpKTsK
KyAgICAgICAgICAgIG5leHRWYWx1ZSA9IGJhc2VUeXBlLT5zdWNjZXNzb3IoKShuZXh0VmFsdWUp
OworICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBnZXRWYWx1ZSA9IFsmXShBU1Q6OkVudW1l
cmF0aW9uTWVtYmVyJiBtZW1iZXIpIC0+IGludDY0X3QgeworICAgICAgICBpbnQ2NF90IHZhbHVl
OworICAgICAgICBBU1NFUlQobWVtYmVyLnZhbHVlKCkpOworICAgICAgICBtZW1iZXIudmFsdWUo
KS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdl
ckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsK
KyAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRl
Z2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgdmFsdWUgPSB1bnNpZ25lZEludGVnZXJMaXRlcmFs
LnZhbHVlKCk7CisgICAgICAgIH0sIFsmXShhdXRvJikgeworICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0pKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH07
CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGVudW1lcmF0aW9uTWVtYmVycy5zaXplKCk7
ICsraSkgeworICAgICAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUoZW51bWVyYXRpb25NZW1iZXJz
W2ldLmdldCgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgZW51bWVyYXRp
b25NZW1iZXJzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICBhdXRvIG90aGVyVmFsdWUgPSBn
ZXRWYWx1ZShlbnVtZXJhdGlvbk1lbWJlcnNbal0uZ2V0KCkpOworICAgICAgICAgICAgaWYgKHZh
bHVlID09IG90aGVyVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAg
IGJvb2wgZm91bmRaZXJvID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBtZW1iZXIgOiBlbnVtZXJh
dGlvbk1lbWJlcnMpIHsKKyAgICAgICAgaWYgKCFnZXRWYWx1ZShtZW1iZXIuZ2V0KCkpKSB7Cisg
ICAgICAgICAgICBmb3VuZFplcm8gPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgaWYgKCFmb3VuZFplcm8pIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlR5cGVS
ZWZlcmVuY2UmIHR5cGVSZWZlcmVuY2UpCit7CisgICAgQVNTRVJUKHR5cGVSZWZlcmVuY2UucmVz
b2x2ZWRUeXBlKCkpOworCisgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVSZWZlcmVuY2UpOwor
fQorCithdXRvIENoZWNrZXI6OnJlY3Vyc2VBbmRHZXRJbmZvKEFTVDo6RXhwcmVzc2lvbiYgZXhw
cmVzc2lvbiwgYm9vbCByZXF1aXJlc0xWYWx1ZSkgLT4gT3B0aW9uYWw8UmVjdXJzZUluZm8+Cit7
CisgICAgY2hlY2tFcnJvckFuZFZpc2l0KGV4cHJlc3Npb24pOworICAgIGlmICghZXJyb3IoKSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gZ2V0SW5mbyhleHByZXNz
aW9uLCByZXF1aXJlc0xWYWx1ZSk7Cit9CisKK2F1dG8gQ2hlY2tlcjo6Z2V0SW5mbyhBU1Q6OkV4
cHJlc3Npb24mIGV4cHJlc3Npb24sIGJvb2wgcmVxdWlyZXNMVmFsdWUpIC0+IE9wdGlvbmFsPFJl
Y3Vyc2VJbmZvPgoreworICAgIGF1dG8gdHlwZUl0ZXJhdG9yID0gbV90eXBlTWFwLmZpbmQoJmV4
cHJlc3Npb24pOworICAgIEFTU0VSVCh0eXBlSXRlcmF0b3IgIT0gbV90eXBlTWFwLmVuZCgpKTsK
KworICAgIGF1dG8gYWRkcmVzc1NwYWNlSXRlcmF0b3IgPSBtX2FkZHJlc3NTcGFjZU1hcC5maW5k
KCZleHByZXNzaW9uKTsKKyAgICBBU1NFUlQoYWRkcmVzc1NwYWNlSXRlcmF0b3IgIT0gbV9hZGRy
ZXNzU3BhY2VNYXAuZW5kKCkpOworICAgIGlmIChyZXF1aXJlc0xWYWx1ZSAmJiAhYWRkcmVzc1Nw
YWNlSXRlcmF0b3ItPnZhbHVlKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgfQorICAgIHJldHVybiB7eyB0eXBlSXRlcmF0b3ItPnZhbHVl
LCBhZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWUgfX07Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uJiB2YXJpYWJsZURlY2xhcmF0aW9uKQoreworICAg
IC8vIFJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb25zIGFyZSB0aGUgb25seSBwbGFjZSB3aGVyZSBh
bm9ueW1vdXMgdmFyaWFibGVzIGV4aXN0LAorICAgIC8vIGFuZCB0aGF0IGRvZXNuJ3QgcmVjdXJz
ZSBvbiB0aGUgYW5vbnltb3VzIHZhcmlhYmxlcywgc28gd2UgY2FuIGFzc3VtZSB0aGUgdmFyaWFi
bGUgaGFzIGEgdHlwZS4KKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnZhcmlhYmxlRGVjbGFyYXRp
b24udHlwZSgpKTsKKyAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvbi5pbml0aWFsaXplcigpKSB7
CisgICAgICAgIGF1dG8mIGxoc1R5cGUgPSAqdmFyaWFibGVEZWNsYXJhdGlvbi50eXBlKCk7Cisg
ICAgICAgIGF1dG8gaW5pdGlhbGl6ZXJJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oKnZhcmlhYmxl
RGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIoKSk7CisgICAgICAgIGlmICghaW5pdGlhbGl6ZXJJbmZv
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIW1hdGNoQW5kQ29tbWl0KGluaXRp
YWxpemVySW5mby0+cmVzb2x2aW5nVHlwZSwgbGhzVHlwZSkpIHsKKyAgICAgICAgICAgIHNldEVy
cm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
Q2hlY2tlcjo6YXNzaWduVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFVuaXF1ZVJl
ZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHVubmFtZWRUeXBlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NT
cGFjZT4gYWRkcmVzc1NwYWNlKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFk
ZCgmZXhwcmVzc2lvbiwgV1RGTW92ZSh1bm5hbWVkVHlwZSkpOworICAgIEFTU0VSVF9VTlVTRUQo
YWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VB
ZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NTcGFj
ZSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NTcGFj
ZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKK30KKwordm9pZCBDaGVja2VyOjphc3NpZ25UeXBlKEFT
VDo6RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgUmVmPFJlc29sdmFibGVUeXBlUmVmZXJlbmNlPiYm
IHJlc29sdmFibGVUeXBlUmVmZXJlbmNlLCBPcHRpb25hbDxBU1Q6OkFkZHJlc3NTcGFjZT4gYWRk
cmVzc1NwYWNlKQoreworICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90eXBlTWFwLmFkZCgmZXhwcmVz
c2lvbiwgV1RGTW92ZShyZXNvbHZhYmxlVHlwZVJlZmVyZW5jZSkpOworICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgYXV0byBhZGRyZXNzU3Bh
Y2VBZGRSZXN1bHQgPSBtX2FkZHJlc3NTcGFjZU1hcC5hZGQoJmV4cHJlc3Npb24sIGFkZHJlc3NT
cGFjZSk7CisgICAgQVNTRVJUX1VOVVNFRChhZGRyZXNzU3BhY2VBZGRSZXN1bHQsIGFkZHJlc3NT
cGFjZUFkZFJlc3VsdC5pc05ld0VudHJ5KTsKK30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
OkFzc2lnbm1lbnRFeHByZXNzaW9uJiBhc3NpZ25tZW50RXhwcmVzc2lvbikKK3sKKyAgICBhdXRv
IGxlZnRJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oYXNzaWdubWVudEV4cHJlc3Npb24ubGVmdCgp
LCB0cnVlKTsKKyAgICBpZiAoIWxlZnRJbmZvKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IHJpZ2h0SW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGFzc2lnbm1lbnRFeHByZXNzaW9uLnJpZ2h0
KCkpOworICAgIGlmICghcmlnaHRJbmZvKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIHJl
c3VsdFR5cGUgPSBtYXRjaEFuZENvbW1pdChsZWZ0SW5mby0+cmVzb2x2aW5nVHlwZSwgcmlnaHRJ
bmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAgICBpZiAoIXJlc3VsdFR5cGUpIHsKKyAgICAgICAgc2V0
RXJyb3IoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFzc2lnblR5cGUoYXNzaWdu
bWVudEV4cHJlc3Npb24sIFdURk1vdmUoKnJlc3VsdFR5cGUpKTsKK30KKwordm9pZCBDaGVja2Vy
Ojpmb3J3YXJkVHlwZShBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24sIFJlc29sdmluZ1R5cGUm
IHJlc29sdmluZ1R5cGUsIE9wdGlvbmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2Up
Cit7CisgICAgV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8QVNUOjpV
bm5hbWVkVHlwZT4mIHJlc3VsdCkgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHlwZU1h
cC5hZGQoJmV4cHJlc3Npb24sIHJlc3VsdC0+Y2xvbmUoKSk7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQoYWRkUmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfSwgWyZdKFJlZjxSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc3VsdCkgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fdHlwZU1hcC5hZGQoJmV4cHJlc3Npb24sIHJlc3VsdC5jb3B5UmVmKCkpOworICAgICAgICBB
U1NFUlRfVU5VU0VEKGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0pLCBy
ZXNvbHZpbmdUeXBlKTsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZUFkZFJlc3VsdCA9IG1fYWRkcmVz
c1NwYWNlTWFwLmFkZCgmZXhwcmVzc2lvbiwgYWRkcmVzc1NwYWNlKTsKKyAgICBBU1NFUlRfVU5V
U0VEKGFkZHJlc3NTcGFjZUFkZFJlc3VsdCwgYWRkcmVzc1NwYWNlQWRkUmVzdWx0LmlzTmV3RW50
cnkpOworfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbiYgcmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbikKK3sKKyAgICBhdXRvIGxWYWx1ZUluZm8g
PSByZWN1cnNlQW5kR2V0SW5mbyhyZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmxWYWx1ZSgpLCB0
cnVlKTsKKyAgICBpZiAoIWxWYWx1ZUluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJ
WE1FOiBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCB0aGUgUmVhZE1vZGlmeVdyaXRlRXhwcmVz
c2lvbidzIEFub255bW91c1ZhcmlhYmxlcy4KKworICAgIGF1dG8gbmV3VmFsdWVJbmZvID0gcmVj
dXJzZUFuZEdldEluZm8oKnJlYWRNb2RpZnlXcml0ZUV4cHJlc3Npb24ubmV3VmFsdWVFeHByZXNz
aW9uKCkpOworICAgIGlmICghbmV3VmFsdWVJbmZvKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIW1hdGNoQW5kQ29tbWl0KGxWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUsIG5ld1ZhbHVlSW5m
by0+cmVzb2x2aW5nVHlwZSkpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGF1dG8gcmVzdWx0SW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKCpyZWFk
TW9kaWZ5V3JpdGVFeHByZXNzaW9uLnJlc3VsdEV4cHJlc3Npb24oKSk7CisgICAgaWYgKCFyZXN1
bHRJbmZvKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3J3YXJkVHlwZShyZWFkTW9kaWZ5V3Jp
dGVFeHByZXNzaW9uLCByZXN1bHRJbmZvLT5yZXNvbHZpbmdUeXBlKTsKK30KKworc3RhdGljIEFT
VDo6VW5uYW1lZFR5cGUqIGdldFVubmFtZWRUeXBlKFJlc29sdmluZ1R5cGUmIHJlc29sdmluZ1R5
cGUpCit7CisgICAgcmV0dXJuIFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbXShVbmlxdWVS
ZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAg
ICAgcmV0dXJuICZ0eXBlOworICAgIH0sIFtdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4m
IHR5cGUpIC0+IEFTVDo6VW5uYW1lZFR5cGUqIHsKKyAgICAgICAgLy8gRklYTUU6IElmIHRoZSB0
eXBlIGlzbid0IGNvbW1pdHRlZCwgc2hvdWxkIHdlIGp1c3QgY29tbWl0KCkgaXQgbm93PworICAg
ICAgICByZXR1cm4gdHlwZS0+cmVzb2x2YWJsZVR5cGUoKS5yZXNvbHZlZFR5cGUoKTsKKyAgICB9
KSwgcmVzb2x2aW5nVHlwZSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpEZXJlZmVy
ZW5jZUV4cHJlc3Npb24mIGRlcmVmZXJlbmNlRXhwcmVzc2lvbikKK3sKKyAgICBhdXRvIHBvaW50
ZXJJbmZvID0gcmVjdXJzZUFuZEdldEluZm8oZGVyZWZlcmVuY2VFeHByZXNzaW9uLnBvaW50ZXIo
KSk7CisgICAgaWYgKCFwb2ludGVySW5mbykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byog
dW5uYW1lZFR5cGUgPSBnZXRVbm5hbWVkVHlwZShwb2ludGVySW5mby0+cmVzb2x2aW5nVHlwZSk7
CisKKyAgICBhdXRvKiBwb2ludGVyVHlwZSA9IChbJl0oQVNUOjpVbm5hbWVkVHlwZSogdW5uYW1l
ZFR5cGUpIC0+IEFTVDo6UG9pbnRlclR5cGUqIHsKKyAgICAgICAgaWYgKCF1bm5hbWVkVHlwZSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBhdXRvJiB1bmlmeU5vZGUgPSB1
bm5hbWVkVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgICAgIGlmICghaXM8QVNUOjpVbm5hbWVkVHlw
ZT4odW5pZnlOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBhdXRv
JiB1bm5hbWVkVW5pZnlUeXBlID0gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2Rl
KTsKKyAgICAgICAgaWYgKCFpczxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVW5pZnlUeXBlKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFT
VDo6UG9pbnRlclR5cGU+KHVubmFtZWRVbmlmeVR5cGUpOworICAgIH0pKHVubmFtZWRUeXBlKTsK
KyAgICBpZiAoIXBvaW50ZXJUeXBlKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBhc3NpZ25UeXBlKGRlcmVmZXJlbmNlRXhwcmVzc2lvbiwgcG9p
bnRlclR5cGUtPmNsb25lKCksIHBvaW50ZXJUeXBlLT5hZGRyZXNzU3BhY2UoKSk7Cit9CisKK3Zv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpNYWtlUG9pbnRlckV4cHJlc3Npb24mIG1ha2VQb2ludGVy
RXhwcmVzc2lvbikKK3sKKyAgICBhdXRvIGxWYWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyht
YWtlUG9pbnRlckV4cHJlc3Npb24ubFZhbHVlKCksIHRydWUpOworICAgIGlmICghbFZhbHVlSW5m
bykKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogbFZhbHVlVHlwZSA9IGdldFVubmFtZWRU
eXBlKGxWYWx1ZUluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGlmICghbFZhbHVlVHlwZSkgewor
ICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXNzaWdu
VHlwZShtYWtlUG9pbnRlckV4cHJlc3Npb24sIG1ha2VVbmlxdWVSZWY8QVNUOjpQb2ludGVyVHlw
ZT4oTGV4ZXI6OlRva2VuKG1ha2VQb2ludGVyRXhwcmVzc2lvbi5vcmlnaW4oKSksICpsVmFsdWVJ
bmZvLT5hZGRyZXNzU3BhY2UsIGxWYWx1ZVR5cGUtPmNsb25lKCkpKTsKK30KKwordm9pZCBDaGVj
a2VyOjp2aXNpdChBU1Q6Ok1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24mIG1ha2VBcnJheVJl
ZmVyZW5jZUV4cHJlc3Npb24pCit7CisgICAgYXV0byBsVmFsdWVJbmZvID0gcmVjdXJzZUFuZEdl
dEluZm8obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5sVmFsdWUoKSk7CisgICAgaWYgKCFs
VmFsdWVJbmZvKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBsVmFsdWVUeXBlID0gZ2V0
VW5uYW1lZFR5cGUobFZhbHVlSW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgaWYgKCFsVmFsdWVU
eXBlKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhdXRvJiB1bmlmeU5vZGUgPSBsVmFsdWVUeXBlLT51bmlmeU5vZGUoKTsKKyAgICBpZiAoaXM8
QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkgeworICAgICAgICBhdXRvJiB1bm5hbWVkVHlw
ZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7CisgICAgICAgIGlmIChp
czxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIHBv
aW50ZXJUeXBlID0gZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpOworICAg
ICAgICAgICAgLy8gRklYTUU6IFNhdmUgdGhlIGZhY3QgdGhhdCB3ZSdyZSBub3QgdGFyZ2V0dGlu
ZyB0aGUgaXRlbTsgd2UncmUgdGFyZ2V0dGluZyB0aGUgaXRlbSdzIGlubmVyIGVsZW1lbnQuCisg
ICAgICAgICAgICBhc3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1ha2VV
bmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJyYXlS
ZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigpKSwgcG9pbnRlclR5cGUuYWRkcmVzc1NwYWNlKCks
IHBvaW50ZXJUeXBlLmVsZW1lbnRUeXBlKCkuY2xvbmUoKSkpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UpIHsK
KyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSkgeworICAgICAg
ICAgICAgYXV0byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRU
eXBlKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBTYXZlIHRoZSBudW1iZXIgb2YgZWxlbWVudHMu
CisgICAgICAgICAgICBhc3NpZ25UeXBlKG1ha2VBcnJheVJlZmVyZW5jZUV4cHJlc3Npb24sIG1h
a2VVbmlxdWVSZWY8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihtYWtlQXJy
YXlSZWZlcmVuY2VFeHByZXNzaW9uLm9yaWdpbigpKSwgKmxWYWx1ZUluZm8tPmFkZHJlc3NTcGFj
ZSwgYXJyYXlUeXBlLnR5cGUoKS5jbG9uZSgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWxWYWx1ZUluZm8tPmFkZHJlc3NTcGFjZSkgeworICAg
ICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXNzaWduVHlw
ZShtYWtlQXJyYXlSZWZlcmVuY2VFeHByZXNzaW9uLCBtYWtlVW5pcXVlUmVmPEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPihMZXhlcjo6VG9rZW4obWFrZUFycmF5UmVmZXJlbmNlRXhwcmVzc2lvbi5v
cmlnaW4oKSksICpsVmFsdWVJbmZvLT5hZGRyZXNzU3BhY2UsIGxWYWx1ZVR5cGUtPmNsb25lKCkp
KTsKK30KKwordm9pZCBDaGVja2VyOjpmaW5pc2hWaXNpdGluZ1Byb3BlcnR5QWNjZXNzKEFTVDo6
UHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24sIEFTVDo6
VW5uYW1lZFR5cGUmIHdyYXBwZWRCYXNlVHlwZSwgQVNUOjpVbm5hbWVkVHlwZSogZXh0cmFBcmd1
bWVudFR5cGUpCit7CisgICAgT3B0aW9uYWw8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6Ok5h
bWVkVHlwZT4+IGNhc3RSZXR1cm5UeXBlOworICAgIHVzaW5nIE92ZXJsb2FkUmVzb2x1dGlvbiA9
IHN0ZDo6dHVwbGU8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiwgQVNUOjpVbm5hbWVkVHlwZSo+
OworCisgICAgQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBnZXRGdW5jdGlvbjsKKyAgICBBU1Q6
OlVubmFtZWRUeXBlKiBnZXRSZXR1cm5UeXBlOworICAgIHN0ZDo6dGllKGdldEZ1bmN0aW9uLCBn
ZXRSZXR1cm5UeXBlKSA9IChbJl0oKSAtPiBPdmVybG9hZFJlc29sdXRpb24geworICAgICAgICBS
ZXNvbHZpbmdUeXBlIGdldEFyZ3VtZW50VHlwZTEod3JhcHBlZEJhc2VUeXBlLmNsb25lKCkpOwor
ICAgICAgICBPcHRpb25hbDxSZXNvbHZpbmdUeXBlPiBnZXRBcmd1bWVudFR5cGUyOworICAgICAg
ICBpZiAoZXh0cmFBcmd1bWVudFR5cGUpCisgICAgICAgICAgICBnZXRBcmd1bWVudFR5cGUyID0g
UmVzb2x2aW5nVHlwZShleHRyYUFyZ3VtZW50VHlwZS0+Y2xvbmUoKSk7CisKKyAgICAgICAgVmVj
dG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGdldEFyZ3VtZW50VHlw
ZXM7CisgICAgICAgIGdldEFyZ3VtZW50VHlwZXMuYXBwZW5kKGdldEFyZ3VtZW50VHlwZTEpOwor
ICAgICAgICBpZiAoZ2V0QXJndW1lbnRUeXBlMikKKyAgICAgICAgICAgIGdldEFyZ3VtZW50VHlw
ZXMuYXBwZW5kKCpnZXRBcmd1bWVudFR5cGUyKTsKKworICAgICAgICBhdXRvKiBnZXRGdW5jdGlv
biA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
cG9zc2libGVHZXRPdmVybG9hZHMoKSwgZ2V0QXJndW1lbnRUeXBlcywgY2FzdFJldHVyblR5cGUp
OworICAgICAgICBpZiAoIWdldEZ1bmN0aW9uKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIo
Z2V0RnVuY3Rpb24sICZnZXRGdW5jdGlvbi0+dHlwZSgpKTsKKyAgICB9KSgpOworCisgICAgQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKiBhbmRGdW5jdGlvbjsKKyAgICBBU1Q6OlVubmFtZWRUeXBl
KiBhbmRSZXR1cm5UeXBlOworICAgIHN0ZDo6dGllKGFuZEZ1bmN0aW9uLCBhbmRSZXR1cm5UeXBl
KSA9IChbJl0oKSAtPiBPdmVybG9hZFJlc29sdXRpb24geworICAgICAgICBhdXRvIGNvbXB1dGVB
bmRBcmd1bWVudFR5cGUgPSBbJl0oQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUpIC0+IE9w
dGlvbmFsPFJlc29sdmluZ1R5cGU+IHsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5UmVm
ZXJlbmNlVHlwZT4odW5uYW1lZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IHVubmFt
ZWRUeXBlLmNsb25lKCkgfTsKKyAgICAgICAgICAgIGlmIChpczxBU1Q6OkFycmF5VHlwZT4odW5u
YW1lZFR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpB
cnJheVJlZmVyZW5jZVR5cGU+KExleGVyOjpUb2tlbihwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
b3JpZ2luKCkpLCBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkLCBkb3duY2FzdDxBU1Q6OkFycmF5
VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKS5jbG9uZSgpKSB9OworICAgICAgICAgICAgaWYgKGlz
PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OworICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlBv
aW50ZXJUeXBlPihMZXhlcjo6VG9rZW4ocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigp
KSwgQVNUOjpBZGRyZXNzU3BhY2U6OlRocmVhZCwgZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVu
bmFtZWRUeXBlKS50eXBlKCkuY2xvbmUoKSkgfTsKKyAgICAgICAgfTsKKyAgICAgICAgYXV0byBj
b21wdXRlQW5kUmV0dXJuVHlwZSA9IFsmXShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkg
LT4gQVNUOjpVbm5hbWVkVHlwZSogeworICAgICAgICAgICAgaWYgKGlzPEFTVDo6UG9pbnRlclR5
cGU+KHVubmFtZWRUeXBlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH07CisKKyAgICAgICAgYXV0byBhbmRBcmd1bWVudFR5cGUx
ID0gY29tcHV0ZUFuZEFyZ3VtZW50VHlwZSh3cmFwcGVkQmFzZVR5cGUpOworICAgICAgICBpZiAo
IWFuZEFyZ3VtZW50VHlwZTEpCisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobnVs
bHB0ciwgbnVsbHB0cik7CisgICAgICAgIE9wdGlvbmFsPFJlc29sdmluZ1R5cGU+IGFuZEFyZ3Vt
ZW50VHlwZTI7CisgICAgICAgIGlmIChleHRyYUFyZ3VtZW50VHlwZSkKKyAgICAgICAgICAgIGFu
ZEFyZ3VtZW50VHlwZTIgPSBSZXNvbHZpbmdUeXBlKGV4dHJhQXJndW1lbnRUeXBlLT5jbG9uZSgp
KTsKKworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4gYW5kQXJndW1lbnRUeXBlczsKKyAgICAgICAgYW5kQXJndW1lbnRUeXBlcy5hcHBlbmQoKmFu
ZEFyZ3VtZW50VHlwZTEpOworICAgICAgICBpZiAoYW5kQXJndW1lbnRUeXBlMikKKyAgICAgICAg
ICAgIGFuZEFyZ3VtZW50VHlwZXMuYXBwZW5kKCphbmRBcmd1bWVudFR5cGUyKTsKKworICAgICAg
ICBhdXRvKiBhbmRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVBbmRPdmVybG9hZHMoKSwgYW5kQXJndW1lbnRUeXBl
cywgY2FzdFJldHVyblR5cGUpOworICAgICAgICBpZiAoIWFuZEZ1bmN0aW9uKQorICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIoYW5kRnVuY3Rpb24sIGNvbXB1dGVBbmRSZXR1cm5UeXBlKGFuZEZ1
bmN0aW9uLT50eXBlKCkpKTsKKyAgICB9KSgpOworCisgICAgaWYgKCFnZXRSZXR1cm5UeXBlICYm
ICFhbmRSZXR1cm5UeXBlKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoZ2V0UmV0dXJuVHlwZSAmJiBhbmRSZXR1cm5UeXBlICYmICFtYXRj
aGVzKCpnZXRSZXR1cm5UeXBlLCAqYW5kUmV0dXJuVHlwZSkpIHsKKyAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlv
biogc2V0RnVuY3Rpb247CisgICAgQVNUOjpVbm5hbWVkVHlwZSogc2V0UmV0dXJuVHlwZTsKKyAg
ICBzdGQ6OnRpZShzZXRGdW5jdGlvbiwgc2V0UmV0dXJuVHlwZSkgPSAoWyZdKCkgLT4gT3Zlcmxv
YWRSZXNvbHV0aW9uIHsKKyAgICAgICAgUmVzb2x2aW5nVHlwZSBzZXRBcmd1bWVudDFUeXBlKHdy
YXBwZWRCYXNlVHlwZS5jbG9uZSgpKTsKKyAgICAgICAgT3B0aW9uYWw8UmVzb2x2aW5nVHlwZT4g
c2V0QXJndW1lbnRUeXBlMjsKKyAgICAgICAgaWYgKGV4dHJhQXJndW1lbnRUeXBlKQorICAgICAg
ICAgICAgc2V0QXJndW1lbnRUeXBlMiA9IFJlc29sdmluZ1R5cGUoZXh0cmFBcmd1bWVudFR5cGUt
PmNsb25lKCkpOworICAgICAgICBSZXNvbHZpbmdUeXBlIHNldEFyZ3VtZW50M1R5cGUoZ2V0UmV0
dXJuVHlwZSA/IGdldFJldHVyblR5cGUtPmNsb25lKCkgOiBhbmRSZXR1cm5UeXBlLT5jbG9uZSgp
KTsKKworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxSZXNvbHZpbmdUeXBl
Pj4gc2V0QXJndW1lbnRUeXBlczsKKyAgICAgICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoc2V0
QXJndW1lbnQxVHlwZSk7CisgICAgICAgIGlmIChzZXRBcmd1bWVudFR5cGUyKQorICAgICAgICAg
ICAgc2V0QXJndW1lbnRUeXBlcy5hcHBlbmQoKnNldEFyZ3VtZW50VHlwZTIpOworICAgICAgICBz
ZXRBcmd1bWVudFR5cGVzLmFwcGVuZChzZXRBcmd1bWVudDNUeXBlKTsKKworICAgICAgICBhdXRv
KiBzZXRGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkSW1wbChwcm9wZXJ0eUFjY2Vz
c0V4cHJlc3Npb24ucG9zc2libGVTZXRPdmVybG9hZHMoKSwgc2V0QXJndW1lbnRUeXBlcywgY2Fz
dFJldHVyblR5cGUpOworICAgICAgICBpZiAoIXNldEZ1bmN0aW9uKQorICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKG51bGxwdHIsIG51bGxwdHIpOworICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIoc2V0RnVuY3Rpb24sICZzZXRGdW5jdGlvbi0+dHlwZSgpKTsKKyAgICB9KSgp
OworCisgICAgaWYgKHNldEZ1bmN0aW9uKSB7CisgICAgICAgIGlmICghbWF0Y2hlcyhzZXRGdW5j
dGlvbi0+dHlwZSgpLCB3cmFwcGVkQmFzZVR5cGUpKSB7CisgICAgICAgICAgICBzZXRFcnJvcigp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgT3B0aW9uYWw8
QVNUOjpBZGRyZXNzU3BhY2U+IGFkZHJlc3NTcGFjZTsKKyAgICBpZiAoZ2V0UmV0dXJuVHlwZSB8
fCBhbmRSZXR1cm5UeXBlKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGUgcmVmZXJlbmNlIGNvbXBp
bGVyIGhhcyAiZWxzZSBpZiAoIW5vZGUuYmFzZS5pc0xWYWx1ZSAmJiAhYmFzZVR5cGUuaXNBcnJh
eVJlZikiLAorICAgICAgICAvLyBidXQgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSBpdCBleGlzdHMu
IEkgaGF2ZW4ndCB3cml0dGVuIGl0IGhlcmUsIGFuZCBJJ2xsIGludmVzdGlnYXRlCisgICAgICAg
IC8vIGlmIHdlIGNhbiByZW1vdmUgaXQgZnJvbSB0aGUgcmVmZXJlbmNlIGNvbXBpbGVyLgorICAg
ICAgICBpZiAoaXM8QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFwcGVkQmFzZVR5cGUpKQorICAgICAg
ICAgICAgYWRkcmVzc1NwYWNlID0gZG93bmNhc3Q8QVNUOjpSZWZlcmVuY2VUeXBlPih3cmFwcGVk
QmFzZVR5cGUpLmFkZHJlc3NTcGFjZSgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1
dG8gYWRkcmVzc1NwYWNlSXRlcmF0b3IgPSBtX2FkZHJlc3NTcGFjZU1hcC5maW5kKCZwcm9wZXJ0
eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChhZGRyZXNzU3Bh
Y2VJdGVyYXRvciAhPSBtX2FkZHJlc3NTcGFjZU1hcC5lbmQoKSk7CisgICAgICAgICAgICBpZiAo
YWRkcmVzc1NwYWNlSXRlcmF0b3ItPnZhbHVlKQorICAgICAgICAgICAgICAgIGFkZHJlc3NTcGFj
ZSA9ICphZGRyZXNzU3BhY2VJdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEZJWE1FOiBHZW5lcmF0ZSB0aGUg
Y2FsbCBleHByZXNzaW9ucworCisgICAgYXNzaWduVHlwZShwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Np
b24sIGdldFJldHVyblR5cGUgPyBnZXRSZXR1cm5UeXBlLT5jbG9uZSgpIDogYW5kUmV0dXJuVHlw
ZS0+Y2xvbmUoKSwgYWRkcmVzc1NwYWNlKTsKK30KKworT3B0aW9uYWw8VW5pcXVlUmVmPEFTVDo6
VW5uYW1lZFR5cGU+PiBDaGVja2VyOjpyZWN1cnNlQW5kV3JhcEJhc2VUeXBlKEFTVDo6UHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uJiBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24pCit7CisgICAgYXV0
byBiYXNlSW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5i
YXNlKCkpOworICAgIGlmICghYmFzZUluZm8pCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICBhdXRvKiBiYXNlVHlwZSA9IGdldFVubmFtZWRUeXBlKGJhc2VJbmZvLT5yZXNvbHZp
bmdUeXBlKTsKKyAgICBpZiAoIWJhc2VUeXBlKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorICAgIGF1dG8mIGJhc2VVbmlmeU5vZGUg
PSBiYXNlVHlwZS0+dW5pZnlOb2RlKCk7CisgICAgaWYgKGlzPEFTVDo6VW5uYW1lZFR5cGU+KGJh
c2VVbmlmeU5vZGUpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNUOjpVbm5hbWVkVHlwZT4o
YmFzZVVuaWZ5Tm9kZSkuY2xvbmUoKTsKKyAgICBBU1NFUlQoaXM8QVNUOjpOYW1lZFR5cGU+KGJh
c2VVbmlmeU5vZGUpKTsKKyAgICByZXR1cm4geyBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4
ZXI6OlRva2VuKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSksIGRvd25jYXN0PEFT
VDo6TmFtZWRUeXBlPihiYXNlVW5pZnlOb2RlKSkgfTsKK30KKwordm9pZCBDaGVja2VyOjp2aXNp
dChBU1Q6OkRvdEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCit7CisgICAgYXV0byBiYXNlVHlw
ZSA9IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoZG90RXhwcmVzc2lvbik7CisgICAgaWYgKCFiYXNl
VHlwZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2Vz
cyhkb3RFeHByZXNzaW9uLCAqYmFzZVR5cGUpOworfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFT
VDo6SW5kZXhFeHByZXNzaW9uJiBpbmRleEV4cHJlc3Npb24pCit7CisgICAgYXV0byBiYXNlVHlw
ZSA9IHJlY3Vyc2VBbmRXcmFwQmFzZVR5cGUoaW5kZXhFeHByZXNzaW9uKTsKKyAgICBpZiAoIWJh
c2VUeXBlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGluZGV4SW5mbyA9IHJlY3Vyc2VB
bmRHZXRJbmZvKGluZGV4RXhwcmVzc2lvbi5pbmRleEV4cHJlc3Npb24oKSk7CisgICAgaWYgKCFp
bmRleEluZm8pCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIGluZGV4RXhwcmVzc2lvblR5cGUg
PSBnZXRVbm5hbWVkVHlwZShpbmRleEluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIGlmICghaW5k
ZXhFeHByZXNzaW9uVHlwZSkgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgZmluaXNoVmlzaXRpbmdQcm9wZXJ0eUFjY2VzcyhpbmRleEV4cHJlc3Np
b24sIFdURk1vdmUoKmJhc2VUeXBlKSwgaW5kZXhFeHByZXNzaW9uVHlwZSk7Cit9CisKK3ZvaWQg
Q2hlY2tlcjo6dmlzaXQoQVNUOjpWYXJpYWJsZVJlZmVyZW5jZSYgdmFyaWFibGVSZWZlcmVuY2Up
Cit7CisgICAgQVNTRVJUKHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCkpOworICAgIEFTU0VS
VCh2YXJpYWJsZVJlZmVyZW5jZS52YXJpYWJsZSgpLT50eXBlKCkpOworICAgIAorICAgIE9wdGlv
bmFsPEFTVDo6QWRkcmVzc1NwYWNlPiBhZGRyZXNzU3BhY2U7CisgICAgaWYgKCF2YXJpYWJsZVJl
ZmVyZW5jZS52YXJpYWJsZSgpLT5pc0Fub255bW91cygpKQorICAgICAgICBhZGRyZXNzU3BhY2Ug
PSBBU1Q6OkFkZHJlc3NTcGFjZTo6VGhyZWFkOworICAgIGFzc2lnblR5cGUodmFyaWFibGVSZWZl
cmVuY2UsIHZhcmlhYmxlUmVmZXJlbmNlLnZhcmlhYmxlKCktPnR5cGUoKS0+Y2xvbmUoKSwgYWRk
cmVzc1NwYWNlKTsKK30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlJldHVybiYgcmV0dXJu
U3RhdGVtZW50KQoreworICAgIEFTU0VSVChyZXR1cm5TdGF0ZW1lbnQuZnVuY3Rpb24oKSk7Cisg
ICAgaWYgKHJldHVyblN0YXRlbWVudC52YWx1ZSgpKSB7CisgICAgICAgIGF1dG8gdmFsdWVJbmZv
ID0gcmVjdXJzZUFuZEdldEluZm8oKnJldHVyblN0YXRlbWVudC52YWx1ZSgpKTsKKyAgICAgICAg
aWYgKCF2YWx1ZUluZm8pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghbWF0Y2hB
bmRDb21taXQodmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCByZXR1cm5TdGF0ZW1lbnQuZnVuY3Rp
b24oKS0+dHlwZSgpKSkKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoIW1hdGNoZXMocmV0dXJuU3RhdGVtZW50LmZ1bmN0aW9uKCktPnR5
cGUoKSwgbV9pbnRyaW5zaWNzLnZvaWRUeXBlKCkpKQorICAgICAgICBzZXRFcnJvcigpOworfQor
Cit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6UG9pbnRlclR5cGUmKQoreworICAgIC8vIEZvbGxv
d2luZyBwb2ludGVyIHR5cGVzIGNhbiBjYXVzZSBpbmZpbml0ZSBsb29wcyBiZWNhdXNlIG9mIGRh
dGEgc3RydWN0dXJlcworICAgIC8vIGxpa2UgbGlua2VkIGxpc3RzLgorICAgIC8vIEZJWE1FOiBN
YWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgZW1wdHkKK30KKwordm9pZCBDaGVja2Vy
Ojp2aXNpdChBU1Q6OkFycmF5UmVmZXJlbmNlVHlwZSYpCit7CisgICAgLy8gRm9sbG93aW5nIGFy
cmF5IHJlZmVyZW5jZSB0eXBlcyBjYW4gY2F1c2UgaW5maW5pdGUgbG9vcHMgYmVjYXVzZSBvZiBk
YXRhCisgICAgLy8gc3RydWN0dXJlcyBsaWtlIGxpbmtlZCBsaXN0cy4KKyAgICAvLyBGSVhNRTog
TWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGVtcHR5Cit9CisKK3ZvaWQgQ2hlY2tl
cjo6dmlzaXQoQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgaW50ZWdlckxpdGVyYWwpCit7CisgICAgYXNz
aWduVHlwZShpbnRlZ2VyTGl0ZXJhbCwgYWRvcHRSZWYoKm5ldyBSZXNvbHZhYmxlVHlwZVJlZmVy
ZW5jZShpbnRlZ2VyTGl0ZXJhbC50eXBlKCkpKSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQo
QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKQorewor
ICAgIGFzc2lnblR5cGUodW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCwgYWRvcHRSZWYoKm5ldyBSZXNv
bHZhYmxlVHlwZVJlZmVyZW5jZSh1bnNpZ25lZEludGVnZXJMaXRlcmFsLnR5cGUoKSkpKTsKK30K
Kwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkZsb2F0TGl0ZXJhbCYgZmxvYXRMaXRlcmFsKQor
eworICAgIGFzc2lnblR5cGUoZmxvYXRMaXRlcmFsLCBhZG9wdFJlZigqbmV3IFJlc29sdmFibGVU
eXBlUmVmZXJlbmNlKGZsb2F0TGl0ZXJhbC50eXBlKCkpKSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6
dmlzaXQoQVNUOjpOdWxsTGl0ZXJhbCYgbnVsbExpdGVyYWwpCit7CisgICAgYXNzaWduVHlwZShu
dWxsTGl0ZXJhbCwgYWRvcHRSZWYoKm5ldyBSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZShudWxsTGl0
ZXJhbC50eXBlKCkpKSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpCb29sZWFuTGl0
ZXJhbCYgYm9vbGVhbkxpdGVyYWwpCit7CisgICAgYXNzaWduVHlwZShib29sZWFuTGl0ZXJhbCwg
QVNUOjpUeXBlUmVmZXJlbmNlOjp3cmFwKExleGVyOjpUb2tlbihib29sZWFuTGl0ZXJhbC5vcmln
aW4oKSksIG1faW50cmluc2ljcy5ib29sVHlwZSgpKSk7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlz
aXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bCkKK3sKKyAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVm
aW5pdGlvbigpKTsKKyAgICBhdXRvJiBlbnVtZXJhdGlvbkRlZmluaXRpb24gPSAqZW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpOworICAgIGFzc2lnblR5cGUo
ZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6
OlRva2VuKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5vcmlnaW4oKSksIGVudW1lcmF0aW9uRGVm
aW5pdGlvbikpOworfQorCitib29sIENoZWNrZXI6OmlzQm9vbFR5cGUoUmVzb2x2aW5nVHlwZSYg
cmVzb2x2aW5nVHlwZSkKK3sKKyAgICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9y
KFsmXShVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIGxlZnQpIC0+IGJvb2wgeworICAgICAg
ICByZXR1cm4gbWF0Y2hlcyhsZWZ0LCBtX2ludHJpbnNpY3MuYm9vbFR5cGUoKSk7CisgICAgfSwg
WyZdKFJlZjxSZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIGxlZnQpIC0+IGJvb2wgeworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQobV9pbnRyaW5zaWNzLmJv
b2xUeXBlKCksIGxlZnQtPnJlc29sdmFibGVUeXBlKCkpKTsKKyAgICB9KSwgcmVzb2x2aW5nVHlw
ZSk7Cit9CisKK2Jvb2wgQ2hlY2tlcjo6cmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZShBU1Q6OkV4
cHJlc3Npb24mIGV4cHJlc3Npb24pCit7CisgICAgYXV0byBleHByZXNzaW9uSW5mbyA9IHJlY3Vy
c2VBbmRHZXRJbmZvKGV4cHJlc3Npb24pOworICAgIGlmICghZXhwcmVzc2lvbkluZm8pCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWlzQm9vbFR5cGUoZXhwcmVzc2lvbkluZm8tPnJl
c29sdmluZ1R5cGUpKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNU
OjpMb2dpY2FsTm90RXhwcmVzc2lvbiYgbG9naWNhbE5vdEV4cHJlc3Npb24pCit7CisgICAgaWYg
KCFyZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKGxvZ2ljYWxOb3RFeHByZXNzaW9uLm9wZXJhbmQo
KSkpCisgICAgICAgIHJldHVybjsKKyAgICBhc3NpZ25UeXBlKGxvZ2ljYWxOb3RFeHByZXNzaW9u
LCBBU1Q6OlR5cGVSZWZlcmVuY2U6OndyYXAoTGV4ZXI6OlRva2VuKGxvZ2ljYWxOb3RFeHByZXNz
aW9uLm9yaWdpbigpKSwgbV9pbnRyaW5zaWNzLmJvb2xUeXBlKCkpKTsKK30KKwordm9pZCBDaGVj
a2VyOjp2aXNpdChBU1Q6OkxvZ2ljYWxFeHByZXNzaW9uJiBsb2dpY2FsRXhwcmVzc2lvbikKK3sK
KyAgICBpZiAoIXJlY3Vyc2VBbmRSZXF1aXJlQm9vbFR5cGUobG9naWNhbEV4cHJlc3Npb24ubGVm
dCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlw
ZShsb2dpY2FsRXhwcmVzc2lvbi5yaWdodCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGFzc2ln
blR5cGUobG9naWNhbEV4cHJlc3Npb24sIEFTVDo6VHlwZVJlZmVyZW5jZTo6d3JhcChMZXhlcjo6
VG9rZW4obG9naWNhbEV4cHJlc3Npb24ub3JpZ2luKCkpLCBtX2ludHJpbnNpY3MuYm9vbFR5cGUo
KSkpOworfQorCit2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6SWZTdGF0ZW1lbnQmIGlmU3RhdGVt
ZW50KQoreworICAgIGlmICghcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZShpZlN0YXRlbWVudC5j
b25kaXRpb25hbCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChp
ZlN0YXRlbWVudC5ib2R5KCkpOworICAgIGlmIChpZlN0YXRlbWVudC5lbHNlQm9keSgpKQorICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmlmU3RhdGVtZW50LmVsc2VCb2R5KCkpOworfQorCit2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6V2hpbGVMb29wJiB3aGlsZUxvb3ApCit7CisgICAgaWYg
KCFyZWN1cnNlQW5kUmVxdWlyZUJvb2xUeXBlKHdoaWxlTG9vcC5jb25kaXRpb25hbCgpKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdCh3aGlsZUxvb3AuYm9keSgpKTsK
K30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkRvV2hpbGVMb29wJiBkb1doaWxlTG9vcCkK
K3sKKyAgICBjaGVja0Vycm9yQW5kVmlzaXQoZG9XaGlsZUxvb3AuYm9keSgpKTsKKyAgICByZWN1
cnNlQW5kUmVxdWlyZUJvb2xUeXBlKGRvV2hpbGVMb29wLmNvbmRpdGlvbmFsKCkpOworfQorCit2
b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6Rm9yTG9vcCYgZm9yTG9vcCkKK3sKKyAgICBXVEY6OnZp
c2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbnNTdGF0ZW1l
bnQmIHZhcmlhYmxlRGVjbGFyYXRpb25zU3RhdGVtZW50KSB7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdCh2YXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCk7CisgICAgfSwgWyZdKFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiBleHByZXNzaW9uKSB7CisgICAgICAgIGNoZWNrRXJyb3JB
bmRWaXNpdChleHByZXNzaW9uKTsKKyAgICB9KSwgZm9yTG9vcC5pbml0aWFsaXphdGlvbigpKTsK
KyAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChmb3JMb29wLmNvbmRp
dGlvbigpKSB7CisgICAgICAgIGlmICghcmVjdXJzZUFuZFJlcXVpcmVCb29sVHlwZSgqZm9yTG9v
cC5jb25kaXRpb24oKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChmb3JM
b29wLmluY3JlbWVudCgpKQorICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmZvckxvb3AuaW5j
cmVtZW50KCkpOworICAgIGNoZWNrRXJyb3JBbmRWaXNpdChmb3JMb29wLmJvZHkoKSk7Cit9CisK
K3ZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpTd2l0Y2hTdGF0ZW1lbnQmIHN3aXRjaFN0YXRlbWVu
dCkKK3sKKyAgICBhdXRvKiB2YWx1ZVR5cGUgPSAoWyZdKCkgLT4gQVNUOjpOYW1lZFR5cGUqIHsK
KyAgICAgICAgYXV0byB2YWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyhzd2l0Y2hTdGF0ZW1l
bnQudmFsdWUoKSk7CisgICAgICAgIGlmICghdmFsdWVJbmZvKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIGF1dG8qIHZhbHVlVHlwZSA9IGdldFVubmFtZWRUeXBlKHZhbHVl
SW5mby0+cmVzb2x2aW5nVHlwZSk7CisgICAgICAgIGlmICghdmFsdWVUeXBlKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGF1dG8mIHZhbHVlVW5pZnlOb2RlID0gdmFsdWVU
eXBlLT51bmlmeU5vZGUoKTsKKyAgICAgICAgaWYgKCFpczxBU1Q6Ok5hbWVkVHlwZT4odmFsdWVV
bmlmeU5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIGF1dG8mIHZh
bHVlTmFtZWRVbmlmeU5vZGUgPSBkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4odmFsdWVVbmlmeU5v
ZGUpOworICAgICAgICBpZiAoIShpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4odmFsdWVO
YW1lZFVuaWZ5Tm9kZSkgJiYgZG93bmNhc3Q8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KHZh
bHVlTmFtZWRVbmlmeU5vZGUpLmlzSW50KCkpCisgICAgICAgICAgICAmJiAhaXM8QVNUOjpFbnVt
ZXJhdGlvbkRlZmluaXRpb24+KHZhbHVlTmFtZWRVbmlmeU5vZGUpKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiAmdmFsdWVOYW1lZFVuaWZ5Tm9kZTsKKyAgICB9
KSgpOworICAgIGlmICghdmFsdWVUeXBlKSB7CisgICAgICAgIHNldEVycm9yKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBib29sIGhhc0RlZmF1bHQgPSBmYWxzZTsKKyAgICBmb3Ig
KGF1dG8mIHN3aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkgeworICAg
ICAgICBjaGVja0Vycm9yQW5kVmlzaXQoc3dpdGNoQ2FzZS5ibG9jaygpKTsKKyAgICAgICAgaWYg
KCFzd2l0Y2hDYXNlLnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGhhc0RlZmF1bHQgPSB0cnVlOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBzdWNjZXNzOwor
ICAgICAgICBzd2l0Y2hDYXNlLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFT
VDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSB7CisgICAgICAgICAgICBzdWNjZXNz
ID0gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoKnZhbHVlVHlwZSwgaW50ZWdlckxp
dGVyYWwudHlwZSgpKSk7CisgICAgICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVy
YWwmIHVuc2lnbmVkSW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdGF0
aWNfY2FzdDxib29sPihtYXRjaEFuZENvbW1pdCgqdmFsdWVUeXBlLCB1bnNpZ25lZEludGVnZXJM
aXRlcmFsLnR5cGUoKSkpOworICAgICAgICB9LCBbJl0oQVNUOjpGbG9hdExpdGVyYWwmIGZsb2F0
TGl0ZXJhbCkgeworICAgICAgICAgICAgc3VjY2VzcyA9IHN0YXRpY19jYXN0PGJvb2w+KG1hdGNo
QW5kQ29tbWl0KCp2YWx1ZVR5cGUsIGZsb2F0TGl0ZXJhbC50eXBlKCkpKTsKKyAgICAgICAgfSwg
WyZdKEFTVDo6TnVsbExpdGVyYWwmIG51bGxMaXRlcmFsKSB7CisgICAgICAgICAgICBzdWNjZXNz
ID0gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQoKnZhbHVlVHlwZSwgbnVsbExpdGVy
YWwudHlwZSgpKSk7CisgICAgICAgIH0sIFsmXShBU1Q6OkJvb2xlYW5MaXRlcmFsJikgeworICAg
ICAgICAgICAgc3VjY2VzcyA9IG1hdGNoZXMoKnZhbHVlVHlwZSwgbV9pbnRyaW5zaWNzLmJvb2xU
eXBlKCkpOworICAgICAgICB9LCBbJl0oQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVu
dW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgeworICAgICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9u
TWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CisgICAgICAgICAgICBzdWNj
ZXNzID0gbWF0Y2hlcygqdmFsdWVUeXBlLCAqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1l
cmF0aW9uRGVmaW5pdGlvbigpKTsKKyAgICAgICAgfSkpOworICAgICAgICBpZiAoIXN1Y2Nlc3Mp
IHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN3aXRjaFN0YXRlbWVudC5z
d2l0Y2hDYXNlcygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIGZpcnN0Q2FzZSA9IHN3
aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNlcygpW2ldOworICAgICAgICBmb3IgKHNpemVfdCBqID0g
aSArIDE7IGogPCBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKS5zaXplKCk7ICsraikgewor
ICAgICAgICAgICAgYXV0byYgc2Vjb25kQ2FzZSA9IHN3aXRjaFN0YXRlbWVudC5zd2l0Y2hDYXNl
cygpW2pdOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Ym9vbD4o
Zmlyc3RDYXNlLnZhbHVlKCkpICE9IHN0YXRpY19jYXN0PGJvb2w+KHNlY29uZENhc2UudmFsdWUo
KSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICghc3RhdGlj
X2Nhc3Q8Ym9vbD4oZmlyc3RDYXNlLnZhbHVlKCkpKSB7CisgICAgICAgICAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICBmaXJzdENhc2UudmFsdWUoKS0+
dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgZmlyc3RJbnRl
Z2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIHNlY29uZENhc2UudmFsdWUoKS0+dmlzaXQo
V1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgc2Vjb25kSW50ZWdlckxp
dGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZpcnN0SW50ZWdlckxpdGVy
YWwudmFsdWUoKSAhPSBzZWNvbmRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICAgICAg
ICAgIH0sIFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIHNlY29uZFVuc2lnbmVkSW50
ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHN0YXRpY19jYXN0
PGludDY0X3Q+KGZpcnN0SW50ZWdlckxpdGVyYWwudmFsdWUoKSkgIT0gc3RhdGljX2Nhc3Q8aW50
NjRfdD4oc2Vjb25kVW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKTsKKyAgICAgICAgICAg
ICAgICB9LCBbXShhdXRvJikgeworICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIH0s
IFsmXShBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwmIGZpcnN0VW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbCkgeworICAgICAgICAgICAgICAgIHNlY29uZENhc2UudmFsdWUoKS0+dmlzaXQoV1RGOjpt
YWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0ZXJhbCYgc2Vjb25kSW50ZWdlckxpdGVyYWwp
IHsKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHN0YXRpY19jYXN0PGludDY0X3Q+KGZp
cnN0VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKSAhPSBzdGF0aWNfY2FzdDxpbnQ2NF90
PihzZWNvbmRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICB9LCBbJl0o
QVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiBzZWNvbmRVbnNpZ25lZEludGVnZXJMaXRlcmFs
KSB7CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmaXJzdFVuc2lnbmVkSW50ZWdlckxp
dGVyYWwudmFsdWUoKSAhPSBzZWNvbmRVbnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgfSwgW10oYXV0byYpIHsKKyAgICAgICAgICAgICAgICB9KSk7CisgICAg
ICAgICAgICB9LCBbJl0oQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGZpcnN0RW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgc2Vjb25kQ2FzZS52YWx1ZSgp
LT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJikgeworICAg
ICAgICAgICAgICAgIH0sIFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgc2Vjb25k
RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChm
aXJzdEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpKTsKKyAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHNlY29uZEVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVt
ZXJhdGlvbk1lbWJlcigpKTsKKyAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IGZpcnN0RW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkgIT0gc2Vjb25kRW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCk7CisgICAgICAgICAgICAgICAg
fSwgW10oYXV0byYpIHsKKyAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICB9LCBbXShh
dXRvJikgeworICAgICAgICAgICAgfSkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFo
YXNEZWZhdWx0KSB7CisgICAgICAgIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4o
KnZhbHVlVHlwZSkpIHsKKyAgICAgICAgICAgIEhhc2hTZXQ8aW50NjRfdD4gdmFsdWVzOworICAg
ICAgICAgICAgYm9vbCB6ZXJvVmFsdWVFeGlzdHM7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHN3
aXRjaENhc2UgOiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkgeworICAgICAgICAgICAg
ICAgIGludDY0X3QgdmFsdWU7CisgICAgICAgICAgICAgICAgc3dpdGNoQ2FzZS52YWx1ZSgpLT52
aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0
ZXJhbCkgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGludGVnZXJMaXRlcmFsLnZhbHVl
Rm9yU2VsZWN0ZWRUeXBlKCk7CisgICAgICAgICAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgICAg
ICAgICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWVGb3JTZWxlY3RlZFR5cGUo
KTsKKyAgICAgICAgICAgICAgICB9LCBbXShhdXRvJikgeworICAgICAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAg
ICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgemVyb1ZhbHVlRXhpc3RzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hZGQo
dmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gdHJ1ZTsK
KyAgICAgICAgICAgIGRvd25jYXN0PEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uPigqdmFsdWVU
eXBlKS5pdGVyYXRlQWxsVmFsdWVzKFsmXShpbnQ2NF90IHZhbHVlKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghemVyb1Zh
bHVlRXhpc3RzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICghdmFsdWVzLmNvbnRhaW5zKHZhbHVlKSkgeworICAgICAgICAg
ICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAg
ICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKGlzPEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uPigqdmFsdWVUeXBlKSk7CisgICAgICAgICAgICBIYXNoU2V0PEFTVDo6RW51bWVy
YXRpb25NZW1iZXIqPiB2YWx1ZXM7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHN3aXRjaENhc2Ug
OiBzd2l0Y2hTdGF0ZW1lbnQuc3dpdGNoQ2FzZXMoKSkgeworICAgICAgICAgICAgICAgIHN3aXRj
aENhc2UudmFsdWUoKS0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpFbnVtZXJhdGlv
bk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgeworICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVy
KCkpOworICAgICAgICAgICAgICAgICAgICB2YWx1ZXMuYWRkKGVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpKTsKKyAgICAgICAgICAgICAgICB9LCBbXShhdXRvJikg
eworICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICB9KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGF1dG8mIGVudW1lcmF0
aW9uTWVtYmVyIDogZG93bmNhc3Q8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24+KCp2YWx1ZVR5
cGUpLmVudW1lcmF0aW9uTWVtYmVycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXMu
Y29udGFpbnMoJmVudW1lcmF0aW9uTWVtYmVyLmdldCgpKSkgeworICAgICAgICAgICAgICAgICAg
ICBzZXRFcnJvcigpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENoZWNrZXI6
OnZpc2l0KEFTVDo6Q29tbWFFeHByZXNzaW9uJiBjb21tYUV4cHJlc3Npb24pCit7CisgICAgQVNT
RVJUKGNvbW1hRXhwcmVzc2lvbi5saXN0KCkuc2l6ZSgpID4gMCk7CisgICAgVmlzaXRvcjo6dmlz
aXQoY29tbWFFeHByZXNzaW9uKTsKKyAgICBpZiAoZXJyb3IoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGF1dG8gbGFzdEluZm8gPSBnZXRJbmZvKGNvbW1hRXhwcmVzc2lvbi5saXN0KCkubGFzdCgp
KTsKKyAgICBmb3J3YXJkVHlwZShjb21tYUV4cHJlc3Npb24sIGxhc3RJbmZvLT5yZXNvbHZpbmdU
eXBlKTsKK30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OlRlcm5hcnlFeHByZXNzaW9uJiB0
ZXJuYXJ5RXhwcmVzc2lvbikKK3sKKyAgICBhdXRvIHByZWRpY2F0ZUluZm8gPSByZWN1cnNlQW5k
UmVxdWlyZUJvb2xUeXBlKHRlcm5hcnlFeHByZXNzaW9uLnByZWRpY2F0ZSgpKTsKKyAgICBpZiAo
IXByZWRpY2F0ZUluZm8pCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gYm9keUluZm8gPSBy
ZWN1cnNlQW5kR2V0SW5mbyh0ZXJuYXJ5RXhwcmVzc2lvbi5ib2R5RXhwcmVzc2lvbigpKTsKKyAg
ICBhdXRvIGVsc2VJbmZvID0gcmVjdXJzZUFuZEdldEluZm8odGVybmFyeUV4cHJlc3Npb24uZWxz
ZUV4cHJlc3Npb24oKSk7CisgICAgCisgICAgYXV0byByZXN1bHRUeXBlID0gbWF0Y2hBbmRDb21t
aXQoYm9keUluZm8tPnJlc29sdmluZ1R5cGUsIGVsc2VJbmZvLT5yZXNvbHZpbmdUeXBlKTsKKyAg
ICBpZiAoIXJlc3VsdFR5cGUpIHsKKyAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGFzc2lnblR5cGUodGVybmFyeUV4cHJlc3Npb24sIFdURk1vdmUoKnJl
c3VsdFR5cGUpKTsKK30KKwordm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkNhbGxFeHByZXNzaW9u
JiBjYWxsRXhwcmVzc2lvbikKK3sKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxS
ZXNvbHZpbmdUeXBlPj4gdHlwZXM7CisgICAgdHlwZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShj
YWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKS5zaXplKCkpOworICAgIGZvciAoYXV0byYgYXJndW1l
bnQgOiBjYWxsRXhwcmVzc2lvbi5hcmd1bWVudHMoKSkgeworICAgICAgICBhdXRvIGFyZ3VtZW50
SW5mbyA9IHJlY3Vyc2VBbmRHZXRJbmZvKGFyZ3VtZW50KTsKKyAgICAgICAgaWYgKCFhcmd1bWVu
dEluZm8pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHR5cGVzLnVuY2hlY2tlZEFwcGVu
ZChhcmd1bWVudEluZm8tPnJlc29sdmluZ1R5cGUpOworICAgIH0KKyAgICBpZiAoY2FsbEV4cHJl
c3Npb24uY2FzdFJldHVyblR5cGUoKSkgeworICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoY2Fs
bEV4cHJlc3Npb24uY2FzdFJldHVyblR5cGUoKS0+Z2V0KCkpOworICAgICAgICBpZiAoZXJyb3Io
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlQoY2FsbEV4cHJlc3Np
b24uaGFzT3ZlcmxvYWRzKCkpOworICAgIGF1dG8qIGZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9u
T3ZlcmxvYWRJbXBsKCpjYWxsRXhwcmVzc2lvbi5vdmVybG9hZHMoKSwgdHlwZXMsIGNhbGxFeHBy
ZXNzaW9uLmNhc3RSZXR1cm5UeXBlKCkpOworICAgIGlmICghZnVuY3Rpb24pIHsKKyAgICAgICAg
aWYgKGF1dG8gbmV3RnVuY3Rpb24gPSByZXNvbHZlQnlJbnN0YW50aWF0aW9uKGNhbGxFeHByZXNz
aW9uLCB0eXBlcywgbV9pbnRyaW5zaWNzKSkgeworICAgICAgICAgICAgbV9wcm9ncmFtLmFwcGVu
ZChXVEZNb3ZlKCpuZXdGdW5jdGlvbikpOworICAgICAgICAgICAgZnVuY3Rpb24gPSAmbV9wcm9n
cmFtLm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb25zKCkubGFzdCgpOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKCFmdW5jdGlvbikgeworICAgICAgICBzZXRFcnJvcigpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvbi0+cGFy
YW1ldGVycygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghbWF0Y2hBbmRDb21taXQodHlw
ZXNbaV0uZ2V0KCksICpmdW5jdGlvbi0+cGFyYW1ldGVycygpW2ldLnR5cGUoKSkpIHsKKyAgICAg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBjYWxsRXhwcmVzc2lvbi5zZXRGdW5jdGlvbigqZnVuY3Rpb24pOworCisgICAgYXNz
aWduVHlwZShjYWxsRXhwcmVzc2lvbiwgZnVuY3Rpb24tPnR5cGUoKS5jbG9uZSgpKTsKK30KKwor
Ym9vbCBjaGVjayhQcm9ncmFtJiBwcm9ncmFtKQoreworICAgIENoZWNrZXIgY2hlY2tlcihwcm9n
cmFtLmludHJpbnNpY3MoKSwgcHJvZ3JhbSk7CisgICAgY2hlY2tlci5jaGVja0Vycm9yQW5kVmlz
aXQocHJvZ3JhbSk7CisgICAgaWYgKGNoZWNrZXIuZXJyb3IoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIHJldHVybiBjaGVja2VyLmFzc2lnblR5cGVzKCk7Cit9CisKK30KKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMQ2hlY2tlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xD
aGVja2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjZmMDg1Nzc4MTg0ZmU1NDc2NzIxMDFkZmJlMDEyMGU2MzZi
OWE4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMQ2hlY2tlci5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKworY2xhc3MgUHJvZ3JhbTsKKworYm9vbCBjaGVjayhQcm9ncmFtJik7
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41YmQ1NGM5YjkxMGQxYmFhZjY3MDUxODQ1NzRhMTY5NmQ0MTk2OWNlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xH
YXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1z
LmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xBcnJheVJlZmVyZW5j
ZVR5cGUuaCIKKyNpbmNsdWRlICJXSExTTEFycmF5VHlwZS5oIgorI2luY2x1ZGUgIldITFNMRnVu
Y3Rpb25EZWZpbml0aW9uLmgiCisjaW5jbHVkZSAiV0hMU0xJbmZlclR5cGVzLmgiCisjaW5jbHVk
ZSAiV0hMU0xJbnRyaW5zaWNzLmgiCisjaW5jbHVkZSAiV0hMU0xQb2ludGVyVHlwZS5oIgorI2lu
Y2x1ZGUgIldITFNMU3RydWN0dXJlRGVmaW5pdGlvbi5oIgorI2luY2x1ZGUgIldITFNMVHlwZURl
ZmluaXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFR5cGVSZWZlcmVuY2UuaCIKKyNpbmNsdWRlICJX
SExTTFZhcmlhYmxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJXSExTTFZpc2l0b3IuaCIKKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCitjbGFzcyBHYXRoZXJlciA6IHB1YmxpYyBWaXNpdG9yIHsKK3B1YmxpYzoK
KyAgICBHYXRoZXJlcihjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNzLCBBU1Q6OlNlbWFudGlj
KiBzZW1hbnRpYyA9IG51bGxwdHIpCisgICAgICAgIDogbV9pbnRyaW5zaWNzKGludHJpbnNpY3Mp
CisgICAgICAgICwgbV9jdXJyZW50U2VtYW50aWMoc2VtYW50aWMpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgfkdhdGhlcmVyKCkgPSBkZWZhdWx0OworCisgICAgdm9pZCByZXNldCgpCisg
ICAgeworICAgICAgICBtX2N1cnJlbnRTZW1hbnRpYyA9IG51bGxwdHI7CisgICAgfQorCisgICAg
VmVjdG9yPEVudHJ5UG9pbnRJdGVtPiYmIHRha2VFbnRyeVBvaW50SXRlbXMoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFdURk1vdmUobV9lbnRyeVBvaW50SXRlbXMpOworICAgIH0KKworICAgIHZv
aWQgdmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24mKQorICAgIHsKKyAgICAgICAgaWYg
KCFtX2N1cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQo
RW50cnlQb2ludEl0ZW0obV90eXBlUmVmZXJlbmNlcy5sYXN0KCkuZ2V0KCksICptX2N1cnJlbnRT
ZW1hbnRpYykpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVUeXBlRGVjbGFy
YXRpb24mIG5hdGl2ZVR5cGVEZWNsYXJhdGlvbikKKyAgICB7CisgICAgICAgIGlmICghbV9jdXJy
ZW50U2VtYW50aWMpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1hdGNoZXMobmF0aXZlVHlwZURlY2xhcmF0aW9u
LCBtX2ludHJpbnNpY3Mudm9pZFR5cGUoKSkpIHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2VudHJ5UG9pbnRJdGVt
cy5hcHBlbmQoRW50cnlQb2ludEl0ZW0obV90eXBlUmVmZXJlbmNlcy5sYXN0KCkuZ2V0KCksICpt
X2N1cnJlbnRTZW1hbnRpYykpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpTdHJ1Y3R1
cmVEZWZpbml0aW9uJiBzdHJ1Y3R1cmVEZWZpbml0aW9uKQorICAgIHsKKyAgICAgICAgaWYgKG1f
Y3VycmVudFNlbWFudGljKSB7CisgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChhdXRvJiBzdHJ1Y3R1cmVFbGVtZW50
IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVtZW50cygpKSB7CisgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygpKQorICAgICAgICAgICAgICAgIG1fY3Vy
cmVudFNlbWFudGljID0gJipzdHJ1Y3R1cmVFbGVtZW50LnNlbWFudGljKCk7CisgICAgICAgICAg
ICBjaGVja0Vycm9yQW5kVmlzaXQoc3RydWN0dXJlRWxlbWVudCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6VHlwZURlZmluaXRpb24mIHR5cGVEZWZpbml0aW9uKQor
ICAgIHsKKyAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0KHR5cGVEZWZpbml0aW9uLnR5cGUoKSk7
CisgICAgfQorCisgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmIHR5cGVSZWZlcmVu
Y2UpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7
CisgICAgICAgIG1fdHlwZVJlZmVyZW5jZXMuYXBwZW5kKHR5cGVSZWZlcmVuY2UpOworICAgICAg
ICBhdXRvIGRlcHRoID0gbV90eXBlUmVmZXJlbmNlcy5zaXplKCk7CisgICAgICAgIGNoZWNrRXJy
b3JBbmRWaXNpdCgqdHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSk7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQoZGVwdGgsIG1fdHlwZVJlZmVyZW5jZXMuc2l6ZSgpID09IGRlcHRoKTsKKyAgICB9
CisKKyAgICB2b2lkIHZpc2l0KEFTVDo6UG9pbnRlclR5cGUmIHBvaW50ZXJUeXBlKQorICAgIHsK
KyAgICAgICAgaWYgKCFtX2N1cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3Io
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2VudHJ5UG9pbnRJ
dGVtcy5hcHBlbmQoRW50cnlQb2ludEl0ZW0ocG9pbnRlclR5cGUsICptX2N1cnJlbnRTZW1hbnRp
YykpOworICAgIH0KKworICAgIHZvaWQgdmlzaXQoQVNUOjpBcnJheVJlZmVyZW5jZVR5cGUmIGFy
cmF5UmVmZXJlbmNlVHlwZSkKKyAgICB7CisgICAgICAgIGlmICghbV9jdXJyZW50U2VtYW50aWMp
IHsKKyAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgbV9lbnRyeVBvaW50SXRlbXMuYXBwZW5kKEVudHJ5UG9pbnRJdGVtKGFycmF5
UmVmZXJlbmNlVHlwZSwgKm1fY3VycmVudFNlbWFudGljKSk7CisgICAgfQorCisgICAgdm9pZCB2
aXNpdChBU1Q6OkFycmF5VHlwZSYgYXJyYXlUeXBlKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1
cnJlbnRTZW1hbnRpYykgeworICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2VudHJ5UG9pbnRJdGVtcy5hcHBlbmQoRW50cnlQ
b2ludEl0ZW0oYXJyYXlUeXBlLCAqbV9jdXJyZW50U2VtYW50aWMpKTsKKyAgICB9CisKKyAgICB2
b2lkIHZpc2l0KEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiYgdmFyaWFibGVEZWNsYXJhdGlvbikK
KyAgICB7CisgICAgICAgIEFTU0VSVCghbV9jdXJyZW50U2VtYW50aWMpOworICAgICAgICBpZiAo
dmFyaWFibGVEZWNsYXJhdGlvbi5zZW1hbnRpYygpKQorICAgICAgICAgICAgbV9jdXJyZW50U2Vt
YW50aWMgPSAmKnZhcmlhYmxlRGVjbGFyYXRpb24uc2VtYW50aWMoKTsKKyAgICAgICAgaWYgKHZh
cmlhYmxlRGVjbGFyYXRpb24udHlwZSgpKQorICAgICAgICAgICAgY2hlY2tFcnJvckFuZFZpc2l0
KCp2YXJpYWJsZURlY2xhcmF0aW9uLnR5cGUoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGNv
bnN0IEludHJpbnNpY3MmIG1faW50cmluc2ljczsKKyAgICBBU1Q6OlNlbWFudGljKiBtX2N1cnJl
bnRTZW1hbnRpYyB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxBU1Q6OlR5cGVSZWZlcmVuY2U+PiBtX3R5cGVSZWZlcmVuY2VzOworICAgIFZlY3RvcjxFbnRy
eVBvaW50SXRlbT4gbV9lbnRyeVBvaW50SXRlbXM7Cit9OworCitPcHRpb25hbDxFbnRyeVBvaW50
SXRlbXM+IGdhdGhlckVudHJ5UG9pbnRJdGVtcyhjb25zdCBJbnRyaW5zaWNzJiBpbnRyaW5zaWNz
LCBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZnVuY3Rpb25EZWZpbml0aW9uKQoreworICAgIEFT
U0VSVChmdW5jdGlvbkRlZmluaXRpb24uZW50cnlQb2ludFR5cGUoKSk7CisgICAgR2F0aGVyZXIg
aW5wdXRHYXRoZXJlcihpbnRyaW5zaWNzKTsKKyAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGZ1
bmN0aW9uRGVmaW5pdGlvbi5wYXJhbWV0ZXJzKCkpIHsKKyAgICAgICAgaW5wdXRHYXRoZXJlci5y
ZXNldCgpOworICAgICAgICBpbnB1dEdhdGhlcmVyLmNoZWNrRXJyb3JBbmRWaXNpdChwYXJhbWV0
ZXIpOworICAgICAgICBpZiAoaW5wdXRHYXRoZXJlci5lcnJvcigpKQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9CisgICAgR2F0aGVyZXIgb3V0cHV0R2F0aGVyZXIoaW50
cmluc2ljcywgZnVuY3Rpb25EZWZpbml0aW9uLnNlbWFudGljKCkgPyAmKmZ1bmN0aW9uRGVmaW5p
dGlvbi5zZW1hbnRpYygpIDogbnVsbHB0cik7CisgICAgb3V0cHV0R2F0aGVyZXIuY2hlY2tFcnJv
ckFuZFZpc2l0KGZ1bmN0aW9uRGVmaW5pdGlvbi50eXBlKCkpOworICAgIGlmIChvdXRwdXRHYXRo
ZXJlci5lcnJvcigpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJu
IHt7IGlucHV0R2F0aGVyZXIudGFrZUVudHJ5UG9pbnRJdGVtcygpLCBvdXRwdXRHYXRoZXJlci50
YWtlRW50cnlQb2ludEl0ZW1zKCkgfX07Cit9CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQ
b2ludEl0ZW1zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdh
dGhlckVudHJ5UG9pbnRJdGVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkNGY3ZGQ4NDQ1N2ZlYTYwNjkxYTY1
ZWIzZjFkN2YzYTU0ODkzMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5oCkBAIC0wLDAgKzEs
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisK
KyNpbmNsdWRlICJXSExTTFNlbWFudGljLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFj
ZSBXSExTTCB7CisKK25hbWVzcGFjZSBBU1QgeworCitjbGFzcyBGdW5jdGlvbkRlZmluaXRpb247
CisKK30KKworY2xhc3MgSW50cmluc2ljczsKK2NsYXNzIFVubmFtZWRUeXBlOworCitzdHJ1Y3Qg
RW50cnlQb2ludEl0ZW0geworICAgIEVudHJ5UG9pbnRJdGVtKEFTVDo6VW5uYW1lZFR5cGUmIHVu
bmFtZWRUeXBlLCBBU1Q6OlNlbWFudGljJiBzZW1hbnRpYykKKyAgICAgICAgOiB1bm5hbWVkVHlw
ZSh1bm5hbWVkVHlwZSkKKyAgICAgICAgLCBzZW1hbnRpYyhzZW1hbnRpYykKKyAgICB7CisgICAg
fQorCisgICAgQVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGU7CisgICAgQVNUOjpTZW1hbnRp
YyYgc2VtYW50aWM7Cit9OworCitzdHJ1Y3QgRW50cnlQb2ludEl0ZW1zIHsKKyAgICBWZWN0b3I8
RW50cnlQb2ludEl0ZW0+IGlucHV0czsKKyAgICBWZWN0b3I8RW50cnlQb2ludEl0ZW0+IG91dHB1
dHM7Cit9OworCitPcHRpb25hbDxFbnRyeVBvaW50SXRlbXM+IGdhdGhlckVudHJ5UG9pbnRJdGVt
cyhjb25zdCBJbnRyaW5zaWNzJiwgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mKTsKKworfQorCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAwZDI1NjM1M2Q3NGFiZDYyNjYzMDI0YmQ4MDU0
Yzk1MGUwNzM4MTAzLi42M2YwOTYxMWI2ODJjMTg5NDIxNjM0MjJmOGNmMDM1YmI0MjgwOTA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dApAQCAtMzA5LDYgKzMwOSw4IEBAIE1vZHVsZXMvd2ViZ3B1L0RPTVdpbmRv
d1dlYkdQVS5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKIE1v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTFBhcnNlci5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAKK01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcAogTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9ucy5jcHAKIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUmVjdXJzaXZlVHlwZUNoZWNrZXIuY3BwCiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFN5bnRoZXNpemVBcnJheU9wZXJhdG9yTGVuZ3RoLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGYyZjUx
NWE0ZTQzZTUxOWY0ZjM0OTQ3NGU3MTQ5MjUzOWJmODQ4ZmMuLjkzYTRhNTMxY2Y0M2EzOTkzNzJj
Yjg4N2IxY2U2OWQ5ZjUwMjZiOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0MTMsNiArNjQxMywxMCBAQAogCQkxQzY2MjYw
RjFDNkU3Q0E2MDBBQjUyN0MgLyogRm9udEZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRm9udEZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5
NTYwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQzgxQjk1NzBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0
b3JDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM4NDBCOTcy
MUVDNDAwNzAwRDA1MDBEIC8qIFdITFNMQ2hlY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTENo
ZWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM4NDBCOTkyMUVDNDAwODAw
RDA1MDBEIC8qIFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMUM4NDBCOUEyMUVDNDAwOTAwRDA1MDBEIC8qIFdITFNMR2F0aGVyRW50cnlQb2lu
dEl0ZW1zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFDODQwQjlCMjFFQzQwMDkwMEQwNTAwRCAvKiBX
SExTTENoZWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xDaGVja2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIElu
c3BlY3RvckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0
b3JDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4NDBCN0QyMUVCRTBC
ODAwRDA1MDBEIC8qIFdITFNMRW50cnlQb2ludFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xF
bnRyeVBvaW50VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzg0MEI5MDIx
RUMzMEY5MDBEMDUwMEQgLyogV0hMU0xBZGRyZXNzU3BhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hM
U0xBZGRyZXNzU3BhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NDE2LDYg
KzI1NDIwLDEwIEBACiAJCQkJQzIxQkY2RjEyMUNEODk4RDAwMjI3OTc5IC8qIEFTVCAqLywKIAkJ
CQlDMjM0QTlCMjIxRTkyQzFGMDAzQzk4NEQgLyogV0hMU0xDaGVja0R1cGxpY2F0ZUZ1bmN0aW9u
cy5jcHAgKi8sCiAJCQkJQzIzNEE5QUUyMUU5MkMxQTAwM0M5ODREIC8qIFdITFNMQ2hlY2tEdXBs
aWNhdGVGdW5jdGlvbnMuaCAqLywKKwkJCQkxQzg0MEI5QjIxRUM0MDA5MDBEMDUwMEQgLyogV0hM
U0xDaGVja2VyLmNwcCAqLywKKwkJCQkxQzg0MEI5NzIxRUM0MDA3MDBEMDUwMEQgLyogV0hMU0xD
aGVja2VyLmggKi8sCisJCQkJMUM4NDBCOTkyMUVDNDAwODAwRDA1MDBEIC8qIFdITFNMR2F0aGVy
RW50cnlQb2ludEl0ZW1zLmNwcCAqLywKKwkJCQkxQzg0MEI5QTIxRUM0MDA5MDBEMDUwMEQgLyog
V0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuaCAqLywKIAkJCQlDMjM0QTk5QTIxRTkwRjU2MDAz
Qzk4NEQgLyogV0hMU0xJbmZlclR5cGVzLmNwcCAqLywKIAkJCQlDMjM0QTk5QjIxRTkwRjU3MDAz
Qzk4NEQgLyogV0hMU0xJbmZlclR5cGVzLmggKi8sCiAJCQkJQzIzNEE5QjcyMUU5MkNDMTAwM0M5
ODREIC8qIFdITFNMSW50cmluc2ljcy5jcHAgKi8sCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>